Merge jdk7-b56
authorxdono
Thu, 16 Apr 2009 19:10:32 -0700
changeset 10977fd3bc37afe3
parent 1096 ffc29fac1330
parent 1095 65095f13b7c4
child 1098 38e1121342d8
child 1150 ea611a547fbf
child 1205 9ad7e6462145
Merge
src/share/classes/sun/text/normalizer/UProperty.java
src/windows/native/sun/windows/awt_KeyboardFocusManager.h
     1.1 --- a/.hgtags	Thu Apr 16 17:42:00 2009 +0100
     1.2 +++ b/.hgtags	Thu Apr 16 19:10:32 2009 -0700
     1.3 @@ -28,3 +28,5 @@
     1.4  fea0898259ae41c73620b1815aa48f036216155c jdk7-b51
     1.5  bcbeadb4a5d759b29e876ee2c83401e91ff22f60 jdk7-b52
     1.6  a2033addca678f9e4c0d92ffa1e389171cc9321d jdk7-b53
     1.7 +d1c43d1f5676a24ba86221ac7cad5694f3a9afda jdk7-b54
     1.8 +522bb5aa17e0c0cff00b1ed7d1b51bc4db2cfef9 jdk7-b55
     2.1 --- a/make/java/java/mapfile-vers	Thu Apr 16 17:42:00 2009 +0100
     2.2 +++ b/make/java/java/mapfile-vers	Thu Apr 16 19:10:32 2009 -0700
     2.3 @@ -1,5 +1,5 @@
     2.4  #
     2.5 -# Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
     2.6 +# Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
     2.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     2.8  #
     2.9  # This code is free software; you can redistribute it and/or modify it
    2.10 @@ -135,7 +135,8 @@
    2.11  		Java_java_lang_ClassLoader_00024NativeLibrary_find;
    2.12  		Java_java_lang_ClassLoader_00024NativeLibrary_load;
    2.13  		Java_java_lang_ClassLoader_00024NativeLibrary_unload;
    2.14 -                Java_java_lang_ClassLoader_registerNatives;
    2.15 +		Java_java_lang_ClassLoader_getCaller; 
    2.16 +		Java_java_lang_ClassLoader_registerNatives;
    2.17  		Java_java_lang_Compiler_registerNatives;
    2.18  		Java_java_lang_Double_longBitsToDouble;
    2.19  		Java_java_lang_Double_doubleToRawLongBits;
     3.1 --- a/make/java/net/FILES_c.gmk	Thu Apr 16 17:42:00 2009 +0100
     3.2 +++ b/make/java/net/FILES_c.gmk	Thu Apr 16 19:10:32 2009 -0700
     3.3 @@ -39,6 +39,10 @@
     3.4  	ResolverConfigurationImpl.c \
     3.5  	DefaultProxySelector.c
     3.6  
     3.7 +ifeq ($(PLATFORM), solaris)
     3.8 +    FILES_c += SdpProvider.c
     3.9 +endif
    3.10 +
    3.11  ifeq ($(PLATFORM), linux)
    3.12      FILES_c += linux_close.c
    3.13  endif
     4.1 --- a/make/java/net/Makefile	Thu Apr 16 17:42:00 2009 +0100
     4.2 +++ b/make/java/net/Makefile	Thu Apr 16 19:10:32 2009 -0700
     4.3 @@ -108,11 +108,24 @@
     4.4  #
     4.5  LOCALE_SET_DEFINITION = jre
     4.6  
     4.7 -properties: $(LIBDIR) $(LIBDIR)/net.properties
     4.8 +MISC_FILES = $(LIBDIR) $(LIBDIR)/net.properties
     4.9  
    4.10  $(LIBDIR)/net.properties: $(SHARE_SRC)/lib/net.properties
    4.11  	@$(RM) $@
    4.12  	$(CP) $< $@
    4.13  
    4.14 -build: properties
    4.15 +# 
    4.16 +# SDP configuration template
    4.17 +#
    4.18 +ifeq ($(PLATFORM), solaris)
    4.19 +SDP_PATH = sdp/sdp.conf.template
    4.20 +SDP_CONF = $(LIBDIR)/$(SDP_PATH)
    4.21 +$(SDP_CONF): $(PLATFORM_SRC)/lib/$(SDP_PATH)
    4.22 +	@$(RM) $*
    4.23 +	$(install-file)
    4.24  
    4.25 +MISC_FILES += $(SDP_CONF)
    4.26 +endif
    4.27 +
    4.28 +build: $(MISC_FILES)
    4.29 +
     5.1 --- a/make/java/net/mapfile-vers	Thu Apr 16 17:42:00 2009 +0100
     5.2 +++ b/make/java/net/mapfile-vers	Thu Apr 16 19:10:32 2009 -0700
     5.3 @@ -90,6 +90,7 @@
     5.4  		Java_sun_net_dns_ResolverConfigurationImpl_fallbackDomain0;
     5.5  		Java_sun_net_spi_DefaultProxySelector_init;
     5.6  		Java_sun_net_spi_DefaultProxySelector_getSystemProxy;
     5.7 +		Java_sun_net_spi_SdpProvider_convert;
     5.8  		NET_AllocSockaddr;
     5.9  		NET_SockaddrToInetAddress;
    5.10                  NET_SockaddrEqualsInetAddress;
     6.1 --- a/make/java/text/FILES_java.gmk	Thu Apr 16 17:42:00 2009 +0100
     6.2 +++ b/make/java/text/FILES_java.gmk	Thu Apr 16 19:10:32 2009 -0700
     6.3 @@ -92,11 +92,11 @@
     6.4              sun/text/normalizer/SymbolTable.java \
     6.5              sun/text/normalizer/Trie.java \
     6.6              sun/text/normalizer/TrieIterator.java \
     6.7 +            sun/text/normalizer/UBiDiProps.java \
     6.8              sun/text/normalizer/UCharacter.java \
     6.9              sun/text/normalizer/UCharacterIterator.java \
    6.10              sun/text/normalizer/UCharacterProperty.java \
    6.11              sun/text/normalizer/UCharacterPropertyReader.java \
    6.12 -            sun/text/normalizer/UProperty.java \
    6.13              sun/text/normalizer/UTF16.java \
    6.14              sun/text/normalizer/UnicodeMatcher.java \
    6.15              sun/text/normalizer/UnicodeSet.java \
     7.1 --- a/make/java/text/Makefile	Thu Apr 16 17:42:00 2009 +0100
     7.2 +++ b/make/java/text/Makefile	Thu Apr 16 19:10:32 2009 -0700
     7.3 @@ -64,7 +64,8 @@
     7.4            $(TEXT_CLASSDIR)/SentenceBreakIteratorData
     7.5  
     7.6  ICU_FILES = $(TEXT_CLASSDIR)/unorm.icu \
     7.7 -            $(TEXT_CLASSDIR)/uprops.icu
     7.8 +            $(TEXT_CLASSDIR)/uprops.icu \
     7.9 +            $(TEXT_CLASSDIR)/ubidi.icu
    7.10  
    7.11  # builder
    7.12  GENERATEBREAKITERATORDATA_JARFILE = \
    7.13 @@ -89,7 +90,7 @@
    7.14  build: $(BIFILES) $(ICU_FILES)
    7.15  
    7.16  #
    7.17 -# Extra rules to copy unorm.icu and uprops.icu
    7.18 +# Extra rules to copy unorm.icu, uprops.icu, and ubidi.icu
    7.19  #
    7.20  $(TEXT_CLASSDIR)/unorm.icu: $(TEXT_SRCDIR)/unorm.icu
    7.21  	$(install-file)
    7.22 @@ -97,6 +98,9 @@
    7.23  $(TEXT_CLASSDIR)/uprops.icu: $(TEXT_SRCDIR)/uprops.icu
    7.24  	$(install-file)
    7.25  
    7.26 +$(TEXT_CLASSDIR)/ubidi.icu: $(TEXT_SRCDIR)/ubidi.icu
    7.27 +	$(install-file)
    7.28 +
    7.29  clean clobber::
    7.30  	$(RM) -r $(TEXT_CLASSES)
    7.31  	$(RM) -r $(BIFILES)
     8.1 --- a/make/sun/awt/Depend.mak	Thu Apr 16 17:42:00 2009 +0100
     8.2 +++ b/make/sun/awt/Depend.mak	Thu Apr 16 19:10:32 2009 -0700
     8.3 @@ -71,6 +71,7 @@
     8.4  	$(STUBDIR)/Ole2.h \
     8.5  	$(STUBDIR)/Zmouse.h \
     8.6  	$(STUBDIR)/cderr.h \
     8.7 +	$(STUBDIR)/commctrl.h \
     8.8  	$(STUBDIR)/commdlg.h \
     8.9  	$(STUBDIR)/direct.h \
    8.10  	$(STUBDIR)/d3dcom.h \
     9.1 --- a/make/sun/awt/FILES_c_windows.gmk	Thu Apr 16 17:42:00 2009 +0100
     9.2 +++ b/make/sun/awt/FILES_c_windows.gmk	Thu Apr 16 19:10:32 2009 -0700
     9.3 @@ -1,5 +1,5 @@
     9.4  #
     9.5 -# Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
     9.6 +# Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
     9.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     9.8  #
     9.9  # This code is free software; you can redistribute it and/or modify it
    9.10 @@ -104,7 +104,8 @@
    9.11          OGLVertexCache.c \
    9.12          WGLGraphicsConfig.c \
    9.13          WGLSurfaceData.c \
    9.14 -        AccelGlyphCache.c
    9.15 +        AccelGlyphCache.c \
    9.16 +        rect.c
    9.17  
    9.18  FILES_cpp = \
    9.19  	CmdIDList.cpp \
    9.20 @@ -199,5 +200,6 @@
    9.21  	ShellFolder2.cpp \
    9.22  	ThemeReader.cpp \
    9.23  	ComCtl32Util.cpp \
    9.24 +	DllUtil.cpp \
    9.25  	initIDs.cpp \
    9.26  	MouseInfo.cpp
    10.1 --- a/make/sun/awt/FILES_export_unix.gmk	Thu Apr 16 17:42:00 2009 +0100
    10.2 +++ b/make/sun/awt/FILES_export_unix.gmk	Thu Apr 16 19:10:32 2009 -0700
    10.3 @@ -1,5 +1,5 @@
    10.4  #
    10.5 -# Copyright 2000-2008 Sun Microsystems, Inc.  All Rights Reserved.
    10.6 +# Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
    10.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    10.8  #
    10.9  # This code is free software; you can redistribute it and/or modify it
   10.10 @@ -107,7 +107,8 @@
   10.11  	sun/java2d/x11/X11Renderer.java \
   10.12  	sun/java2d/x11/X11SurfaceData.java \
   10.13          com/sun/java/swing/plaf/gtk/GTKEngine.java \
   10.14 -        com/sun/java/swing/plaf/gtk/GTKStyle.java
   10.15 +        com/sun/java/swing/plaf/gtk/GTKStyle.java \
   10.16 +        sun/awt/ExtendedKeyCodes.java
   10.17  
   10.18  
   10.19  FILES_export2 = \
    11.1 --- a/make/sun/awt/FILES_export_windows.gmk	Thu Apr 16 17:42:00 2009 +0100
    11.2 +++ b/make/sun/awt/FILES_export_windows.gmk	Thu Apr 16 19:10:32 2009 -0700
    11.3 @@ -1,5 +1,5 @@
    11.4  #
    11.5 -# Copyright 2000-2008 Sun Microsystems, Inc.  All Rights Reserved.
    11.6 +# Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
    11.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    11.8  #
    11.9  # This code is free software; you can redistribute it and/or modify it
   11.10 @@ -154,7 +154,7 @@
   11.11          sun/awt/datatransfer/DataTransferer.java \
   11.12  	sun/awt/datatransfer/SunClipboard.java \
   11.13  	sun/awt/dnd/SunDragSourceContextPeer.java \
   11.14 -        sun/awt/windows/WToolkitThreadBlockedHandler.java 
   11.15 +        sun/awt/windows/WToolkitThreadBlockedHandler.java
   11.16  
   11.17  FILES_export3 = \
   11.18          java/awt/CheckboxMenuItem.java \
   11.19 @@ -214,6 +214,7 @@
   11.20  	sun/awt/windows/WBufferStrategy.java \
   11.21  	sun/awt/windows/WTrayIconPeer.java \
   11.22  	sun/awt/image/ImagingLib.java \
   11.23 +	sun/awt/ExtendedKeyCodes.java \
   11.24          sun/java2d/pipe/hw/AccelSurface.java \
   11.25          sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \
   11.26          sun/java2d/pipe/hw/ContextCapabilities.java \
    12.1 --- a/make/sun/awt/Makefile	Thu Apr 16 17:42:00 2009 +0100
    12.2 +++ b/make/sun/awt/Makefile	Thu Apr 16 19:10:32 2009 -0700
    12.3 @@ -1,5 +1,5 @@
    12.4  #
    12.5 -# Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
    12.6 +# Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
    12.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    12.8  #
    12.9  # This code is free software; you can redistribute it and/or modify it
   12.10 @@ -219,6 +219,7 @@
   12.11  vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/shell
   12.12  vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/medialib
   12.13  vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/debug
   12.14 +vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/utility
   12.15  vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/../java2d
   12.16  vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/../java2d/loops
   12.17  vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/../java2d/pipe
    13.1 --- a/make/sun/awt/README	Thu Apr 16 17:42:00 2009 +0100
    13.2 +++ b/make/sun/awt/README	Thu Apr 16 19:10:32 2009 -0700
    13.3 @@ -6,11 +6,9 @@
    13.4  
    13.5  Included in this project is a generated file, make.depend, which lists
    13.6  all interdependencies of the source files.  This file is generated *on
    13.7 -Solaris* with the following commands:
    13.8 +Solaris or Linux* with the following command:
    13.9  
   13.10 -	% sccs edit make.depend
   13.11  	% gnumake -f Depend.mak
   13.12 -	% sccs delget make.depend
   13.13  
   13.14  This step only needs to be run when new files are added to the project,
   13.15  or include statements are changed.
    14.1 --- a/make/sun/awt/make.depend	Thu Apr 16 17:42:00 2009 +0100
    14.2 +++ b/make/sun/awt/make.depend	Thu Apr 16 19:10:32 2009 -0700
    14.3 @@ -1,4 +1,4 @@
    14.4 -$(OBJDIR)/AccelGlyphCache.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
    14.5 +$(OBJDIR)/AccelGlyphCache.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
    14.6  
    14.7  $(OBJDIR)/AlphaMacros.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
    14.8  
    14.9 @@ -14,143 +14,143 @@
   14.10  
   14.11  $(OBJDIR)/AnyShort.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
   14.12  
   14.13 -$(OBJDIR)/awt_AWTEvent.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.14 +$(OBJDIR)/awt_AWTEvent.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.15  
   14.16 -$(OBJDIR)/awt_BitmapUtil.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.17 +$(OBJDIR)/awt_BitmapUtil.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.18  
   14.19 -$(OBJDIR)/awt_Brush.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.20 +$(OBJDIR)/awt_Brush.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.21  
   14.22 -$(OBJDIR)/awt_Button.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Button.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WButtonPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Button.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.23 +$(OBJDIR)/awt_Button.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Button.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WButtonPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Button.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.24  
   14.25 -$(OBJDIR)/awt_Canvas.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.26 +$(OBJDIR)/awt_Canvas.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.27  
   14.28 -$(OBJDIR)/awt_Checkbox.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Checkbox.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Checkbox.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.29 +$(OBJDIR)/awt_Checkbox.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Checkbox.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Checkbox.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.30  
   14.31 -$(OBJDIR)/awt_Choice.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Choice.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WChoicePeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Choice.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.32 +$(OBJDIR)/awt_Choice.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Choice.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WChoicePeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Choice.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.33  
   14.34 -$(OBJDIR)/awt_Clipboard.obj::	$(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.35 +$(OBJDIR)/awt_Clipboard.obj::	$(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.36  
   14.37 -$(OBJDIR)/awt_Color.obj::	$(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.38 +$(OBJDIR)/awt_Color.obj::	$(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.39  
   14.40 -$(OBJDIR)/awt_Component.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.41 +$(OBJDIR)/awt_Component.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.42  
   14.43 -$(OBJDIR)/awt_Container.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.44 +$(OBJDIR)/awt_Container.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.45  
   14.46 -$(OBJDIR)/awt_Cursor.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.47 +$(OBJDIR)/awt_Cursor.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.48  
   14.49 -$(OBJDIR)/awt_DataTransferer.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.50 +$(OBJDIR)/awt_DataTransferer.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.51  
   14.52 -$(OBJDIR)/awt_Debug.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.53 +$(OBJDIR)/awt_Debug.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.54  
   14.55 -$(OBJDIR)/awt_Desktop.obj::	../../../src/share/javavm/export/jni.h ../../../src/windows/javavm/export/jni_md.h
   14.56 +$(OBJDIR)/awt_Desktop.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.57  
   14.58 -$(OBJDIR)/awt_DesktopProperties.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.59 +$(OBJDIR)/awt_DesktopProperties.obj::	$(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.60  
   14.61 -$(OBJDIR)/awt_Dialog.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.62 +$(OBJDIR)/awt_Dialog.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.63  
   14.64 -$(OBJDIR)/awt_Dimension.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.65 +$(OBJDIR)/awt_Dimension.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.66  
   14.67 -$(OBJDIR)/awt_DnDDS.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_dnd_SunDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.68 +$(OBJDIR)/awt_DnDDS.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_dnd_SunDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.69  
   14.70 -$(OBJDIR)/awt_DnDDT.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDropTargetContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.71 +$(OBJDIR)/awt_DnDDT.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDropTargetContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.72  
   14.73 -$(OBJDIR)/awt_DrawingSurface.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.74 +$(OBJDIR)/awt_DrawingSurface.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.75  
   14.76 -$(OBJDIR)/awt_Event.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.77 +$(OBJDIR)/awt_Event.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.78  
   14.79 -$(OBJDIR)/awt_FileDialog.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.80 +$(OBJDIR)/awt_FileDialog.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.81  
   14.82 -$(OBJDIR)/awt_Font.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.83 +$(OBJDIR)/awt_Font.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.84  
   14.85 -$(OBJDIR)/awt_Frame.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.86 +$(OBJDIR)/awt_Frame.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.87  
   14.88 -$(OBJDIR)/awt_GDIObject.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.89 +$(OBJDIR)/awt_GDIObject.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.90  
   14.91 -$(OBJDIR)/awt_IconCursor.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.92 +$(OBJDIR)/awt_IconCursor.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.93  
   14.94  $(OBJDIR)/awt_ImageRep.obj::	$(CLASSHDRDIR)/sun_awt_image_ImageRepresentation.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
   14.95  
   14.96  $(OBJDIR)/awt_ImagingLib.obj::	$(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_image_ConvolveOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h
   14.97  
   14.98 -$(OBJDIR)/awt_InputEvent.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
   14.99 +$(OBJDIR)/awt_InputEvent.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.100  
  14.101 -$(OBJDIR)/awt_InputMethod.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethodDescriptor.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.102 +$(OBJDIR)/awt_InputMethod.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethodDescriptor.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.103  
  14.104 -$(OBJDIR)/awt_InputTextInfor.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.105 +$(OBJDIR)/awt_InputTextInfor.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.106  
  14.107 -$(OBJDIR)/awt_Insets.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.108 +$(OBJDIR)/awt_Insets.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.109  
  14.110 -$(OBJDIR)/awt_KeyboardFocusManager.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.111 +$(OBJDIR)/awt_KeyboardFocusManager.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.112  
  14.113 -$(OBJDIR)/awt_KeyEvent.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.114 +$(OBJDIR)/awt_KeyEvent.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.115  
  14.116 -$(OBJDIR)/awt_Label.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Label.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WLabelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Label.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.117 +$(OBJDIR)/awt_Label.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Label.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WLabelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Label.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.118  
  14.119 -$(OBJDIR)/awt_List.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.120 +$(OBJDIR)/awt_List.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.121  
  14.122 -$(OBJDIR)/awt_Menu.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.123 +$(OBJDIR)/awt_MenuBar.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.124  
  14.125 -$(OBJDIR)/awt_MenuBar.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.126 +$(OBJDIR)/awt_MenuItem.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.127  
  14.128 -$(OBJDIR)/awt_MenuItem.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.129 +$(OBJDIR)/awt_Menu.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.130  
  14.131  $(OBJDIR)/awt_Mlib.obj::	$(CLASSHDRDIR)/java_awt_image_BufferedImage.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Mlib.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.132  
  14.133 -$(OBJDIR)/awt_MouseEvent.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.134 +$(OBJDIR)/awt_MouseEvent.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.135  
  14.136 -$(OBJDIR)/awt_new.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.137 +$(OBJDIR)/awt_new.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.138  
  14.139 -$(OBJDIR)/awt_Object.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.140 +$(OBJDIR)/awt_Object.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.141  
  14.142 -$(OBJDIR)/awt_Palette.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_CustomPaletteDef.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.143 +$(OBJDIR)/awt_Palette.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_CustomPaletteDef.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.144  
  14.145 -$(OBJDIR)/awt_Panel.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.146 +$(OBJDIR)/awt_Panel.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.147  
  14.148  $(OBJDIR)/awt_parseImage.obj::	$(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h
  14.149  
  14.150 -$(OBJDIR)/awt_Pen.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.151 +$(OBJDIR)/awt_Pen.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.152  
  14.153 -$(OBJDIR)/awt_PopupMenu.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.154 +$(OBJDIR)/awt_PopupMenu.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.155  
  14.156 -$(OBJDIR)/awt_PrintControl.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.157 +$(OBJDIR)/awt_PrintControl.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.158  
  14.159 -$(OBJDIR)/awt_PrintDialog.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.160 +$(OBJDIR)/awt_PrintDialog.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.161  
  14.162 -$(OBJDIR)/awt_PrintJob.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.163 +$(OBJDIR)/awt_PrintJob.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.164  
  14.165 -$(OBJDIR)/awt_Rectangle.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.166 +$(OBJDIR)/awt_Rectangle.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.167  
  14.168 -$(OBJDIR)/awt_Robot.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WRobotPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Robot.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.169 +$(OBJDIR)/awt_Robot.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WRobotPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Robot.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.170  
  14.171 -$(OBJDIR)/awt_Scrollbar.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.172 +$(OBJDIR)/awt_Scrollbar.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.173  
  14.174 -$(OBJDIR)/awt_ScrollPane.obj::	$(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.175 +$(OBJDIR)/awt_ScrollPane.obj::	$(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.176  
  14.177 -$(OBJDIR)/awt_TextArea.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.178 +$(OBJDIR)/awt_TextArea.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.179  
  14.180 -$(OBJDIR)/awt_TextComponent.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.181 +$(OBJDIR)/awt_TextComponent.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.182  
  14.183 -$(OBJDIR)/awt_TextField.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.184 +$(OBJDIR)/awt_TextField.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.185  
  14.186 -$(OBJDIR)/awt_Toolkit.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.187 +$(OBJDIR)/awt_Toolkit.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.188  
  14.189 -$(OBJDIR)/awt_TrayIcon.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.190 +$(OBJDIR)/awt_TrayIcon.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.191  
  14.192 -$(OBJDIR)/awt_Win32GraphicsConfig.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsConfig.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.193 +$(OBJDIR)/awt_Win32GraphicsConfig.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsConfig.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.194  
  14.195 -$(OBJDIR)/awt_Win32GraphicsDevice.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.196 +$(OBJDIR)/awt_Win32GraphicsDevice.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.197  
  14.198 -$(OBJDIR)/awt_Win32GraphicsEnv.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.199 +$(OBJDIR)/awt_Win32GraphicsEnv.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.200  
  14.201 -$(OBJDIR)/awt_Window.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.202 +$(OBJDIR)/awt_Window.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.203 +
  14.204 +$(OBJDIR)/BlitBg.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_BlitBg.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.205  
  14.206  $(OBJDIR)/Blit.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_Blit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.207  
  14.208 -$(OBJDIR)/BlitBg.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_BlitBg.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.209 +$(OBJDIR)/BufferedMaskBlit.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedMaskBlit.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.210  
  14.211 -$(OBJDIR)/BufferedMaskBlit.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedMaskBlit.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.212 -
  14.213 -$(OBJDIR)/BufferedRenderPipe.obj::	$(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.214 +$(OBJDIR)/BufferedRenderPipe.obj::	$(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.215  
  14.216  $(OBJDIR)/BufImgSurfaceData.obj::	$(CLASSHDRDIR)/sun_awt_image_BufImgSurfaceData.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/BufImgSurfaceData.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/img_util_md.h
  14.217  
  14.218 @@ -160,62 +160,64 @@
  14.219  
  14.220  $(OBJDIR)/ByteBinary4Bit.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByteBinary.h ../../../src/share/native/sun/java2d/loops/ByteBinary4Bit.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.221  
  14.222 -$(OBJDIR)/ByteGray.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.223 +$(OBJDIR)/ByteGray.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.224  
  14.225 -$(OBJDIR)/ByteIndexed.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.226 +$(OBJDIR)/ByteIndexed.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.227  
  14.228 -$(OBJDIR)/CmdIDList.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.229 +$(OBJDIR)/CmdIDList.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.230  
  14.231 -$(OBJDIR)/ComCtl32Util.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.232 +$(OBJDIR)/ComCtl32Util.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.233  
  14.234 -$(OBJDIR)/D3DBlitLoops.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.235 +$(OBJDIR)/D3DBlitLoops.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.236  
  14.237 -$(OBJDIR)/D3DBufImgOps.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.238 +$(OBJDIR)/D3DBufImgOps.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.239  
  14.240 -$(OBJDIR)/D3DContext.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DShaders.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.241 +$(OBJDIR)/D3DContext.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DShaders.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.242  
  14.243 -$(OBJDIR)/D3DGlyphCache.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.244 +$(OBJDIR)/D3DGlyphCache.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.245  
  14.246 -$(OBJDIR)/D3DGraphicsDevice.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DGraphicsDevice.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGraphicsDevice.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.247 +$(OBJDIR)/D3DGraphicsDevice.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DGraphicsDevice.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGraphicsDevice.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.248  
  14.249 -$(OBJDIR)/D3DMaskBlit.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.250 +$(OBJDIR)/D3DMaskBlit.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.251  
  14.252 -$(OBJDIR)/D3DMaskCache.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.253 +$(OBJDIR)/D3DMaskCache.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.254  
  14.255 -$(OBJDIR)/D3DMaskFill.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DMaskFill.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.256 +$(OBJDIR)/D3DMaskFill.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DMaskFill.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.257  
  14.258 -$(OBJDIR)/D3DPaints.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.259 +$(OBJDIR)/D3DPaints.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.260  
  14.261 -$(OBJDIR)/D3DPipelineManager.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBadHardware.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.262 +$(OBJDIR)/D3DPipelineManager.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBadHardware.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.263  
  14.264 -$(OBJDIR)/D3DRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DRenderer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.265 +$(OBJDIR)/D3DRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DRenderer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.266  
  14.267 -$(OBJDIR)/D3DRenderQueue.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.268 +$(OBJDIR)/D3DRenderQueue.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.269  
  14.270 -$(OBJDIR)/D3DResourceManager.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.271 +$(OBJDIR)/D3DResourceManager.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.272  
  14.273 -$(OBJDIR)/D3DSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.274 +$(OBJDIR)/D3DSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.275  
  14.276 -$(OBJDIR)/D3DTextRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.277 +$(OBJDIR)/D3DTextRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.278  
  14.279 -$(OBJDIR)/D3DVertexCacher.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.280 +$(OBJDIR)/D3DVertexCacher.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.281  
  14.282 -$(OBJDIR)/DataBufferNative.obj::	$(CLASSHDRDIR)/sun_awt_image_DataBufferNative.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.283 +$(OBJDIR)/DataBufferNative.obj::	$(CLASSHDRDIR)/sun_awt_image_DataBufferNative.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.284  
  14.285 -$(OBJDIR)/debug_assert.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.286 +$(OBJDIR)/debug_assert.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.287  
  14.288 -$(OBJDIR)/debug_mem.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.289 +$(OBJDIR)/debug_mem.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.290  
  14.291 -$(OBJDIR)/debug_trace.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.292 +$(OBJDIR)/debug_trace.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.293  
  14.294 -$(OBJDIR)/debug_util.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.295 +$(OBJDIR)/debug_util.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.296  
  14.297 -$(OBJDIR)/Devices.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.298 +$(OBJDIR)/Devices.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.299  
  14.300  $(OBJDIR)/Disposer.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
  14.301  
  14.302  $(OBJDIR)/dither.obj::	../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/windows/native/sun/windows/colordata.h
  14.303  
  14.304 +$(OBJDIR)/DllUtil.obj::	../../../src/windows/native/sun/windows/DllUtil.h
  14.305 +
  14.306  $(OBJDIR)/DrawLine.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawLine.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.307  
  14.308  $(OBJDIR)/DrawPath.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawPath.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/DrawPath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.309 @@ -230,27 +232,27 @@
  14.310  
  14.311  $(OBJDIR)/FillSpans.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_FillSpans.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.312  
  14.313 -$(OBJDIR)/FourByteAbgr.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgr.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.314 +$(OBJDIR)/FourByteAbgr.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgr.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.315  
  14.316 -$(OBJDIR)/FourByteAbgrPre.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgrPre.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.317 +$(OBJDIR)/FourByteAbgrPre.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgrPre.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.318  
  14.319 -$(OBJDIR)/GDIBlitLoops.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIBlitLoops.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.320 +$(OBJDIR)/GDIBlitLoops.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIBlitLoops.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.321  
  14.322 -$(OBJDIR)/GDIHashtable.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.323 +$(OBJDIR)/GDIHashtable.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.324  
  14.325 -$(OBJDIR)/GDIRenderer.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIRenderer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.326 +$(OBJDIR)/GDIRenderer.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIRenderer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.327  
  14.328 -$(OBJDIR)/GDIWindowSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIWindowSurfaceData.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.329 +$(OBJDIR)/GDIWindowSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIWindowSurfaceData.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.330  
  14.331  $(OBJDIR)/gifdecoder.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
  14.332  
  14.333  $(OBJDIR)/GraphicsPrimitiveMgr.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_GraphicsPrimitiveMgr.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.334  
  14.335 -$(OBJDIR)/Hashtable.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.336 +$(OBJDIR)/Hashtable.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.337  
  14.338  $(OBJDIR)/imageInitIDs.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
  14.339  
  14.340 -$(OBJDIR)/img_colors.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.341 +$(OBJDIR)/img_colors.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.342  
  14.343  $(OBJDIR)/img_globals.obj::	$(CLASSHDRDIR)/java_awt_image_DirectColorModel.h $(CLASSHDRDIR)/java_awt_image_IndexColorModel.h $(CLASSHDRDIR)/java_awt_Transparency.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/windows/javavm/export/jni_md.h
  14.344  
  14.345 @@ -260,49 +262,49 @@
  14.346  
  14.347  $(OBJDIR)/initIDs.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
  14.348  
  14.349 -$(OBJDIR)/IntArgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.350 +$(OBJDIR)/IntArgbBm.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.351  
  14.352 -$(OBJDIR)/IntArgbBm.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.353 +$(OBJDIR)/IntArgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.354  
  14.355  $(OBJDIR)/IntArgbPre.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.356  
  14.357 -$(OBJDIR)/IntBgr.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.358 +$(OBJDIR)/IntBgr.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.359  
  14.360 -$(OBJDIR)/IntRgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.361 +$(OBJDIR)/IntRgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.362  
  14.363 -$(OBJDIR)/IntRgbx.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/IntRgbx.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.364 +$(OBJDIR)/IntRgbx.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/IntRgbx.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.365  
  14.366  $(OBJDIR)/MaskBlit.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskBlit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.367  
  14.368  $(OBJDIR)/MaskFill.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskFill.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.369  
  14.370 -$(OBJDIR)/MouseInfo.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.371 +$(OBJDIR)/MouseInfo.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.372  
  14.373 -$(OBJDIR)/ObjectList.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.374 +$(OBJDIR)/ObjectList.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.375  
  14.376 -$(OBJDIR)/OGLBlitLoops.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.377 +$(OBJDIR)/OGLBlitLoops.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.378  
  14.379 -$(OBJDIR)/OGLBufImgOps.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.380 +$(OBJDIR)/OGLBufImgOps.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.381  
  14.382 -$(OBJDIR)/OGLContext.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.383 +$(OBJDIR)/OGLContext.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.384  
  14.385 -$(OBJDIR)/OGLFuncs.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.386 +$(OBJDIR)/OGLFuncs.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.387  
  14.388 -$(OBJDIR)/OGLMaskBlit.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.389 +$(OBJDIR)/OGLMaskBlit.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.390  
  14.391 -$(OBJDIR)/OGLMaskFill.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLMaskFill.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.392 +$(OBJDIR)/OGLMaskFill.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLMaskFill.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.393  
  14.394 -$(OBJDIR)/OGLPaints.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedPaints.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.395 +$(OBJDIR)/OGLPaints.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedPaints.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.396  
  14.397 -$(OBJDIR)/OGLRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLRenderer.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.398 +$(OBJDIR)/OGLRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLRenderer.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.399  
  14.400 -$(OBJDIR)/OGLRenderQueue.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.401 +$(OBJDIR)/OGLRenderQueue.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.402  
  14.403 -$(OBJDIR)/OGLSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.404 +$(OBJDIR)/OGLSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.405  
  14.406 -$(OBJDIR)/OGLTextRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.407 +$(OBJDIR)/OGLTextRenderer.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.408  
  14.409 -$(OBJDIR)/OGLVertexCache.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.410 +$(OBJDIR)/OGLVertexCache.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
  14.411  
  14.412  $(OBJDIR)/ProcessPath.obj::	$(CLASSHDRDIR)/java_awt_geom_PathIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.413  
  14.414 @@ -314,36 +316,36 @@
  14.415  
  14.416  $(OBJDIR)/ShapeSpanIterator.obj::	$(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_ShapeSpanIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/pipe/PathConsumer2D.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.417  
  14.418 -$(OBJDIR)/ShellFolder2.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.419 +$(OBJDIR)/ShellFolder2.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.420  
  14.421  $(OBJDIR)/SpanClipRenderer.obj::	$(CLASSHDRDIR)/sun_java2d_pipe_RegionIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_SpanClipRenderer.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
  14.422  
  14.423  $(OBJDIR)/SurfaceData.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
  14.424  
  14.425 -$(OBJDIR)/ThemeReader.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_ThemeReader.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.426 +$(OBJDIR)/ThemeReader.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_ThemeReader.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.427  
  14.428 -$(OBJDIR)/ThreeByteBgr.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.429 +$(OBJDIR)/ThreeByteBgr.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.430  
  14.431 -$(OBJDIR)/Trace.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.432 +$(OBJDIR)/Trace.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
  14.433  
  14.434  $(OBJDIR)/TransformHelper.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_loops_TransformHelper.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.435  
  14.436 -$(OBJDIR)/Ushort4444Argb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.437 +$(OBJDIR)/Ushort4444Argb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.438  
  14.439 -$(OBJDIR)/Ushort555Rgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.440 +$(OBJDIR)/Ushort555Rgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.441  
  14.442 -$(OBJDIR)/Ushort555Rgbx.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgbx.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.443 +$(OBJDIR)/Ushort555Rgbx.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgbx.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.444  
  14.445 -$(OBJDIR)/Ushort565Rgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.446 +$(OBJDIR)/Ushort565Rgb.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.447  
  14.448 -$(OBJDIR)/UshortGray.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.449 +$(OBJDIR)/UshortGray.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.450  
  14.451 -$(OBJDIR)/UshortIndexed.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/loops/UshortIndexed.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.452 +$(OBJDIR)/UshortIndexed.obj::	$(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/loops/UshortIndexed.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
  14.453  
  14.454 -$(OBJDIR)/WGLGraphicsConfig.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLGraphicsConfig.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
  14.455 +$(OBJDIR)/WGLGraphicsConfig.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLGraphicsConfig.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
  14.456  
  14.457 -$(OBJDIR)/WGLSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
  14.458 +$(OBJDIR)/WGLSurfaceData.obj::	$(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
  14.459  
  14.460 -$(OBJDIR)/WindowsFlags.obj::	../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.461 +$(OBJDIR)/WindowsFlags.obj::	../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.462  
  14.463 -$(OBJDIR)/WPrinterJob.obj::	$(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
  14.464 +$(OBJDIR)/WPrinterJob.obj::	$(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
    15.1 --- a/make/sun/awt/mapfile-mawt-vers	Thu Apr 16 17:42:00 2009 +0100
    15.2 +++ b/make/sun/awt/mapfile-mawt-vers	Thu Apr 16 19:10:32 2009 -0700
    15.3 @@ -291,6 +291,7 @@
    15.4  		Java_sun_awt_X11GraphicsConfig_createBackBuffer;
    15.5  		Java_sun_awt_X11GraphicsConfig_destroyBackBuffer;
    15.6  		Java_sun_awt_X11GraphicsConfig_swapBuffers;
    15.7 +                Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable;
    15.8  		Java_sun_awt_X11GraphicsDevice_isDBESupported;
    15.9  		Java_sun_awt_X11GraphicsDevice_getDisplay;
   15.10  		Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals;
    16.1 --- a/make/sun/awt/mapfile-vers-linux	Thu Apr 16 17:42:00 2009 +0100
    16.2 +++ b/make/sun/awt/mapfile-vers-linux	Thu Apr 16 19:10:32 2009 -0700
    16.3 @@ -407,6 +407,7 @@
    16.4  		Java_sun_awt_X11GraphicsConfig_getNumColors;
    16.5  		Java_sun_awt_X11GraphicsConfig_getXResolution;
    16.6  		Java_sun_awt_X11GraphicsConfig_getYResolution;
    16.7 +                Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable;
    16.8  		Java_sun_awt_X11GraphicsDevice_isDBESupported;
    16.9  		Java_sun_awt_X11GraphicsDevice_getDisplay;
   16.10  		Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals;
    17.1 --- a/make/sun/net/FILES_java.gmk	Thu Apr 16 17:42:00 2009 +0100
    17.2 +++ b/make/sun/net/FILES_java.gmk	Thu Apr 16 19:10:32 2009 -0700
    17.3 @@ -39,6 +39,7 @@
    17.4  	sun/net/TransferProtocolClient.java \
    17.5  	sun/net/ConnectionResetException.java \
    17.6  	sun/net/NetProperties.java \
    17.7 +	sun/net/NetHooks.java \
    17.8  	sun/net/util/IPAddressUtil.java \
    17.9  	sun/net/dns/ResolverConfiguration.java \
   17.10  	sun/net/dns/ResolverConfigurationImpl.java \
   17.11 @@ -123,3 +124,7 @@
   17.12  ifeq ($(PLATFORM), windows)
   17.13      FILES_java += sun/net/www/protocol/http/NTLMAuthSequence.java 
   17.14  endif
   17.15 +
   17.16 +ifeq ($(PLATFORM), solaris)
   17.17 +    FILES_java += sun/net/spi/SdpProvider.java
   17.18 +endif
    18.1 --- a/make/sun/xawt/FILES_c_unix.gmk	Thu Apr 16 17:42:00 2009 +0100
    18.2 +++ b/make/sun/xawt/FILES_c_unix.gmk	Thu Apr 16 19:10:32 2009 -0700
    18.3 @@ -78,4 +78,5 @@
    18.4  	awt_Plugin.c \
    18.5  	gtk2_interface.c \
    18.6          swing_GTKEngine.c \
    18.7 -        swing_GTKStyle.c
    18.8 +        swing_GTKStyle.c \
    18.9 +        rect.c
    19.1 --- a/make/sun/xawt/Makefile	Thu Apr 16 17:42:00 2009 +0100
    19.2 +++ b/make/sun/xawt/Makefile	Thu Apr 16 19:10:32 2009 -0700
    19.3 @@ -79,6 +79,7 @@
    19.4  vpath %.c   $(SHARE_SRC)/native/sun/java2d/loops
    19.5  vpath %.c   $(SHARE_SRC)/native/sun/java2d/pipe
    19.6  vpath %.c   $(SHARE_SRC)/native/sun/awt/medialib
    19.7 +vpath %.c   $(SHARE_SRC)/native/sun/awt/utility
    19.8  vpath %.cpp $(SHARE_SRC)/native/sun/image
    19.9  vpath %.c   $(SHARE_SRC)/native/sun/font
   19.10  vpath %.c   $(PLATFORM_SRC)/native/sun/awt/robot_child
   19.11 @@ -274,6 +275,23 @@
   19.12      $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon32.png \
   19.13      $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png
   19.14  
   19.15 +
   19.16 +ICONPATH=$(PLATFORM_SRC)/classes/sun/awt/X11
   19.17 +
   19.18 +ICONS += \
   19.19 +   $(ICONPATH)/security-icon-bw16.png \
   19.20 +   $(ICONPATH)/security-icon-interim16.png \
   19.21 +   $(ICONPATH)/security-icon-yellow16.png \
   19.22 +   $(ICONPATH)/security-icon-bw24.png \
   19.23 +   $(ICONPATH)/security-icon-interim24.png \
   19.24 +   $(ICONPATH)/security-icon-yellow24.png \
   19.25 +   $(ICONPATH)/security-icon-bw32.png \
   19.26 +   $(ICONPATH)/security-icon-interim32.png \
   19.27 +   $(ICONPATH)/security-icon-yellow32.png \
   19.28 +   $(ICONPATH)/security-icon-bw48.png \
   19.29 +   $(ICONPATH)/security-icon-interim48.png \
   19.30 +   $(ICONPATH)/security-icon-yellow48.png
   19.31 +
   19.32  TEMPDIR_CLASSES = $(TEMPDIR)/classes
   19.33  
   19.34  $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class: ToBin.java
    20.1 --- a/make/sun/xawt/mapfile-vers	Thu Apr 16 17:42:00 2009 +0100
    20.2 +++ b/make/sun/xawt/mapfile-vers	Thu Apr 16 19:10:32 2009 -0700
    20.3 @@ -1,5 +1,5 @@
    20.4  #
    20.5 -# Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
    20.6 +# Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
    20.7  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    20.8  #
    20.9  # This code is free software; you can redistribute it and/or modify it
   20.10 @@ -93,6 +93,9 @@
   20.11          Java_sun_awt_X11_XlibWrapper_XGetWMHints;
   20.12          Java_sun_awt_X11_XlibWrapper_XShapeQueryExtension;
   20.13          Java_sun_awt_X11_XlibWrapper_SetRectangularShape;
   20.14 +        Java_sun_awt_X11_XlibWrapper_SetBitmapShape;
   20.15 +        Java_sun_awt_X11_XlibWrapper_XConfigureWindow;
   20.16 +        Java_sun_awt_X11_XlibWrapper_SetZOrder;
   20.17          Java_sun_awt_X11_XToolkit_initIDs;
   20.18          Java_sun_awt_X11_XWindow_getNativeColor;
   20.19          Java_sun_awt_X11_XWindow_getWMInsets;
   20.20 @@ -217,6 +220,7 @@
   20.21          Java_sun_awt_X11GraphicsConfig_createBackBuffer;
   20.22  	Java_sun_awt_X11GraphicsConfig_destroyBackBuffer;
   20.23  	Java_sun_awt_X11GraphicsConfig_swapBuffers;
   20.24 +	Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable;
   20.25          Java_java_awt_Insets_initIDs;
   20.26          Java_java_awt_KeyboardFocusManager_initIDs;
   20.27          Java_java_awt_Font_initIDs;
   20.28 @@ -289,16 +293,26 @@
   20.29          Java_sun_awt_X11_XlibWrapper_XGetIconSizes;
   20.30          Java_sun_awt_X11_XlibWrapper_XKeycodeToKeysym;
   20.31          Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode;
   20.32 -        Java_sun_awt_X11_XlibWrapper_XQueryKeymap;
   20.33 +	Java_sun_awt_X11_XlibWrapper_XQueryKeymap;
   20.34 +        Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup;
   20.35 +        Java_sun_awt_X11_XlibWrapper_XkbSelectEvents;
   20.36 +        Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails;
   20.37 +        Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym;
   20.38 +        Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion;
   20.39 +        Java_sun_awt_X11_XlibWrapper_XkbQueryExtension;
   20.40 +        Java_sun_awt_X11_XlibWrapper_XkbGetMap;
   20.41 +        Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap;
   20.42 +        Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard;
   20.43 +        Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode;
   20.44          Java_sun_awt_X11_XlibWrapper_XGetModifierMapping;
   20.45 -        Java_sun_awt_X11_XlibWrapper_XFreeModifiermap;        
   20.46 +        Java_sun_awt_X11_XlibWrapper_XFreeModifiermap;
   20.47          Java_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab;
   20.48          Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent;
   20.49          Java_sun_awt_X11_XlibWrapper_ExitSecondaryLoop;
   20.50          Java_sun_awt_X11_XlibWrapper_XTextPropertyToStringList;
   20.51          Java_sun_awt_X11_XlibWrapper_XGrabServer;
   20.52          Java_sun_awt_X11_XlibWrapper_XUngrabServer;
   20.53 -        Java_sun_awt_X11_XlibWrapper_XPutBackEvent;        
   20.54 +        Java_sun_awt_X11_XlibWrapper_XPutBackEvent;
   20.55          Java_sun_awt_X11_XlibWrapper_XConvertCase;
   20.56          Java_sun_awt_X11_XlibWrapper_XSynchronize;
   20.57          Java_java_awt_FileDialog_initIDs;
    21.1 --- a/make/tools/GenerateCharacter/CharacterData00.java.template	Thu Apr 16 17:42:00 2009 +0100
    21.2 +++ b/make/tools/GenerateCharacter/CharacterData00.java.template	Thu Apr 16 19:10:32 2009 -0700
    21.3 @@ -144,6 +144,55 @@
    21.4              case 0x1FBC : mapChar = 0x1FB3; break;
    21.5              case 0x1FCC : mapChar = 0x1FC3; break;
    21.6              case 0x1FFC : mapChar = 0x1FF3; break;
    21.7 +
    21.8 +            case 0x023A : mapChar = 0x2C65; break;
    21.9 +            case 0x023E : mapChar = 0x2C66; break;
   21.10 +            case 0x10A0 : mapChar = 0x2D00; break;
   21.11 +            case 0x10A1 : mapChar = 0x2D01; break;
   21.12 +            case 0x10A2 : mapChar = 0x2D02; break;
   21.13 +            case 0x10A3 : mapChar = 0x2D03; break;
   21.14 +            case 0x10A4 : mapChar = 0x2D04; break;
   21.15 +            case 0x10A5 : mapChar = 0x2D05; break;
   21.16 +            case 0x10A6 : mapChar = 0x2D06; break;
   21.17 +            case 0x10A7 : mapChar = 0x2D07; break;
   21.18 +            case 0x10A8 : mapChar = 0x2D08; break;
   21.19 +            case 0x10A9 : mapChar = 0x2D09; break;
   21.20 +            case 0x10AA : mapChar = 0x2D0A; break;
   21.21 +            case 0x10AB : mapChar = 0x2D0B; break;
   21.22 +            case 0x10AC : mapChar = 0x2D0C; break;
   21.23 +            case 0x10AD : mapChar = 0x2D0D; break;
   21.24 +            case 0x10AE : mapChar = 0x2D0E; break;
   21.25 +            case 0x10AF : mapChar = 0x2D0F; break;
   21.26 +            case 0x10B0 : mapChar = 0x2D10; break;
   21.27 +            case 0x10B1 : mapChar = 0x2D11; break;
   21.28 +            case 0x10B2 : mapChar = 0x2D12; break;
   21.29 +            case 0x10B3 : mapChar = 0x2D13; break;
   21.30 +            case 0x10B4 : mapChar = 0x2D14; break;
   21.31 +            case 0x10B5 : mapChar = 0x2D15; break;
   21.32 +            case 0x10B6 : mapChar = 0x2D16; break;
   21.33 +            case 0x10B7 : mapChar = 0x2D17; break;
   21.34 +            case 0x10B8 : mapChar = 0x2D18; break;
   21.35 +            case 0x10B9 : mapChar = 0x2D19; break;
   21.36 +            case 0x10BA : mapChar = 0x2D1A; break;
   21.37 +            case 0x10BB : mapChar = 0x2D1B; break;
   21.38 +            case 0x10BC : mapChar = 0x2D1C; break;
   21.39 +            case 0x10BD : mapChar = 0x2D1D; break;
   21.40 +            case 0x10BE : mapChar = 0x2D1E; break;
   21.41 +            case 0x10BF : mapChar = 0x2D1F; break;
   21.42 +            case 0x10C0 : mapChar = 0x2D20; break;
   21.43 +            case 0x10C1 : mapChar = 0x2D21; break;
   21.44 +            case 0x10C2 : mapChar = 0x2D22; break;
   21.45 +            case 0x10C3 : mapChar = 0x2D23; break;
   21.46 +            case 0x10C4 : mapChar = 0x2D24; break;
   21.47 +            case 0x10C5 : mapChar = 0x2D25; break;
   21.48 +            case 0x1E9E : mapChar = 0x00DF; break;
   21.49 +            case 0x2C62 : mapChar = 0x026B; break;
   21.50 +            case 0x2C63 : mapChar = 0x1D7D; break;
   21.51 +            case 0x2C64 : mapChar = 0x027D; break;
   21.52 +            case 0x2C6D : mapChar = 0x0251; break;
   21.53 +            case 0x2C6E : mapChar = 0x0271; break;
   21.54 +            case 0x2C6F : mapChar = 0x0250; break;
   21.55 +            case 0xA77D : mapChar = 0x1D79; break;
   21.56                // default mapChar is already set, so no
   21.57                // need to redo it here.
   21.58                // default       : mapChar = ch;
   21.59 @@ -196,6 +245,54 @@
   21.60              case 0x1FB3 : mapChar = 0x1FBC; break;
   21.61              case 0x1FC3 : mapChar = 0x1FCC; break;
   21.62              case 0x1FF3 : mapChar = 0x1FFC; break;
   21.63 +
   21.64 +            case 0x0250 : mapChar = 0x2C6F; break;
   21.65 +            case 0x0251 : mapChar = 0x2C6D; break;
   21.66 +            case 0x026B : mapChar = 0x2C62; break;
   21.67 +            case 0x0271 : mapChar = 0x2C6E; break;
   21.68 +            case 0x027D : mapChar = 0x2C64; break;
   21.69 +            case 0x1D79 : mapChar = 0xA77D; break;
   21.70 +            case 0x1D7D : mapChar = 0x2C63; break;
   21.71 +            case 0x2C65 : mapChar = 0x023A; break;
   21.72 +            case 0x2C66 : mapChar = 0x023E; break;
   21.73 +            case 0x2D00 : mapChar = 0x10A0; break;
   21.74 +            case 0x2D01 : mapChar = 0x10A1; break;
   21.75 +            case 0x2D02 : mapChar = 0x10A2; break;
   21.76 +            case 0x2D03 : mapChar = 0x10A3; break;
   21.77 +            case 0x2D04 : mapChar = 0x10A4; break;
   21.78 +            case 0x2D05 : mapChar = 0x10A5; break;
   21.79 +            case 0x2D06 : mapChar = 0x10A6; break;
   21.80 +            case 0x2D07 : mapChar = 0x10A7; break;
   21.81 +            case 0x2D08 : mapChar = 0x10A8; break;
   21.82 +            case 0x2D09 : mapChar = 0x10A9; break;
   21.83 +            case 0x2D0A : mapChar = 0x10AA; break;
   21.84 +            case 0x2D0B : mapChar = 0x10AB; break;
   21.85 +            case 0x2D0C : mapChar = 0x10AC; break;
   21.86 +            case 0x2D0D : mapChar = 0x10AD; break;
   21.87 +            case 0x2D0E : mapChar = 0x10AE; break;
   21.88 +            case 0x2D0F : mapChar = 0x10AF; break;
   21.89 +            case 0x2D10 : mapChar = 0x10B0; break;
   21.90 +            case 0x2D11 : mapChar = 0x10B1; break;
   21.91 +            case 0x2D12 : mapChar = 0x10B2; break;
   21.92 +            case 0x2D13 : mapChar = 0x10B3; break;
   21.93 +            case 0x2D14 : mapChar = 0x10B4; break;
   21.94 +            case 0x2D15 : mapChar = 0x10B5; break;
   21.95 +            case 0x2D16 : mapChar = 0x10B6; break;
   21.96 +            case 0x2D17 : mapChar = 0x10B7; break;
   21.97 +            case 0x2D18 : mapChar = 0x10B8; break;
   21.98 +            case 0x2D19 : mapChar = 0x10B9; break;
   21.99 +            case 0x2D1A : mapChar = 0x10BA; break;
  21.100 +            case 0x2D1B : mapChar = 0x10BB; break;
  21.101 +            case 0x2D1C : mapChar = 0x10BC; break;
  21.102 +            case 0x2D1D : mapChar = 0x10BD; break;
  21.103 +            case 0x2D1E : mapChar = 0x10BE; break;
  21.104 +            case 0x2D1F : mapChar = 0x10BF; break;
  21.105 +            case 0x2D20 : mapChar = 0x10C0; break;
  21.106 +            case 0x2D21 : mapChar = 0x10C1; break;
  21.107 +            case 0x2D22 : mapChar = 0x10C2; break;
  21.108 +            case 0x2D23 : mapChar = 0x10C3; break;
  21.109 +            case 0x2D24 : mapChar = 0x10C4; break;
  21.110 +            case 0x2D25 : mapChar = 0x10C5; break;
  21.111                // ch must have a 1:M case mapping, but we
  21.112                // can't handle it here. Return ch.
  21.113                // since mapChar is already set, no need
  21.114 @@ -315,6 +412,12 @@
  21.115                  case 0x32BE: retval = 49; break;          // CIRCLED NUMBER FORTY NINE
  21.116                  case 0x32BF: retval = 50; break;          // CIRCLED NUMBER FIFTY
  21.117  
  21.118 +                case 0x0D71: retval = 100; break;         // MALAYALAM NUMBER ONE HUNDRED
  21.119 +                case 0x0D72: retval = 1000; break;        // MALAYALAM NUMBER ONE THOUSAND
  21.120 +                case 0x2186: retval = 50; break;          // ROMAN NUMERAL FIFTY EARLY FORM
  21.121 +                case 0x2187: retval = 50000; break;       // ROMAN NUMERAL FIFTY THOUSAND
  21.122 +                case 0x2188: retval = 100000; break;      // ROMAN NUMERAL ONE HUNDRED THOUSAND
  21.123 +
  21.124                  default:       retval = -2; break;
  21.125              }
  21.126              break;
  21.127 @@ -383,6 +486,54 @@
  21.128                      case 0x00B5 : mapChar = 0x039C; break;
  21.129                      case 0x017F : mapChar = 0x0053; break;
  21.130                      case 0x1FBE : mapChar = 0x0399; break;
  21.131 +
  21.132 +                    case 0x0250 : mapChar = 0x2C6F; break;
  21.133 +                    case 0x0251 : mapChar = 0x2C6D; break;
  21.134 +                    case 0x026B : mapChar = 0x2C62; break;
  21.135 +                    case 0x0271 : mapChar = 0x2C6E; break;
  21.136 +                    case 0x027D : mapChar = 0x2C64; break;
  21.137 +                    case 0x1D79 : mapChar = 0xA77D; break;
  21.138 +                    case 0x1D7D : mapChar = 0x2C63; break;
  21.139 +                    case 0x2C65 : mapChar = 0x023A; break;
  21.140 +                    case 0x2C66 : mapChar = 0x023E; break;
  21.141 +                    case 0x2D00 : mapChar = 0x10A0; break;
  21.142 +                    case 0x2D01 : mapChar = 0x10A1; break;
  21.143 +                    case 0x2D02 : mapChar = 0x10A2; break;
  21.144 +                    case 0x2D03 : mapChar = 0x10A3; break;
  21.145 +                    case 0x2D04 : mapChar = 0x10A4; break;
  21.146 +                    case 0x2D05 : mapChar = 0x10A5; break;
  21.147 +                    case 0x2D06 : mapChar = 0x10A6; break;
  21.148 +                    case 0x2D07 : mapChar = 0x10A7; break;
  21.149 +                    case 0x2D08 : mapChar = 0x10A8; break;
  21.150 +                    case 0x2D09 : mapChar = 0x10A9; break;
  21.151 +                    case 0x2D0A : mapChar = 0x10AA; break;
  21.152 +                    case 0x2D0B : mapChar = 0x10AB; break;
  21.153 +                    case 0x2D0C : mapChar = 0x10AC; break;
  21.154 +                    case 0x2D0D : mapChar = 0x10AD; break;
  21.155 +                    case 0x2D0E : mapChar = 0x10AE; break;
  21.156 +                    case 0x2D0F : mapChar = 0x10AF; break;
  21.157 +                    case 0x2D10 : mapChar = 0x10B0; break;
  21.158 +                    case 0x2D11 : mapChar = 0x10B1; break;
  21.159 +                    case 0x2D12 : mapChar = 0x10B2; break;
  21.160 +                    case 0x2D13 : mapChar = 0x10B3; break;
  21.161 +                    case 0x2D14 : mapChar = 0x10B4; break;
  21.162 +                    case 0x2D15 : mapChar = 0x10B5; break;
  21.163 +                    case 0x2D16 : mapChar = 0x10B6; break;
  21.164 +                    case 0x2D17 : mapChar = 0x10B7; break;
  21.165 +                    case 0x2D18 : mapChar = 0x10B8; break;
  21.166 +                    case 0x2D19 : mapChar = 0x10B9; break;
  21.167 +                    case 0x2D1A : mapChar = 0x10BA; break;
  21.168 +                    case 0x2D1B : mapChar = 0x10BB; break;
  21.169 +                    case 0x2D1C : mapChar = 0x10BC; break;
  21.170 +                    case 0x2D1D : mapChar = 0x10BD; break;
  21.171 +                    case 0x2D1E : mapChar = 0x10BE; break;
  21.172 +                    case 0x2D1F : mapChar = 0x10BF; break;
  21.173 +                    case 0x2D20 : mapChar = 0x10C0; break;
  21.174 +                    case 0x2D21 : mapChar = 0x10C1; break;
  21.175 +                    case 0x2D22 : mapChar = 0x10C2; break;
  21.176 +                    case 0x2D23 : mapChar = 0x10C3; break;
  21.177 +                    case 0x2D24 : mapChar = 0x10C4; break;
  21.178 +                    case 0x2D25 : mapChar = 0x10C5; break;
  21.179                      default       : mapChar = Character.ERROR; break;
  21.180                  }
  21.181              }
    22.1 --- a/make/tools/GenerateCharacter/CharacterData01.java.template	Thu Apr 16 17:42:00 2009 +0100
    22.2 +++ b/make/tools/GenerateCharacter/CharacterData01.java.template	Thu Apr 16 19:10:32 2009 -0700
    22.3 @@ -218,6 +218,48 @@
    22.4              case 0x10132: retval = 80000; break;   // AEGEAN NUMBER EIGHTY THOUSAND
    22.5              case 0x10133: retval = 90000; break;   // AEGEAN NUMBER NINETY THOUSAND
    22.6              case 0x10323: retval = 50; break;      // OLD ITALIC NUMERAL FIFTY
    22.7 +
    22.8 +            case 0x010144: retval = 50; break;     // ACROPHONIC ATTIC FIFTY
    22.9 +            case 0x010145: retval = 500; break;    // ACROPHONIC ATTIC FIVE HUNDRED
   22.10 +            case 0x010146: retval = 5000; break;   // ACROPHONIC ATTIC FIVE THOUSAND
   22.11 +            case 0x010147: retval = 50000; break;  // ACROPHONIC ATTIC FIFTY THOUSAND
   22.12 +            case 0x01014A: retval = 50; break;     // ACROPHONIC ATTIC FIFTY TALENTS
   22.13 +            case 0x01014B: retval = 100; break;    // ACROPHONIC ATTIC ONE HUNDRED TALENTS
   22.14 +            case 0x01014C: retval = 500; break;    // ACROPHONIC ATTIC FIVE HUNDRED TALENTS
   22.15 +            case 0x01014D: retval = 1000; break;   // ACROPHONIC ATTIC ONE THOUSAND TALENTS
   22.16 +            case 0x01014E: retval = 5000; break;   // ACROPHONIC ATTIC FIVE THOUSAND TALENTS
   22.17 +            case 0x010151: retval = 50; break;     // ACROPHONIC ATTIC FIFTY STATERS
   22.18 +            case 0x010152: retval = 100; break;    // ACROPHONIC ATTIC ONE HUNDRED STATERS
   22.19 +            case 0x010153: retval = 500; break;    // ACROPHONIC ATTIC FIVE HUNDRED STATERS
   22.20 +            case 0x010154: retval = 1000; break;   // ACROPHONIC ATTIC ONE THOUSAND STATERS
   22.21 +            case 0x010155: retval = 10000; break;  // ACROPHONIC ATTIC TEN THOUSAND STATERS
   22.22 +            case 0x010156: retval = 50000; break;  // ACROPHONIC ATTIC FIFTY THOUSAND STATERS
   22.23 +            case 0x010166: retval = 50; break;     // ACROPHONIC TROEZENIAN FIFTY
   22.24 +            case 0x010167: retval = 50; break;     // ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
   22.25 +            case 0x010168: retval = 50; break;     // ACROPHONIC HERMIONIAN FIFTY
   22.26 +            case 0x010169: retval = 50; break;     // ACROPHONIC THESPIAN FIFTY
   22.27 +            case 0x01016A: retval = 100; break;    // ACROPHONIC THESPIAN ONE HUNDRED
   22.28 +            case 0x01016B: retval = 300; break;    // ACROPHONIC THESPIAN THREE HUNDRED
   22.29 +            case 0x01016C: retval = 500; break;    // ACROPHONIC EPIDAUREAN FIVE HUNDRED
   22.30 +            case 0x01016D: retval = 500; break;    // ACROPHONIC TROEZENIAN FIVE HUNDRED
   22.31 +            case 0x01016E: retval = 500; break;    // ACROPHONIC THESPIAN FIVE HUNDRED
   22.32 +            case 0x01016F: retval = 500; break;    // ACROPHONIC CARYSTIAN FIVE HUNDRED
   22.33 +            case 0x010170: retval = 500; break;    // ACROPHONIC NAXIAN FIVE HUNDRED
   22.34 +            case 0x010171: retval = 1000; break;   // ACROPHONIC THESPIAN ONE THOUSAND
   22.35 +            case 0x010172: retval = 5000; break;   // ACROPHONIC THESPIAN FIVE THOUSAND
   22.36 +            case 0x010174: retval = 50; break;     // ACROPHONIC STRATIAN FIFTY MNAS
   22.37 +            case 0x010341: retval = 90; break;     // GOTHIC LETTER NINETY
   22.38 +            case 0x01034A: retval = 900; break;    // GOTHIC LETTER NINE HUNDRED
   22.39 +            case 0x0103D5: retval = 100; break;    // OLD PERSIAN NUMBER HUNDRED
   22.40 +            case 0x010919: retval = 100; break;    // PHOENICIAN NUMBER ONE HUNDRED
   22.41 +            case 0x010A46: retval = 100; break;    // KHAROSHTHI NUMBER ONE HUNDRED
   22.42 +            case 0x010A47: retval = 1000; break;   // KHAROSHTHI NUMBER ONE THOUSAND
   22.43 +            case 0x01D36C: retval = 40; break;     // COUNTING ROD TENS DIGIT FOUR
   22.44 +            case 0x01D36D: retval = 50; break;     // COUNTING ROD TENS DIGIT FIVE
   22.45 +            case 0x01D36E: retval = 60; break;     // COUNTING ROD TENS DIGIT SIX
   22.46 +            case 0x01D36F: retval = 70; break;     // COUNTING ROD TENS DIGIT SEVEN
   22.47 +            case 0x01D370: retval = 80; break;     // COUNTING ROD TENS DIGIT EIGHT
   22.48 +            case 0x01D371: retval = 90; break;     // COUNTING ROD TENS DIGIT NINE
   22.49              default: retval = -2; break;
   22.50              }
   22.51              
    23.1 --- a/make/tools/UnicodeData/SpecialCasing.txt	Thu Apr 16 17:42:00 2009 +0100
    23.2 +++ b/make/tools/UnicodeData/SpecialCasing.txt	Thu Apr 16 19:10:32 2009 -0700
    23.3 @@ -1,12 +1,17 @@
    23.4 -# SpecialCasing-4.0.0.txt
    23.5 -# Date: 2003-03-14, 20:22:04 GMT [MD]
    23.6 +# SpecialCasing-5.1.0.txt
    23.7 +# Date: 2008-03-03, 21:58:10 GMT [MD]
    23.8 +#
    23.9 +# Unicode Character Database
   23.10 +# Copyright (c) 1991-2008 Unicode, Inc.
   23.11 +# For terms of use, see http://www.unicode.org/terms_of_use.html
   23.12 +# For documentation, see UCD.html
   23.13  #
   23.14  # Special Casing Properties
   23.15  #
   23.16  # This file is a supplement to the UnicodeData file.
   23.17  # It contains additional information about the casing of Unicode characters.
   23.18  # (For compatibility, the UnicodeData.txt file only contains case mappings for
   23.19 -# characters where they are 1-1, and does not have locale-specific mappings.)
   23.20 +# characters where they are 1-1, and independent of context and language.
   23.21  # For more information, see the discussion of Case Mappings in the Unicode Standard.
   23.22  #
   23.23  # All code points not listed in this file that do not have a simple case mappings
   23.24 @@ -18,31 +23,31 @@
   23.25  #
   23.26  # <code>; <lower> ; <title> ; <upper> ; (<condition_list> ;)? # <comment>
   23.27  #
   23.28 -# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more than
   23.29 -# one character, they are separated by spaces. Other than as used to separate elements,
   23.30 -# spaces are to be ignored.
   23.31 +# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more
   23.32 +# than one character, they are separated by spaces. Other than as used to separate 
   23.33 +# elements, spaces are to be ignored.
   23.34  #
   23.35 -# The <condition_list> is optional. Where present, it consists of one or more locales or contexts,
   23.36 -# separated by spaces. In these conditions:
   23.37 +# The <condition_list> is optional. Where present, it consists of one or more language IDs
   23.38 +# or contexts, separated by spaces. In these conditions:
   23.39  # - A condition list overrides the normal behavior if all of the listed conditions are true.
   23.40  # - The context is always the context of the characters in the original string,
   23.41  #   NOT in the resulting string.
   23.42  # - Case distinctions in the condition list are not significant.
   23.43  # - Conditions preceded by "Not_" represent the negation of the condition.
   23.44 +# The condition list is not represented in the UCD as a formal property.
   23.45  #
   23.46 -# A locale is defined as:
   23.47 -# <locale> := <ISO_639_code> ( "_" <ISO_3166_code> ( "_" <variant> )? )?
   23.48 -# <ISO_3166_code> := 2-letter ISO country code,
   23.49 -# <ISO_639_code> :=  2-letter ISO language code
   23.50 +# A language ID is defined by BCP 47, with '-' and '_' treated equivalently.
   23.51  #
   23.52 -# A context is one of the following, as defined in the Unicode Standard:
   23.53 -#   Final_Sigma, After_Soft_Dotted, More_Above, Before_Dot, Not_Before_Dot, After_I
   23.54 +# A context for a character C is defined by Section 3.13 Default Case 
   23.55 +# Operations, of The Unicode Standard, Version 5.0.
   23.56 +# (This is identical to the context defined by Unicode 4.1.0,
   23.57 +#  as specified in http://www.unicode.org/versions/Unicode4.1.0/)
   23.58  #
   23.59  # Parsers of this file must be prepared to deal with future additions to this format:
   23.60  #  * Additional contexts
   23.61  #  * Additional fields
   23.62  # ================================================================================
   23.63 -
   23.64 +# @missing 0000..10FFFF; <slc>; <stc>; <suc>
   23.65  # ================================================================================
   23.66  # Unconditional mappings
   23.67  # ================================================================================
   23.68 @@ -170,7 +175,7 @@
   23.69  1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
   23.70  1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
   23.71  
   23.72 -# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
   23.73 +# Some characters with YPOGEGRAMMENI also have no corresponding titlecases
   23.74  
   23.75  1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
   23.76  1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
   23.77 @@ -184,7 +189,14 @@
   23.78  1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
   23.79  
   23.80  # ================================================================================
   23.81 -# Conditional mappings
   23.82 +# Conditional Mappings
   23.83 +# The remainder of this file provides conditional casing data used to produce 
   23.84 +# full case mappings.
   23.85 +# ================================================================================
   23.86 +# Language-Insensitive Mappings
   23.87 +# These are characters whose full case mappings do not depend on language, but do
   23.88 +# depend on context (which characters come before or after). For more information
   23.89 +# see the header of this file and the Unicode Standard.
   23.90  # ================================================================================
   23.91  
   23.92  # Special case for final form of sigma
   23.93 @@ -203,7 +215,10 @@
   23.94  # 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA
   23.95  
   23.96  # ================================================================================
   23.97 -# Locale-sensitive mappings
   23.98 +# Language-Sensitive Mappings
   23.99 +# These are characters whose full case mappings depend on language and perhaps also
  23.100 +# context (which characters come before or after). For more information
  23.101 +# see the header of this file and the Unicode Standard.
  23.102  # ================================================================================
  23.103  
  23.104  # Lithuanian
  23.105 @@ -254,3 +269,6 @@
  23.106  # Note: the following case is already in the UnicodeData file.
  23.107  
  23.108  # 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I
  23.109 +
  23.110 +# EOF
  23.111 +
    24.1 --- a/make/tools/UnicodeData/UnicodeData.txt	Thu Apr 16 17:42:00 2009 +0100
    24.2 +++ b/make/tools/UnicodeData/UnicodeData.txt	Thu Apr 16 19:10:32 2009 -0700
    24.3 @@ -41,11 +41,11 @@
    24.4  0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
    24.5  0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
    24.6  002A;ASTERISK;Po;0;ON;;;;;N;;;;;
    24.7 -002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
    24.8 +002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
    24.9  002C;COMMA;Po;0;CS;;;;;N;;;;;
   24.10 -002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
   24.11 +002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
   24.12  002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
   24.13 -002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
   24.14 +002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
   24.15  0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
   24.16  0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
   24.17  0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
   24.18 @@ -171,7 +171,7 @@
   24.19  00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
   24.20  00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
   24.21  00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
   24.22 -00AD;SOFT HYPHEN;Cf;0;ON;;;;;N;;;;;
   24.23 +00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
   24.24  00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
   24.25  00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
   24.26  00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
   24.27 @@ -382,7 +382,7 @@
   24.28  017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
   24.29  017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
   24.30  017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
   24.31 -0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
   24.32 +0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243
   24.33  0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
   24.34  0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
   24.35  0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
   24.36 @@ -408,7 +408,7 @@
   24.37  0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
   24.38  0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
   24.39  0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
   24.40 -019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
   24.41 +019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
   24.42  019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
   24.43  019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
   24.44  019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
   24.45 @@ -565,8 +565,33 @@
   24.46  0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
   24.47  0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
   24.48  0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
   24.49 -0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
   24.50 -0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
   24.51 +0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
   24.52 +0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
   24.53 +0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
   24.54 +023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65;
   24.55 +023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
   24.56 +023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
   24.57 +023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
   24.58 +023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66;
   24.59 +023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
   24.60 +0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
   24.61 +0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242;
   24.62 +0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
   24.63 +0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180;
   24.64 +0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289;
   24.65 +0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C;
   24.66 +0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247;
   24.67 +0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246
   24.68 +0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249;
   24.69 +0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248
   24.70 +024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B;
   24.71 +024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A
   24.72 +024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D;
   24.73 +024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C
   24.74 +024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F;
   24.75 +024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E
   24.76 +0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F
   24.77 +0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D
   24.78  0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
   24.79  0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
   24.80  0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
   24.81 @@ -592,13 +617,13 @@
   24.82  0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
   24.83  0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
   24.84  026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
   24.85 -026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
   24.86 +026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62
   24.87  026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
   24.88  026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
   24.89  026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
   24.90  026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
   24.91  0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
   24.92 -0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
   24.93 +0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E
   24.94  0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
   24.95  0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
   24.96  0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
   24.97 @@ -610,7 +635,7 @@
   24.98  027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
   24.99  027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
  24.100  027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
  24.101 -027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
  24.102 +027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64
  24.103  027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
  24.104  027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
  24.105  0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6
  24.106 @@ -622,10 +647,10 @@
  24.107  0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
  24.108  0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
  24.109  0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
  24.110 -0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
  24.111 +0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244
  24.112  028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
  24.113  028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
  24.114 -028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
  24.115 +028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245
  24.116  028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
  24.117  028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
  24.118  028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
  24.119 @@ -633,7 +658,7 @@
  24.120  0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
  24.121  0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
  24.122  0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
  24.123 -0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
  24.124 +0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
  24.125  0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
  24.126  0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
  24.127  0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
  24.128 @@ -659,7 +684,7 @@
  24.129  02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
  24.130  02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
  24.131  02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
  24.132 -02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK ;Ll;0;L;;;;;N;;;;;
  24.133 +02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
  24.134  02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
  24.135  02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
  24.136  02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
  24.137 @@ -721,7 +746,7 @@
  24.138  02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
  24.139  02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
  24.140  02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
  24.141 -02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
  24.142 +02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;;
  24.143  02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
  24.144  02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
  24.145  02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
  24.146 @@ -829,6 +854,11 @@
  24.147  0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
  24.148  0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
  24.149  0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
  24.150 +0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
  24.151 +0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
  24.152 +035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
  24.153 +035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
  24.154 +035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
  24.155  035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
  24.156  035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
  24.157  035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
  24.158 @@ -848,9 +878,18 @@
  24.159  036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
  24.160  036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
  24.161  036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
  24.162 -0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
  24.163 +0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371;
  24.164 +0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370
  24.165 +0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373;
  24.166 +0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372
  24.167 +0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
  24.168  0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
  24.169 +0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377;
  24.170 +0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376
  24.171  037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
  24.172 +037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD
  24.173 +037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE
  24.174 +037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF
  24.175  037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
  24.176  0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
  24.177  0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
  24.178 @@ -924,6 +963,7 @@
  24.179  03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
  24.180  03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
  24.181  03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
  24.182 +03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7;
  24.183  03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
  24.184  03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
  24.185  03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
  24.186 @@ -931,7 +971,7 @@
  24.187  03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
  24.188  03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
  24.189  03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
  24.190 -03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
  24.191 +03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF
  24.192  03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9;
  24.193  03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8
  24.194  03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
  24.195 @@ -968,6 +1008,10 @@
  24.196  03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
  24.197  03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
  24.198  03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
  24.199 +03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
  24.200 +03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B;
  24.201 +03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C;
  24.202 +03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D;
  24.203  0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
  24.204  0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
  24.205  0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
  24.206 @@ -1103,6 +1147,7 @@
  24.207  0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
  24.208  0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
  24.209  0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
  24.210 +0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;;
  24.211  0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
  24.212  0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
  24.213  048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
  24.214 @@ -1159,7 +1204,7 @@
  24.215  04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
  24.216  04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
  24.217  04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
  24.218 -04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
  24.219 +04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF;
  24.220  04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
  24.221  04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
  24.222  04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
  24.223 @@ -1174,6 +1219,7 @@
  24.224  04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
  24.225  04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
  24.226  04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
  24.227 +04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0
  24.228  04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
  24.229  04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
  24.230  04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
  24.231 @@ -1212,8 +1258,16 @@
  24.232  04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
  24.233  04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
  24.234  04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
  24.235 +04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
  24.236 +04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
  24.237  04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
  24.238  04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
  24.239 +04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB;
  24.240 +04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA
  24.241 +04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD;
  24.242 +04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC
  24.243 +04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF;
  24.244 +04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE
  24.245  0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
  24.246  0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
  24.247  0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
  24.248 @@ -1230,6 +1284,26 @@
  24.249  050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
  24.250  050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
  24.251  050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
  24.252 +0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511;
  24.253 +0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510
  24.254 +0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513;
  24.255 +0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512
  24.256 +0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515;
  24.257 +0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514
  24.258 +0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517;
  24.259 +0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516
  24.260 +0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519;
  24.261 +0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518
  24.262 +051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B;
  24.263 +051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A
  24.264 +051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D;
  24.265 +051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C
  24.266 +051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F;
  24.267 +051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E
  24.268 +0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521;
  24.269 +0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520
  24.270 +0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523;
  24.271 +0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522
  24.272  0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
  24.273  0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
  24.274  0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
  24.275 @@ -1333,6 +1407,7 @@
  24.276  059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
  24.277  05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
  24.278  05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
  24.279 +05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
  24.280  05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
  24.281  05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
  24.282  05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
  24.283 @@ -1356,16 +1431,20 @@
  24.284  05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
  24.285  05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
  24.286  05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
  24.287 +05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;;
  24.288  05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
  24.289  05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
  24.290  05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
  24.291 -05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
  24.292 +05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;;
  24.293  05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
  24.294  05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
  24.295  05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
  24.296  05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
  24.297  05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
  24.298  05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
  24.299 +05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
  24.300 +05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
  24.301 +05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
  24.302  05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
  24.303  05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
  24.304  05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
  24.305 @@ -1398,10 +1477,16 @@
  24.306  05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
  24.307  05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
  24.308  05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
  24.309 -0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;;
  24.310 -0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;;
  24.311 -0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;;
  24.312 -0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;;
  24.313 +0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;;
  24.314 +0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;;
  24.315 +0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;;
  24.316 +0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;;
  24.317 +0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;;
  24.318 +0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;;
  24.319 +0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;;
  24.320 +0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
  24.321 +060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
  24.322 +060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
  24.323  060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
  24.324  060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
  24.325  060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
  24.326 @@ -1411,8 +1496,14 @@
  24.327  0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
  24.328  0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
  24.329  0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
  24.330 -0615;ARABIC SMALL HIGH TAH ;Mn;230;NSM;;;;;N;;;;;
  24.331 +0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
  24.332 +0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;;
  24.333 +0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;;
  24.334 +0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;;
  24.335 +0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;;
  24.336 +061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
  24.337  061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
  24.338 +061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
  24.339  061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
  24.340  0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
  24.341  0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
  24.342 @@ -1440,6 +1531,11 @@
  24.343  0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
  24.344  0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
  24.345  063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
  24.346 +063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.347 +063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
  24.348 +063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
  24.349 +063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.350 +063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.351  0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
  24.352  0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
  24.353  0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
  24.354 @@ -1465,6 +1561,12 @@
  24.355  0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
  24.356  0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
  24.357  0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
  24.358 +0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
  24.359 +065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
  24.360 +065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
  24.361 +065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
  24.362 +065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
  24.363 +065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
  24.364  0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
  24.365  0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
  24.366  0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
  24.367 @@ -1590,7 +1692,7 @@
  24.368  06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
  24.369  06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
  24.370  06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
  24.371 -06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;;
  24.372 +06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;;
  24.373  06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
  24.374  06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
  24.375  06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
  24.376 @@ -1702,6 +1804,54 @@
  24.377  074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
  24.378  074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
  24.379  074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
  24.380 +0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
  24.381 +0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.382 +0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
  24.383 +0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.384 +0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
  24.385 +0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
  24.386 +0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
  24.387 +0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.388 +0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
  24.389 +0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
  24.390 +075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
  24.391 +075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
  24.392 +075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.393 +075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.394 +075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.395 +075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
  24.396 +0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
  24.397 +0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
  24.398 +0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
  24.399 +0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.400 +0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
  24.401 +0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
  24.402 +0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
  24.403 +0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
  24.404 +0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
  24.405 +0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
  24.406 +076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
  24.407 +076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
  24.408 +076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
  24.409 +076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
  24.410 +076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;;
  24.411 +076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
  24.412 +0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
  24.413 +0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
  24.414 +0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
  24.415 +0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
  24.416 +0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
  24.417 +0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
  24.418 +0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
  24.419 +0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
  24.420 +0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
  24.421 +0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
  24.422 +077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
  24.423 +077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
  24.424 +077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
  24.425 +077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;;
  24.426 +077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
  24.427 +077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
  24.428  0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
  24.429  0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
  24.430  0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
  24.431 @@ -1752,6 +1902,65 @@
  24.432  07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
  24.433  07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
  24.434  07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
  24.435 +07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
  24.436 +07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
  24.437 +07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
  24.438 +07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
  24.439 +07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
  24.440 +07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
  24.441 +07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
  24.442 +07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
  24.443 +07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
  24.444 +07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
  24.445 +07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;;
  24.446 +07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;;
  24.447 +07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;;
  24.448 +07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;;
  24.449 +07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;;
  24.450 +07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;;
  24.451 +07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;;
  24.452 +07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;;
  24.453 +07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;;
  24.454 +07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;;
  24.455 +07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;;
  24.456 +07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;;
  24.457 +07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;;
  24.458 +07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;;
  24.459 +07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;;
  24.460 +07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;;
  24.461 +07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;;
  24.462 +07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;;
  24.463 +07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;;
  24.464 +07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;;
  24.465 +07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;;
  24.466 +07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;;
  24.467 +07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;;
  24.468 +07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;;
  24.469 +07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;;
  24.470 +07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;;
  24.471 +07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;;
  24.472 +07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;;
  24.473 +07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;;
  24.474 +07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;;
  24.475 +07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;;
  24.476 +07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;;
  24.477 +07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;;
  24.478 +07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;;
  24.479 +07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;;
  24.480 +07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;;
  24.481 +07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;;
  24.482 +07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;;
  24.483 +07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;;
  24.484 +07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;;
  24.485 +07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
  24.486 +07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
  24.487 +07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
  24.488 +07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
  24.489 +07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;;
  24.490 +07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;;
  24.491 +07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
  24.492 +07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
  24.493 +07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
  24.494  0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
  24.495  0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
  24.496  0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
  24.497 @@ -1857,6 +2066,13 @@
  24.498  096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
  24.499  096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
  24.500  0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
  24.501 +0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;;
  24.502 +0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;;
  24.503 +097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;
  24.504 +097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;
  24.505 +097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
  24.506 +097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;
  24.507 +097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;
  24.508  0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
  24.509  0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
  24.510  0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
  24.511 @@ -1918,6 +2134,7 @@
  24.512  09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
  24.513  09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
  24.514  09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
  24.515 +09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
  24.516  09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
  24.517  09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
  24.518  09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
  24.519 @@ -2004,6 +2221,7 @@
  24.520  0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
  24.521  0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
  24.522  0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
  24.523 +0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;;
  24.524  0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
  24.525  0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
  24.526  0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
  24.527 @@ -2024,6 +2242,7 @@
  24.528  0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
  24.529  0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
  24.530  0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
  24.531 +0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;
  24.532  0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
  24.533  0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
  24.534  0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
  24.535 @@ -2164,6 +2383,7 @@
  24.536  0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
  24.537  0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
  24.538  0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
  24.539 +0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
  24.540  0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
  24.541  0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
  24.542  0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
  24.543 @@ -2176,6 +2396,8 @@
  24.544  0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
  24.545  0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
  24.546  0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
  24.547 +0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
  24.548 +0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
  24.549  0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
  24.550  0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.551  0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.552 @@ -2221,6 +2443,7 @@
  24.553  0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
  24.554  0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
  24.555  0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
  24.556 +0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
  24.557  0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
  24.558  0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
  24.559  0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
  24.560 @@ -2236,7 +2459,9 @@
  24.561  0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
  24.562  0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
  24.563  0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
  24.564 +0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;;
  24.565  0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
  24.566 +0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
  24.567  0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.568  0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.569  0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
  24.570 @@ -2309,6 +2534,7 @@
  24.571  0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
  24.572  0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
  24.573  0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
  24.574 +0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
  24.575  0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
  24.576  0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
  24.577  0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
  24.578 @@ -2325,8 +2551,12 @@
  24.579  0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
  24.580  0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
  24.581  0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
  24.582 +0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
  24.583 +0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
  24.584  0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
  24.585  0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
  24.586 +0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
  24.587 +0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
  24.588  0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
  24.589  0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.590  0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.591 @@ -2337,6 +2567,14 @@
  24.592  0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
  24.593  0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
  24.594  0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
  24.595 +0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;;
  24.596 +0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
  24.597 +0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
  24.598 +0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
  24.599 +0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
  24.600 +0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
  24.601 +0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
  24.602 +0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;;
  24.603  0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
  24.604  0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
  24.605  0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
  24.606 @@ -2409,6 +2647,8 @@
  24.607  0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
  24.608  0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
  24.609  0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
  24.610 +0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
  24.611 +0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
  24.612  0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
  24.613  0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.614  0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.615 @@ -2419,6 +2659,8 @@
  24.616  0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
  24.617  0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
  24.618  0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
  24.619 +0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;;
  24.620 +0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;;
  24.621  0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
  24.622  0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
  24.623  0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
  24.624 @@ -2471,12 +2713,14 @@
  24.625  0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
  24.626  0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
  24.627  0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
  24.628 +0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
  24.629  0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
  24.630  0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
  24.631  0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
  24.632  0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
  24.633  0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
  24.634  0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
  24.635 +0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
  24.636  0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
  24.637  0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
  24.638  0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
  24.639 @@ -2487,6 +2731,8 @@
  24.640  0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
  24.641  0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
  24.642  0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
  24.643 +0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
  24.644 +0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
  24.645  0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
  24.646  0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.647  0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.648 @@ -2497,6 +2743,19 @@
  24.649  0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
  24.650  0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
  24.651  0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
  24.652 +0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;;
  24.653 +0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
  24.654 +0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
  24.655 +0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
  24.656 +0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
  24.657 +0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
  24.658 +0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;;
  24.659 +0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;;
  24.660 +0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;;
  24.661 +0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;;
  24.662 +0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;
  24.663 +0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;
  24.664 +0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;
  24.665  0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
  24.666  0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
  24.667  0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
  24.668 @@ -2787,10 +3046,10 @@
  24.669  0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
  24.670  0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
  24.671  0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
  24.672 -0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
  24.673 -0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
  24.674 -0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
  24.675 -0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
  24.676 +0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;;
  24.677 +0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;;
  24.678 +0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;;
  24.679 +0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;;
  24.680  0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
  24.681  0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
  24.682  0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
  24.683 @@ -2835,6 +3094,8 @@
  24.684  0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
  24.685  0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
  24.686  0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
  24.687 +0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;;
  24.688 +0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;;
  24.689  0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
  24.690  0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
  24.691  0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
  24.692 @@ -2921,7 +3182,13 @@
  24.693  0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
  24.694  0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
  24.695  0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
  24.696 +0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;dena deka;;;
  24.697  0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
  24.698 +0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;;
  24.699 +0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;;
  24.700 +0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;nyi tsek;;;
  24.701 +0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;da nying yik go dun ma;;;
  24.702 +0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;da nying yik go kab ma;;;
  24.703  1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
  24.704  1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
  24.705  1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
  24.706 @@ -2956,13 +3223,16 @@
  24.707  101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
  24.708  1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
  24.709  1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
  24.710 +1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;;
  24.711  1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
  24.712  1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
  24.713  1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
  24.714  1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
  24.715  1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
  24.716 +1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;;
  24.717  1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
  24.718  102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
  24.719 +102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
  24.720  102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
  24.721  102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
  24.722  102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
  24.723 @@ -2970,10 +3240,19 @@
  24.724  1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
  24.725  1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
  24.726  1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
  24.727 +1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;;
  24.728 +1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;;
  24.729 +1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;;
  24.730  1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
  24.731  1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
  24.732  1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
  24.733  1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
  24.734 +103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;;
  24.735 +103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;
  24.736 +103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
  24.737 +103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
  24.738 +103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;;
  24.739 +103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;;
  24.740  1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
  24.741  1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.742  1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.743 @@ -3000,44 +3279,110 @@
  24.744  1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
  24.745  1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
  24.746  1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
  24.747 -10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.748 -10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.749 -10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.750 -10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
  24.751 -10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.752 -10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.753 -10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.754 -10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.755 -10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.756 -10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.757 -10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
  24.758 -10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.759 -10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.760 -10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
  24.761 -10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.762 -10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.763 -10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
  24.764 -10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.765 -10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.766 -10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.767 -10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.768 -10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.769 -10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.770 -10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.771 -10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.772 -10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.773 -10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.774 -10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
  24.775 -10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
  24.776 -10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.777 -10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.778 -10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
  24.779 -10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
  24.780 -10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
  24.781 -10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
  24.782 -10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
  24.783 -10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
  24.784 -10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
  24.785 +105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;;
  24.786 +105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;;
  24.787 +105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;;
  24.788 +105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;;
  24.789 +105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;;
  24.790 +105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;;
  24.791 +1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
  24.792 +1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;;
  24.793 +1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;;
  24.794 +1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;;
  24.795 +1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;;
  24.796 +1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;;
  24.797 +1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;;
  24.798 +1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;;
  24.799 +1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;;
  24.800 +1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;;
  24.801 +106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;;
  24.802 +106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;;
  24.803 +106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;;
  24.804 +106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;;
  24.805 +106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;;
  24.806 +106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;;
  24.807 +1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;;
  24.808 +1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;;
  24.809 +1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;;
  24.810 +1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;;
  24.811 +1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;;
  24.812 +1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;;
  24.813 +1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;;
  24.814 +1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;;
  24.815 +1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;;
  24.816 +1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;;
  24.817 +107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;;
  24.818 +107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;;
  24.819 +107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;;
  24.820 +107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;;
  24.821 +107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;;
  24.822 +107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;;
  24.823 +1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;;
  24.824 +1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;;
  24.825 +1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
  24.826 +1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;;
  24.827 +1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;;
  24.828 +1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;;
  24.829 +1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;;
  24.830 +1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;;
  24.831 +1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;;
  24.832 +1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;;
  24.833 +108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;;
  24.834 +108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;;
  24.835 +108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;;
  24.836 +108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;;
  24.837 +108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;;
  24.838 +108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;;
  24.839 +1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
  24.840 +1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.841 +1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.842 +1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
  24.843 +1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
  24.844 +1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
  24.845 +1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
  24.846 +1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
  24.847 +1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
  24.848 +1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
  24.849 +109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;;
  24.850 +109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;;
  24.851 +10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00;
  24.852 +10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01;
  24.853 +10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02;
  24.854 +10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03;
  24.855 +10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04;
  24.856 +10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05;
  24.857 +10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06;
  24.858 +10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07;
  24.859 +10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08;
  24.860 +10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09;
  24.861 +10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A;
  24.862 +10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B;
  24.863 +10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C;
  24.864 +10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D;
  24.865 +10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E;
  24.866 +10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F;
  24.867 +10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10;
  24.868 +10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11;
  24.869 +10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12;
  24.870 +10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13;
  24.871 +10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14;
  24.872 +10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15;
  24.873 +10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16;
  24.874 +10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17;
  24.875 +10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18;
  24.876 +10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19;
  24.877 +10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A;
  24.878 +10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B;
  24.879 +10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C;
  24.880 +10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D;
  24.881 +10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E;
  24.882 +10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F;
  24.883 +10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20;
  24.884 +10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21;
  24.885 +10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22;
  24.886 +10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23;
  24.887 +10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24;
  24.888 +10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25;
  24.889  10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
  24.890  10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
  24.891  10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
  24.892 @@ -3079,7 +3424,10 @@
  24.893  10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
  24.894  10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
  24.895  10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
  24.896 +10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
  24.897 +10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
  24.898  10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
  24.899 +10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
  24.900  1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
  24.901  1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
  24.902  1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
  24.903 @@ -3327,6 +3675,7 @@
  24.904  1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
  24.905  1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
  24.906  1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
  24.907 +1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
  24.908  1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
  24.909  1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
  24.910  120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
  24.911 @@ -3390,6 +3739,7 @@
  24.912  1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
  24.913  1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
  24.914  1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
  24.915 +1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
  24.916  1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
  24.917  124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
  24.918  124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
  24.919 @@ -3446,6 +3796,7 @@
  24.920  1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
  24.921  1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
  24.922  1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
  24.923 +1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
  24.924  1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
  24.925  128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
  24.926  128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
  24.927 @@ -3482,6 +3833,7 @@
  24.928  12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
  24.929  12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
  24.930  12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
  24.931 +12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
  24.932  12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
  24.933  12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
  24.934  12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
  24.935 @@ -3506,6 +3858,7 @@
  24.936  12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
  24.937  12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
  24.938  12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
  24.939 +12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
  24.940  12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
  24.941  12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
  24.942  12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
  24.943 @@ -3536,6 +3889,7 @@
  24.944  12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
  24.945  12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
  24.946  12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
  24.947 +12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
  24.948  12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
  24.949  12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
  24.950  12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
  24.951 @@ -3567,6 +3921,7 @@
  24.952  130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
  24.953  130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
  24.954  130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
  24.955 +130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
  24.956  1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
  24.957  1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
  24.958  1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
  24.959 @@ -3579,6 +3934,7 @@
  24.960  131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
  24.961  131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
  24.962  131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
  24.963 +131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
  24.964  1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
  24.965  1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
  24.966  1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
  24.967 @@ -3618,6 +3974,7 @@
  24.968  1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
  24.969  1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
  24.970  1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
  24.971 +1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
  24.972  1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
  24.973  1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
  24.974  134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
  24.975 @@ -3637,6 +3994,8 @@
  24.976  1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
  24.977  1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
  24.978  135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
  24.979 +135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
  24.980 +1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;;
  24.981  1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
  24.982  1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
  24.983  1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
  24.984 @@ -3645,15 +4004,15 @@
  24.985  1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
  24.986  1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
  24.987  1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
  24.988 -1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
  24.989 -136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
  24.990 -136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
  24.991 -136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
  24.992 -136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
  24.993 -136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
  24.994 -136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
  24.995 -1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
  24.996 -1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
  24.997 +1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
  24.998 +136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
  24.999 +136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
 24.1000 +136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
 24.1001 +136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
 24.1002 +136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
 24.1003 +136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
 24.1004 +1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
 24.1005 +1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
 24.1006  1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
 24.1007  1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
 24.1008  1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
 24.1009 @@ -3665,6 +4024,32 @@
 24.1010  137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
 24.1011  137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
 24.1012  137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
 24.1013 +1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
 24.1014 +1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
 24.1015 +1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
 24.1016 +1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
 24.1017 +1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
 24.1018 +1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
 24.1019 +1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
 24.1020 +1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
 24.1021 +1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
 24.1022 +1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
 24.1023 +138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
 24.1024 +138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
 24.1025 +138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
 24.1026 +138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
 24.1027 +138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
 24.1028 +138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
 24.1029 +1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
 24.1030 +1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
 24.1031 +1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
 24.1032 +1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
 24.1033 +1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
 24.1034 +1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
 24.1035 +1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
 24.1036 +1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
 24.1037 +1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
 24.1038 +1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
 24.1039  13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
 24.1040  13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
 24.1041  13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
 24.1042 @@ -4407,8 +4792,8 @@
 24.1043  1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
 24.1044  1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
 24.1045  169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
 24.1046 -169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
 24.1047 -169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
 24.1048 +169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;;
 24.1049 +169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;;
 24.1050  16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
 24.1051  16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
 24.1052  16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
 24.1053 @@ -4840,6 +5225,7 @@
 24.1054  18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
 24.1055  18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
 24.1056  18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
 24.1057 +18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;;
 24.1058  1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
 24.1059  1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
 24.1060  1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
 24.1061 @@ -4878,9 +5264,9 @@
 24.1062  1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
 24.1063  1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
 24.1064  1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
 24.1065 -1929;LIMBU SUBJOINED LETTER YA;Mc;0;NSM;;;;;N;;;;;
 24.1066 -192A;LIMBU SUBJOINED LETTER RA;Mc;0;NSM;;;;;N;;;;;
 24.1067 -192B;LIMBU SUBJOINED LETTER WA;Mc;0;NSM;;;;;N;;;;;
 24.1068 +1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
 24.1069 +192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
 24.1070 +192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;;
 24.1071  1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
 24.1072  1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
 24.1073  1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
 24.1074 @@ -4941,6 +5327,86 @@
 24.1075  1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
 24.1076  1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
 24.1077  1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
 24.1078 +1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
 24.1079 +1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
 24.1080 +1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
 24.1081 +1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
 24.1082 +1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
 24.1083 +1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
 24.1084 +1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
 24.1085 +1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
 24.1086 +1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
 24.1087 +1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
 24.1088 +198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
 24.1089 +198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
 24.1090 +198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
 24.1091 +198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
 24.1092 +198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
 24.1093 +198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
 24.1094 +1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
 24.1095 +1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
 24.1096 +1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
 24.1097 +1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
 24.1098 +1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
 24.1099 +1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
 24.1100 +1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
 24.1101 +1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
 24.1102 +1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
 24.1103 +1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
 24.1104 +199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
 24.1105 +199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
 24.1106 +199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
 24.1107 +199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
 24.1108 +199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
 24.1109 +199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
 24.1110 +19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
 24.1111 +19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
 24.1112 +19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
 24.1113 +19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
 24.1114 +19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
 24.1115 +19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
 24.1116 +19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
 24.1117 +19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
 24.1118 +19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
 24.1119 +19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
 24.1120 +19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
 24.1121 +19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
 24.1122 +19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
 24.1123 +19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
 24.1124 +19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
 24.1125 +19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
 24.1126 +19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
 24.1127 +19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
 24.1128 +19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
 24.1129 +19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
 24.1130 +19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
 24.1131 +19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
 24.1132 +19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
 24.1133 +19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
 24.1134 +19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
 24.1135 +19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
 24.1136 +19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
 24.1137 +19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
 24.1138 +19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
 24.1139 +19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
 24.1140 +19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
 24.1141 +19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
 24.1142 +19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
 24.1143 +19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
 24.1144 +19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
 24.1145 +19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
 24.1146 +19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.1147 +19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.1148 +19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.1149 +19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.1150 +19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.1151 +19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.1152 +19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.1153 +19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.1154 +19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.1155 +19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.1156 +19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;;
 24.1157 +19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;;
 24.1158  19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
 24.1159  19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
 24.1160  19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
 24.1161 @@ -4973,6 +5439,334 @@
 24.1162  19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
 24.1163  19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
 24.1164  19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
 24.1165 +1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
 24.1166 +1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
 24.1167 +1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.1168 +1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
 24.1169 +1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
 24.1170 +1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
 24.1171 +1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
 24.1172 +1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
 24.1173 +1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
 24.1174 +1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
 24.1175 +1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
 24.1176 +1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
 24.1177 +1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
 24.1178 +1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
 24.1179 +1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.1180 +1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
 24.1181 +1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
 24.1182 +1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
 24.1183 +1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
 24.1184 +1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
 24.1185 +1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
 24.1186 +1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
 24.1187 +1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
 24.1188 +1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
 24.1189 +1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
 24.1190 +1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
 24.1191 +1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
 24.1192 +1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
 24.1193 +1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
 24.1194 +1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
 24.1195 +1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;;
 24.1196 +1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;;
 24.1197 +1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;;
 24.1198 +1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;;
 24.1199 +1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;;
 24.1200 +1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;;
 24.1201 +1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;;
 24.1202 +1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;;
 24.1203 +1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;;
 24.1204 +1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;;
 24.1205 +1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;;
 24.1206 +1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;;
 24.1207 +1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;;
 24.1208 +1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;;
 24.1209 +1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;;
 24.1210 +1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;;
 24.1211 +1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;;
 24.1212 +1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;;
 24.1213 +1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;;
 24.1214 +1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;;
 24.1215 +1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;;
 24.1216 +1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;;
 24.1217 +1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;;
 24.1218 +1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.1219 +1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;;
 24.1220 +1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;;
 24.1221 +1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;;
 24.1222 +1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;;
 24.1223 +1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.1224 +1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;;
 24.1225 +1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;;
 24.1226 +1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;;
 24.1227 +1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;;
 24.1228 +1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;;
 24.1229 +1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;;
 24.1230 +1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;;
 24.1231 +1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;;
 24.1232 +1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;;
 24.1233 +1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;;
 24.1234 +1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;;
 24.1235 +1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;;
 24.1236 +1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;;
 24.1237 +1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;;
 24.1238 +1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;;
 24.1239 +1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;;
 24.1240 +1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;;
 24.1241 +1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;;
 24.1242 +1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;;
 24.1243 +1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;;
 24.1244 +1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;;
 24.1245 +1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;;
 24.1246 +1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;;
 24.1247 +1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;;
 24.1248 +1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;;
 24.1249 +1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;;
 24.1250 +1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;;
 24.1251 +1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;;
 24.1252 +1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;;
 24.1253 +1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;;
 24.1254 +1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;;
 24.1255 +1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;;
 24.1256 +1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;;
 24.1257 +1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;;
 24.1258 +1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;;
 24.1259 +1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;;
 24.1260 +1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;;
 24.1261 +1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;;
 24.1262 +1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;;
 24.1263 +1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;;
 24.1264 +1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;;
 24.1265 +1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;;
 24.1266 +1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;;
 24.1267 +1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;;
 24.1268 +1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
 24.1269 +1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
 24.1270 +1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
 24.1271 +1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.1272 +1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.1273 +1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.1274 +1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.1275 +1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.1276 +1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.1277 +1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.1278 +1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.1279 +1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.1280 +1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.1281 +1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;;
 24.1282 +1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;;
 24.1283 +1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;;
 24.1284 +1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;;
 24.1285 +1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;;
 24.1286 +1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;;
 24.1287 +1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;;
 24.1288 +1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;;
 24.1289 +1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;;
 24.1290 +1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;;
 24.1291 +1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;;
 24.1292 +1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;;
 24.1293 +1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;;
 24.1294 +1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;;
 24.1295 +1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;;
 24.1296 +1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;;
 24.1297 +1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;;
 24.1298 +1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;;
 24.1299 +1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;;
 24.1300 +1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;;
 24.1301 +1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;;
 24.1302 +1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;;
 24.1303 +1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
 24.1304 +1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
 24.1305 +1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;;
 24.1306 +1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;;
 24.1307 +1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;;
 24.1308 +1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;;
 24.1309 +1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;;
 24.1310 +1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;;
 24.1311 +1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;;
 24.1312 +1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;;
 24.1313 +1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
 24.1314 +1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
 24.1315 +1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
 24.1316 +1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
 24.1317 +1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
 24.1318 +1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
 24.1319 +1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;;
 24.1320 +1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;;
 24.1321 +1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;;
 24.1322 +1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;;
 24.1323 +1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;;
 24.1324 +1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;;
 24.1325 +1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;;
 24.1326 +1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;;
 24.1327 +1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;;
 24.1328 +1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;;
 24.1329 +1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.1330 +1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;;
 24.1331 +1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;;
 24.1332 +1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;;
 24.1333 +1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.1334 +1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;;
 24.1335 +1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;;
 24.1336 +1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;;
 24.1337 +1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;;
 24.1338 +1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;;
 24.1339 +1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;;
 24.1340 +1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;;
 24.1341 +1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;;
 24.1342 +1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;;
 24.1343 +1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;;
 24.1344 +1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;;
 24.1345 +1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;;
 24.1346 +1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;;
 24.1347 +1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;;
 24.1348 +1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;;
 24.1349 +1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;;
 24.1350 +1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;;
 24.1351 +1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;;
 24.1352 +1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;;
 24.1353 +1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;;
 24.1354 +1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;;
 24.1355 +1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;;
 24.1356 +1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;;
 24.1357 +1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;;
 24.1358 +1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;
 24.1359 +1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;;
 24.1360 +1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;;
 24.1361 +1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.1362 +1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.1363 +1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.1364 +1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.1365 +1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.1366 +1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.1367 +1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.1368 +1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.1369 +1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.1370 +1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.1371 +1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;;
 24.1372 +1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;;
 24.1373 +1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;;
 24.1374 +1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;;
 24.1375 +1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;;
 24.1376 +1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.1377 +1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;;
 24.1378 +1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;;
 24.1379 +1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;;
 24.1380 +1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.1381 +1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;;
 24.1382 +1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;;
 24.1383 +1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;;
 24.1384 +1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;;
 24.1385 +1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;;
 24.1386 +1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;;
 24.1387 +1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;;
 24.1388 +1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;;
 24.1389 +1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;;
 24.1390 +1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;;
 24.1391 +1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;;
 24.1392 +1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;;
 24.1393 +1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;;
 24.1394 +1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;;
 24.1395 +1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;;
 24.1396 +1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;;
 24.1397 +1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;;
 24.1398 +1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;;
 24.1399 +1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;;
 24.1400 +1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;;
 24.1401 +1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;;
 24.1402 +1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;;
 24.1403 +1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;;
 24.1404 +1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;;
 24.1405 +1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;;
 24.1406 +1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;;
 24.1407 +1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
 24.1408 +1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
 24.1409 +1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
 24.1410 +1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
 24.1411 +1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
 24.1412 +1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
 24.1413 +1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
 24.1414 +1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
 24.1415 +1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
 24.1416 +1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;
 24.1417 +1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;
 24.1418 +1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;
 24.1419 +1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
 24.1420 +1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;;
 24.1421 +1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
 24.1422 +1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;;
 24.1423 +1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;;
 24.1424 +1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;;
 24.1425 +1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;;
 24.1426 +1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
 24.1427 +1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;;
 24.1428 +1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;;
 24.1429 +1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;;
 24.1430 +1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;;
 24.1431 +1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;;
 24.1432 +1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.1433 +1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.1434 +1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.1435 +1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.1436 +1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.1437 +1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.1438 +1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.1439 +1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.1440 +1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.1441 +1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.1442 +1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;;
 24.1443 +1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;;
 24.1444 +1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;;
 24.1445 +1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.1446 +1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.1447 +1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.1448 +1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.1449 +1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.1450 +1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.1451 +1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.1452 +1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.1453 +1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.1454 +1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.1455 +1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;;
 24.1456 +1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;;
 24.1457 +1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;;
 24.1458 +1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;;
 24.1459 +1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;;
 24.1460 +1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;;
 24.1461 +1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;;
 24.1462 +1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;;
 24.1463 +1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;;
 24.1464 +1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;;
 24.1465 +1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;;
 24.1466 +1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;;
 24.1467 +1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;;
 24.1468 +1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;;
 24.1469 +1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;;
 24.1470 +1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;;
 24.1471 +1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;;
 24.1472 +1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;;
 24.1473 +1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;;
 24.1474 +1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;;
 24.1475 +1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;;
 24.1476 +1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;;
 24.1477 +1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;;
 24.1478 +1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;;
 24.1479 +1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;;
 24.1480 +1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;;
 24.1481 +1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;;
 24.1482 +1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;;
 24.1483 +1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;;
 24.1484 +1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;;
 24.1485 +1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;;
 24.1486 +1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
 24.1487 +1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
 24.1488 +1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;;
 24.1489 +1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;;
 24.1490 +1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;
 24.1491 +1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;
 24.1492 +1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;
 24.1493  1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
 24.1494  1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
 24.1495  1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
 24.1496 @@ -5081,6 +5875,131 @@
 24.1497  1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;;
 24.1498  1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;;
 24.1499  1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
 24.1500 +1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1501 +1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1502 +1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1503 +1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1504 +1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1505 +1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1506 +1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1507 +1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1508 +1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1509 +1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1510 +1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
 24.1511 +1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
 24.1512 +1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
 24.1513 +1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D
 24.1514 +1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
 24.1515 +1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
 24.1516 +1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
 24.1517 +1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63
 24.1518 +1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
 24.1519 +1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
 24.1520 +1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1521 +1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1522 +1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1523 +1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1524 +1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1525 +1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1526 +1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1527 +1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1528 +1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1529 +1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1530 +1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1531 +1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1532 +1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1533 +1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1534 +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
 24.1535 +1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1536 +1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1537 +1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
 24.1538 +1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1539 +1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1540 +1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1541 +1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1542 +1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1543 +1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1544 +1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1545 +1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1546 +1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
 24.1547 +1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
 24.1548 +1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
 24.1549 +1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
 24.1550 +1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
 24.1551 +1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
 24.1552 +1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
 24.1553 +1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
 24.1554 +1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
 24.1555 +1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
 24.1556 +1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
 24.1557 +1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
 24.1558 +1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
 24.1559 +1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
 24.1560 +1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
 24.1561 +1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
 24.1562 +1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
 24.1563 +1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
 24.1564 +1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
 24.1565 +1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
 24.1566 +1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
 24.1567 +1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
 24.1568 +1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
 24.1569 +1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
 24.1570 +1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
 24.1571 +1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
 24.1572 +1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
 24.1573 +1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
 24.1574 +1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
 24.1575 +1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
 24.1576 +1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
 24.1577 +1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
 24.1578 +1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
 24.1579 +1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
 24.1580 +1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
 24.1581 +1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
 24.1582 +1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
 24.1583 +1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
 24.1584 +1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
 24.1585 +1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
 24.1586 +1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
 24.1587 +1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
 24.1588 +1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;;
 24.1589 +1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;;
 24.1590 +1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;;
 24.1591 +1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;;
 24.1592 +1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;
 24.1593 +1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;
 24.1594 +1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;;
 24.1595 +1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;;
 24.1596 +1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;;
 24.1597 +1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;;
 24.1598 +1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;;
 24.1599 +1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;;
 24.1600 +1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;;
 24.1601 +1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;;
 24.1602 +1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;;
 24.1603 +1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;;
 24.1604 +1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;;
 24.1605 +1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;;
 24.1606 +1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;;
 24.1607 +1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;;
 24.1608 +1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;;
 24.1609 +1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;;
 24.1610 +1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;;
 24.1611 +1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;;
 24.1612 +1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;;
 24.1613 +1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;;
 24.1614 +1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;;
 24.1615 +1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;;
 24.1616 +1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;;
 24.1617 +1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;;
 24.1618 +1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;;
 24.1619 +1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;;
 24.1620 +1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;;
 24.1621 +1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;;
 24.1622 +1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;;
 24.1623 +1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
 24.1624 +1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
 24.1625  1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
 24.1626  1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
 24.1627  1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
 24.1628 @@ -5237,6 +6156,10 @@
 24.1629  1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
 24.1630  1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
 24.1631  1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
 24.1632 +1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;;
 24.1633 +1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;;
 24.1634 +1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF;
 24.1635 +1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;;
 24.1636  1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
 24.1637  1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
 24.1638  1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
 24.1639 @@ -5327,6 +6250,12 @@
 24.1640  1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
 24.1641  1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
 24.1642  1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
 24.1643 +1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB;
 24.1644 +1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA
 24.1645 +1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD;
 24.1646 +1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC
 24.1647 +1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF;
 24.1648 +1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE
 24.1649  1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
 24.1650  1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
 24.1651  1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
 24.1652 @@ -5571,7 +6500,7 @@
 24.1653  2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
 24.1654  2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
 24.1655  200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
 24.1656 -200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
 24.1657 +200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
 24.1658  200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
 24.1659  200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
 24.1660  200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
 24.1661 @@ -5607,7 +6536,7 @@
 24.1662  202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
 24.1663  202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
 24.1664  202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
 24.1665 -202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
 24.1666 +202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
 24.1667  2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
 24.1668  2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
 24.1669  2032;PRIME;Po;0;ET;;;;;N;;;;;
 24.1670 @@ -5628,7 +6557,7 @@
 24.1671  2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
 24.1672  2042;ASTERISM;Po;0;ON;;;;;N;;;;;
 24.1673  2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
 24.1674 -2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
 24.1675 +2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;
 24.1676  2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
 24.1677  2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
 24.1678  2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
 24.1679 @@ -5645,12 +6574,22 @@
 24.1680  2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
 24.1681  2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
 24.1682  2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
 24.1683 +2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
 24.1684 +2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
 24.1685  2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
 24.1686 +2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
 24.1687 +2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
 24.1688 +205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
 24.1689 +205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
 24.1690 +205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
 24.1691 +205D;TRICOLON;Po;0;ON;;;;;N;;;;;
 24.1692 +205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
 24.1693  205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
 24.1694  2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
 24.1695  2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
 24.1696  2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
 24.1697  2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
 24.1698 +2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;;
 24.1699  206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
 24.1700  206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
 24.1701  206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
 24.1702 @@ -5665,8 +6604,8 @@
 24.1703  2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
 24.1704  2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
 24.1705  2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
 24.1706 -207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
 24.1707 -207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
 24.1708 +207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
 24.1709 +207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
 24.1710  207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
 24.1711  207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
 24.1712  207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
 24.1713 @@ -5681,11 +6620,16 @@
 24.1714  2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
 24.1715  2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
 24.1716  2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
 24.1717 -208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
 24.1718 -208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
 24.1719 +208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
 24.1720 +208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
 24.1721  208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
 24.1722  208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
 24.1723  208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
 24.1724 +2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
 24.1725 +2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
 24.1726 +2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
 24.1727 +2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
 24.1728 +2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
 24.1729  20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
 24.1730  20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
 24.1731  20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
 24.1732 @@ -5704,6 +6648,10 @@
 24.1733  20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
 24.1734  20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
 24.1735  20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
 24.1736 +20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
 24.1737 +20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
 24.1738 +20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
 24.1739 +20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
 24.1740  20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
 24.1741  20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
 24.1742  20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
 24.1743 @@ -5731,6 +6679,12 @@
 24.1744  20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
 24.1745  20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
 24.1746  20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
 24.1747 +20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
 24.1748 +20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
 24.1749 +20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
 24.1750 +20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
 24.1751 +20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
 24.1752 +20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;;
 24.1753  2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
 24.1754  2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
 24.1755  2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
 24.1756 @@ -5781,7 +6735,7 @@
 24.1757  212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
 24.1758  2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
 24.1759  2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
 24.1760 -2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
 24.1761 +2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E;
 24.1762  2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
 24.1763  2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
 24.1764  2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
 24.1765 @@ -5791,6 +6745,7 @@
 24.1766  2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
 24.1767  213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
 24.1768  213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
 24.1769 +213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
 24.1770  213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
 24.1771  213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
 24.1772  213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
 24.1773 @@ -5806,6 +6761,10 @@
 24.1774  2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
 24.1775  214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
 24.1776  214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
 24.1777 +214C;PER SIGN;So;0;ON;;;;;N;;;;;
 24.1778 +214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;;
 24.1779 +214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132
 24.1780 +214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;;
 24.1781  2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
 24.1782  2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
 24.1783  2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
 24.1784 @@ -5854,7 +6813,12 @@
 24.1785  2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
 24.1786  2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
 24.1787  2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
 24.1788 -2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
 24.1789 +2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184;
 24.1790 +2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183
 24.1791 +2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;;
 24.1792 +2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;;
 24.1793 +2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;;
 24.1794 +2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;;
 24.1795  2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
 24.1796  2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
 24.1797  2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
 24.1798 @@ -5985,7 +6949,7 @@
 24.1799  220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
 24.1800  2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
 24.1801  2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
 24.1802 -2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
 24.1803 +2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
 24.1804  2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
 24.1805  2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
 24.1806  2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
 24.1807 @@ -6403,9 +7367,9 @@
 24.1808  23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
 24.1809  23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
 24.1810  23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
 24.1811 -23B4;TOP SQUARE BRACKET;Ps;0;ON;;;;;N;;;;;
 24.1812 -23B5;BOTTOM SQUARE BRACKET;Pe;0;ON;;;;;N;;;;;
 24.1813 -23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;Po;0;ON;;;;;N;;;;;
 24.1814 +23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
 24.1815 +23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;;
 24.1816 +23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
 24.1817  23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
 24.1818  23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
 24.1819  23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
 24.1820 @@ -6432,6 +7396,29 @@
 24.1821  23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
 24.1822  23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
 24.1823  23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
 24.1824 +23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
 24.1825 +23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
 24.1826 +23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
 24.1827 +23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
 24.1828 +23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
 24.1829 +23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
 24.1830 +23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
 24.1831 +23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
 24.1832 +23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
 24.1833 +23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
 24.1834 +23DB;FUSE;So;0;ON;;;;;N;;;;;
 24.1835 +23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
 24.1836 +23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
 24.1837 +23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
 24.1838 +23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
 24.1839 +23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
 24.1840 +23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
 24.1841 +23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;;
 24.1842 +23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;;
 24.1843 +23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;;
 24.1844 +23E5;FLATNESS;So;0;ON;;;;;N;;;;;
 24.1845 +23E6;AC CURRENT;So;0;ON;;;;;N;;;;;
 24.1846 +23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;;
 24.1847  2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
 24.1848  2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
 24.1849  2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
 24.1850 @@ -6482,46 +7469,46 @@
 24.1851  2448;OCR DASH;So;0;ON;;;;;N;;;;;
 24.1852  2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
 24.1853  244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
 24.1854 -2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
 24.1855 -2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
 24.1856 -2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
 24.1857 -2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
 24.1858 -2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
 24.1859 -2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
 24.1860 -2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
 24.1861 -2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
 24.1862 -2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
 24.1863 -2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
 24.1864 -246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
 24.1865 -246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
 24.1866 -246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
 24.1867 -246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
 24.1868 -246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
 24.1869 -246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
 24.1870 -2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
 24.1871 -2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
 24.1872 -2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
 24.1873 -2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
 24.1874 -2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
 24.1875 -2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
 24.1876 -2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
 24.1877 -2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
 24.1878 -2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
 24.1879 -2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
 24.1880 -247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
 24.1881 -247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
 24.1882 -247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
 24.1883 -247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
 24.1884 -247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
 24.1885 -247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
 24.1886 -2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
 24.1887 -2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
 24.1888 -2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
 24.1889 -2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
 24.1890 -2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
 24.1891 -2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
 24.1892 -2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
 24.1893 -2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
 24.1894 +2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
 24.1895 +2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
 24.1896 +2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
 24.1897 +2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
 24.1898 +2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
 24.1899 +2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
 24.1900 +2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
 24.1901 +2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
 24.1902 +2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
 24.1903 +2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
 24.1904 +246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
 24.1905 +246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
 24.1906 +246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
 24.1907 +246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
 24.1908 +246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
 24.1909 +246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
 24.1910 +2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
 24.1911 +2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
 24.1912 +2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
 24.1913 +2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
 24.1914 +2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
 24.1915 +2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
 24.1916 +2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
 24.1917 +2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
 24.1918 +2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
 24.1919 +2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
 24.1920 +247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
 24.1921 +247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
 24.1922 +247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
 24.1923 +247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
 24.1924 +247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
 24.1925 +247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
 24.1926 +2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
 24.1927 +2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
 24.1928 +2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
 24.1929 +2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
 24.1930 +2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
 24.1931 +2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
 24.1932 +2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
 24.1933 +2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
 24.1934  2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
 24.1935  2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
 24.1936  248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
 24.1937 @@ -6620,7 +7607,7 @@
 24.1938  24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
 24.1939  24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
 24.1940  24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
 24.1941 -24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
 24.1942 +24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
 24.1943  24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
 24.1944  24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
 24.1945  24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
 24.1946 @@ -6922,6 +7909,7 @@
 24.1947  2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
 24.1948  2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
 24.1949  2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
 24.1950 +2618;SHAMROCK;So;0;ON;;;;;N;;;;;
 24.1951  2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
 24.1952  261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
 24.1953  261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
 24.1954 @@ -7023,6 +8011,8 @@
 24.1955  267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
 24.1956  267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
 24.1957  267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
 24.1958 +267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
 24.1959 +267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
 24.1960  2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
 24.1961  2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
 24.1962  2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
 24.1963 @@ -7041,8 +8031,51 @@
 24.1964  268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
 24.1965  2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
 24.1966  2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
 24.1967 +2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
 24.1968 +2693;ANCHOR;So;0;ON;;;;;N;;;;;
 24.1969 +2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
 24.1970 +2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
 24.1971 +2696;SCALES;So;0;ON;;;;;N;;;;;
 24.1972 +2697;ALEMBIC;So;0;ON;;;;;N;;;;;
 24.1973 +2698;FLOWER;So;0;ON;;;;;N;;;;;
 24.1974 +2699;GEAR;So;0;ON;;;;;N;;;;;
 24.1975 +269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
 24.1976 +269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
 24.1977 +269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
 24.1978 +269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
 24.1979  26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
 24.1980  26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
 24.1981 +26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
 24.1982 +26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
 24.1983 +26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
 24.1984 +26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
 24.1985 +26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
 24.1986 +26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
 24.1987 +26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
 24.1988 +26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
 24.1989 +26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
 24.1990 +26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
 24.1991 +26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
 24.1992 +26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
 24.1993 +26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
 24.1994 +26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
 24.1995 +26B0;COFFIN;So;0;ON;;;;;N;;;;;
 24.1996 +26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
 24.1997 +26B2;NEUTER;So;0;ON;;;;;N;;;;;
 24.1998 +26B3;CERES;So;0;ON;;;;;N;;;;;
 24.1999 +26B4;PALLAS;So;0;ON;;;;;N;;;;;
 24.2000 +26B5;JUNO;So;0;ON;;;;;N;;;;;
 24.2001 +26B6;VESTA;So;0;ON;;;;;N;;;;;
 24.2002 +26B7;CHIRON;So;0;ON;;;;;N;;;;;
 24.2003 +26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;;
 24.2004 +26B9;SEXTILE;So;0;ON;;;;;N;;;;;
 24.2005 +26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;;
 24.2006 +26BB;QUINCUNX;So;0;ON;;;;;N;;;;;
 24.2007 +26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;;
 24.2008 +26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
 24.2009 +26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;;
 24.2010 +26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
 24.2011 +26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;;
 24.2012  2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
 24.2013  2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
 24.2014  2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
 24.2015 @@ -7217,6 +8250,18 @@
 24.2016  27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
 24.2017  27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
 24.2018  27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
 24.2019 +27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
 24.2020 +27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
 24.2021 +27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
 24.2022 +27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
 24.2023 +27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
 24.2024 +27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
 24.2025 +27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
 24.2026 +27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;;
 24.2027 +27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;;
 24.2028 +27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;;
 24.2029 +27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2030 +27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;;
 24.2031  27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
 24.2032  27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
 24.2033  27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
 24.2034 @@ -7245,6 +8290,10 @@
 24.2035  27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
 24.2036  27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
 24.2037  27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
 24.2038 +27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
 24.2039 +27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
 24.2040 +27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
 24.2041 +27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
 24.2042  27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
 24.2043  27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
 24.2044  27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
 24.2045 @@ -7261,262 +8310,262 @@
 24.2046  27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
 24.2047  27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
 24.2048  27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
 24.2049 -2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
 24.2050 -2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
 24.2051 -2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
 24.2052 -2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
 24.2053 -2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
 24.2054 -2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
 24.2055 -2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
 24.2056 -2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
 24.2057 -2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
 24.2058 -2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
 24.2059 -280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
 24.2060 -280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
 24.2061 -280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
 24.2062 -280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
 24.2063 -280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
 24.2064 -280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
 24.2065 -2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
 24.2066 -2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
 24.2067 -2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
 24.2068 -2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
 24.2069 -2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
 24.2070 -2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
 24.2071 -2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
 24.2072 -2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
 24.2073 -2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
 24.2074 -2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
 24.2075 -281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
 24.2076 -281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
 24.2077 -281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
 24.2078 -281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
 24.2079 -281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
 24.2080 -281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
 24.2081 -2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
 24.2082 -2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
 24.2083 -2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
 24.2084 -2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
 24.2085 -2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
 24.2086 -2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
 24.2087 -2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
 24.2088 -2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
 24.2089 -2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
 24.2090 -2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
 24.2091 -282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
 24.2092 -282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
 24.2093 -282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
 24.2094 -282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
 24.2095 -282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
 24.2096 -282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
 24.2097 -2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
 24.2098 -2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
 24.2099 -2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
 24.2100 -2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
 24.2101 -2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
 24.2102 -2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
 24.2103 -2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
 24.2104 -2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
 24.2105 -2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
 24.2106 -2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
 24.2107 -283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
 24.2108 -283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
 24.2109 -283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
 24.2110 -283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
 24.2111 -283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
 24.2112 -283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
 24.2113 -2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
 24.2114 -2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
 24.2115 -2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
 24.2116 -2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
 24.2117 -2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
 24.2118 -2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
 24.2119 -2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
 24.2120 -2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
 24.2121 -2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
 24.2122 -2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
 24.2123 -284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
 24.2124 -284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
 24.2125 -284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
 24.2126 -284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
 24.2127 -284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
 24.2128 -284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
 24.2129 -2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
 24.2130 -2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
 24.2131 -2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
 24.2132 -2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
 24.2133 -2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
 24.2134 -2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
 24.2135 -2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
 24.2136 -2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
 24.2137 -2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
 24.2138 -2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
 24.2139 -285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
 24.2140 -285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
 24.2141 -285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
 24.2142 -285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
 24.2143 -285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
 24.2144 -285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
 24.2145 -2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
 24.2146 -2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
 24.2147 -2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
 24.2148 -2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
 24.2149 -2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
 24.2150 -2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
 24.2151 -2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
 24.2152 -2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
 24.2153 -2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
 24.2154 -2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
 24.2155 -286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
 24.2156 -286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
 24.2157 -286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
 24.2158 -286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
 24.2159 -286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
 24.2160 -286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
 24.2161 -2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
 24.2162 -2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
 24.2163 -2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
 24.2164 -2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
 24.2165 -2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
 24.2166 -2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
 24.2167 -2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
 24.2168 -2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
 24.2169 -2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
 24.2170 -2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
 24.2171 -287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
 24.2172 -287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
 24.2173 -287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
 24.2174 -287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
 24.2175 -287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
 24.2176 -287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
 24.2177 -2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
 24.2178 -2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
 24.2179 -2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
 24.2180 -2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
 24.2181 -2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
 24.2182 -2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
 24.2183 -2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
 24.2184 -2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
 24.2185 -2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
 24.2186 -2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
 24.2187 -288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
 24.2188 -288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
 24.2189 -288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
 24.2190 -288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
 24.2191 -288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
 24.2192 -288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
 24.2193 -2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
 24.2194 -2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
 24.2195 -2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
 24.2196 -2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
 24.2197 -2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
 24.2198 -2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
 24.2199 -2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
 24.2200 -2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
 24.2201 -2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
 24.2202 -2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
 24.2203 -289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
 24.2204 -289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
 24.2205 -289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
 24.2206 -289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
 24.2207 -289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
 24.2208 -289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
 24.2209 -28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
 24.2210 -28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
 24.2211 -28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
 24.2212 -28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
 24.2213 -28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
 24.2214 -28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
 24.2215 -28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
 24.2216 -28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
 24.2217 -28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
 24.2218 -28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
 24.2219 -28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
 24.2220 -28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
 24.2221 -28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
 24.2222 -28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
 24.2223 -28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
 24.2224 -28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
 24.2225 -28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
 24.2226 -28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
 24.2227 -28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
 24.2228 -28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
 24.2229 -28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
 24.2230 -28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
 24.2231 -28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
 24.2232 -28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
 24.2233 -28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
 24.2234 -28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
 24.2235 -28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
 24.2236 -28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
 24.2237 -28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
 24.2238 -28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
 24.2239 -28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
 24.2240 -28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
 24.2241 -28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
 24.2242 -28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
 24.2243 -28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
 24.2244 -28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
 24.2245 -28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
 24.2246 -28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
 24.2247 -28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
 24.2248 -28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
 24.2249 -28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
 24.2250 -28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
 24.2251 -28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
 24.2252 -28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
 24.2253 -28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
 24.2254 -28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
 24.2255 -28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
 24.2256 -28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
 24.2257 -28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
 24.2258 -28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
 24.2259 -28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
 24.2260 -28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
 24.2261 -28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
 24.2262 -28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
 24.2263 -28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
 24.2264 -28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
 24.2265 -28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
 24.2266 -28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
 24.2267 -28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
 24.2268 -28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
 24.2269 -28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
 24.2270 -28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
 24.2271 -28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
 24.2272 -28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
 24.2273 -28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
 24.2274 -28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
 24.2275 -28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
 24.2276 -28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
 24.2277 -28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
 24.2278 -28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
 24.2279 -28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
 24.2280 -28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
 24.2281 -28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
 24.2282 -28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
 24.2283 -28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
 24.2284 -28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
 24.2285 -28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
 24.2286 -28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
 24.2287 -28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
 24.2288 -28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
 24.2289 -28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
 24.2290 -28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
 24.2291 -28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
 24.2292 -28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
 24.2293 -28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
 24.2294 -28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
 24.2295 -28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
 24.2296 -28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
 24.2297 -28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
 24.2298 -28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
 24.2299 -28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
 24.2300 -28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
 24.2301 -28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
 24.2302 -28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
 24.2303 -28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
 24.2304 -28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
 24.2305 +2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;
 24.2306 +2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;
 24.2307 +2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;
 24.2308 +2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;
 24.2309 +2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;
 24.2310 +2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;
 24.2311 +2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;
 24.2312 +2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;
 24.2313 +2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;
 24.2314 +2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;
 24.2315 +280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;
 24.2316 +280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;
 24.2317 +280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;
 24.2318 +280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;
 24.2319 +280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;
 24.2320 +280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;
 24.2321 +2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;
 24.2322 +2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;
 24.2323 +2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;
 24.2324 +2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;
 24.2325 +2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;
 24.2326 +2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;
 24.2327 +2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;
 24.2328 +2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;
 24.2329 +2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;
 24.2330 +2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;
 24.2331 +281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;
 24.2332 +281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;
 24.2333 +281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;
 24.2334 +281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;
 24.2335 +281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;
 24.2336 +281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;
 24.2337 +2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;
 24.2338 +2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;
 24.2339 +2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;
 24.2340 +2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;
 24.2341 +2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;
 24.2342 +2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;
 24.2343 +2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;
 24.2344 +2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;
 24.2345 +2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;
 24.2346 +2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;
 24.2347 +282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;
 24.2348 +282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;
 24.2349 +282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;
 24.2350 +282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;
 24.2351 +282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;
 24.2352 +282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;
 24.2353 +2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;
 24.2354 +2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;
 24.2355 +2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;
 24.2356 +2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;
 24.2357 +2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;
 24.2358 +2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;
 24.2359 +2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;
 24.2360 +2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;
 24.2361 +2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;
 24.2362 +2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;
 24.2363 +283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;
 24.2364 +283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;
 24.2365 +283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;
 24.2366 +283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;
 24.2367 +283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;
 24.2368 +283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;
 24.2369 +2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;
 24.2370 +2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;
 24.2371 +2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;
 24.2372 +2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;
 24.2373 +2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;
 24.2374 +2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;
 24.2375 +2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;
 24.2376 +2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;
 24.2377 +2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;
 24.2378 +2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;
 24.2379 +284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;
 24.2380 +284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;
 24.2381 +284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;
 24.2382 +284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;
 24.2383 +284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;
 24.2384 +284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;
 24.2385 +2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;
 24.2386 +2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;
 24.2387 +2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;
 24.2388 +2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;
 24.2389 +2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;
 24.2390 +2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;
 24.2391 +2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;
 24.2392 +2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;
 24.2393 +2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;
 24.2394 +2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;
 24.2395 +285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;
 24.2396 +285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;
 24.2397 +285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;
 24.2398 +285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;
 24.2399 +285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;
 24.2400 +285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;
 24.2401 +2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;
 24.2402 +2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;
 24.2403 +2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;
 24.2404 +2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;
 24.2405 +2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;
 24.2406 +2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;
 24.2407 +2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;
 24.2408 +2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;
 24.2409 +2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;
 24.2410 +2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;
 24.2411 +286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;
 24.2412 +286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;
 24.2413 +286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;
 24.2414 +286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;
 24.2415 +286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;
 24.2416 +286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;
 24.2417 +2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;
 24.2418 +2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;
 24.2419 +2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;
 24.2420 +2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;
 24.2421 +2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;
 24.2422 +2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;
 24.2423 +2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;
 24.2424 +2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;
 24.2425 +2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;
 24.2426 +2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;
 24.2427 +287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;
 24.2428 +287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;
 24.2429 +287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;
 24.2430 +287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;
 24.2431 +287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;
 24.2432 +287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;
 24.2433 +2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;
 24.2434 +2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;
 24.2435 +2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;
 24.2436 +2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;
 24.2437 +2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;
 24.2438 +2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;
 24.2439 +2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;
 24.2440 +2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;
 24.2441 +2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;
 24.2442 +2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;
 24.2443 +288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;
 24.2444 +288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;
 24.2445 +288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;
 24.2446 +288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;
 24.2447 +288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;
 24.2448 +288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;
 24.2449 +2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;
 24.2450 +2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;
 24.2451 +2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;
 24.2452 +2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;
 24.2453 +2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;
 24.2454 +2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;
 24.2455 +2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;
 24.2456 +2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;
 24.2457 +2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;
 24.2458 +2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;
 24.2459 +289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;
 24.2460 +289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;
 24.2461 +289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;
 24.2462 +289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;
 24.2463 +289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;
 24.2464 +289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;
 24.2465 +28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;
 24.2466 +28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;
 24.2467 +28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;
 24.2468 +28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;
 24.2469 +28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;
 24.2470 +28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;
 24.2471 +28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;
 24.2472 +28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;
 24.2473 +28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;
 24.2474 +28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;
 24.2475 +28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;
 24.2476 +28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;
 24.2477 +28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;
 24.2478 +28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;
 24.2479 +28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;
 24.2480 +28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;
 24.2481 +28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;
 24.2482 +28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;
 24.2483 +28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;
 24.2484 +28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;
 24.2485 +28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;
 24.2486 +28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;
 24.2487 +28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;
 24.2488 +28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;
 24.2489 +28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;
 24.2490 +28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;
 24.2491 +28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;
 24.2492 +28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;
 24.2493 +28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;
 24.2494 +28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;
 24.2495 +28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;
 24.2496 +28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;
 24.2497 +28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;
 24.2498 +28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;
 24.2499 +28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;
 24.2500 +28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;
 24.2501 +28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;
 24.2502 +28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;
 24.2503 +28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;
 24.2504 +28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;
 24.2505 +28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;
 24.2506 +28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;
 24.2507 +28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;
 24.2508 +28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;
 24.2509 +28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;
 24.2510 +28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;
 24.2511 +28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;
 24.2512 +28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;
 24.2513 +28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;
 24.2514 +28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;
 24.2515 +28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;
 24.2516 +28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;
 24.2517 +28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;
 24.2518 +28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;
 24.2519 +28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;
 24.2520 +28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;
 24.2521 +28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;
 24.2522 +28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;
 24.2523 +28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;
 24.2524 +28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;
 24.2525 +28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;
 24.2526 +28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;
 24.2527 +28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;
 24.2528 +28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;
 24.2529 +28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;
 24.2530 +28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;
 24.2531 +28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;
 24.2532 +28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;
 24.2533 +28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;
 24.2534 +28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;
 24.2535 +28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;
 24.2536 +28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;
 24.2537 +28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;
 24.2538 +28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;
 24.2539 +28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;
 24.2540 +28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;
 24.2541 +28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;
 24.2542 +28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;
 24.2543 +28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;
 24.2544 +28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;
 24.2545 +28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;
 24.2546 +28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;
 24.2547 +28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;
 24.2548 +28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;
 24.2549 +28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;
 24.2550 +28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;
 24.2551 +28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;
 24.2552 +28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;
 24.2553 +28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;
 24.2554 +28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;
 24.2555 +28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;
 24.2556 +28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;
 24.2557 +28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;
 24.2558 +28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;
 24.2559 +28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;
 24.2560 +28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;
 24.2561  2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2562  2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2563  2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2564 @@ -8043,6 +9092,564 @@
 24.2565  2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
 24.2566  2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
 24.2567  2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
 24.2568 +2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
 24.2569 +2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
 24.2570 +2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
 24.2571 +2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
 24.2572 +2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2573 +2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2574 +2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2575 +2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2576 +2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2577 +2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2578 +2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2579 +2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
 24.2580 +2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;;
 24.2581 +2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;;
 24.2582 +2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;;
 24.2583 +2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
 24.2584 +2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
 24.2585 +2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;;
 24.2586 +2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;;
 24.2587 +2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;;
 24.2588 +2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;;
 24.2589 +2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;;
 24.2590 +2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;;
 24.2591 +2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
 24.2592 +2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
 24.2593 +2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
 24.2594 +2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
 24.2595 +2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
 24.2596 +2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;
 24.2597 +2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;;
 24.2598 +2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
 24.2599 +2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
 24.2600 +2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
 24.2601 +2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
 24.2602 +2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
 24.2603 +2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
 24.2604 +2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
 24.2605 +2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
 24.2606 +2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2607 +2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2608 +2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
 24.2609 +2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
 24.2610 +2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
 24.2611 +2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2612 +2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2613 +2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
 24.2614 +2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2615 +2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
 24.2616 +2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
 24.2617 +2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;;
 24.2618 +2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
 24.2619 +2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
 24.2620 +2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
 24.2621 +2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;;
 24.2622 +2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;;
 24.2623 +2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
 24.2624 +2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
 24.2625 +2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
 24.2626 +2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
 24.2627 +2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
 24.2628 +2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
 24.2629 +2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
 24.2630 +2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
 24.2631 +2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;;
 24.2632 +2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;;
 24.2633 +2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;;
 24.2634 +2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
 24.2635 +2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
 24.2636 +2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
 24.2637 +2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
 24.2638 +2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
 24.2639 +2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
 24.2640 +2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
 24.2641 +2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
 24.2642 +2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
 24.2643 +2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
 24.2644 +2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
 24.2645 +2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
 24.2646 +2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
 24.2647 +2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
 24.2648 +2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
 24.2649 +2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
 24.2650 +2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
 24.2651 +2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
 24.2652 +2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
 24.2653 +2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
 24.2654 +2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
 24.2655 +2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
 24.2656 +2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
 24.2657 +2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
 24.2658 +2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
 24.2659 +2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
 24.2660 +2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
 24.2661 +2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
 24.2662 +2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
 24.2663 +2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
 24.2664 +2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
 24.2665 +2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
 24.2666 +2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
 24.2667 +2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
 24.2668 +2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
 24.2669 +2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
 24.2670 +2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
 24.2671 +2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
 24.2672 +2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
 24.2673 +2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
 24.2674 +2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
 24.2675 +2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
 24.2676 +2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
 24.2677 +2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
 24.2678 +2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
 24.2679 +2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
 24.2680 +2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
 24.2681 +2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
 24.2682 +2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
 24.2683 +2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
 24.2684 +2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
 24.2685 +2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
 24.2686 +2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
 24.2687 +2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
 24.2688 +2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
 24.2689 +2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
 24.2690 +2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
 24.2691 +2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
 24.2692 +2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
 24.2693 +2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
 24.2694 +2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
 24.2695 +2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
 24.2696 +2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
 24.2697 +2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
 24.2698 +2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
 24.2699 +2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
 24.2700 +2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
 24.2701 +2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
 24.2702 +2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
 24.2703 +2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
 24.2704 +2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
 24.2705 +2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
 24.2706 +2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
 24.2707 +2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
 24.2708 +2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
 24.2709 +2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
 24.2710 +2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
 24.2711 +2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
 24.2712 +2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
 24.2713 +2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
 24.2714 +2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
 24.2715 +2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
 24.2716 +2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
 24.2717 +2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
 24.2718 +2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
 24.2719 +2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
 24.2720 +2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
 24.2721 +2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
 24.2722 +2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
 24.2723 +2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
 24.2724 +2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
 24.2725 +2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
 24.2726 +2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
 24.2727 +2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
 24.2728 +2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
 24.2729 +2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
 24.2730 +2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
 24.2731 +2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
 24.2732 +2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
 24.2733 +2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D;
 24.2734 +2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D;
 24.2735 +2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A
 24.2736 +2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E
 24.2737 +2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68;
 24.2738 +2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67
 24.2739 +2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A;
 24.2740 +2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69
 24.2741 +2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C;
 24.2742 +2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B
 24.2743 +2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251;
 24.2744 +2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271;
 24.2745 +2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250;
 24.2746 +2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;;
 24.2747 +2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73;
 24.2748 +2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72
 24.2749 +2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;;
 24.2750 +2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76;
 24.2751 +2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75
 24.2752 +2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;;
 24.2753 +2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;;
 24.2754 +2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;;
 24.2755 +2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;;
 24.2756 +2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;;
 24.2757 +2C7C;LATIN SUBSCRIPT SMALL LETTER J;Ll;0;L;<sub> 006A;;;;N;;;;;
 24.2758 +2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;;
 24.2759 +2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
 24.2760 +2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
 24.2761 +2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
 24.2762 +2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
 24.2763 +2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
 24.2764 +2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
 24.2765 +2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
 24.2766 +2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
 24.2767 +2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
 24.2768 +2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
 24.2769 +2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
 24.2770 +2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
 24.2771 +2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
 24.2772 +2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
 24.2773 +2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
 24.2774 +2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
 24.2775 +2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
 24.2776 +2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
 24.2777 +2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
 24.2778 +2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
 24.2779 +2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
 24.2780 +2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
 24.2781 +2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
 24.2782 +2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
 24.2783 +2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
 24.2784 +2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
 24.2785 +2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
 24.2786 +2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
 24.2787 +2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
 24.2788 +2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
 24.2789 +2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
 24.2790 +2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
 24.2791 +2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
 24.2792 +2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
 24.2793 +2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
 24.2794 +2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
 24.2795 +2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
 24.2796 +2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
 24.2797 +2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
 24.2798 +2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
 24.2799 +2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
 24.2800 +2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
 24.2801 +2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
 24.2802 +2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
 24.2803 +2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
 24.2804 +2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
 24.2805 +2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
 24.2806 +2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
 24.2807 +2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
 24.2808 +2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
 24.2809 +2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
 24.2810 +2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
 24.2811 +2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
 24.2812 +2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
 24.2813 +2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
 24.2814 +2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
 24.2815 +2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
 24.2816 +2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
 24.2817 +2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
 24.2818 +2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
 24.2819 +2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
 24.2820 +2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
 24.2821 +2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
 24.2822 +2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
 24.2823 +2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
 24.2824 +2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
 24.2825 +2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
 24.2826 +2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
 24.2827 +2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
 24.2828 +2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
 24.2829 +2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
 24.2830 +2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
 24.2831 +2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
 24.2832 +2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
 24.2833 +2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
 24.2834 +2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
 24.2835 +2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
 24.2836 +2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
 24.2837 +2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
 24.2838 +2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
 24.2839 +2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
 24.2840 +2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
 24.2841 +2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
 24.2842 +2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
 24.2843 +2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
 24.2844 +2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
 24.2845 +2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
 24.2846 +2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
 24.2847 +2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
 24.2848 +2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
 24.2849 +2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
 24.2850 +2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
 24.2851 +2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
 24.2852 +2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
 24.2853 +2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
 24.2854 +2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
 24.2855 +2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
 24.2856 +2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
 24.2857 +2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
 24.2858 +2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
 24.2859 +2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
 24.2860 +2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
 24.2861 +2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
 24.2862 +2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
 24.2863 +2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
 24.2864 +2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
 24.2865 +2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
 24.2866 +2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
 24.2867 +2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
 24.2868 +2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
 24.2869 +2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
 24.2870 +2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
 24.2871 +2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
 24.2872 +2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
 24.2873 +2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0
 24.2874 +2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1
 24.2875 +2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2
 24.2876 +2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3
 24.2877 +2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4
 24.2878 +2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5
 24.2879 +2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6
 24.2880 +2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7
 24.2881 +2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8
 24.2882 +2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9
 24.2883 +2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA
 24.2884 +2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB
 24.2885 +2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC
 24.2886 +2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD
 24.2887 +2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE
 24.2888 +2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF
 24.2889 +2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0
 24.2890 +2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1
 24.2891 +2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2
 24.2892 +2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3
 24.2893 +2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4
 24.2894 +2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5
 24.2895 +2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6
 24.2896 +2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7
 24.2897 +2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8
 24.2898 +2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9
 24.2899 +2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA
 24.2900 +2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB
 24.2901 +2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC
 24.2902 +2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD
 24.2903 +2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE
 24.2904 +2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF
 24.2905 +2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0
 24.2906 +2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1
 24.2907 +2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2
 24.2908 +2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3
 24.2909 +2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4
 24.2910 +2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5
 24.2911 +2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
 24.2912 +2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
 24.2913 +2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
 24.2914 +2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
 24.2915 +2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
 24.2916 +2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
 24.2917 +2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
 24.2918 +2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
 24.2919 +2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
 24.2920 +2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
 24.2921 +2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
 24.2922 +2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
 24.2923 +2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
 24.2924 +2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
 24.2925 +2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
 24.2926 +2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
 24.2927 +2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;;
 24.2928 +2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
 24.2929 +2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
 24.2930 +2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
 24.2931 +2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
 24.2932 +2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
 24.2933 +2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
 24.2934 +2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
 24.2935 +2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
 24.2936 +2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
 24.2937 +2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
 24.2938 +2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
 24.2939 +2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
 24.2940 +2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
 24.2941 +2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
 24.2942 +2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
 24.2943 +2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
 24.2944 +2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
 24.2945 +2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
 24.2946 +2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;;
 24.2947 +2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
 24.2948 +2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
 24.2949 +2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
 24.2950 +2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
 24.2951 +2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;;
 24.2952 +2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
 24.2953 +2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
 24.2954 +2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
 24.2955 +2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
 24.2956 +2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
 24.2957 +2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
 24.2958 +2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
 24.2959 +2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
 24.2960 +2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
 24.2961 +2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
 24.2962 +2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
 24.2963 +2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;;
 24.2964 +2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
 24.2965 +2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;;
 24.2966 +2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
 24.2967 +2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
 24.2968 +2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
 24.2969 +2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
 24.2970 +2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
 24.2971 +2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
 24.2972 +2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
 24.2973 +2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
 24.2974 +2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
 24.2975 +2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
 24.2976 +2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
 24.2977 +2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
 24.2978 +2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
 24.2979 +2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
 24.2980 +2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
 24.2981 +2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
 24.2982 +2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
 24.2983 +2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
 24.2984 +2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
 24.2985 +2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
 24.2986 +2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
 24.2987 +2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
 24.2988 +2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
 24.2989 +2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
 24.2990 +2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
 24.2991 +2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
 24.2992 +2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
 24.2993 +2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
 24.2994 +2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
 24.2995 +2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
 24.2996 +2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
 24.2997 +2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
 24.2998 +2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
 24.2999 +2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
 24.3000 +2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
 24.3001 +2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
 24.3002 +2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
 24.3003 +2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
 24.3004 +2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
 24.3005 +2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
 24.3006 +2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
 24.3007 +2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
 24.3008 +2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
 24.3009 +2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
 24.3010 +2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
 24.3011 +2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
 24.3012 +2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
 24.3013 +2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
 24.3014 +2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
 24.3015 +2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
 24.3016 +2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
 24.3017 +2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
 24.3018 +2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
 24.3019 +2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
 24.3020 +2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
 24.3021 +2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
 24.3022 +2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
 24.3023 +2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
 24.3024 +2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
 24.3025 +2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
 24.3026 +2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
 24.3027 +2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
 24.3028 +2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
 24.3029 +2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
 24.3030 +2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
 24.3031 +2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
 24.3032 +2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
 24.3033 +2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
 24.3034 +2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
 24.3035 +2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
 24.3036 +2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
 24.3037 +2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
 24.3038 +2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
 24.3039 +2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
 24.3040 +2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
 24.3041 +2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
 24.3042 +2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
 24.3043 +2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
 24.3044 +2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
 24.3045 +2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;;
 24.3046 +2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;;
 24.3047 +2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;;
 24.3048 +2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;;
 24.3049 +2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;;
 24.3050 +2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;;
 24.3051 +2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;;
 24.3052 +2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;;
 24.3053 +2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;;
 24.3054 +2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;;
 24.3055 +2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;;
 24.3056 +2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;;
 24.3057 +2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;;
 24.3058 +2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;;
 24.3059 +2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;;
 24.3060 +2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;;
 24.3061 +2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;;
 24.3062 +2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;;
 24.3063 +2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;
 24.3064 +2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;;
 24.3065 +2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
 24.3066 +2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;;
 24.3067 +2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;;
 24.3068 +2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;;
 24.3069 +2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;;
 24.3070 +2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;;
 24.3071 +2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;;
 24.3072 +2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;;
 24.3073 +2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;;
 24.3074 +2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;;
 24.3075 +2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
 24.3076 +2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;;
 24.3077 +2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
 24.3078 +2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
 24.3079 +2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
 24.3080 +2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
 24.3081 +2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
 24.3082 +2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
 24.3083 +2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
 24.3084 +2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
 24.3085 +2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
 24.3086 +2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
 24.3087 +2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
 24.3088 +2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
 24.3089 +2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
 24.3090 +2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
 24.3091 +2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
 24.3092 +2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
 24.3093 +2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
 24.3094 +2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
 24.3095 +2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
 24.3096 +2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
 24.3097 +2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
 24.3098 +2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
 24.3099 +2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
 24.3100 +2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
 24.3101 +2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;;
 24.3102 +2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;;
 24.3103 +2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;;
 24.3104 +2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;;
 24.3105 +2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
 24.3106 +2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
 24.3107 +2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;;
 24.3108 +2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;;
 24.3109 +2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;;
 24.3110 +2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;;
 24.3111 +2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
 24.3112 +2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
 24.3113 +2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
 24.3114 +2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
 24.3115 +2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;;
 24.3116 +2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;;
 24.3117 +2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
 24.3118 +2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
 24.3119 +2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
 24.3120 +2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;
 24.3121 +2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
 24.3122 +2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;;
 24.3123 +2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;;
 24.3124 +2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;;
 24.3125 +2E30;RING POINT;Po;0;ON;;;;;N;;;;;
 24.3126  2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
 24.3127  2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
 24.3128  2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
 24.3129 @@ -8632,7 +10239,7 @@
 24.3130  30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
 24.3131  30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
 24.3132  30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
 24.3133 -30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
 24.3134 +30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
 24.3135  30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
 24.3136  30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
 24.3137  30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
 24.3138 @@ -8677,6 +10284,7 @@
 24.3139  312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
 24.3140  312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
 24.3141  312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
 24.3142 +312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
 24.3143  3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
 24.3144  3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
 24.3145  3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
 24.3146 @@ -8811,6 +10419,42 @@
 24.3147  31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
 24.3148  31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
 24.3149  31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
 24.3150 +31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
 24.3151 +31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
 24.3152 +31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
 24.3153 +31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
 24.3154 +31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
 24.3155 +31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
 24.3156 +31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
 24.3157 +31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
 24.3158 +31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
 24.3159 +31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
 24.3160 +31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
 24.3161 +31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
 24.3162 +31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
 24.3163 +31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
 24.3164 +31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
 24.3165 +31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
 24.3166 +31D0;CJK STROKE H;So;0;ON;;;;;N;;;;;
 24.3167 +31D1;CJK STROKE S;So;0;ON;;;;;N;;;;;
 24.3168 +31D2;CJK STROKE P;So;0;ON;;;;;N;;;;;
 24.3169 +31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;;
 24.3170 +31D4;CJK STROKE D;So;0;ON;;;;;N;;;;;
 24.3171 +31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;;
 24.3172 +31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;;
 24.3173 +31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;;
 24.3174 +31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;;
 24.3175 +31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;;
 24.3176 +31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;;
 24.3177 +31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;;
 24.3178 +31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;;
 24.3179 +31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;;
 24.3180 +31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;;
 24.3181 +31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;;
 24.3182 +31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;;
 24.3183 +31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;;
 24.3184 +31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;;
 24.3185 +31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;;
 24.3186  31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
 24.3187  31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
 24.3188  31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
 24.3189 @@ -8940,6 +10584,7 @@
 24.3190  327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
 24.3191  327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
 24.3192  327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
 24.3193 +327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
 24.3194  327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
 24.3195  3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
 24.3196  3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
 24.3197 @@ -9391,7 +11036,7 @@
 24.3198  4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
 24.3199  4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
 24.3200  4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
 24.3201 -9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
 24.3202 +9FC3;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
 24.3203  A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
 24.3204  A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
 24.3205  A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
 24.3206 @@ -9413,7 +11058,7 @@
 24.3207  A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
 24.3208  A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
 24.3209  A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
 24.3210 -A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
 24.3211 +A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
 24.3212  A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
 24.3213  A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
 24.3214  A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
 24.3215 @@ -10612,6 +12257,879 @@
 24.3216  A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
 24.3217  A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
 24.3218  A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
 24.3219 +A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;;
 24.3220 +A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;;
 24.3221 +A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
 24.3222 +A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
 24.3223 +A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;;
 24.3224 +A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
 24.3225 +A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;;
 24.3226 +A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
 24.3227 +A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;;
 24.3228 +A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;;
 24.3229 +A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;;
 24.3230 +A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;;
 24.3231 +A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
 24.3232 +A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
 24.3233 +A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
 24.3234 +A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
 24.3235 +A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;;
 24.3236 +A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;;
 24.3237 +A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
 24.3238 +A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;;
 24.3239 +A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
 24.3240 +A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;;
 24.3241 +A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
 24.3242 +A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
 24.3243 +A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
 24.3244 +A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
 24.3245 +A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
 24.3246 +A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
 24.3247 +A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;;
 24.3248 +A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
 24.3249 +A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
 24.3250 +A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;;
 24.3251 +A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
 24.3252 +A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
 24.3253 +A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
 24.3254 +A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
 24.3255 +A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;;
 24.3256 +A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;;
 24.3257 +A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;;
 24.3258 +A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;;
 24.3259 +A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;;
 24.3260 +A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;;
 24.3261 +A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
 24.3262 +A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;;
 24.3263 +A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
 24.3264 +A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;;
 24.3265 +A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;;
 24.3266 +A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;;
 24.3267 +A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;;
 24.3268 +A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
 24.3269 +A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
 24.3270 +A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
 24.3271 +A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;;
 24.3272 +A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;;
 24.3273 +A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;;
 24.3274 +A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
 24.3275 +A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;;
 24.3276 +A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
 24.3277 +A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
 24.3278 +A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
 24.3279 +A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
 24.3280 +A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
 24.3281 +A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
 24.3282 +A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
 24.3283 +A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
 24.3284 +A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
 24.3285 +A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
 24.3286 +A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
 24.3287 +A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;;
 24.3288 +A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
 24.3289 +A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
 24.3290 +A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
 24.3291 +A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
 24.3292 +A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;;
 24.3293 +A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;;
 24.3294 +A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;;
 24.3295 +A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
 24.3296 +A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;;
 24.3297 +A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
 24.3298 +A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;;
 24.3299 +A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
 24.3300 +A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;;
 24.3301 +A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
 24.3302 +A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;;
 24.3303 +A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;;
 24.3304 +A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;;
 24.3305 +A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;;
 24.3306 +A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;;
 24.3307 +A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
 24.3308 +A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
 24.3309 +A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
 24.3310 +A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;;
 24.3311 +A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;;
 24.3312 +A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;;
 24.3313 +A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
 24.3314 +A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
 24.3315 +A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
 24.3316 +A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
 24.3317 +A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
 24.3318 +A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
 24.3319 +A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
 24.3320 +A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
 24.3321 +A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
 24.3322 +A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;;
 24.3323 +A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;;
 24.3324 +A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;;
 24.3325 +A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
 24.3326 +A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;;
 24.3327 +A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;;
 24.3328 +A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
 24.3329 +A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
 24.3330 +A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
 24.3331 +A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
 24.3332 +A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;;
 24.3333 +A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;;
 24.3334 +A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;;
 24.3335 +A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;;
 24.3336 +A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;;
 24.3337 +A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;;
 24.3338 +A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;;
 24.3339 +A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;;
 24.3340 +A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;;
 24.3341 +A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;;
 24.3342 +A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;;
 24.3343 +A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;;
 24.3344 +A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;;
 24.3345 +A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;;
 24.3346 +A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;;
 24.3347 +A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;;
 24.3348 +A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;;
 24.3349 +A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;;
 24.3350 +A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;;
 24.3351 +A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;;
 24.3352 +A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;;
 24.3353 +A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;;
 24.3354 +A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;;
 24.3355 +A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;;
 24.3356 +A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;;
 24.3357 +A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;;
 24.3358 +A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;;
 24.3359 +A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;;
 24.3360 +A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;;
 24.3361 +A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;;
 24.3362 +A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;;
 24.3363 +A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;;
 24.3364 +A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;;
 24.3365 +A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;;
 24.3366 +A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;;
 24.3367 +A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;;
 24.3368 +A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;;
 24.3369 +A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;;
 24.3370 +A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;;
 24.3371 +A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;;
 24.3372 +A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
 24.3373 +A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;;
 24.3374 +A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
 24.3375 +A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;;
 24.3376 +A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
 24.3377 +A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;;
 24.3378 +A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;;
 24.3379 +A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;;
 24.3380 +A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;;
 24.3381 +A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
 24.3382 +A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
 24.3383 +A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
 24.3384 +A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;;
 24.3385 +A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;;
 24.3386 +A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;;
 24.3387 +A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
 24.3388 +A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
 24.3389 +A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
 24.3390 +A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
 24.3391 +A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
 24.3392 +A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
 24.3393 +A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
 24.3394 +A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
 24.3395 +A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
 24.3396 +A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
 24.3397 +A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
 24.3398 +A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
 24.3399 +A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
 24.3400 +A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;;
 24.3401 +A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
 24.3402 +A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
 24.3403 +A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
 24.3404 +A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
 24.3405 +A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;;
 24.3406 +A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;;
 24.3407 +A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;;
 24.3408 +A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
 24.3409 +A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;;
 24.3410 +A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
 24.3411 +A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;;
 24.3412 +A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
 24.3413 +A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;;
 24.3414 +A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
 24.3415 +A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;;
 24.3416 +A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;;
 24.3417 +A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;;
 24.3418 +A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;;
 24.3419 +A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;;
 24.3420 +A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
 24.3421 +A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
 24.3422 +A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
 24.3423 +A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;;
 24.3424 +A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;;
 24.3425 +A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;;
 24.3426 +A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
 24.3427 +A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
 24.3428 +A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
 24.3429 +A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
 24.3430 +A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
 24.3431 +A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
 24.3432 +A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
 24.3433 +A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
 24.3434 +A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
 24.3435 +A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
 24.3436 +A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
 24.3437 +A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
 24.3438 +A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
 24.3439 +A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;;
 24.3440 +A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
 24.3441 +A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
 24.3442 +A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
 24.3443 +A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
 24.3444 +A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;;
 24.3445 +A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;;
 24.3446 +A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;;
 24.3447 +A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
 24.3448 +A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;;
 24.3449 +A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
 24.3450 +A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;;
 24.3451 +A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;;
 24.3452 +A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;;
 24.3453 +A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
 24.3454 +A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;;
 24.3455 +A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;;
 24.3456 +A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;;
 24.3457 +A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;;
 24.3458 +A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;;
 24.3459 +A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;;
 24.3460 +A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;;
 24.3461 +A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;;
 24.3462 +A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
 24.3463 +A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;;
 24.3464 +A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;;
 24.3465 +A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;;
 24.3466 +A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
 24.3467 +A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
 24.3468 +A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
 24.3469 +A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
 24.3470 +A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
 24.3471 +A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
 24.3472 +A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
 24.3473 +A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
 24.3474 +A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
 24.3475 +A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;;
 24.3476 +A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;;
 24.3477 +A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;;
 24.3478 +A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
 24.3479 +A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;;
 24.3480 +A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;;
 24.3481 +A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
 24.3482 +A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;;
 24.3483 +A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
 24.3484 +A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
 24.3485 +A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
 24.3486 +A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;;
 24.3487 +A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;
 24.3488 +A60D;VAI COMMA;Po;0;ON;;;;;N;;;;;
 24.3489 +A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;;
 24.3490 +A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;;
 24.3491 +A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;;
 24.3492 +A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;;
 24.3493 +A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;;
 24.3494 +A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;;
 24.3495 +A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;;
 24.3496 +A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;;
 24.3497 +A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;;
 24.3498 +A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;;
 24.3499 +A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;;
 24.3500 +A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;;
 24.3501 +A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;;
 24.3502 +A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;;
 24.3503 +A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;;
 24.3504 +A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;;
 24.3505 +A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;;
 24.3506 +A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;;
 24.3507 +A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.3508 +A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.3509 +A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.3510 +A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.3511 +A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.3512 +A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.3513 +A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.3514 +A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.3515 +A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.3516 +A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.3517 +A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;;
 24.3518 +A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;;
 24.3519 +A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641;
 24.3520 +A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640
 24.3521 +A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643;
 24.3522 +A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642
 24.3523 +A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645;
 24.3524 +A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644
 24.3525 +A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647;
 24.3526 +A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646
 24.3527 +A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649;
 24.3528 +A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648
 24.3529 +A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B;
 24.3530 +A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A
 24.3531 +A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D;
 24.3532 +A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C
 24.3533 +A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F;
 24.3534 +A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E
 24.3535 +A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651;
 24.3536 +A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650
 24.3537 +A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653;
 24.3538 +A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652
 24.3539 +A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655;
 24.3540 +A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654
 24.3541 +A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657;
 24.3542 +A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656
 24.3543 +A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659;
 24.3544 +A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658
 24.3545 +A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B;
 24.3546 +A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A
 24.3547 +A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D;
 24.3548 +A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C
 24.3549 +A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F;
 24.3550 +A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E
 24.3551 +A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663;
 24.3552 +A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662
 24.3553 +A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665;
 24.3554 +A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664
 24.3555 +A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667;
 24.3556 +A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666
 24.3557 +A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669;
 24.3558 +A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668
 24.3559 +A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B;
 24.3560 +A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A
 24.3561 +A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D;
 24.3562 +A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C
 24.3563 +A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;;
 24.3564 +A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;;
 24.3565 +A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
 24.3566 +A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
 24.3567 +A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
 24.3568 +A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;;
 24.3569 +A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;;
 24.3570 +A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;;
 24.3571 +A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;;
 24.3572 +A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;;
 24.3573 +A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681;
 24.3574 +A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680
 24.3575 +A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683;
 24.3576 +A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682
 24.3577 +A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685;
 24.3578 +A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684
 24.3579 +A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687;
 24.3580 +A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686
 24.3581 +A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689;
 24.3582 +A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688
 24.3583 +A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B;
 24.3584 +A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A
 24.3585 +A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D;
 24.3586 +A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C
 24.3587 +A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F;
 24.3588 +A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E
 24.3589 +A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691;
 24.3590 +A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690
 24.3591 +A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693;
 24.3592 +A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692
 24.3593 +A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695;
 24.3594 +A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694
 24.3595 +A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697;
 24.3596 +A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696
 24.3597 +A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
 24.3598 +A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
 24.3599 +A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
 24.3600 +A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
 24.3601 +A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
 24.3602 +A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
 24.3603 +A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
 24.3604 +A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
 24.3605 +A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3606 +A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3607 +A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3608 +A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3609 +A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3610 +A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3611 +A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3612 +A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3613 +A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3614 +A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3615 +A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3616 +A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3617 +A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3618 +A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3619 +A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
 24.3620 +A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;;
 24.3621 +A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;;
 24.3622 +A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;;
 24.3623 +A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;;
 24.3624 +A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;;
 24.3625 +A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;;
 24.3626 +A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
 24.3627 +A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
 24.3628 +A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
 24.3629 +A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;;
 24.3630 +A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;;
 24.3631 +A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723;
 24.3632 +A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722
 24.3633 +A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725;
 24.3634 +A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724
 24.3635 +A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727;
 24.3636 +A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726
 24.3637 +A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729;
 24.3638 +A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728
 24.3639 +A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B;
 24.3640 +A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A
 24.3641 +A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D;
 24.3642 +A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C
 24.3643 +A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F;
 24.3644 +A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E
 24.3645 +A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;;
 24.3646 +A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;;
 24.3647 +A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733;
 24.3648 +A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732
 24.3649 +A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735;
 24.3650 +A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734
 24.3651 +A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737;
 24.3652 +A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736
 24.3653 +A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739;
 24.3654 +A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738
 24.3655 +A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B;
 24.3656 +A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A
 24.3657 +A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D;
 24.3658 +A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C
 24.3659 +A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F;
 24.3660 +A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E
 24.3661 +A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741;
 24.3662 +A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740
 24.3663 +A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743;
 24.3664 +A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742
 24.3665 +A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745;
 24.3666 +A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744
 24.3667 +A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747;
 24.3668 +A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746
 24.3669 +A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749;
 24.3670 +A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748
 24.3671 +A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B;
 24.3672 +A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A
 24.3673 +A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D;
 24.3674 +A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C
 24.3675 +A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F;
 24.3676 +A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E
 24.3677 +A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751;
 24.3678 +A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750
 24.3679 +A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753;
 24.3680 +A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752
 24.3681 +A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755;
 24.3682 +A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754
 24.3683 +A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757;
 24.3684 +A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756
 24.3685 +A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759;
 24.3686 +A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758
 24.3687 +A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B;
 24.3688 +A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A
 24.3689 +A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D;
 24.3690 +A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C
 24.3691 +A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F;
 24.3692 +A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E
 24.3693 +A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761;
 24.3694 +A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760
 24.3695 +A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763;
 24.3696 +A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762
 24.3697 +A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765;
 24.3698 +A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764
 24.3699 +A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767;
 24.3700 +A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766
 24.3701 +A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769;
 24.3702 +A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768
 24.3703 +A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B;
 24.3704 +A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A
 24.3705 +A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D;
 24.3706 +A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C
 24.3707 +A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F;
 24.3708 +A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E
 24.3709 +A770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;;
 24.3710 +A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;;
 24.3711 +A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;;
 24.3712 +A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;;
 24.3713 +A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;;
 24.3714 +A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;;
 24.3715 +A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;;
 24.3716 +A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;;
 24.3717 +A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;;
 24.3718 +A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A;
 24.3719 +A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779
 24.3720 +A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C;
 24.3721 +A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B
 24.3722 +A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79;
 24.3723 +A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F;
 24.3724 +A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E
 24.3725 +A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781;
 24.3726 +A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780
 24.3727 +A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783;
 24.3728 +A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782
 24.3729 +A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785;
 24.3730 +A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784
 24.3731 +A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787;
 24.3732 +A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786
 24.3733 +A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;;
 24.3734 +A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;;
 24.3735 +A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;;
 24.3736 +A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C;
 24.3737 +A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B
 24.3738 +A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;;
 24.3739 +A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;;
 24.3740 +A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;;
 24.3741 +A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;;
 24.3742 +A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;;
 24.3743 +A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
 24.3744 +A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
 24.3745 +A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;;
 24.3746 +A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
 24.3747 +A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
 24.3748 +A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
 24.3749 +A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
 24.3750 +A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
 24.3751 +A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
 24.3752 +A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
 24.3753 +A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
 24.3754 +A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
 24.3755 +A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
 24.3756 +A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
 24.3757 +A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
 24.3758 +A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
 24.3759 +A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
 24.3760 +A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
 24.3761 +A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
 24.3762 +A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
 24.3763 +A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
 24.3764 +A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
 24.3765 +A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
 24.3766 +A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
 24.3767 +A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
 24.3768 +A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
 24.3769 +A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
 24.3770 +A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
 24.3771 +A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
 24.3772 +A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
 24.3773 +A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
 24.3774 +A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
 24.3775 +A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
 24.3776 +A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
 24.3777 +A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
 24.3778 +A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
 24.3779 +A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
 24.3780 +A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
 24.3781 +A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
 24.3782 +A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
 24.3783 +A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
 24.3784 +A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
 24.3785 +A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
 24.3786 +A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
 24.3787 +A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;;
 24.3788 +A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;;
 24.3789 +A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;;
 24.3790 +A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.3791 +A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;;
 24.3792 +A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;;
 24.3793 +A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;;
 24.3794 +A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.3795 +A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;;
 24.3796 +A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;;
 24.3797 +A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;;
 24.3798 +A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;;
 24.3799 +A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;;
 24.3800 +A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;;
 24.3801 +A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;;
 24.3802 +A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;;
 24.3803 +A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;;
 24.3804 +A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;;
 24.3805 +A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;;
 24.3806 +A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;;
 24.3807 +A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;;
 24.3808 +A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;;
 24.3809 +A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
 24.3810 +A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;;
 24.3811 +A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;;
 24.3812 +A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;;
 24.3813 +A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;;
 24.3814 +A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;;
 24.3815 +A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;;
 24.3816 +A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;;
 24.3817 +A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;;
 24.3818 +A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;;
 24.3819 +A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;;
 24.3820 +A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;;
 24.3821 +A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;;
 24.3822 +A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;;
 24.3823 +A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;;
 24.3824 +A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;;
 24.3825 +A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;;
 24.3826 +A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;;
 24.3827 +A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;;
 24.3828 +A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;;
 24.3829 +A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;;
 24.3830 +A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;;
 24.3831 +A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;;
 24.3832 +A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;;
 24.3833 +A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;;
 24.3834 +A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;;
 24.3835 +A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;;
 24.3836 +A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;;
 24.3837 +A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;;
 24.3838 +A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;;
 24.3839 +A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;;
 24.3840 +A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;;
 24.3841 +A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;;
 24.3842 +A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;;
 24.3843 +A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
 24.3844 +A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
 24.3845 +A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;;
 24.3846 +A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;;
 24.3847 +A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;;
 24.3848 +A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;;
 24.3849 +A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;;
 24.3850 +A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;;
 24.3851 +A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
 24.3852 +A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
 24.3853 +A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
 24.3854 +A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
 24.3855 +A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;;
 24.3856 +A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;;
 24.3857 +A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;;
 24.3858 +A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;;
 24.3859 +A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;;
 24.3860 +A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;;
 24.3861 +A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;;
 24.3862 +A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;;
 24.3863 +A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;;
 24.3864 +A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;;
 24.3865 +A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.3866 +A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;;
 24.3867 +A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;;
 24.3868 +A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;;
 24.3869 +A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;;
 24.3870 +A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.3871 +A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;;
 24.3872 +A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
 24.3873 +A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;;
 24.3874 +A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
 24.3875 +A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;;
 24.3876 +A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;;
 24.3877 +A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;;
 24.3878 +A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;;
 24.3879 +A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;;
 24.3880 +A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;;
 24.3881 +A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;;
 24.3882 +A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;;
 24.3883 +A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;;
 24.3884 +A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;;
 24.3885 +A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;;
 24.3886 +A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;;
 24.3887 +A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;;
 24.3888 +A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;;
 24.3889 +A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;;
 24.3890 +A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;;
 24.3891 +A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;;
 24.3892 +A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;;
 24.3893 +A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;;
 24.3894 +A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;;
 24.3895 +A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;;
 24.3896 +A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
 24.3897 +A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
 24.3898 +A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
 24.3899 +A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
 24.3900 +A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
 24.3901 +A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
 24.3902 +A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
 24.3903 +A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
 24.3904 +A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
 24.3905 +A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
 24.3906 +A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
 24.3907 +A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
 24.3908 +A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
 24.3909 +A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
 24.3910 +A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
 24.3911 +A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
 24.3912 +A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;;
 24.3913 +A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
 24.3914 +A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.3915 +A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.3916 +A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.3917 +A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.3918 +A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.3919 +A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.3920 +A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.3921 +A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.3922 +A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.3923 +A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.3924 +A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.3925 +A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.3926 +A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.3927 +A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.3928 +A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.3929 +A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.3930 +A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.3931 +A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.3932 +A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.3933 +A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.3934 +A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;;
 24.3935 +A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;;
 24.3936 +A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;;
 24.3937 +A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.3938 +A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;;
 24.3939 +A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;;
 24.3940 +A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;;
 24.3941 +A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.3942 +A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;;
 24.3943 +A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;;
 24.3944 +A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;;
 24.3945 +A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;;
 24.3946 +A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;;
 24.3947 +A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;;
 24.3948 +A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;;
 24.3949 +A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;;
 24.3950 +A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;;
 24.3951 +A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;;
 24.3952 +A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;;
 24.3953 +A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;;
 24.3954 +A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;;
 24.3955 +A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;;
 24.3956 +A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;;
 24.3957 +A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;;
 24.3958 +A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;;
 24.3959 +A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;;
 24.3960 +A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;;
 24.3961 +A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;;
 24.3962 +A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;;
 24.3963 +A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;;
 24.3964 +A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;;
 24.3965 +A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;;
 24.3966 +A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;;
 24.3967 +A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;;
 24.3968 +A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;;
 24.3969 +A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;;
 24.3970 +A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;;
 24.3971 +A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;;
 24.3972 +A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;;
 24.3973 +A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;;
 24.3974 +A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.3975 +A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;;
 24.3976 +A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;;
 24.3977 +A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;;
 24.3978 +A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;;
 24.3979 +A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;;
 24.3980 +A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;;
 24.3981 +A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;;
 24.3982 +A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;;
 24.3983 +A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;;
 24.3984 +A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;;
 24.3985 +A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;;
 24.3986 +A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;;
 24.3987 +A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;;
 24.3988 +A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;;
 24.3989 +A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;;
 24.3990 +A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;;
 24.3991 +A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;;
 24.3992 +A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;;
 24.3993 +A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;;
 24.3994 +A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;;
 24.3995 +A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
 24.3996 +A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
 24.3997 +A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
 24.3998 +A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
 24.3999 +A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
 24.4000 +A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
 24.4001 +A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;
 24.4002 +A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;;
 24.4003 +A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
 24.4004 +A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
 24.4005 +A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
 24.4006 +A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;;
 24.4007 +A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;;
 24.4008 +A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;;
 24.4009 +AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;;
 24.4010 +AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;;
 24.4011 +AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;;
 24.4012 +AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;;
 24.4013 +AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;;
 24.4014 +AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;;
 24.4015 +AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;;
 24.4016 +AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;;
 24.4017 +AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;;
 24.4018 +AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;;
 24.4019 +AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;;
 24.4020 +AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;;
 24.4021 +AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;;
 24.4022 +AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;;
 24.4023 +AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;;
 24.4024 +AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;;
 24.4025 +AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;;
 24.4026 +AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;;
 24.4027 +AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;;
 24.4028 +AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;;
 24.4029 +AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;;
 24.4030 +AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;;
 24.4031 +AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;;
 24.4032 +AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;;
 24.4033 +AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;;
 24.4034 +AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;;
 24.4035 +AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;;
 24.4036 +AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;;
 24.4037 +AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;;
 24.4038 +AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;;
 24.4039 +AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;;
 24.4040 +AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;;
 24.4041 +AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;;
 24.4042 +AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;;
 24.4043 +AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;;
 24.4044 +AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;;
 24.4045 +AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;;
 24.4046 +AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;;
 24.4047 +AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;;
 24.4048 +AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;;
 24.4049 +AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;;
 24.4050 +AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
 24.4051 +AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
 24.4052 +AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
 24.4053 +AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;;
 24.4054 +AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
 24.4055 +AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
 24.4056 +AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
 24.4057 +AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
 24.4058 +AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
 24.4059 +AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
 24.4060 +AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;;
 24.4061 +AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;;
 24.4062 +AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;;
 24.4063 +AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;;
 24.4064 +AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;;
 24.4065 +AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;;
 24.4066 +AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
 24.4067 +AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;;
 24.4068 +AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;;
 24.4069 +AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;;
 24.4070 +AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;;
 24.4071 +AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;;
 24.4072 +AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;;
 24.4073 +AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;;
 24.4074 +AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;;
 24.4075 +AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;;
 24.4076 +AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;;
 24.4077 +AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;;
 24.4078 +AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
 24.4079 +AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
 24.4080 +AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
 24.4081 +AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
 24.4082 +AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
 24.4083 +AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
 24.4084 +AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
 24.4085 +AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
 24.4086 +AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
 24.4087 +AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
 24.4088 +AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;
 24.4089 +AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;;
 24.4090 +AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;;
 24.4091 +AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;;
 24.4092  AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
 24.4093  D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
 24.4094  D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
 24.4095 @@ -10729,7 +13247,7 @@
 24.4096  F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
 24.4097  F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
 24.4098  F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
 24.4099 -F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
 24.4100 +F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;;
 24.4101  F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
 24.4102  F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
 24.4103  F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
 24.4104 @@ -10737,12 +13255,12 @@
 24.4105  F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
 24.4106  F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
 24.4107  F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
 24.4108 -F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
 24.4109 +F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;;
 24.4110  F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
 24.4111  F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
 24.4112  F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
 24.4113  F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
 24.4114 -F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
 24.4115 +F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;;
 24.4116  F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
 24.4117  F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
 24.4118  F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
 24.4119 @@ -10800,7 +13318,7 @@
 24.4120  F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
 24.4121  F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
 24.4122  F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
 24.4123 -F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
 24.4124 +F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;;
 24.4125  F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
 24.4126  F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
 24.4127  F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
 24.4128 @@ -10831,9 +13349,9 @@
 24.4129  F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
 24.4130  F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
 24.4131  F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
 24.4132 -F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
 24.4133 +F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;;
 24.4134  F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
 24.4135 -F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
 24.4136 +F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;;
 24.4137  F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
 24.4138  F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
 24.4139  F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
 24.4140 @@ -10875,7 +13393,7 @@
 24.4141  F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
 24.4142  F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
 24.4143  F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
 24.4144 -F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
 24.4145 +F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;;
 24.4146  F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
 24.4147  F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
 24.4148  FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
 24.4149 @@ -10983,6 +13501,112 @@
 24.4150  FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
 24.4151  FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
 24.4152  FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
 24.4153 +FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
 24.4154 +FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
 24.4155 +FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
 24.4156 +FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
 24.4157 +FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
 24.4158 +FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
 24.4159 +FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
 24.4160 +FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
 24.4161 +FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
 24.4162 +FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
 24.4163 +FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
 24.4164 +FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
 24.4165 +FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
 24.4166 +FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
 24.4167 +FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
 24.4168 +FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
 24.4169 +FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
 24.4170 +FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
 24.4171 +FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
 24.4172 +FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
 24.4173 +FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
 24.4174 +FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
 24.4175 +FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
 24.4176 +FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
 24.4177 +FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
 24.4178 +FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
 24.4179 +FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
 24.4180 +FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
 24.4181 +FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
 24.4182 +FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
 24.4183 +FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
 24.4184 +FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
 24.4185 +FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
 24.4186 +FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
 24.4187 +FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
 24.4188 +FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
 24.4189 +FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
 24.4190 +FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
 24.4191 +FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
 24.4192 +FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
 24.4193 +FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
 24.4194 +FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
 24.4195 +FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
 24.4196 +FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
 24.4197 +FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
 24.4198 +FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
 24.4199 +FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
 24.4200 +FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
 24.4201 +FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
 24.4202 +FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
 24.4203 +FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
 24.4204 +FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
 24.4205 +FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
 24.4206 +FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
 24.4207 +FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
 24.4208 +FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
 24.4209 +FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
 24.4210 +FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
 24.4211 +FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
 24.4212 +FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
 24.4213 +FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
 24.4214 +FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
 24.4215 +FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
 24.4216 +FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
 24.4217 +FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
 24.4218 +FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
 24.4219 +FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
 24.4220 +FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
 24.4221 +FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
 24.4222 +FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
 24.4223 +FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
 24.4224 +FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
 24.4225 +FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
 24.4226 +FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
 24.4227 +FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
 24.4228 +FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
 24.4229 +FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
 24.4230 +FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
 24.4231 +FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
 24.4232 +FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
 24.4233 +FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
 24.4234 +FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
 24.4235 +FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
 24.4236 +FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
 24.4237 +FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
 24.4238 +FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
 24.4239 +FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
 24.4240 +FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
 24.4241 +FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
 24.4242 +FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
 24.4243 +FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
 24.4244 +FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
 24.4245 +FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
 24.4246 +FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
 24.4247 +FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
 24.4248 +FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
 24.4249 +FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
 24.4250 +FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
 24.4251 +FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
 24.4252 +FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
 24.4253 +FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
 24.4254 +FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
 24.4255 +FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
 24.4256 +FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
 24.4257 +FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
 24.4258 +FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
 24.4259  FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
 24.4260  FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
 24.4261  FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
 24.4262 @@ -11007,7 +13631,7 @@
 24.4263  FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
 24.4264  FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
 24.4265  FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
 24.4266 -FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
 24.4267 +FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
 24.4268  FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
 24.4269  FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
 24.4270  FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
 24.4271 @@ -11652,10 +14276,23 @@
 24.4272  FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
 24.4273  FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
 24.4274  FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
 24.4275 +FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
 24.4276 +FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
 24.4277 +FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
 24.4278 +FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
 24.4279 +FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
 24.4280 +FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
 24.4281 +FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
 24.4282 +FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
 24.4283 +FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
 24.4284 +FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
 24.4285  FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
 24.4286  FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
 24.4287  FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
 24.4288  FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
 24.4289 +FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;;
 24.4290 +FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
 24.4291 +FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;;
 24.4292  FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
 24.4293  FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
 24.4294  FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
 24.4295 @@ -11696,19 +14333,19 @@
 24.4296  FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
 24.4297  FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
 24.4298  FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
 24.4299 -FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
 24.4300 -FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
 24.4301 -FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
 24.4302 -FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
 24.4303 -FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
 24.4304 -FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
 24.4305 +FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;;
 24.4306 +FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;;
 24.4307 +FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;;
 24.4308 +FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;;
 24.4309 +FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;;
 24.4310 +FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
 24.4311  FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
 24.4312  FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
 24.4313  FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
 24.4314 -FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
 24.4315 -FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
 24.4316 -FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
 24.4317 -FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
 24.4318 +FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
 24.4319 +FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
 24.4320 +FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;;
 24.4321 +FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;;
 24.4322  FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
 24.4323  FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
 24.4324  FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
 24.4325 @@ -11865,11 +14502,11 @@
 24.4326  FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
 24.4327  FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
 24.4328  FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
 24.4329 -FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
 24.4330 +FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
 24.4331  FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
 24.4332 -FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
 24.4333 +FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
 24.4334  FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
 24.4335 -FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
 24.4336 +FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
 24.4337  FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
 24.4338  FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
 24.4339  FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
 24.4340 @@ -11955,7 +14592,7 @@
 24.4341  FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
 24.4342  FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
 24.4343  FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
 24.4344 -FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
 24.4345 +FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
 24.4346  FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
 24.4347  FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
 24.4348  FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
 24.4349 @@ -12080,9 +14717,9 @@
 24.4350  FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
 24.4351  FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
 24.4352  FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
 24.4353 -FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
 24.4354 -FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
 24.4355 -FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
 24.4356 +FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;
 24.4357 +FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;
 24.4358 +FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;
 24.4359  FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 24.4360  FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
 24.4361  10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
 24.4362 @@ -12353,6 +14990,217 @@
 24.4363  1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
 24.4364  1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
 24.4365  1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
 24.4366 +10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
 24.4367 +10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
 24.4368 +10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
 24.4369 +10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
 24.4370 +10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
 24.4371 +10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
 24.4372 +10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
 24.4373 +10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
 24.4374 +10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
 24.4375 +10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
 24.4376 +1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
 24.4377 +1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
 24.4378 +1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
 24.4379 +1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
 24.4380 +1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
 24.4381 +1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
 24.4382 +10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
 24.4383 +10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
 24.4384 +10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
 24.4385 +10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
 24.4386 +10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
 24.4387 +10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
 24.4388 +10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
 24.4389 +10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
 24.4390 +10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
 24.4391 +10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
 24.4392 +1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
 24.4393 +1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
 24.4394 +1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
 24.4395 +1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
 24.4396 +1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
 24.4397 +1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
 24.4398 +10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
 24.4399 +10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
 24.4400 +10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
 24.4401 +10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
 24.4402 +10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
 24.4403 +10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
 24.4404 +10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
 24.4405 +10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
 24.4406 +10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
 24.4407 +10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
 24.4408 +1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
 24.4409 +1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
 24.4410 +1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
 24.4411 +1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
 24.4412 +1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
 24.4413 +1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
 24.4414 +10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
 24.4415 +10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
 24.4416 +10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
 24.4417 +10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
 24.4418 +10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
 24.4419 +10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
 24.4420 +10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
 24.4421 +10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
 24.4422 +10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
 24.4423 +10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
 24.4424 +1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
 24.4425 +1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
 24.4426 +1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
 24.4427 +1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
 24.4428 +1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
 24.4429 +1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
 24.4430 +10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
 24.4431 +10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
 24.4432 +10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
 24.4433 +10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
 24.4434 +10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
 24.4435 +10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
 24.4436 +10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
 24.4437 +10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
 24.4438 +10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
 24.4439 +10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
 24.4440 +1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
 24.4441 +10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;;
 24.4442 +10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;;
 24.4443 +10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;;
 24.4444 +10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;;
 24.4445 +10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;;
 24.4446 +10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;;
 24.4447 +10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;;
 24.4448 +10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;;
 24.4449 +10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;;
 24.4450 +10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;
 24.4451 +1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;
 24.4452 +1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;
 24.4453 +101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;
 24.4454 +101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;
 24.4455 +101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;;
 24.4456 +101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;;
 24.4457 +101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;;
 24.4458 +101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;;
 24.4459 +101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;;
 24.4460 +101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;;
 24.4461 +101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;;
 24.4462 +101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;;
 24.4463 +101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;;
 24.4464 +101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;;
 24.4465 +101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;;
 24.4466 +101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;;
 24.4467 +101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;;
 24.4468 +101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;;
 24.4469 +101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;;
 24.4470 +101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;;
 24.4471 +101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;;
 24.4472 +101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;;
 24.4473 +101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;;
 24.4474 +101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;;
 24.4475 +101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;;
 24.4476 +101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;;
 24.4477 +101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;;
 24.4478 +101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;;
 24.4479 +101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;;
 24.4480 +101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;;
 24.4481 +101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;;
 24.4482 +101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;;
 24.4483 +101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;;
 24.4484 +101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;;
 24.4485 +101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;;
 24.4486 +101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;;
 24.4487 +101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;;
 24.4488 +101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;;
 24.4489 +101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;;
 24.4490 +101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;;
 24.4491 +101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;;
 24.4492 +101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;;
 24.4493 +101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;;
 24.4494 +101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;;
 24.4495 +101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;;
 24.4496 +101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;;
 24.4497 +101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;;
 24.4498 +101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;;
 24.4499 +10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;;
 24.4500 +10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;;
 24.4501 +10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;;
 24.4502 +10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;;
 24.4503 +10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;;
 24.4504 +10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;;
 24.4505 +10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;;
 24.4506 +10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;;
 24.4507 +10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;;
 24.4508 +10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;;
 24.4509 +1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;;
 24.4510 +1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;;
 24.4511 +1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;;
 24.4512 +1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;;
 24.4513 +1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;;
 24.4514 +1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;;
 24.4515 +10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;;
 24.4516 +10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;;
 24.4517 +10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;;
 24.4518 +10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;;
 24.4519 +10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;;
 24.4520 +10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;;
 24.4521 +10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;;
 24.4522 +10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;;
 24.4523 +10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;;
 24.4524 +10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;;
 24.4525 +1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;;
 24.4526 +1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;;
 24.4527 +1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;;
 24.4528 +102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;;
 24.4529 +102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;;
 24.4530 +102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;;
 24.4531 +102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;;
 24.4532 +102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;;
 24.4533 +102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;;
 24.4534 +102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;;
 24.4535 +102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;;
 24.4536 +102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;;
 24.4537 +102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;;
 24.4538 +102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;;
 24.4539 +102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;;
 24.4540 +102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;;
 24.4541 +102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;;
 24.4542 +102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;;
 24.4543 +102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;;
 24.4544 +102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;;
 24.4545 +102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;;
 24.4546 +102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;;
 24.4547 +102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;;
 24.4548 +102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;;
 24.4549 +102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;;
 24.4550 +102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;;
 24.4551 +102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;;
 24.4552 +102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;;
 24.4553 +102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;;
 24.4554 +102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;;
 24.4555 +102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;;
 24.4556 +102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;;
 24.4557 +102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;;
 24.4558 +102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;;
 24.4559 +102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;;
 24.4560 +102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;;
 24.4561 +102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;;
 24.4562 +102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;;
 24.4563 +102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;;
 24.4564 +102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;;
 24.4565 +102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;;
 24.4566 +102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;;
 24.4567 +102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;;
 24.4568 +102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;;
 24.4569 +102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;;
 24.4570 +102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;;
 24.4571 +102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;;
 24.4572 +102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;;
 24.4573 +102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;;
 24.4574 +102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;;
 24.4575 +102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;;
 24.4576 +102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;;
 24.4577  10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
 24.4578  10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
 24.4579  10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
 24.4580 @@ -12405,7 +15253,7 @@
 24.4581  1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
 24.4582  1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
 24.4583  10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
 24.4584 -10341;GOTHIC LETTER NINETY;Lo;0;L;;;;;N;;;;;
 24.4585 +10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;;
 24.4586  10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
 24.4587  10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
 24.4588  10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
 24.4589 @@ -12414,7 +15262,7 @@
 24.4590  10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
 24.4591  10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
 24.4592  10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
 24.4593 -1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;;N;;;;;
 24.4594 +1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
 24.4595  10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
 24.4596  10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
 24.4597  10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
 24.4598 @@ -12446,6 +15294,56 @@
 24.4599  1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
 24.4600  1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
 24.4601  1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
 24.4602 +103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
 24.4603 +103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
 24.4604 +103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
 24.4605 +103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
 24.4606 +103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
 24.4607 +103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
 24.4608 +103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
 24.4609 +103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
 24.4610 +103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
 24.4611 +103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
 24.4612 +103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
 24.4613 +103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
 24.4614 +103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
 24.4615 +103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
 24.4616 +103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
 24.4617 +103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
 24.4618 +103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
 24.4619 +103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
 24.4620 +103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
 24.4621 +103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
 24.4622 +103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
 24.4623 +103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
 24.4624 +103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
 24.4625 +103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
 24.4626 +103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
 24.4627 +103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
 24.4628 +103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
 24.4629 +103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
 24.4630 +103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
 24.4631 +103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
 24.4632 +103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
 24.4633 +103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
 24.4634 +103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
 24.4635 +103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
 24.4636 +103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
 24.4637 +103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
 24.4638 +103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
 24.4639 +103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
 24.4640 +103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
 24.4641 +103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
 24.4642 +103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
 24.4643 +103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
 24.4644 +103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
 24.4645 +103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
 24.4646 +103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
 24.4647 +103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;;
 24.4648 +103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;;
 24.4649 +103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;;
 24.4650 +103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;;
 24.4651 +103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;;
 24.4652  10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
 24.4653  10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
 24.4654  10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
 24.4655 @@ -12669,6 +15567,1107 @@
 24.4656  10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
 24.4657  1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
 24.4658  1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
 24.4659 +10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;
 24.4660 +10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;
 24.4661 +10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;
 24.4662 +10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;;
 24.4663 +10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;;
 24.4664 +10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;;
 24.4665 +10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;;
 24.4666 +10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;;
 24.4667 +10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;;
 24.4668 +10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;;
 24.4669 +1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;;
 24.4670 +1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;;
 24.4671 +1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
 24.4672 +1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
 24.4673 +1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;;
 24.4674 +1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;;
 24.4675 +10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;;
 24.4676 +10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;;
 24.4677 +10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;;
 24.4678 +10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;;
 24.4679 +10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
 24.4680 +10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;;
 24.4681 +10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
 24.4682 +10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
 24.4683 +10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
 24.4684 +10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
 24.4685 +1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;;
 24.4686 +10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;;
 24.4687 +10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;;
 24.4688 +10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;;
 24.4689 +10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;;
 24.4690 +10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;;
 24.4691 +10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;;
 24.4692 +10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;;
 24.4693 +10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;;
 24.4694 +10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;;
 24.4695 +10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;;
 24.4696 +1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;;
 24.4697 +1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;;
 24.4698 +1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;;
 24.4699 +1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;;
 24.4700 +1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;;
 24.4701 +1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;;
 24.4702 +10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;;
 24.4703 +10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;;
 24.4704 +10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;;
 24.4705 +10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;;
 24.4706 +10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;;
 24.4707 +10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;;
 24.4708 +10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;;
 24.4709 +10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;;
 24.4710 +10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;;
 24.4711 +10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;;
 24.4712 +1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;;
 24.4713 +10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
 24.4714 +10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
 24.4715 +10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
 24.4716 +10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
 24.4717 +10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
 24.4718 +10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
 24.4719 +10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
 24.4720 +10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
 24.4721 +10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
 24.4722 +10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
 24.4723 +10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
 24.4724 +10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
 24.4725 +10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
 24.4726 +10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
 24.4727 +10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
 24.4728 +10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
 24.4729 +10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
 24.4730 +10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
 24.4731 +10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
 24.4732 +10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
 24.4733 +10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
 24.4734 +10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
 24.4735 +10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
 24.4736 +10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
 24.4737 +10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
 24.4738 +10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
 24.4739 +10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
 24.4740 +10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
 24.4741 +10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
 24.4742 +10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
 24.4743 +10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
 24.4744 +10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
 24.4745 +10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
 24.4746 +10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
 24.4747 +10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
 24.4748 +10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
 24.4749 +10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
 24.4750 +10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
 24.4751 +10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
 24.4752 +10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
 24.4753 +10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
 24.4754 +10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
 24.4755 +10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
 24.4756 +10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
 24.4757 +10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
 24.4758 +10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
 24.4759 +10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
 24.4760 +10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
 24.4761 +10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
 24.4762 +10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
 24.4763 +10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
 24.4764 +10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
 24.4765 +10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
 24.4766 +10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
 24.4767 +10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
 24.4768 +10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
 24.4769 +10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
 24.4770 +10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
 24.4771 +10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
 24.4772 +10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
 24.4773 +10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
 24.4774 +10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
 24.4775 +10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
 24.4776 +10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
 24.4777 +10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
 24.4778 +12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
 24.4779 +12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
 24.4780 +12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.4781 +12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.4782 +12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;;
 24.4783 +12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;;
 24.4784 +12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;;
 24.4785 +12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;;
 24.4786 +12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;;
 24.4787 +12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;;
 24.4788 +1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;;
 24.4789 +1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;;
 24.4790 +1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
 24.4791 +1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;;
 24.4792 +1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.4793 +1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;;
 24.4794 +12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.4795 +12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;;
 24.4796 +12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
 24.4797 +12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;;
 24.4798 +12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
 24.4799 +12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;;
 24.4800 +12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;;
 24.4801 +12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;;
 24.4802 +12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.4803 +12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
 24.4804 +1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;;
 24.4805 +1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.4806 +1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;;
 24.4807 +1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;;
 24.4808 +1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;;
 24.4809 +1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;;
 24.4810 +12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;;
 24.4811 +12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;;
 24.4812 +12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;;
 24.4813 +12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;;
 24.4814 +12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;;
 24.4815 +12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;;
 24.4816 +12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;;
 24.4817 +12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.4818 +12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;;
 24.4819 +12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;;
 24.4820 +1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;;
 24.4821 +1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;;
 24.4822 +1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.4823 +1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;;
 24.4824 +1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;;
 24.4825 +1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;;
 24.4826 +12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;;
 24.4827 +12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;;
 24.4828 +12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;;
 24.4829 +12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;;
 24.4830 +12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;;
 24.4831 +12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.4832 +12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;;
 24.4833 +12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;;
 24.4834 +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;;
 24.4835 +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
 24.4836 +1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;;
 24.4837 +1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;;
 24.4838 +1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
 24.4839 +1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
 24.4840 +1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;;
 24.4841 +1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;;
 24.4842 +12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;;
 24.4843 +12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;;
 24.4844 +12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;;
 24.4845 +12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;;
 24.4846 +12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;;
 24.4847 +12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;;
 24.4848 +12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;;
 24.4849 +12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;;
 24.4850 +12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;;
 24.4851 +12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;;
 24.4852 +1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;;
 24.4853 +1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.4854 +1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.4855 +1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;;
 24.4856 +1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;;
 24.4857 +1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;;
 24.4858 +12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;;
 24.4859 +12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;;
 24.4860 +12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;;
 24.4861 +12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;;
 24.4862 +12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;;
 24.4863 +12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;;
 24.4864 +12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;;
 24.4865 +12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;;
 24.4866 +12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;;
 24.4867 +12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;;
 24.4868 +1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
 24.4869 +1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;;
 24.4870 +1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;;
 24.4871 +1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;;
 24.4872 +1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;;
 24.4873 +1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;;
 24.4874 +12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;;
 24.4875 +12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;;
 24.4876 +12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;;
 24.4877 +12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;;
 24.4878 +12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;;
 24.4879 +12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;;
 24.4880 +12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;;
 24.4881 +12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;;
 24.4882 +12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;;
 24.4883 +12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
 24.4884 +1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;;
 24.4885 +1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.4886 +1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;;
 24.4887 +1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;;
 24.4888 +1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;;
 24.4889 +1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;;
 24.4890 +12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;;
 24.4891 +12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;;
 24.4892 +12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;;
 24.4893 +12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;;
 24.4894 +12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;;
 24.4895 +12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.4896 +12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;;
 24.4897 +12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;;
 24.4898 +12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;;
 24.4899 +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;;
 24.4900 +1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;;
 24.4901 +1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;;
 24.4902 +1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;;
 24.4903 +1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;;
 24.4904 +1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;;
 24.4905 +1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;;
 24.4906 +12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;;
 24.4907 +12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;;
 24.4908 +12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;;
 24.4909 +12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;;
 24.4910 +12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;;
 24.4911 +12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;;
 24.4912 +12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;;
 24.4913 +12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
 24.4914 +12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;;
 24.4915 +12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;;
 24.4916 +1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;;
 24.4917 +1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;;
 24.4918 +1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;;
 24.4919 +1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;;
 24.4920 +1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;;
 24.4921 +1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.4922 +12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;;
 24.4923 +12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;;
 24.4924 +12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.4925 +12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;;
 24.4926 +12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;;
 24.4927 +12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;;
 24.4928 +12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;;
 24.4929 +12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;;
 24.4930 +12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;;
 24.4931 +12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.4932 +1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;;
 24.4933 +1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;;
 24.4934 +1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;;
 24.4935 +1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;;
 24.4936 +1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;;
 24.4937 +1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;;
 24.4938 +120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;;
 24.4939 +120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;;
 24.4940 +120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;;
 24.4941 +120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
 24.4942 +120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
 24.4943 +120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;;
 24.4944 +120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.4945 +120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
 24.4946 +120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
 24.4947 +120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;;
 24.4948 +120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;;
 24.4949 +120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.4950 +120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;;
 24.4951 +120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;;
 24.4952 +120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;;
 24.4953 +120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;;
 24.4954 +120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
 24.4955 +120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;;
 24.4956 +120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;;
 24.4957 +120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;;
 24.4958 +120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;;
 24.4959 +120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;;
 24.4960 +120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;;
 24.4961 +120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;;
 24.4962 +120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
 24.4963 +120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
 24.4964 +120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
 24.4965 +120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;;
 24.4966 +120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;;
 24.4967 +120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
 24.4968 +120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;;
 24.4969 +120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.4970 +120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;;
 24.4971 +120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;;
 24.4972 +120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;;
 24.4973 +120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;;
 24.4974 +120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;;
 24.4975 +120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.4976 +120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;;
 24.4977 +120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;;
 24.4978 +120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;;
 24.4979 +120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;;
 24.4980 +120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.4981 +120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.4982 +120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.4983 +120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;;
 24.4984 +120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;;
 24.4985 +120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;;
 24.4986 +120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;;
 24.4987 +120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;;
 24.4988 +120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;;
 24.4989 +120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;;
 24.4990 +120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;;
 24.4991 +120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;;
 24.4992 +120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.4993 +120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.4994 +120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;;
 24.4995 +120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
 24.4996 +120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;;
 24.4997 +120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;;
 24.4998 +120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;;
 24.4999 +120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;;
 24.5000 +120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
 24.5001 +120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;;
 24.5002 +120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5003 +120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;;
 24.5004 +120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;;
 24.5005 +120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;;
 24.5006 +120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;;
 24.5007 +120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5008 +120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;;
 24.5009 +120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;;
 24.5010 +120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;;
 24.5011 +120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.5012 +120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;;
 24.5013 +120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5014 +120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;;
 24.5015 +120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;;
 24.5016 +120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;;
 24.5017 +120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;;
 24.5018 +120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;;
 24.5019 +120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
 24.5020 +120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;;
 24.5021 +120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
 24.5022 +120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;;
 24.5023 +120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;;
 24.5024 +120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;;
 24.5025 +120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;;
 24.5026 +120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5027 +120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;;
 24.5028 +120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;;
 24.5029 +120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;;
 24.5030 +120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;;
 24.5031 +120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;;
 24.5032 +120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;;
 24.5033 +120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.5034 +12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;;
 24.5035 +12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;;
 24.5036 +12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;;
 24.5037 +12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;;
 24.5038 +12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;;
 24.5039 +12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;;
 24.5040 +12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;;
 24.5041 +12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;;
 24.5042 +12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;;
 24.5043 +12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;;
 24.5044 +1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;;
 24.5045 +1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
 24.5046 +1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5047 +1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;;
 24.5048 +1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;;
 24.5049 +1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;;
 24.5050 +12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;;
 24.5051 +12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;;
 24.5052 +12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
 24.5053 +12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5054 +12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.5055 +12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;;
 24.5056 +12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;;
 24.5057 +12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;;
 24.5058 +12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;;
 24.5059 +12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;;
 24.5060 +1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.5061 +1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5062 +1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;;
 24.5063 +1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;;
 24.5064 +1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;;
 24.5065 +1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;;
 24.5066 +12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.5067 +12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;;
 24.5068 +12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;;
 24.5069 +12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;;
 24.5070 +12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5071 +12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;;
 24.5072 +12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;;
 24.5073 +12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;;
 24.5074 +12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;;
 24.5075 +12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;;
 24.5076 +1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;;
 24.5077 +1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;;
 24.5078 +1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;;
 24.5079 +1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;;
 24.5080 +1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;;
 24.5081 +1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
 24.5082 +12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5083 +12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;;
 24.5084 +12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;;
 24.5085 +12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;;
 24.5086 +12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5087 +12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5088 +12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;;
 24.5089 +12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;;
 24.5090 +12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;;
 24.5091 +12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;;
 24.5092 +1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;;
 24.5093 +1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
 24.5094 +1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;;
 24.5095 +1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5096 +1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;;
 24.5097 +1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;;
 24.5098 +12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;;
 24.5099 +12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;;
 24.5100 +12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;;
 24.5101 +12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;;
 24.5102 +12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;;
 24.5103 +12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;;
 24.5104 +12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;;
 24.5105 +12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;;
 24.5106 +12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;;
 24.5107 +12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;;
 24.5108 +1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.5109 +1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;;
 24.5110 +1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5111 +1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;;
 24.5112 +1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;;
 24.5113 +1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.5114 +12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;;
 24.5115 +12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;;
 24.5116 +12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;;
 24.5117 +12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;;
 24.5118 +12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;;
 24.5119 +12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;;
 24.5120 +12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;;
 24.5121 +12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;;
 24.5122 +12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;;
 24.5123 +12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;;
 24.5124 +1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;;
 24.5125 +1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;;
 24.5126 +1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5127 +1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;;
 24.5128 +1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;;
 24.5129 +1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;;
 24.5130 +12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;;
 24.5131 +12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;;
 24.5132 +12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;;
 24.5133 +12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;;
 24.5134 +12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5135 +12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.5136 +12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;;
 24.5137 +12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;;
 24.5138 +12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;;
 24.5139 +12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;;
 24.5140 +1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
 24.5141 +1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;;
 24.5142 +1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;;
 24.5143 +1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;;
 24.5144 +1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;;
 24.5145 +1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;;
 24.5146 +12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;;
 24.5147 +12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;;
 24.5148 +12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;;
 24.5149 +12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;;
 24.5150 +12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;;
 24.5151 +12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;;
 24.5152 +12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;;
 24.5153 +12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;;
 24.5154 +12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;;
 24.5155 +12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;;
 24.5156 +1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;;
 24.5157 +1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5158 +1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;;
 24.5159 +1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;;
 24.5160 +1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;;
 24.5161 +1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;;
 24.5162 +12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;;
 24.5163 +12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5164 +12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;;
 24.5165 +12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;;
 24.5166 +12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;;
 24.5167 +12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;;
 24.5168 +12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;;
 24.5169 +12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;;
 24.5170 +12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;;
 24.5171 +12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5172 +1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
 24.5173 +1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;;
 24.5174 +1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;;
 24.5175 +1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;;
 24.5176 +1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;;
 24.5177 +1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;;
 24.5178 +12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;;
 24.5179 +12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;;
 24.5180 +12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;;
 24.5181 +12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;;
 24.5182 +12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;;
 24.5183 +12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;;
 24.5184 +12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.5185 +12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;;
 24.5186 +12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5187 +12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;;
 24.5188 +1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;;
 24.5189 +1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;;
 24.5190 +1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;;
 24.5191 +1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
 24.5192 +1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
 24.5193 +1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;;
 24.5194 +121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;;
 24.5195 +121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5196 +121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;;
 24.5197 +121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5198 +121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;;
 24.5199 +121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;;
 24.5200 +121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;;
 24.5201 +121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;;
 24.5202 +121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;;
 24.5203 +121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;;
 24.5204 +121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;;
 24.5205 +121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
 24.5206 +121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;;
 24.5207 +121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;;
 24.5208 +121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;;
 24.5209 +121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;;
 24.5210 +121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;;
 24.5211 +121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;;
 24.5212 +121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;;
 24.5213 +121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;;
 24.5214 +121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;;
 24.5215 +121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;;
 24.5216 +121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;;
 24.5217 +121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;;
 24.5218 +121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;;
 24.5219 +121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;;
 24.5220 +121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
 24.5221 +121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;;
 24.5222 +121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
 24.5223 +121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;;
 24.5224 +121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;;
 24.5225 +121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
 24.5226 +121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5227 +121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;;
 24.5228 +121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;;
 24.5229 +121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;;
 24.5230 +121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;;
 24.5231 +121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.5232 +121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;;
 24.5233 +121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;;
 24.5234 +121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;;
 24.5235 +121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;;
 24.5236 +121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5237 +121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.5238 +121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;;
 24.5239 +121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;;
 24.5240 +121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;;
 24.5241 +121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;;
 24.5242 +121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;;
 24.5243 +121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;;
 24.5244 +121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;;
 24.5245 +121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;;
 24.5246 +121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
 24.5247 +121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;;
 24.5248 +121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;;
 24.5249 +121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;;
 24.5250 +121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;;
 24.5251 +121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
 24.5252 +121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;;
 24.5253 +121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;;
 24.5254 +121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
 24.5255 +121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;;
 24.5256 +121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;;
 24.5257 +121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;;
 24.5258 +121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;;
 24.5259 +121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;;
 24.5260 +121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;;
 24.5261 +121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.5262 +121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;;
 24.5263 +121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
 24.5264 +121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
 24.5265 +121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
 24.5266 +121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5267 +121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5268 +121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;;
 24.5269 +121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;;
 24.5270 +121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;;
 24.5271 +121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5272 +121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
 24.5273 +121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;;
 24.5274 +121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;;
 24.5275 +121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;;
 24.5276 +121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;;
 24.5277 +121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
 24.5278 +121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;;
 24.5279 +121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.5280 +121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;;
 24.5281 +121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;;
 24.5282 +121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;;
 24.5283 +121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;;
 24.5284 +121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;;
 24.5285 +121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;;
 24.5286 +121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5287 +121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;;
 24.5288 +121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;;
 24.5289 +121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5290 +12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;;
 24.5291 +12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;;
 24.5292 +12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5293 +12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5294 +12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;;
 24.5295 +12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;;
 24.5296 +12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
 24.5297 +12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5298 +12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;;
 24.5299 +12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5300 +1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;;
 24.5301 +1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
 24.5302 +1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;;
 24.5303 +1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;;
 24.5304 +1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5305 +1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;;
 24.5306 +12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;;
 24.5307 +12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;;
 24.5308 +12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;;
 24.5309 +12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;;
 24.5310 +12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;;
 24.5311 +12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;;
 24.5312 +12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;;
 24.5313 +12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;;
 24.5314 +12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;;
 24.5315 +12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;;
 24.5316 +1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;;
 24.5317 +1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;;
 24.5318 +1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;;
 24.5319 +1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;;
 24.5320 +1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;;
 24.5321 +1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;;
 24.5322 +12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;;
 24.5323 +12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.5324 +12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;;
 24.5325 +12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;;
 24.5326 +12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;;
 24.5327 +12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;;
 24.5328 +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;;
 24.5329 +12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;;
 24.5330 +12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;;
 24.5331 +12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;;
 24.5332 +1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;;
 24.5333 +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;;
 24.5334 +1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;;
 24.5335 +1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;;
 24.5336 +1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;;
 24.5337 +1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;;
 24.5338 +12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;;
 24.5339 +12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;;
 24.5340 +12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;;
 24.5341 +12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;;
 24.5342 +12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.5343 +12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;;
 24.5344 +12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;;
 24.5345 +12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
 24.5346 +12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;;
 24.5347 +12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;;
 24.5348 +1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;;
 24.5349 +1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;;
 24.5350 +1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;;
 24.5351 +1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;;
 24.5352 +1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;;
 24.5353 +1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;;
 24.5354 +12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;;
 24.5355 +12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;;
 24.5356 +12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;;
 24.5357 +12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;;
 24.5358 +12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;;
 24.5359 +12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;;
 24.5360 +12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;;
 24.5361 +12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;;
 24.5362 +12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;;
 24.5363 +12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;;
 24.5364 +1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5365 +1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;;
 24.5366 +1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;;
 24.5367 +1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;;
 24.5368 +1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;;
 24.5369 +1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;;
 24.5370 +12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5371 +12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5372 +12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;;
 24.5373 +12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;;
 24.5374 +12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
 24.5375 +12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5376 +12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;;
 24.5377 +12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5378 +12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;;
 24.5379 +12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5380 +1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5381 +1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;;
 24.5382 +1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5383 +1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5384 +1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5385 +1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;;
 24.5386 +12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;;
 24.5387 +12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;;
 24.5388 +12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;;
 24.5389 +12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;;
 24.5390 +12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.5391 +12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;;
 24.5392 +12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
 24.5393 +12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
 24.5394 +12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;;
 24.5395 +12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;;
 24.5396 +1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;;
 24.5397 +1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;;
 24.5398 +1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;;
 24.5399 +1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;;
 24.5400 +1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
 24.5401 +1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;;
 24.5402 +12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;;
 24.5403 +12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;;
 24.5404 +12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.5405 +12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
 24.5406 +12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;;
 24.5407 +12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;;
 24.5408 +12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;;
 24.5409 +12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;;
 24.5410 +12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
 24.5411 +12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;;
 24.5412 +1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;;
 24.5413 +1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;;
 24.5414 +1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;;
 24.5415 +1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;;
 24.5416 +1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;;
 24.5417 +1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;;
 24.5418 +12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;;
 24.5419 +12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;;
 24.5420 +12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;;
 24.5421 +12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;;
 24.5422 +12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;;
 24.5423 +12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;;
 24.5424 +12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;;
 24.5425 +12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;;
 24.5426 +12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;;
 24.5427 +12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;;
 24.5428 +1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;;
 24.5429 +1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;;
 24.5430 +1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5431 +1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;;
 24.5432 +1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;;
 24.5433 +1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;;
 24.5434 +12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;;
 24.5435 +12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;;
 24.5436 +12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;;
 24.5437 +12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;;
 24.5438 +12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;;
 24.5439 +12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;;
 24.5440 +12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;;
 24.5441 +12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;;
 24.5442 +12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;;
 24.5443 +12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;;
 24.5444 +1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;;
 24.5445 +1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.5446 +1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;;
 24.5447 +1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;;
 24.5448 +1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5449 +1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;;
 24.5450 +122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;;
 24.5451 +122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;;
 24.5452 +122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;;
 24.5453 +122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;;
 24.5454 +122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;;
 24.5455 +122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;;
 24.5456 +122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;;
 24.5457 +122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;;
 24.5458 +122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;;
 24.5459 +122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;;
 24.5460 +122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;;
 24.5461 +122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;;
 24.5462 +122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;;
 24.5463 +122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;;
 24.5464 +122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;;
 24.5465 +122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;;
 24.5466 +122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5467 +122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;;
 24.5468 +122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;;
 24.5469 +122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;;
 24.5470 +122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;;
 24.5471 +122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;;
 24.5472 +122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
 24.5473 +122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;;
 24.5474 +122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;;
 24.5475 +122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;;
 24.5476 +122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;;
 24.5477 +122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;;
 24.5478 +122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
 24.5479 +122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;;
 24.5480 +122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;;
 24.5481 +122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;;
 24.5482 +122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;;
 24.5483 +122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;;
 24.5484 +122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;;
 24.5485 +122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;;
 24.5486 +122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;;
 24.5487 +122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;;
 24.5488 +122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;;
 24.5489 +122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;;
 24.5490 +122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;;
 24.5491 +122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;;
 24.5492 +122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;;
 24.5493 +122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.5494 +122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;;
 24.5495 +122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
 24.5496 +122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
 24.5497 +122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;;
 24.5498 +122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;;
 24.5499 +122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;;
 24.5500 +122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;;
 24.5501 +122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;;
 24.5502 +122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;;
 24.5503 +122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;;
 24.5504 +122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;;
 24.5505 +122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;;
 24.5506 +122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;;
 24.5507 +122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;;
 24.5508 +122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;;
 24.5509 +122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;;
 24.5510 +122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;;
 24.5511 +122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;;
 24.5512 +122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;;
 24.5513 +122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;;
 24.5514 +122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;;
 24.5515 +122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;;
 24.5516 +122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;;
 24.5517 +122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;;
 24.5518 +122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;;
 24.5519 +122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;;
 24.5520 +122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;;
 24.5521 +122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;;
 24.5522 +122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;;
 24.5523 +122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;;
 24.5524 +122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;;
 24.5525 +122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;;
 24.5526 +122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;;
 24.5527 +122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;;
 24.5528 +122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;;
 24.5529 +122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;;
 24.5530 +122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;;
 24.5531 +122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;;
 24.5532 +122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;;
 24.5533 +122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;;
 24.5534 +122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;;
 24.5535 +122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;;
 24.5536 +122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5537 +122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;;
 24.5538 +122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;;
 24.5539 +122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5540 +122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;;
 24.5541 +122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;;
 24.5542 +122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;;
 24.5543 +122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;;
 24.5544 +122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;;
 24.5545 +122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;;
 24.5546 +12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;;
 24.5547 +12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;;
 24.5548 +12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.5549 +12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;;
 24.5550 +12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
 24.5551 +12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;;
 24.5552 +12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;;
 24.5553 +12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;;
 24.5554 +12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;;
 24.5555 +12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;;
 24.5556 +1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;;
 24.5557 +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;;
 24.5558 +1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;;
 24.5559 +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;;
 24.5560 +1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;;
 24.5561 +1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;;
 24.5562 +12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;;
 24.5563 +12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;;
 24.5564 +12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;;
 24.5565 +12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;;
 24.5566 +12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;;
 24.5567 +12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5568 +12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;;
 24.5569 +12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
 24.5570 +12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;;
 24.5571 +12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;;
 24.5572 +1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;;
 24.5573 +1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;
 24.5574 +1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;;
 24.5575 +1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;;
 24.5576 +1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;;
 24.5577 +1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;;
 24.5578 +12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;;
 24.5579 +12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;;
 24.5580 +12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;;
 24.5581 +12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;;
 24.5582 +12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;;
 24.5583 +12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
 24.5584 +12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;;
 24.5585 +12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;;
 24.5586 +12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;;
 24.5587 +12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;;
 24.5588 +1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;;
 24.5589 +1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;;
 24.5590 +1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
 24.5591 +1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
 24.5592 +1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;;
 24.5593 +1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;;
 24.5594 +12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;;
 24.5595 +12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;;
 24.5596 +12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
 24.5597 +12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;;
 24.5598 +12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;;
 24.5599 +12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;;
 24.5600 +12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;;
 24.5601 +12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;;
 24.5602 +12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;;
 24.5603 +12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
 24.5604 +1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;;
 24.5605 +1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;;
 24.5606 +1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;;
 24.5607 +1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;;
 24.5608 +1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
 24.5609 +1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;;
 24.5610 +12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;;
 24.5611 +12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;;
 24.5612 +12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;;
 24.5613 +12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;;
 24.5614 +12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;;
 24.5615 +12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;;
 24.5616 +12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;;
 24.5617 +12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;;
 24.5618 +12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;;
 24.5619 +12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;;
 24.5620 +1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;;
 24.5621 +1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;;
 24.5622 +1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;;
 24.5623 +1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;;
 24.5624 +1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;;
 24.5625 +1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;;
 24.5626 +12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;;
 24.5627 +12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;;
 24.5628 +12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;;
 24.5629 +12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;;
 24.5630 +12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.5631 +12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;;
 24.5632 +12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;;
 24.5633 +12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;;
 24.5634 +12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;;
 24.5635 +12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;;
 24.5636 +1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;;
 24.5637 +1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
 24.5638 +1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;;
 24.5639 +1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;;
 24.5640 +1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;;
 24.5641 +1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;;
 24.5642 +12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;;
 24.5643 +12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;;
 24.5644 +12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;;
 24.5645 +12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;;
 24.5646 +12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;;
 24.5647 +12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;;
 24.5648 +12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;;
 24.5649 +12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;;
 24.5650 +12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;;
 24.5651 +12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;;
 24.5652 +1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;;
 24.5653 +1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;;
 24.5654 +1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;;
 24.5655 +1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;;
 24.5656 +1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;;
 24.5657 +12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;
 24.5658 +12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;
 24.5659 +12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;
 24.5660 +12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;;
 24.5661 +12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;;
 24.5662 +12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;;
 24.5663 +12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;;
 24.5664 +12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;;
 24.5665 +12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;;
 24.5666 +12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;;
 24.5667 +1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;;
 24.5668 +1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;;
 24.5669 +1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;;
 24.5670 +1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;;
 24.5671 +1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;;
 24.5672 +1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;;
 24.5673 +12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;;
 24.5674 +12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;;
 24.5675 +12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;;
 24.5676 +12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;;
 24.5677 +12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;;
 24.5678 +12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;;
 24.5679 +12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;;
 24.5680 +12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;;
 24.5681 +12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;;
 24.5682 +12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;;
 24.5683 +1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;;
 24.5684 +1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;;
 24.5685 +1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;;
 24.5686 +1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;;
 24.5687 +1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;;
 24.5688 +1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;;
 24.5689 +12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;;
 24.5690 +12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;;
 24.5691 +12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;;
 24.5692 +12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;;
 24.5693 +12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;;
 24.5694 +12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;;
 24.5695 +12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;;
 24.5696 +12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;;
 24.5697 +12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;;
 24.5698 +12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;;
 24.5699 +1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;;
 24.5700 +1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;;
 24.5701 +1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;;
 24.5702 +1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;;
 24.5703 +1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;;
 24.5704 +1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
 24.5705 +12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;;
 24.5706 +12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;;
 24.5707 +12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;;
 24.5708 +12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;;
 24.5709 +12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;;
 24.5710 +12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;;
 24.5711 +12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;;
 24.5712 +12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
 24.5713 +12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;;
 24.5714 +12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;;
 24.5715 +1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;;
 24.5716 +1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;;
 24.5717 +1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;;
 24.5718 +1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;;
 24.5719 +1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;;
 24.5720 +1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;;
 24.5721 +12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;;
 24.5722 +12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;;
 24.5723 +12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;;
 24.5724 +12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;;
 24.5725 +12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;;
 24.5726 +12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;;
 24.5727 +12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;;
 24.5728 +12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;;
 24.5729 +12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;;
 24.5730 +12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;;
 24.5731 +1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;;
 24.5732 +1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;;
 24.5733 +1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;;
 24.5734 +1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;;
 24.5735 +1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;;
 24.5736 +1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;;
 24.5737 +12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;;
 24.5738 +12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;;
 24.5739 +12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;;
 24.5740 +12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;;
 24.5741 +12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;;
 24.5742 +12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;;
 24.5743 +12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;;
 24.5744 +12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;;
 24.5745 +12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;;
 24.5746 +12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;;
 24.5747 +1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;;
 24.5748 +1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;;
 24.5749 +1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;;
 24.5750 +1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;;
 24.5751 +1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;;
 24.5752 +1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;;
 24.5753 +12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;;
 24.5754 +12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;;
 24.5755 +12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;;
 24.5756 +12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
 24.5757 +12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;;
 24.5758 +12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;
 24.5759 +12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;
 24.5760  1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
 24.5761  1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
 24.5762  1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
 24.5763 @@ -12954,6 +16953,7 @@
 24.5764  1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
 24.5765  1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
 24.5766  1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
 24.5767 +1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;;
 24.5768  1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
 24.5769  1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
 24.5770  1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
 24.5771 @@ -13134,12 +17134,82 @@
 24.5772  1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
 24.5773  1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
 24.5774  1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
 24.5775 -1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
 24.5776 -1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
 24.5777 -1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
 24.5778 -1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;;
 24.5779 -1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;;
 24.5780 -1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
 24.5781 +1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
 24.5782 +1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
 24.5783 +1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
 24.5784 +1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
 24.5785 +1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
 24.5786 +1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
 24.5787 +1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
 24.5788 +1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
 24.5789 +1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
 24.5790 +1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
 24.5791 +1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
 24.5792 +1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
 24.5793 +1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
 24.5794 +1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
 24.5795 +1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
 24.5796 +1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
 24.5797 +1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
 24.5798 +1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
 24.5799 +1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
 24.5800 +1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
 24.5801 +1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
 24.5802 +1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
 24.5803 +1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
 24.5804 +1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
 24.5805 +1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
 24.5806 +1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
 24.5807 +1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
 24.5808 +1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
 24.5809 +1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
 24.5810 +1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
 24.5811 +1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
 24.5812 +1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
 24.5813 +1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
 24.5814 +1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
 24.5815 +1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
 24.5816 +1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
 24.5817 +1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
 24.5818 +1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
 24.5819 +1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
 24.5820 +1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
 24.5821 +1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
 24.5822 +1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
 24.5823 +1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
 24.5824 +1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
 24.5825 +1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
 24.5826 +1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
 24.5827 +1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
 24.5828 +1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
 24.5829 +1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
 24.5830 +1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
 24.5831 +1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
 24.5832 +1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
 24.5833 +1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
 24.5834 +1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
 24.5835 +1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
 24.5836 +1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
 24.5837 +1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
 24.5838 +1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
 24.5839 +1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
 24.5840 +1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
 24.5841 +1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
 24.5842 +1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
 24.5843 +1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
 24.5844 +1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
 24.5845 +1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
 24.5846 +1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
 24.5847 +1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
 24.5848 +1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
 24.5849 +1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
 24.5850 +1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
 24.5851 +1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;;
 24.5852 +1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;;
 24.5853 +1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;;
 24.5854 +1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;;
 24.5855 +1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;;
 24.5856 +1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;;
 24.5857  1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
 24.5858  1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
 24.5859  1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
 24.5860 @@ -13221,6 +17291,24 @@
 24.5861  1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
 24.5862  1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
 24.5863  1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
 24.5864 +1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;;
 24.5865 +1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;;
 24.5866 +1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;;
 24.5867 +1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;;
 24.5868 +1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;;
 24.5869 +1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;;
 24.5870 +1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;;
 24.5871 +1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;;
 24.5872 +1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;;
 24.5873 +1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;;
 24.5874 +1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;;
 24.5875 +1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;;
 24.5876 +1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;;
 24.5877 +1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;;
 24.5878 +1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;;
 24.5879 +1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
 24.5880 +1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
 24.5881 +1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
 24.5882  1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
 24.5883  1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
 24.5884  1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
 24.5885 @@ -13873,6 +17961,8 @@
 24.5886  1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
 24.5887  1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
 24.5888  1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
 24.5889 +1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
 24.5890 +1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
 24.5891  1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
 24.5892  1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
 24.5893  1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
 24.5894 @@ -13924,7 +18014,7 @@
 24.5895  1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
 24.5896  1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
 24.5897  1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
 24.5898 -1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
 24.5899 +1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
 24.5900  1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
 24.5901  1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
 24.5902  1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
 24.5903 @@ -13982,7 +18072,7 @@
 24.5904  1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
 24.5905  1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
 24.5906  1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
 24.5907 -1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
 24.5908 +1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
 24.5909  1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
 24.5910  1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
 24.5911  1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
 24.5912 @@ -14040,7 +18130,7 @@
 24.5913  1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
 24.5914  1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
 24.5915  1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
 24.5916 -1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
 24.5917 +1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
 24.5918  1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
 24.5919  1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
 24.5920  1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
 24.5921 @@ -14098,7 +18188,7 @@
 24.5922  1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
 24.5923  1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
 24.5924  1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
 24.5925 -1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
 24.5926 +1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
 24.5927  1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
 24.5928  1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
 24.5929  1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
 24.5930 @@ -14156,13 +18246,15 @@
 24.5931  1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
 24.5932  1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
 24.5933  1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
 24.5934 -1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
 24.5935 +1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
 24.5936  1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
 24.5937  1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
 24.5938  1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
 24.5939  1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
 24.5940  1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
 24.5941  1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
 24.5942 +1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;;
 24.5943 +1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;;
 24.5944  1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
 24.5945  1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
 24.5946  1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
 24.5947 @@ -14213,6 +18305,150 @@
 24.5948  1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
 24.5949  1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
 24.5950  1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
 24.5951 +1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;;
 24.5952 +1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;;
 24.5953 +1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;;
 24.5954 +1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;;
 24.5955 +1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;;
 24.5956 +1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;;
 24.5957 +1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;;
 24.5958 +1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5959 +1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5960 +1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5961 +1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5962 +1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5963 +1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5964 +1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5965 +1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5966 +1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;;
 24.5967 +1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5968 +1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5969 +1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5970 +1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5971 +1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5972 +1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5973 +1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5974 +1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5975 +1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;;
 24.5976 +1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5977 +1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5978 +1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5979 +1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5980 +1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5981 +1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5982 +1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5983 +1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5984 +1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;;
 24.5985 +1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;;
 24.5986 +1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;;
 24.5987 +1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;;
 24.5988 +1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;;
 24.5989 +1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;;
 24.5990 +1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;;
 24.5991 +1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;;
 24.5992 +1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;;
 24.5993 +1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;;
 24.5994 +1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;;
 24.5995 +1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;;
 24.5996 +1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;;
 24.5997 +1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;;
 24.5998 +1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;;
 24.5999 +1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;;
 24.6000 +1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;;
 24.6001 +1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;;
 24.6002 +1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;;
 24.6003 +1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;;
 24.6004 +1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;;
 24.6005 +1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;;
 24.6006 +1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;;
 24.6007 +1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;;
 24.6008 +1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;;
 24.6009 +1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;;
 24.6010 +1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;;
 24.6011 +1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;;
 24.6012 +1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;;
 24.6013 +1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;;
 24.6014 +1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;;
 24.6015 +1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;;
 24.6016 +1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;;
 24.6017 +1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;;
 24.6018 +1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;;
 24.6019 +1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;;
 24.6020 +1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;;
 24.6021 +1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;;
 24.6022 +1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;;
 24.6023 +1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;;
 24.6024 +1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;;
 24.6025 +1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;;
 24.6026 +1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;;
 24.6027 +1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;;
 24.6028 +1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;;
 24.6029 +1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;;
 24.6030 +1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;;
 24.6031 +1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;;
 24.6032 +1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;;
 24.6033 +1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;;
 24.6034 +1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;;
 24.6035 +1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;;
 24.6036 +1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;;
 24.6037 +1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;;
 24.6038 +1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;;
 24.6039 +1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;;
 24.6040 +1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;;
 24.6041 +1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;;
 24.6042 +1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;;
 24.6043 +1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;;
 24.6044 +1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;;
 24.6045 +1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;;
 24.6046 +1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;;
 24.6047 +1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;;
 24.6048 +1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;;
 24.6049 +1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;;
 24.6050 +1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;;
 24.6051 +1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;;
 24.6052 +1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;;
 24.6053 +1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;;
 24.6054 +1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;;
 24.6055 +1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;;
 24.6056 +1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;;
 24.6057 +1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;;
 24.6058 +1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;;
 24.6059 +1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;;
 24.6060 +1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;;
 24.6061 +1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;;
 24.6062 +1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;;
 24.6063 +1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;;
 24.6064 +1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;;
 24.6065 +1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;;
 24.6066 +1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;;
 24.6067 +1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;;
 24.6068 +1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;;
 24.6069 +1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;;
 24.6070 +1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;;
 24.6071 +1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;;
 24.6072 +1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;;
 24.6073 +1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;;
 24.6074 +1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;;
 24.6075 +1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;;
 24.6076 +1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;;
 24.6077 +1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;;
 24.6078 +1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;;
 24.6079 +1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;;
 24.6080 +1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;;
 24.6081 +1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;;
 24.6082 +1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;;
 24.6083 +1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;;
 24.6084 +1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;;
 24.6085 +1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;;
 24.6086 +1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;;
 24.6087 +1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;;
 24.6088 +1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;;
 24.6089 +1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;;
 24.6090 +1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;;
 24.6091 +1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;;
 24.6092 +1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;;
 24.6093 +1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;;
 24.6094 +1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;;
 24.6095  20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
 24.6096  2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
 24.6097  2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
 24.6098 @@ -14359,7 +18595,7 @@
 24.6099  2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
 24.6100  2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
 24.6101  2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
 24.6102 -2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;;N;;;;;
 24.6103 +2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;;
 24.6104  2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
 24.6105  2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
 24.6106  2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/make/tools/UnicodeData/VERSION	Thu Apr 16 19:10:32 2009 -0700
    25.3 @@ -0,0 +1,1 @@
    25.4 +5.1.0
    26.1 --- a/src/share/classes/com/sun/awt/AWTUtilities.java	Thu Apr 16 17:42:00 2009 +0100
    26.2 +++ b/src/share/classes/com/sun/awt/AWTUtilities.java	Thu Apr 16 19:10:32 2009 -0700
    26.3 @@ -1,5 +1,5 @@
    26.4  /*
    26.5 - * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
    26.6 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
    26.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    26.8   *
    26.9   * This code is free software; you can redistribute it and/or modify it
   26.10 @@ -26,17 +26,37 @@
   26.11  package com.sun.awt;
   26.12  
   26.13  import java.awt.*;
   26.14 +
   26.15  import sun.awt.AWTAccessor;
   26.16 -
   26.17 +import sun.awt.SunToolkit;
   26.18  
   26.19  /**
   26.20   * A collection of utility methods for AWT.
   26.21   *
   26.22   * The functionality provided by the static methods of the class includes:
   26.23   * <ul>
   26.24 + * <li>Setting shapes on top-level windows
   26.25 + * <li>Setting a constant alpha value for each pixel of a top-level window
   26.26 + * <li>Making a window non-opaque, after that it paints only explicitly
   26.27 + * painted pixels on the screen, with arbitrary alpha values for every pixel.
   26.28   * <li>Setting a 'mixing-cutout' shape for a component.
   26.29   * </ul>
   26.30   * <p>
   26.31 + * A "top-level window" is an instance of the {@code Window} class (or its
   26.32 + * descendant, such as {@code JFrame}).
   26.33 + * <p>
   26.34 + * Some of the mentioned features may not be supported by the native platform.
   26.35 + * To determine whether a particular feature is supported, the user must use
   26.36 + * the {@code isTranslucencySupported()} method of the class passing a desired
   26.37 + * translucency kind (a member of the {@code Translucency} enum) as an
   26.38 + * argument.
   26.39 + * <p>
   26.40 + * The per-pixel alpha feature also requires the user to create her/his
   26.41 + * windows using a translucency-capable graphics configuration.
   26.42 + * The {@code isTranslucencyCapable()} method must
   26.43 + * be used to verify whether any given GraphicsConfiguration supports
   26.44 + * the trasnlcency effects.
   26.45 + * <p>
   26.46   * <b>WARNING</b>: This class is an implementation detail and only meant
   26.47   * for limited use outside of the core platform. This API may change
   26.48   * drastically between update release, and it may even be
   26.49 @@ -50,6 +70,344 @@
   26.50      private AWTUtilities() {
   26.51      }
   26.52  
   26.53 +    /** Kinds of translucency supported by the underlying system.
   26.54 +     *  @see #isTranslucencySupported
   26.55 +     */
   26.56 +    public static enum Translucency {
   26.57 +        /**
   26.58 +         * Represents support in the underlying system for windows each pixel
   26.59 +         * of which is guaranteed to be either completely opaque, with
   26.60 +         * an alpha value of 1.0, or completely transparent, with an alpha
   26.61 +         * value of 0.0.
   26.62 +         */
   26.63 +        PERPIXEL_TRANSPARENT,
   26.64 +
   26.65 +        /**
   26.66 +         * Represents support in the underlying system for windows all of
   26.67 +         * the pixels of which have the same alpha value between or including
   26.68 +         * 0.0 and 1.0.
   26.69 +         */
   26.70 +        TRANSLUCENT,
   26.71 +
   26.72 +        /**
   26.73 +         * Represents support in the underlying system for windows that
   26.74 +         * contain or might contain pixels with arbitrary alpha values
   26.75 +         * between and including 0.0 and 1.0.
   26.76 +         */
   26.77 +        PERPIXEL_TRANSLUCENT;
   26.78 +    }
   26.79 +
   26.80 +
   26.81 +    /**
   26.82 +     * Returns whether the given level of translucency is supported by
   26.83 +     * the underlying system.
   26.84 +     *
   26.85 +     * Note that this method may sometimes return the value
   26.86 +     * indicating that the particular level is supported, but
   26.87 +     * the native windowing system may still not support the
   26.88 +     * given level of translucency (due to the bugs in
   26.89 +     * the windowing system).
   26.90 +     *
   26.91 +     * @param translucencyKind a kind of translucency support
   26.92 +     *                         (either PERPIXEL_TRANSPARENT,
   26.93 +     *                         TRANSLUCENT, or PERPIXEL_TRANSLUCENT)
   26.94 +     * @return whether the given translucency kind is supported
   26.95 +     */
   26.96 +    public static boolean isTranslucencySupported(Translucency translucencyKind) {
   26.97 +        switch (translucencyKind) {
   26.98 +            case PERPIXEL_TRANSPARENT:
   26.99 +                return isWindowShapingSupported();
  26.100 +            case TRANSLUCENT:
  26.101 +                return isWindowOpacitySupported();
  26.102 +            case PERPIXEL_TRANSLUCENT:
  26.103 +                return isWindowTranslucencySupported();
  26.104 +        }
  26.105 +        return false;
  26.106 +    }
  26.107 +
  26.108 +
  26.109 +    /**
  26.110 +     * Returns whether the windowing system supports changing the opacity
  26.111 +     * value of top-level windows.
  26.112 +     * Note that this method may sometimes return true, but the native
  26.113 +     * windowing system may still not support the concept of
  26.114 +     * translucency (due to the bugs in the windowing system).
  26.115 +     */
  26.116 +    private static boolean isWindowOpacitySupported() {
  26.117 +        Toolkit curToolkit = Toolkit.getDefaultToolkit();
  26.118 +        if (!(curToolkit instanceof SunToolkit)) {
  26.119 +            return false;
  26.120 +        }
  26.121 +        return ((SunToolkit)curToolkit).isWindowOpacitySupported();
  26.122 +    }
  26.123 +
  26.124 +    /**
  26.125 +     * Set the opacity of the window. The opacity is at the range [0..1].
  26.126 +     * Note that setting the opacity level of 0 may or may not disable
  26.127 +     * the mouse event handling on this window. This is
  26.128 +     * a platform-dependent behavior.
  26.129 +     *
  26.130 +     * In order for this method to enable the translucency effect,
  26.131 +     * the isTranslucencySupported() method should indicate that the
  26.132 +     * TRANSLUCENT level of translucency is supported.
  26.133 +     *
  26.134 +     * <p>Also note that the window must not be in the full-screen mode
  26.135 +     * when setting the opacity value &lt; 1.0f. Otherwise
  26.136 +     * the IllegalArgumentException is thrown.
  26.137 +     *
  26.138 +     * @param window the window to set the opacity level to
  26.139 +     * @param opacity the opacity level to set to the window
  26.140 +     * @throws NullPointerException if the window argument is null
  26.141 +     * @throws IllegalArgumentException if the opacity is out of
  26.142 +     *                                  the range [0..1]
  26.143 +     * @throws IllegalArgumentException if the window is in full screen mode,
  26.144 +     *                                  and the opacity is less than 1.0f
  26.145 +     * @throws UnsupportedOperationException if the TRANSLUCENT translucency
  26.146 +     *                                       kind is not supported
  26.147 +     */
  26.148 +    public static void setWindowOpacity(Window window, float opacity) {
  26.149 +        if (window == null) {
  26.150 +            throw new NullPointerException(
  26.151 +                    "The window argument should not be null.");
  26.152 +        }
  26.153 +
  26.154 +        AWTAccessor.getWindowAccessor().setOpacity(window, opacity);
  26.155 +    }
  26.156 +
  26.157 +    /**
  26.158 +     * Get the opacity of the window. If the opacity has not
  26.159 +     * yet being set, this method returns 1.0.
  26.160 +     *
  26.161 +     * @param window the window to get the opacity level from
  26.162 +     * @throws NullPointerException if the window argument is null
  26.163 +     */
  26.164 +    public static float getWindowOpacity(Window window) {
  26.165 +        if (window == null) {
  26.166 +            throw new NullPointerException(
  26.167 +                    "The window argument should not be null.");
  26.168 +        }
  26.169 +
  26.170 +        return AWTAccessor.getWindowAccessor().getOpacity(window);
  26.171 +    }
  26.172 +
  26.173 +    /**
  26.174 +     * Returns whether the windowing system supports changing the shape
  26.175 +     * of top-level windows.
  26.176 +     * Note that this method may sometimes return true, but the native
  26.177 +     * windowing system may still not support the concept of
  26.178 +     * shaping (due to the bugs in the windowing system).
  26.179 +     */
  26.180 +    public static boolean isWindowShapingSupported() {
  26.181 +        Toolkit curToolkit = Toolkit.getDefaultToolkit();
  26.182 +        if (!(curToolkit instanceof SunToolkit)) {
  26.183 +            return false;
  26.184 +        }
  26.185 +        return ((SunToolkit)curToolkit).isWindowShapingSupported();
  26.186 +    }
  26.187 +
  26.188 +    /**
  26.189 +     * Returns an object that implements the Shape interface and represents
  26.190 +     * the shape previously set with the call to the setWindowShape() method.
  26.191 +     * If no shape has been set yet, or the shape has been reset to null,
  26.192 +     * this method returns null.
  26.193 +     *
  26.194 +     * @param window the window to get the shape from
  26.195 +     * @return the current shape of the window
  26.196 +     * @throws NullPointerException if the window argument is null
  26.197 +     */
  26.198 +    public static Shape getWindowShape(Window window) {
  26.199 +        if (window == null) {
  26.200 +            throw new NullPointerException(
  26.201 +                    "The window argument should not be null.");
  26.202 +        }
  26.203 +        return AWTAccessor.getWindowAccessor().getShape(window);
  26.204 +    }
  26.205 +
  26.206 +    /**
  26.207 +     * Sets a shape for the given window.
  26.208 +     * If the shape argument is null, this methods restores
  26.209 +     * the default shape making the window rectangular.
  26.210 +     * <p>Note that in order to set a shape, the window must be undecorated.
  26.211 +     * If the window is decorated, this method ignores the {@code shape}
  26.212 +     * argument and resets the shape to null.
  26.213 +     * <p>Also note that the window must not be in the full-screen mode
  26.214 +     * when setting a non-null shape. Otherwise the IllegalArgumentException
  26.215 +     * is thrown.
  26.216 +     * <p>Depending on the platform, the method may return without
  26.217 +     * effecting the shape of the window if the window has a non-null warning
  26.218 +     * string ({@link Window#getWarningString()}). In this case the passed
  26.219 +     * shape object is ignored.
  26.220 +     *
  26.221 +     * @param window the window to set the shape to
  26.222 +     * @param shape the shape to set to the window
  26.223 +     * @throws NullPointerException if the window argument is null
  26.224 +     * @throws IllegalArgumentException if the window is in full screen mode,
  26.225 +     *                                  and the shape is not null
  26.226 +     * @throws UnsupportedOperationException if the PERPIXEL_TRANSPARENT
  26.227 +     *                                       translucency kind is not supported
  26.228 +     */
  26.229 +    public static void setWindowShape(Window window, Shape shape) {
  26.230 +        if (window == null) {
  26.231 +            throw new NullPointerException(
  26.232 +                    "The window argument should not be null.");
  26.233 +        }
  26.234 +        AWTAccessor.getWindowAccessor().setShape(window, shape);
  26.235 +    }
  26.236 +
  26.237 +    private static boolean isWindowTranslucencySupported() {
  26.238 +        /*
  26.239 +         * Per-pixel alpha is supported if all the conditions are TRUE:
  26.240 +         *    1. The toolkit is a sort of SunToolkit
  26.241 +         *    2. The toolkit supports translucency in general
  26.242 +         *        (isWindowTranslucencySupported())
  26.243 +         *    3. There's at least one translucency-capable
  26.244 +         *        GraphicsConfiguration
  26.245 +         */
  26.246 +
  26.247 +        Toolkit curToolkit = Toolkit.getDefaultToolkit();
  26.248 +        if (!(curToolkit instanceof SunToolkit)) {
  26.249 +            return false;
  26.250 +        }
  26.251 +
  26.252 +        if (!((SunToolkit)curToolkit).isWindowTranslucencySupported()) {
  26.253 +            return false;
  26.254 +        }
  26.255 +
  26.256 +        GraphicsEnvironment env =
  26.257 +            GraphicsEnvironment.getLocalGraphicsEnvironment();
  26.258 +
  26.259 +        // If the default GC supports translucency return true.
  26.260 +        // It is important to optimize the verification this way,
  26.261 +        // see CR 6661196 for more details.
  26.262 +        if (isTranslucencyCapable(env.getDefaultScreenDevice()
  26.263 +                    .getDefaultConfiguration()))
  26.264 +        {
  26.265 +            return true;
  26.266 +        }
  26.267 +
  26.268 +        // ... otherwise iterate through all the GCs.
  26.269 +        GraphicsDevice[] devices = env.getScreenDevices();
  26.270 +
  26.271 +        for (int i = 0; i < devices.length; i++) {
  26.272 +            GraphicsConfiguration[] configs = devices[i].getConfigurations();
  26.273 +            for (int j = 0; j < configs.length; j++) {
  26.274 +                if (isTranslucencyCapable(configs[j])) {
  26.275 +                    return true;
  26.276 +                }
  26.277 +            }
  26.278 +        }
  26.279 +
  26.280 +        return false;
  26.281 +    }
  26.282 +
  26.283 +    /**
  26.284 +     * Enables the per-pixel alpha support for the given window.
  26.285 +     * Once the window becomes non-opaque (the isOpaque is set to false),
  26.286 +     * the drawing sub-system is starting to respect the alpha value of each
  26.287 +     * separate pixel. If a pixel gets painted with alpha color component
  26.288 +     * equal to zero, it becomes visually transparent, if the alpha of the
  26.289 +     * pixel is equal to 255, the pixel is fully opaque. Interim values
  26.290 +     * of the alpha color component make the pixel semi-transparent (i.e.
  26.291 +     * translucent).
  26.292 +     * <p>Note that in order for the window to support the per-pixel alpha
  26.293 +     * mode, the window must be created using the GraphicsConfiguration
  26.294 +     * for which the {@link #isTranslucencyCapable}
  26.295 +     * method returns true.
  26.296 +     * <p>Also note that some native systems enable the per-pixel translucency
  26.297 +     * mode for any window created using the translucency-compatible
  26.298 +     * graphics configuration. However, it is highly recommended to always
  26.299 +     * invoke the setWindowOpaque() method for these windows, at least for
  26.300 +     * the sake of cross-platform compatibility reasons.
  26.301 +     * <p>Also note that the window must not be in the full-screen mode
  26.302 +     * when making it non-opaque. Otherwise the IllegalArgumentException
  26.303 +     * is thrown.
  26.304 +     * <p>If the window is a {@code Frame} or a {@code Dialog}, the window must
  26.305 +     * be undecorated prior to enabling the per-pixel translucency effect (see
  26.306 +     * {@link Frame#setUndecorated()} and/or {@link Dialog#setUndecorated()}).
  26.307 +     * If the window becomes decorated through a subsequent call to the
  26.308 +     * corresponding {@code setUndecorated()} method, the per-pixel
  26.309 +     * translucency effect will be disabled and the opaque property reset to
  26.310 +     * {@code true}.
  26.311 +     * <p>Depending on the platform, the method may return without
  26.312 +     * effecting the opaque property of the window if the window has a non-null
  26.313 +     * warning string ({@link Window#getWarningString()}). In this case
  26.314 +     * the passed 'isOpaque' value is ignored.
  26.315 +     *
  26.316 +     * @param window the window to set the shape to
  26.317 +     * @param isOpaque whether the window must be opaque (true),
  26.318 +     *                 or translucent (false)
  26.319 +     * @throws NullPointerException if the window argument is null
  26.320 +     * @throws IllegalArgumentException if the window uses
  26.321 +     *                                  a GraphicsConfiguration for which the
  26.322 +     *                                  {@code isTranslucencyCapable()}
  26.323 +     *                                  method returns false
  26.324 +     * @throws IllegalArgumentException if the window is in full screen mode,
  26.325 +     *                                  and the isOpaque is false
  26.326 +     * @throws IllegalArgumentException if the window is decorated and the
  26.327 +     * isOpaque argument is {@code false}.
  26.328 +     * @throws UnsupportedOperationException if the PERPIXEL_TRANSLUCENT
  26.329 +     *                                       translucency kind is not supported
  26.330 +     */
  26.331 +    public static void setWindowOpaque(Window window, boolean isOpaque) {
  26.332 +        if (window == null) {
  26.333 +            throw new NullPointerException(
  26.334 +                    "The window argument should not be null.");
  26.335 +        }
  26.336 +        if (!isOpaque && !isTranslucencySupported(Translucency.PERPIXEL_TRANSLUCENT)) {
  26.337 +            throw new UnsupportedOperationException(
  26.338 +                    "The PERPIXEL_TRANSLUCENT translucency kind is not supported");
  26.339 +        }
  26.340 +        AWTAccessor.getWindowAccessor().setOpaque(window, isOpaque);
  26.341 +    }
  26.342 +
  26.343 +    /**
  26.344 +     * Returns whether the window is opaque or translucent.
  26.345 +     *
  26.346 +     * @param window the window to set the shape to
  26.347 +     * @return whether the window is currently opaque (true)
  26.348 +     *         or translucent (false)
  26.349 +     * @throws NullPointerException if the window argument is null
  26.350 +     */
  26.351 +    public static boolean isWindowOpaque(Window window) {
  26.352 +        if (window == null) {
  26.353 +            throw new NullPointerException(
  26.354 +                    "The window argument should not be null.");
  26.355 +        }
  26.356 +
  26.357 +        return AWTAccessor.getWindowAccessor().isOpaque(window);
  26.358 +    }
  26.359 +
  26.360 +    /**
  26.361 +     * Verifies whether a given GraphicsConfiguration supports
  26.362 +     * the PERPIXEL_TRANSLUCENT kind of translucency.
  26.363 +     * All windows that are intended to be used with the {@link #setWindowOpaque}
  26.364 +     * method must be created using a GraphicsConfiguration for which this method
  26.365 +     * returns true.
  26.366 +     * <p>Note that some native systems enable the per-pixel translucency
  26.367 +     * mode for any window created using a translucency-capable
  26.368 +     * graphics configuration. However, it is highly recommended to always
  26.369 +     * invoke the setWindowOpaque() method for these windows, at least
  26.370 +     * for the sake of cross-platform compatibility reasons.
  26.371 +     *
  26.372 +     * @param gc GraphicsConfiguration
  26.373 +     * @throws NullPointerException if the gc argument is null
  26.374 +     * @return whether the given GraphicsConfiguration supports
  26.375 +     *         the translucency effects.
  26.376 +     */
  26.377 +    public static boolean isTranslucencyCapable(GraphicsConfiguration gc) {
  26.378 +        if (gc == null) {
  26.379 +            throw new NullPointerException("The gc argument should not be null");
  26.380 +        }
  26.381 +        /*
  26.382 +        return gc.isTranslucencyCapable();
  26.383 +        */
  26.384 +        Toolkit curToolkit = Toolkit.getDefaultToolkit();
  26.385 +        if (!(curToolkit instanceof SunToolkit)) {
  26.386 +            return false;
  26.387 +        }
  26.388 +        return ((SunToolkit)curToolkit).isTranslucencyCapable(gc);
  26.389 +    }
  26.390 +
  26.391      /**
  26.392       * Sets a 'mixing-cutout' shape for the given component.
  26.393       *
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/src/share/classes/com/sun/awt/SecurityWarning.java	Thu Apr 16 19:10:32 2009 -0700
    27.3 @@ -0,0 +1,169 @@
    27.4 +/*
    27.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
    27.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    27.7 + *
    27.8 + * This code is free software; you can redistribute it and/or modify it
    27.9 + * under the terms of the GNU General Public License version 2 only, as
   27.10 + * published by the Free Software Foundation.  Sun designates this
   27.11 + * particular file as subject to the "Classpath" exception as provided
   27.12 + * by Sun in the LICENSE file that accompanied this code.
   27.13 + *
   27.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
   27.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   27.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   27.17 + * version 2 for more details (a copy is included in the LICENSE file that
   27.18 + * accompanied this code).
   27.19 + *
   27.20 + * You should have received a copy of the GNU General Public License version
   27.21 + * 2 along with this work; if not, write to the Free Software Foundation,
   27.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   27.23 + *
   27.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
   27.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
   27.26 + * have any questions.
   27.27 + */
   27.28 +
   27.29 +package com.sun.awt;
   27.30 +
   27.31 +import java.awt.*;
   27.32 +import java.awt.geom.*;
   27.33 +
   27.34 +import sun.awt.AWTAccessor;
   27.35 +
   27.36 +
   27.37 +/**
   27.38 + * Security Warning control interface.
   27.39 + *
   27.40 + * This class provides a couple of methods that help a developer relocate
   27.41 + * the AWT security warning to an appropriate position relative to the current
   27.42 + * window size. A "top-level window" is an instance of the {@code Window}
   27.43 + * class (or its descendant, such as {@code JFrame}). The security warning
   27.44 + * is applied to all windows created by an untrusted code. All such windows
   27.45 + * have a non-null "warning string" (see {@link Window#getWarningString()}).
   27.46 + * <p>
   27.47 + * <b>WARNING</b>: This class is an implementation detail and only meant
   27.48 + * for limited use outside of the core platform. This API may change
   27.49 + * drastically between update release, and it may even be
   27.50 + * removed or be moved to some other packages or classes.
   27.51 + */
   27.52 +public final class SecurityWarning {
   27.53 +
   27.54 +    /**
   27.55 +     * The SecurityWarning class should not be instantiated
   27.56 +     */
   27.57 +    private SecurityWarning() {
   27.58 +    }
   27.59 +
   27.60 +    /**
   27.61 +     * Gets the size of the security warning.
   27.62 +     *
   27.63 +     * The returned value is not valid until the peer has been created. Before
   27.64 +     * invoking this method a developer must call the {@link Window#pack()},
   27.65 +     * {@link Window#setVisible()}, or some other method that creates the peer.
   27.66 +     *
   27.67 +     * @param window the window to get the security warning size for
   27.68 +     *
   27.69 +     * @throws NullPointerException if the window argument is null
   27.70 +     * @throws IllegalArgumentException if the window is trusted (i.e.
   27.71 +     * the {@code getWarningString()} returns null)
   27.72 +     */
   27.73 +    public static Dimension getSize(Window window) {
   27.74 +        if (window == null) {
   27.75 +            throw new NullPointerException(
   27.76 +                    "The window argument should not be null.");
   27.77 +        }
   27.78 +        if (window.getWarningString() == null) {
   27.79 +            throw new IllegalArgumentException(
   27.80 +                    "The window must have a non-null warning string.");
   27.81 +        }
   27.82 +        // We don't check for a non-null peer since it may be destroyed
   27.83 +        // after assigning a valid value to the security warning size.
   27.84 +
   27.85 +        return AWTAccessor.getWindowAccessor().getSecurityWarningSize(window);
   27.86 +    }
   27.87 +
   27.88 +    /**
   27.89 +     * Sets the position of the security warning.
   27.90 +     * <p>
   27.91 +     * The {@code alignmentX} and {@code alignmentY} arguments specify the
   27.92 +     * origin of the coordinate system used to calculate the position of the
   27.93 +     * security warning. The values must be in the range [0.0f...1.0f].  The
   27.94 +     * {@code 0.0f} value represents the left (top) edge of the rectangular
   27.95 +     * bounds of the window. The {@code 1.0f} value represents the right
   27.96 +     * (bottom) edge of the bounds. Whenever the size of the window changes,
   27.97 +     * the origin of the coordinate system gets relocated accordingly. For
   27.98 +     * convenience a developer may use the {@code Component.*_ALIGNMENT}
   27.99 +     * constants to pass predefined values for these arguments.
  27.100 +     * <p>
  27.101 +     * The {@code point} argument specifies the location of the security
  27.102 +     * warning in the coordinate system described above. If both {@code x} and
  27.103 +     * {@code y} coordinates of the point are equal to zero, the warning will
  27.104 +     * be located right in the origin of the coordinate system. On the other
  27.105 +     * hand, if both {@code alignmentX} and {@code alignmentY} are equal to
  27.106 +     * zero (i.e. the origin of the coordinate system is placed at the top-left
  27.107 +     * corner of the window), then the {@code point} argument represents the
  27.108 +     * absolute location of the security warning relative to the location of
  27.109 +     * the window. The "absolute" in this case means that the position of the
  27.110 +     * security warning is not effected by resizing of the window.
  27.111 +     * <p>
  27.112 +     * Note that the security warning managment code guarantees that:
  27.113 +     * <ul>
  27.114 +     * <li>The security warning cannot be located farther than two pixels from
  27.115 +     * the rectangular bounds of the window (see {@link Window#getBounds}), and
  27.116 +     * <li>The security warning is always visible on the screen.
  27.117 +     * </ul>
  27.118 +     * If either of the conditions is violated, the calculated position of the
  27.119 +     * security warning is adjusted by the system to meet both these
  27.120 +     * conditions.
  27.121 +     * <p>
  27.122 +     * The default position of the security warning is in the upper-right
  27.123 +     * corner of the window, two pixels to the right from the right edge. This
  27.124 +     * corresponds to the following arguments passed to this method:
  27.125 +     * <ul>
  27.126 +     * <li>{@code alignmentX = Component.RIGHT_ALIGNMENT}
  27.127 +     * <li>{@code alignmentY = Component.TOP_ALIGNMENT}
  27.128 +     * <li>{@code point = (2, 0)}
  27.129 +     * </ul>
  27.130 +     *
  27.131 +     * @param window the window to set the position of the security warning for
  27.132 +     * @param alignmentX the horizontal origin of the coordinate system
  27.133 +     * @param alignmentY the vertical origin of the coordinate system
  27.134 +     * @param point the position of the security warning in the specified
  27.135 +     * coordinate system
  27.136 +     *
  27.137 +     * @throws NullPointerException if the window argument is null
  27.138 +     * @throws NullPointerException if the point argument is null
  27.139 +     * @throws IllegalArgumentException if the window is trusted (i.e.
  27.140 +     * the {@code getWarningString()} returns null
  27.141 +     * @throws IllegalArgumentException if the alignmentX or alignmentY
  27.142 +     * arguments are not within the range [0.0f ... 1.0f]
  27.143 +     */
  27.144 +    public static void setPosition(Window window, Point2D point,
  27.145 +            float alignmentX, float alignmentY)
  27.146 +    {
  27.147 +        if (window == null) {
  27.148 +            throw new NullPointerException(
  27.149 +                    "The window argument should not be null.");
  27.150 +        }
  27.151 +        if (window.getWarningString() == null) {
  27.152 +            throw new IllegalArgumentException(
  27.153 +                    "The window must have a non-null warning string.");
  27.154 +        }
  27.155 +        if (point == null) {
  27.156 +            throw new NullPointerException(
  27.157 +                    "The point argument must not be null");
  27.158 +        }
  27.159 +        if (alignmentX < 0.0f || alignmentX > 1.0f) {
  27.160 +            throw new IllegalArgumentException(
  27.161 +                    "alignmentX must be in the range [0.0f ... 1.0f].");
  27.162 +        }
  27.163 +        if (alignmentY < 0.0f || alignmentY > 1.0f) {
  27.164 +            throw new IllegalArgumentException(
  27.165 +                    "alignmentY must be in the range [0.0f ... 1.0f].");
  27.166 +        }
  27.167 +
  27.168 +        AWTAccessor.getWindowAccessor().setSecurityWarningPosition(window,
  27.169 +                point, alignmentX, alignmentY);
  27.170 +    }
  27.171 +}
  27.172 +
    28.1 --- a/src/share/classes/com/sun/java/swing/plaf/gtk/GTKIconFactory.java	Thu Apr 16 17:42:00 2009 +0100
    28.2 +++ b/src/share/classes/com/sun/java/swing/plaf/gtk/GTKIconFactory.java	Thu Apr 16 19:10:32 2009 -0700
    28.3 @@ -279,20 +279,22 @@
    28.4  
    28.5          public void paintIcon(SynthContext context, Graphics g, int x, int y,
    28.6                                int w, int h) {
    28.7 -            JToolBar toolbar = (JToolBar)context.getComponent();
    28.8 -            Orientation orientation =
    28.9 -                    (toolbar.getOrientation() == JToolBar.HORIZONTAL ?
   28.10 -                        Orientation.HORIZONTAL : Orientation.VERTICAL);
   28.11 +            if (context != null) {
   28.12 +                JToolBar toolbar = (JToolBar)context.getComponent();
   28.13 +                Orientation orientation =
   28.14 +                        (toolbar.getOrientation() == JToolBar.HORIZONTAL ?
   28.15 +                            Orientation.HORIZONTAL : Orientation.VERTICAL);
   28.16  
   28.17 -            if (style == null) {
   28.18 -                style = SynthLookAndFeel.getStyleFactory().getStyle(
   28.19 -                        context.getComponent(), GTKRegion.HANDLE_BOX);
   28.20 +                if (style == null) {
   28.21 +                    style = SynthLookAndFeel.getStyleFactory().getStyle(
   28.22 +                            context.getComponent(), GTKRegion.HANDLE_BOX);
   28.23 +                }
   28.24 +                context = new SynthContext(toolbar, GTKRegion.HANDLE_BOX,
   28.25 +                        style, SynthConstants.ENABLED);
   28.26 +
   28.27 +                GTKPainter.INSTANCE.paintIcon(context, g,
   28.28 +                        getMethod(), x, y, w, h, orientation);
   28.29              }
   28.30 -            context = new SynthContext(toolbar, GTKRegion.HANDLE_BOX,
   28.31 -                    style, SynthConstants.ENABLED);
   28.32 -
   28.33 -            GTKPainter.INSTANCE.paintIcon(context, g,
   28.34 -                    getMethod(), x, y, w, h, orientation);
   28.35          }
   28.36  
   28.37          public int getIconWidth(SynthContext context) {
   28.38 @@ -336,12 +338,14 @@
   28.39  
   28.40          public void paintIcon(SynthContext context, Graphics g, int x, int y,
   28.41                                int w, int h) {
   28.42 -            ArrowType arrowDir = ArrowType.RIGHT;
   28.43 -            if (!context.getComponent().getComponentOrientation().isLeftToRight()) {
   28.44 -                arrowDir = ArrowType.LEFT;
   28.45 +            if (context != null) {
   28.46 +                ArrowType arrowDir = ArrowType.RIGHT;
   28.47 +                if (!context.getComponent().getComponentOrientation().isLeftToRight()) {
   28.48 +                    arrowDir = ArrowType.LEFT;
   28.49 +                }
   28.50 +                GTKPainter.INSTANCE.paintIcon(context, g,
   28.51 +                        getMethod(), x, y, w, h, arrowDir);
   28.52              }
   28.53 -            GTKPainter.INSTANCE.paintIcon(context, g,
   28.54 -                    getMethod(), x, y, w, h, arrowDir);
   28.55          }
   28.56      }
   28.57  }
    29.1 --- a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java	Thu Apr 16 17:42:00 2009 +0100
    29.2 +++ b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java	Thu Apr 16 19:10:32 2009 -0700
    29.3 @@ -39,6 +39,8 @@
    29.4  import java.io.FileNotFoundException;
    29.5  import java.io.IOException;
    29.6  import java.util.*;
    29.7 +import java.security.AccessController;
    29.8 +import java.security.PrivilegedAction;
    29.9  
   29.10  import sun.awt.shell.ShellFolder;
   29.11  import sun.awt.OSInfo;
   29.12 @@ -1143,7 +1145,11 @@
   29.13  
   29.14              File[] baseFolders;
   29.15              if (useShellFolder) {
   29.16 -                baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");
   29.17 +                baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
   29.18 +                    public File[] run() {
   29.19 +                        return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
   29.20 +                    }
   29.21 +                });
   29.22              } else {
   29.23                  baseFolders = fsv.getRoots();
   29.24              }
    30.1 --- a/src/share/classes/java/awt/AWTKeyStroke.java	Thu Apr 16 17:42:00 2009 +0100
    30.2 +++ b/src/share/classes/java/awt/AWTKeyStroke.java	Thu Apr 16 19:10:32 2009 -0700
    30.3 @@ -1,5 +1,5 @@
    30.4  /*
    30.5 - * Copyright 2000-2006 Sun Microsystems, Inc.  All Rights Reserved.
    30.6 + * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
    30.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    30.8   *
    30.9   * This code is free software; you can redistribute it and/or modify it
   30.10 @@ -329,6 +329,9 @@
   30.11       * <li><code>java.awt.event.KeyEvent.VK_TAB</code>
   30.12       * <li><code>java.awt.event.KeyEvent.VK_SPACE</code>
   30.13       * </ul>
   30.14 +     * Alternatively, the key code may be obtained by calling
   30.15 +     * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
   30.16 +     *
   30.17       * The modifiers consist of any combination of:<ul>
   30.18       * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK
   30.19       * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK
    31.1 --- a/src/share/classes/java/awt/Canvas.java	Thu Apr 16 17:42:00 2009 +0100
    31.2 +++ b/src/share/classes/java/awt/Canvas.java	Thu Apr 16 19:10:32 2009 -0700
    31.3 @@ -25,6 +25,7 @@
    31.4  package java.awt;
    31.5  
    31.6  import java.awt.image.BufferStrategy;
    31.7 +import java.awt.peer.CanvasPeer;
    31.8  import javax.accessibility.*;
    31.9  
   31.10  /**
   31.11 @@ -65,7 +66,17 @@
   31.12       */
   31.13      public Canvas(GraphicsConfiguration config) {
   31.14          this();
   31.15 -        graphicsConfig = config;
   31.16 +        setGraphicsConfiguration(config);
   31.17 +    }
   31.18 +
   31.19 +    @Override
   31.20 +    void setGraphicsConfiguration(GraphicsConfiguration gc) {
   31.21 +        CanvasPeer peer = (CanvasPeer)getPeer();
   31.22 +        if (peer != null) {
   31.23 +            gc = peer.getAppropriateGraphicsConfiguration(gc);
   31.24 +        }
   31.25 +
   31.26 +        super.setGraphicsConfiguration(gc);
   31.27      }
   31.28  
   31.29      /**
    32.1 --- a/src/share/classes/java/awt/Component.java	Thu Apr 16 17:42:00 2009 +0100
    32.2 +++ b/src/share/classes/java/awt/Component.java	Thu Apr 16 19:10:32 2009 -0700
    32.3 @@ -1,5 +1,5 @@
    32.4  /*
    32.5 - * Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
    32.6 + * Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
    32.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    32.8   *
    32.9   * This code is free software; you can redistribute it and/or modify it
   32.10 @@ -300,7 +300,7 @@
   32.11       * @see GraphicsConfiguration
   32.12       * @see #getGraphicsConfiguration
   32.13       */
   32.14 -    transient GraphicsConfiguration graphicsConfig = null;
   32.15 +    private transient GraphicsConfiguration graphicsConfig = null;
   32.16  
   32.17      /**
   32.18       * A reference to a <code>BufferStrategy</code> object
   32.19 @@ -799,8 +799,24 @@
   32.20              }
   32.21      }
   32.22  
   32.23 +    // Whether this Component has had the background erase flag
   32.24 +    // specified via SunToolkit.disableBackgroundErase(). This is
   32.25 +    // needed in order to make this function work on X11 platforms,
   32.26 +    // where currently there is no chance to interpose on the creation
   32.27 +    // of the peer and therefore the call to XSetBackground.
   32.28 +    transient boolean backgroundEraseDisabled;
   32.29 +
   32.30      static {
   32.31          AWTAccessor.setComponentAccessor(new AWTAccessor.ComponentAccessor() {
   32.32 +            public void setBackgroundEraseDisabled(Component comp, boolean disabled) {
   32.33 +                comp.backgroundEraseDisabled = disabled;
   32.34 +            }
   32.35 +            public boolean getBackgroundEraseDisabled(Component comp) {
   32.36 +                return comp.backgroundEraseDisabled;
   32.37 +            }
   32.38 +            public Rectangle getBounds(Component comp) {
   32.39 +                return new Rectangle(comp.x, comp.y, comp.width, comp.height);
   32.40 +            }
   32.41              public void setMixingCutoutShape(Component comp, Shape shape) {
   32.42                  Region region = shape == null ?  null :
   32.43                      Region.getInstance(shape, null);
   32.44 @@ -829,6 +845,22 @@
   32.45                      }
   32.46                  }
   32.47              }
   32.48 +
   32.49 +            public void setGraphicsConfiguration(Component comp,
   32.50 +                    GraphicsConfiguration gc)
   32.51 +            {
   32.52 +                comp.setGraphicsConfiguration(gc);
   32.53 +            }
   32.54 +            public boolean requestFocus(Component comp, CausedFocusEvent.Cause cause) {
   32.55 +                return comp.requestFocus(cause);
   32.56 +            }
   32.57 +            public boolean canBeFocusOwner(Component comp) {
   32.58 +                return comp.canBeFocusOwner();
   32.59 +            }
   32.60 +
   32.61 +            public boolean isVisible_NoClientCode(Component comp) {
   32.62 +                return comp.isVisible_NoClientCode();
   32.63 +            }
   32.64          });
   32.65      }
   32.66  
   32.67 @@ -996,50 +1028,21 @@
   32.68       */
   32.69      public GraphicsConfiguration getGraphicsConfiguration() {
   32.70          synchronized(getTreeLock()) {
   32.71 -            if (graphicsConfig != null) {
   32.72 -                return graphicsConfig;
   32.73 -            } else if (getParent() != null) {
   32.74 -                return getParent().getGraphicsConfiguration();
   32.75 -            } else {
   32.76 -                return null;
   32.77 -            }
   32.78 +            return getGraphicsConfiguration_NoClientCode();
   32.79          }
   32.80      }
   32.81  
   32.82      final GraphicsConfiguration getGraphicsConfiguration_NoClientCode() {
   32.83 -        GraphicsConfiguration graphicsConfig = this.graphicsConfig;
   32.84 -        Container parent = this.parent;
   32.85 -        if (graphicsConfig != null) {
   32.86 -            return graphicsConfig;
   32.87 -        } else if (parent != null) {
   32.88 -            return parent.getGraphicsConfiguration_NoClientCode();
   32.89 -        } else {
   32.90 -            return null;
   32.91 -        }
   32.92 -    }
   32.93 -
   32.94 -    /**
   32.95 -     * Resets this <code>Component</code>'s
   32.96 -     * <code>GraphicsConfiguration</code> back to a default
   32.97 -     * value.  For most componenets, this is <code>null</code>.
   32.98 -     * Called from the Toolkit thread, so NO CLIENT CODE.
   32.99 -     */
  32.100 -    void resetGC() {
  32.101 +        return graphicsConfig;
  32.102 +    }
  32.103 +
  32.104 +    void setGraphicsConfiguration(GraphicsConfiguration gc) {
  32.105          synchronized(getTreeLock()) {
  32.106 -            graphicsConfig = null;
  32.107 -        }
  32.108 -    }
  32.109 -
  32.110 -    /*
  32.111 -     * Not called on Component, but needed for Canvas and Window
  32.112 -     */
  32.113 -    void setGCFromPeer() {
  32.114 -        synchronized(getTreeLock()) {
  32.115 -            if (peer != null) { // can't imagine how this will be false,
  32.116 -                                // but just in case
  32.117 -                graphicsConfig = peer.getGraphicsConfiguration();
  32.118 -            } else {
  32.119 -                graphicsConfig = null;
  32.120 +            graphicsConfig = gc;
  32.121 +
  32.122 +            ComponentPeer peer = getPeer();
  32.123 +            if (peer != null) {
  32.124 +                peer.updateGraphicsData(gc);
  32.125              }
  32.126          }
  32.127      }
  32.128 @@ -6663,23 +6666,7 @@
  32.129  
  32.130  
  32.131              // Update stacking order
  32.132 -            if (parent != null && parent.peer != null) {
  32.133 -                ContainerPeer parentContPeer = (ContainerPeer) parent.peer;
  32.134 -                // if our parent is lightweight and we are not
  32.135 -                // we should call restack on nearest heavyweight
  32.136 -                // container.
  32.137 -                if (parentContPeer instanceof LightweightPeer
  32.138 -                    && ! (peer instanceof LightweightPeer))
  32.139 -                {
  32.140 -                    Container hwParent = getNativeContainer();
  32.141 -                    if (hwParent != null && hwParent.peer != null) {
  32.142 -                        parentContPeer = (ContainerPeer) hwParent.peer;
  32.143 -                    }
  32.144 -                }
  32.145 -                if (parentContPeer.isRestackSupported()) {
  32.146 -                    parentContPeer.restack();
  32.147 -                }
  32.148 -            }
  32.149 +            peer.setZOrder(getHWPeerAboveMe());
  32.150  
  32.151              if (!isAddNotifyComplete) {
  32.152                  mixOnShowing();
  32.153 @@ -7170,8 +7157,8 @@
  32.154          requestFocusHelper(false, true);
  32.155      }
  32.156  
  32.157 -    void requestFocus(CausedFocusEvent.Cause cause) {
  32.158 -        requestFocusHelper(false, true, cause);
  32.159 +    boolean requestFocus(CausedFocusEvent.Cause cause) {
  32.160 +        return requestFocusHelper(false, true, cause);
  32.161      }
  32.162  
  32.163      /**
  32.164 @@ -7456,7 +7443,7 @@
  32.165              // sometimes most recent focus owner may be null, but focus owner is not
  32.166              // e.g. we reset most recent focus owner if user removes focus owner
  32.167              focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
  32.168 -            if (focusOwner != null && getContainingWindow(focusOwner) != window) {
  32.169 +            if (focusOwner != null && focusOwner.getContainingWindow() != window) {
  32.170                  focusOwner = null;
  32.171              }
  32.172          }
  32.173 @@ -8689,30 +8676,8 @@
  32.174       *         null, if component is not a part of window hierarchy
  32.175       */
  32.176      Window getContainingWindow() {
  32.177 -        return getContainingWindow(this);
  32.178 -    }
  32.179 -    /**
  32.180 -     * Returns the <code>Window</code> ancestor of the component <code>comp</code>.
  32.181 -     * @return Window ancestor of the component or component by itself if it is Window;
  32.182 -     *         null, if component is not a part of window hierarchy
  32.183 -     */
  32.184 -    static Window getContainingWindow(Component comp) {
  32.185 -        while (comp != null && !(comp instanceof Window)) {
  32.186 -            comp = comp.getParent();
  32.187 -        }
  32.188 -
  32.189 -        return (Window)comp;
  32.190 -    }
  32.191 -
  32.192 -
  32.193 -
  32.194 -
  32.195 -
  32.196 -
  32.197 -
  32.198 -
  32.199 -
  32.200 -
  32.201 +        return SunToolkit.getContainingWindow(this);
  32.202 +    }
  32.203  
  32.204      /**
  32.205       * Initialize JNI field and method IDs
  32.206 @@ -9575,6 +9540,27 @@
  32.207          return nextAbove < 0 ? -1 : nextAbove;
  32.208      }
  32.209  
  32.210 +    final ComponentPeer getHWPeerAboveMe() {
  32.211 +        checkTreeLock();
  32.212 +
  32.213 +        Container cont = getContainer();
  32.214 +        int indexAbove = getSiblingIndexAbove();
  32.215 +
  32.216 +        while (cont != null) {
  32.217 +            for (int i = indexAbove; i > -1; i--) {
  32.218 +                Component comp = cont.getComponent(i);
  32.219 +                if (comp != null && comp.isDisplayable() && !comp.isLightweight()) {
  32.220 +                    return comp.getPeer();
  32.221 +                }
  32.222 +            }
  32.223 +
  32.224 +            indexAbove = cont.getSiblingIndexAbove();
  32.225 +            cont = cont.getContainer();
  32.226 +        }
  32.227 +
  32.228 +        return null;
  32.229 +    }
  32.230 +
  32.231      final int getSiblingIndexBelow() {
  32.232          checkTreeLock();
  32.233          Container parent = getContainer();
  32.234 @@ -9827,4 +9813,29 @@
  32.235      }
  32.236  
  32.237      // ****************** END OF MIXING CODE ********************************
  32.238 +
  32.239 +    private static boolean doesClassImplement(Class cls, String interfaceName) {
  32.240 +        if (cls == null) return false;
  32.241 +
  32.242 +        for (Class c : cls.getInterfaces()) {
  32.243 +            if (c.getName().equals(interfaceName)) {
  32.244 +                return true;
  32.245 +            }
  32.246 +        }
  32.247 +        return doesClassImplement(cls.getSuperclass(), interfaceName);
  32.248 +    }
  32.249 +
  32.250 +    /**
  32.251 +     * Checks that the given object implements the given interface.
  32.252 +     * @param obj Object to be checked
  32.253 +     * @param interfaceName The name of the interface. Must be fully-qualified interface name.
  32.254 +     * @return true, if this object implements the given interface,
  32.255 +     *         false, otherwise, or if obj or interfaceName is null
  32.256 +     */
  32.257 +    static boolean doesImplement(Object obj, String interfaceName) {
  32.258 +        if (obj == null) return false;
  32.259 +        if (interfaceName == null) return false;
  32.260 +
  32.261 +        return doesClassImplement(obj.getClass(), interfaceName);
  32.262 +    }
  32.263  }
    33.1 --- a/src/share/classes/java/awt/Container.java	Thu Apr 16 17:42:00 2009 +0100
    33.2 +++ b/src/share/classes/java/awt/Container.java	Thu Apr 16 19:10:32 2009 -0700
    33.3 @@ -1,5 +1,5 @@
    33.4  /*
    33.5 - * Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
    33.6 + * Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
    33.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    33.8   *
    33.9   * This code is free software; you can redistribute it and/or modify it
   33.10 @@ -167,6 +167,9 @@
   33.11      transient int listeningBoundsChildren;
   33.12      transient int descendantsCount;
   33.13  
   33.14 +    /* Non-opaque window support -- see Window.setLayersOpaque */
   33.15 +    transient Color preserveBackgroundColor = null;
   33.16 +
   33.17      /**
   33.18       * JDK 1.1 serialVersionUID
   33.19       */
   33.20 @@ -267,9 +270,13 @@
   33.21  
   33.22      /**
   33.23       * Gets the number of components in this panel.
   33.24 +     * <p>
   33.25 +     * Note: This method should be called under AWT tree lock.
   33.26 +     *
   33.27       * @return    the number of components in this panel.
   33.28       * @see       #getComponent
   33.29       * @since     JDK1.1
   33.30 +     * @see Component#getTreeLock()
   33.31       */
   33.32      public int getComponentCount() {
   33.33          return countComponents();
   33.34 @@ -281,43 +288,65 @@
   33.35       */
   33.36      @Deprecated
   33.37      public int countComponents() {
   33.38 -        synchronized (getTreeLock()) {
   33.39 -            return component.size();
   33.40 -        }
   33.41 +        // This method is not synchronized under AWT tree lock.
   33.42 +        // Instead, the calling code is responsible for the
   33.43 +        // synchronization. See 6784816 for details.
   33.44 +        return component.size();
   33.45      }
   33.46  
   33.47      /**
   33.48       * Gets the nth component in this container.
   33.49 +     * <p>
   33.50 +     * Note: This method should be called under AWT tree lock.
   33.51 +     *
   33.52       * @param      n   the index of the component to get.
   33.53       * @return     the n<sup>th</sup> component in this container.
   33.54       * @exception  ArrayIndexOutOfBoundsException
   33.55       *                 if the n<sup>th</sup> value does not exist.
   33.56 +     * @see Component#getTreeLock()
   33.57       */
   33.58      public Component getComponent(int n) {
   33.59 -        synchronized (getTreeLock()) {
   33.60 -            if ((n < 0) || (n >= component.size())) {
   33.61 -                throw new ArrayIndexOutOfBoundsException("No such child: " + n);
   33.62 -            }
   33.63 +        // This method is not synchronized under AWT tree lock.
   33.64 +        // Instead, the calling code is responsible for the
   33.65 +        // synchronization. See 6784816 for details.
   33.66 +        try {
   33.67              return component.get(n);
   33.68 +        } catch (IndexOutOfBoundsException z) {
   33.69 +            throw new ArrayIndexOutOfBoundsException("No such child: " + n);
   33.70          }
   33.71      }
   33.72  
   33.73      /**
   33.74       * Gets all the components in this container.
   33.75 +     * <p>
   33.76 +     * Note: This method should be called under AWT tree lock.
   33.77 +     *
   33.78       * @return    an array of all the components in this container.
   33.79 +     * @see Component#getTreeLock()
   33.80       */
   33.81      public Component[] getComponents() {
   33.82 +        // This method is not synchronized under AWT tree lock.
   33.83 +        // Instead, the calling code is responsible for the
   33.84 +        // synchronization. See 6784816 for details.
   33.85          return getComponents_NoClientCode();
   33.86      }
   33.87 +
   33.88      // NOTE: This method may be called by privileged threads.
   33.89      //       This functionality is implemented in a package-private method
   33.90      //       to insure that it cannot be overridden by client subclasses.
   33.91      //       DO NOT INVOKE CLIENT CODE ON THIS THREAD!
   33.92      final Component[] getComponents_NoClientCode() {
   33.93 +        return component.toArray(EMPTY_ARRAY);
   33.94 +    }
   33.95 +
   33.96 +    /*
   33.97 +     * Wrapper for getComponents() method with a proper synchronization.
   33.98 +     */
   33.99 +    Component[] getComponentsSync() {
  33.100          synchronized (getTreeLock()) {
  33.101 -            return component.toArray(EMPTY_ARRAY);
  33.102 +            return getComponents();
  33.103          }
  33.104 -    } // getComponents_NoClientCode()
  33.105 +    }
  33.106  
  33.107      /**
  33.108       * Determines the insets of this container, which indicate the size
  33.109 @@ -503,6 +532,9 @@
  33.110              adjustDescendants(-(comp.countHierarchyMembers()));
  33.111  
  33.112              comp.parent = null;
  33.113 +            if (needRemoveNotify) {
  33.114 +                comp.setGraphicsConfiguration(null);
  33.115 +            }
  33.116              component.remove(index);
  33.117  
  33.118              invalidateIfValid();
  33.119 @@ -643,10 +675,7 @@
  33.120              // each HW descendant independently.
  33.121              return !comp.peer.isReparentSupported();
  33.122          } else {
  33.123 -            // if container didn't change we still might need to recreate component's window as
  33.124 -            // changes to zorder should be reflected in native window stacking order and it might
  33.125 -            // not be supported by the platform. This is important only for heavyweight child
  33.126 -            return !((ContainerPeer)(newNativeContainer.peer)).isRestackSupported();
  33.127 +            return false;
  33.128          }
  33.129      }
  33.130  
  33.131 @@ -786,6 +815,7 @@
  33.132                  component.add(index, comp);
  33.133              }
  33.134              comp.parent = this;
  33.135 +            comp.setGraphicsConfiguration(getGraphicsConfiguration());
  33.136  
  33.137              adjustListeningChildren(AWTEvent.HIERARCHY_EVENT_MASK,
  33.138                                      comp.numListening(AWTEvent.HIERARCHY_EVENT_MASK));
  33.139 @@ -802,11 +832,6 @@
  33.140          if (peer != null) {
  33.141              if (comp.peer == null) { // Remove notify was called or it didn't have peer - create new one
  33.142                  comp.addNotify();
  33.143 -                // New created peer creates component on top of the stacking order
  33.144 -                Container newNativeContainer = getHeavyweightContainer();
  33.145 -                if (((ContainerPeer)newNativeContainer.getPeer()).isRestackSupported()) {
  33.146 -                    ((ContainerPeer)newNativeContainer.getPeer()).restack();
  33.147 -                }
  33.148              } else { // Both container and child have peers, it means child peer should be reparented.
  33.149                  // In both cases we need to reparent native widgets.
  33.150                  Container newNativeContainer = getHeavyweightContainer();
  33.151 @@ -815,13 +840,8 @@
  33.152                      // Native container changed - need to reparent native widgets
  33.153                      newNativeContainer.reparentChild(comp);
  33.154                  }
  33.155 -                // If component still has a peer and it is either container or heavyweight
  33.156 -                // and restack is supported we have to restack native windows since order might have changed
  33.157 -                if ((!comp.isLightweight() || (comp instanceof Container))
  33.158 -                    && ((ContainerPeer)newNativeContainer.getPeer()).isRestackSupported())
  33.159 -                {
  33.160 -                    ((ContainerPeer)newNativeContainer.getPeer()).restack();
  33.161 -                }
  33.162 +                comp.peer.setZOrder(comp.getHWPeerAboveMe());
  33.163 +
  33.164                  if (!comp.isLightweight() && isLightweight()) {
  33.165                      // If component is heavyweight and one of the containers is lightweight
  33.166                      // the location of the component should be fixed.
  33.167 @@ -1034,9 +1054,9 @@
  33.168              }
  33.169              checkAddToSelf(comp);
  33.170              checkNotAWindow(comp);
  33.171 -        if (thisGC != null) {
  33.172 -            comp.checkGD(thisGC.getDevice().getIDstring());
  33.173 -        }
  33.174 +            if (thisGC != null) {
  33.175 +                comp.checkGD(thisGC.getDevice().getIDstring());
  33.176 +            }
  33.177  
  33.178              /* Reparent the component and tidy up the tree's state. */
  33.179              if (comp.parent != null) {
  33.180 @@ -1053,6 +1073,7 @@
  33.181                  component.add(index, comp);
  33.182              }
  33.183              comp.parent = this;
  33.184 +            comp.setGraphicsConfiguration(thisGC);
  33.185  
  33.186              adjustListeningChildren(AWTEvent.HIERARCHY_EVENT_MASK,
  33.187                  comp.numListening(AWTEvent.HIERARCHY_EVENT_MASK));
  33.188 @@ -1091,6 +1112,19 @@
  33.189          }
  33.190      }
  33.191  
  33.192 +    @Override
  33.193 +    void setGraphicsConfiguration(GraphicsConfiguration gc) {
  33.194 +        synchronized (getTreeLock()) {
  33.195 +            super.setGraphicsConfiguration(gc);
  33.196 +
  33.197 +            for (Component comp : component) {
  33.198 +                if (comp != null) {
  33.199 +                    comp.setGraphicsConfiguration(gc);
  33.200 +                }
  33.201 +            }
  33.202 +        }
  33.203 +    }
  33.204 +
  33.205      /**
  33.206       * Checks that all Components that this Container contains are on
  33.207       * the same GraphicsDevice as this Container.  If not, throws an
  33.208 @@ -1148,6 +1182,7 @@
  33.209  
  33.210              comp.parent = null;
  33.211              component.remove(index);
  33.212 +            comp.setGraphicsConfiguration(null);
  33.213  
  33.214              invalidateIfValid();
  33.215              if (containerListener != null ||
  33.216 @@ -1224,6 +1259,7 @@
  33.217                      layoutMgr.removeLayoutComponent(comp);
  33.218                  }
  33.219                  comp.parent = null;
  33.220 +                comp.setGraphicsConfiguration(null);
  33.221                  if (containerListener != null ||
  33.222                     (eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0 ||
  33.223                      Toolkit.enabledOnToolkit(AWTEvent.CONTAINER_EVENT_MASK)) {
  33.224 @@ -1339,7 +1375,7 @@
  33.225      }
  33.226  
  33.227      private int getListenersCount(int id, boolean enabledOnToolkit) {
  33.228 -        assert Thread.holdsLock(getTreeLock());
  33.229 +        checkTreeLock();
  33.230          if (enabledOnToolkit) {
  33.231              return descendantsCount;
  33.232          }
  33.233 @@ -1357,7 +1393,7 @@
  33.234      final int createHierarchyEvents(int id, Component changed,
  33.235          Container changedParent, long changeFlags, boolean enabledOnToolkit)
  33.236      {
  33.237 -        assert Thread.holdsLock(getTreeLock());
  33.238 +        checkTreeLock();
  33.239          int listeners = getListenersCount(id, enabledOnToolkit);
  33.240  
  33.241          for (int count = listeners, i = 0; count > 0; i++) {
  33.242 @@ -1372,7 +1408,7 @@
  33.243      final void createChildHierarchyEvents(int id, long changeFlags,
  33.244          boolean enabledOnToolkit)
  33.245      {
  33.246 -        assert Thread.holdsLock(getTreeLock());
  33.247 +        checkTreeLock();
  33.248          if (component.isEmpty()) {
  33.249              return;
  33.250          }
  33.251 @@ -1507,6 +1543,7 @@
  33.252       * @see #validate
  33.253       */
  33.254      protected void validateTree() {
  33.255 +        checkTreeLock();
  33.256          if (!isValid()) {
  33.257              if (peer instanceof ContainerPeer) {
  33.258                  ((ContainerPeer)peer).beginLayout();
  33.259 @@ -1783,7 +1820,7 @@
  33.260              // super.paint(); -- Don't bother, since it's a NOP.
  33.261  
  33.262              GraphicsCallback.PaintCallback.getInstance().
  33.263 -                runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS);
  33.264 +                runComponents(getComponentsSync(), g, GraphicsCallback.LIGHTWEIGHTS);
  33.265          }
  33.266      }
  33.267  
  33.268 @@ -1838,7 +1875,7 @@
  33.269              }
  33.270  
  33.271              GraphicsCallback.PrintCallback.getInstance().
  33.272 -                runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS);
  33.273 +                runComponents(getComponentsSync(), g, GraphicsCallback.LIGHTWEIGHTS);
  33.274          }
  33.275      }
  33.276  
  33.277 @@ -1851,7 +1888,7 @@
  33.278      public void paintComponents(Graphics g) {
  33.279          if (isShowing()) {
  33.280              GraphicsCallback.PaintAllCallback.getInstance().
  33.281 -                runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.TWO_PASSES);
  33.282 +                runComponents(getComponentsSync(), g, GraphicsCallback.TWO_PASSES);
  33.283          }
  33.284      }
  33.285  
  33.286 @@ -1873,8 +1910,8 @@
  33.287      void paintHeavyweightComponents(Graphics g) {
  33.288          if (isShowing()) {
  33.289              GraphicsCallback.PaintHeavyweightComponentsCallback.getInstance().
  33.290 -                runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS |
  33.291 -                                            GraphicsCallback.HEAVYWEIGHTS);
  33.292 +                runComponents(getComponentsSync(), g,
  33.293 +                              GraphicsCallback.LIGHTWEIGHTS | GraphicsCallback.HEAVYWEIGHTS);
  33.294          }
  33.295      }
  33.296  
  33.297 @@ -1887,7 +1924,7 @@
  33.298      public void printComponents(Graphics g) {
  33.299          if (isShowing()) {
  33.300              GraphicsCallback.PrintAllCallback.getInstance().
  33.301 -                runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.TWO_PASSES);
  33.302 +                runComponents(getComponentsSync(), g, GraphicsCallback.TWO_PASSES);
  33.303          }
  33.304      }
  33.305  
  33.306 @@ -1909,8 +1946,8 @@
  33.307      void printHeavyweightComponents(Graphics g) {
  33.308          if (isShowing()) {
  33.309              GraphicsCallback.PrintHeavyweightComponentsCallback.getInstance().
  33.310 -                runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS |
  33.311 -                                            GraphicsCallback.HEAVYWEIGHTS);
  33.312 +                runComponents(getComponentsSync(), g,
  33.313 +                              GraphicsCallback.LIGHTWEIGHTS | GraphicsCallback.HEAVYWEIGHTS);
  33.314          }
  33.315      }
  33.316  
  33.317 @@ -2460,9 +2497,7 @@
  33.318       * @since 1.2
  33.319       */
  33.320      public Component findComponentAt(int x, int y) {
  33.321 -        synchronized (getTreeLock()) {
  33.322 -            return findComponentAt(x, y, true);
  33.323 -        }
  33.324 +        return findComponentAt(x, y, true);
  33.325      }
  33.326  
  33.327      /**
  33.328 @@ -2475,58 +2510,60 @@
  33.329       * The addition of this feature is temporary, pending the
  33.330       * adoption of new, public API which exports this feature.
  33.331       */
  33.332 -    final Component findComponentAt(int x, int y, boolean ignoreEnabled)
  33.333 -    {
  33.334 -        if (isRecursivelyVisible()){
  33.335 -            return findComponentAtImpl(x, y, ignoreEnabled);
  33.336 +    final Component findComponentAt(int x, int y, boolean ignoreEnabled) {
  33.337 +        synchronized (getTreeLock()) {
  33.338 +            if (isRecursivelyVisible()){
  33.339 +                return findComponentAtImpl(x, y, ignoreEnabled);
  33.340 +            }
  33.341          }
  33.342          return null;
  33.343      }
  33.344  
  33.345      final Component findComponentAtImpl(int x, int y, boolean ignoreEnabled){
  33.346 +        checkTreeLock();
  33.347 +
  33.348          if (!(contains(x, y) && visible && (ignoreEnabled || enabled))) {
  33.349              return null;
  33.350          }
  33.351  
  33.352          // Two passes: see comment in sun.awt.SunGraphicsCallback
  33.353 -        synchronized (getTreeLock()) {
  33.354 -            for (int i = 0; i < component.size(); i++) {
  33.355 -                Component comp = component.get(i);
  33.356 -                if (comp != null &&
  33.357 -                    !(comp.peer instanceof LightweightPeer)) {
  33.358 -                    if (comp instanceof Container) {
  33.359 -                        comp = ((Container)comp).findComponentAtImpl(x - comp.x,
  33.360 -                                                                     y - comp.y,
  33.361 -                                                                     ignoreEnabled);
  33.362 -                    } else {
  33.363 -                        comp = comp.locate(x - comp.x, y - comp.y);
  33.364 -                    }
  33.365 -                    if (comp != null && comp.visible &&
  33.366 -                        (ignoreEnabled || comp.enabled))
  33.367 -                        {
  33.368 -                            return comp;
  33.369 -                        }
  33.370 +        for (int i = 0; i < component.size(); i++) {
  33.371 +            Component comp = component.get(i);
  33.372 +            if (comp != null &&
  33.373 +                !(comp.peer instanceof LightweightPeer)) {
  33.374 +                if (comp instanceof Container) {
  33.375 +                    comp = ((Container)comp).findComponentAtImpl(x - comp.x,
  33.376 +                                                                 y - comp.y,
  33.377 +                                                                 ignoreEnabled);
  33.378 +                } else {
  33.379 +                    comp = comp.locate(x - comp.x, y - comp.y);
  33.380                  }
  33.381 -            }
  33.382 -            for (int i = 0; i < component.size(); i++) {
  33.383 -                Component comp = component.get(i);
  33.384 -                if (comp != null &&
  33.385 -                    comp.peer instanceof LightweightPeer) {
  33.386 -                    if (comp instanceof Container) {
  33.387 -                        comp = ((Container)comp).findComponentAtImpl(x - comp.x,
  33.388 -                                                                     y - comp.y,
  33.389 -                                                                     ignoreEnabled);
  33.390 -                    } else {
  33.391 -                        comp = comp.locate(x - comp.x, y - comp.y);
  33.392 -                    }
  33.393 -                    if (comp != null && comp.visible &&
  33.394 -                        (ignoreEnabled || comp.enabled))
  33.395 -                        {
  33.396 -                            return comp;
  33.397 -                        }
  33.398 +                if (comp != null && comp.visible &&
  33.399 +                    (ignoreEnabled || comp.enabled))
  33.400 +                {
  33.401 +                    return comp;
  33.402                  }
  33.403              }
  33.404          }
  33.405 +        for (int i = 0; i < component.size(); i++) {
  33.406 +            Component comp = component.get(i);
  33.407 +            if (comp != null &&
  33.408 +                comp.peer instanceof LightweightPeer) {
  33.409 +                if (comp instanceof Container) {
  33.410 +                    comp = ((Container)comp).findComponentAtImpl(x - comp.x,
  33.411 +                                                                 y - comp.y,
  33.412 +                                                                 ignoreEnabled);
  33.413 +                } else {
  33.414 +                    comp = comp.locate(x - comp.x, y - comp.y);
  33.415 +                }
  33.416 +                if (comp != null && comp.visible &&
  33.417 +                    (ignoreEnabled || comp.enabled))
  33.418 +                {
  33.419 +                    return comp;
  33.420 +                }
  33.421 +            }
  33.422 +        }
  33.423 +
  33.424          return this;
  33.425      }
  33.426  
  33.427 @@ -2584,13 +2621,6 @@
  33.428              for (int i = 0; i < component.size(); i++) {
  33.429                  component.get(i).addNotify();
  33.430              }
  33.431 -            // Update stacking order if native platform allows
  33.432 -            ContainerPeer cpeer = (ContainerPeer)peer;
  33.433 -            if (cpeer.isRestackSupported()) {
  33.434 -                cpeer.restack();
  33.435 -            }
  33.436 -
  33.437 -
  33.438          }
  33.439      }
  33.440  
  33.441 @@ -3488,7 +3518,7 @@
  33.442      private void writeObject(ObjectOutputStream s) throws IOException {
  33.443          ObjectOutputStream.PutField f = s.putFields();
  33.444          f.put("ncomponents", component.size());
  33.445 -        f.put("component", component.toArray(EMPTY_ARRAY));
  33.446 +        f.put("component", getComponentsSync());
  33.447          f.put("layoutMgr", layoutMgr);
  33.448          f.put("dispatcher", dispatcher);
  33.449          f.put("maxSize", maxSize);
    34.1 --- a/src/share/classes/java/awt/DefaultKeyboardFocusManager.java	Thu Apr 16 17:42:00 2009 +0100
    34.2 +++ b/src/share/classes/java/awt/DefaultKeyboardFocusManager.java	Thu Apr 16 19:10:32 2009 -0700
    34.3 @@ -479,7 +479,7 @@
    34.4                  // that a Component outside of the focused Window receives a
    34.5                  // FOCUS_GAINED event. We synthesize a WINDOW_GAINED_FOCUS
    34.6                  // event in that case.
    34.7 -                final Window newFocusedWindow = Component.getContainingWindow(newFocusOwner);
    34.8 +                final Window newFocusedWindow = SunToolkit.getContainingWindow(newFocusOwner);
    34.9                  final Window currentFocusedWindow = getGlobalFocusedWindow();
   34.10                  if (newFocusedWindow != null &&
   34.11                      newFocusedWindow != currentFocusedWindow)
    35.1 --- a/src/share/classes/java/awt/Dialog.java	Thu Apr 16 17:42:00 2009 +0100
    35.2 +++ b/src/share/classes/java/awt/Dialog.java	Thu Apr 16 19:10:32 2009 -0700
    35.3 @@ -1226,7 +1226,7 @@
    35.4          synchronized (getTreeLock()) {
    35.5              if (keepBlockingEDT) {
    35.6                  keepBlockingEDT = false;
    35.7 -                PeerEvent wakingEvent = new PeerEvent(this, new WakingRunnable(), PeerEvent.PRIORITY_EVENT);
    35.8 +                PeerEvent wakingEvent = new PeerEvent(getToolkit(), new WakingRunnable(), PeerEvent.PRIORITY_EVENT);
    35.9                  AppContext curAppContext = AppContext.getAppContext();
   35.10                  if (showAppContext != curAppContext) {
   35.11                      // Wake up event dispatch thread on which the dialog was
    36.1 --- a/src/share/classes/java/awt/Frame.java	Thu Apr 16 17:42:00 2009 +0100
    36.2 +++ b/src/share/classes/java/awt/Frame.java	Thu Apr 16 19:10:32 2009 -0700
    36.3 @@ -36,6 +36,7 @@
    36.4  import java.io.IOException;
    36.5  import sun.awt.AppContext;
    36.6  import sun.awt.SunToolkit;
    36.7 +import sun.awt.AWTAccessor;
    36.8  import java.lang.ref.WeakReference;
    36.9  import javax.accessibility.*;
   36.10  
   36.11 @@ -738,11 +739,15 @@
   36.12       * @since   1.4
   36.13       * @see java.awt.Window#addWindowStateListener
   36.14       */
   36.15 -    public synchronized void setExtendedState(int state) {
   36.16 +    public void setExtendedState(int state) {
   36.17          if ( !isFrameStateSupported( state ) ) {
   36.18              return;
   36.19          }
   36.20 -        this.state = state;
   36.21 +        synchronized (getObjectLock()) {
   36.22 +            this.state = state;
   36.23 +        }
   36.24 +        // peer.setState must be called outside of object lock
   36.25 +        // synchronization block to avoid possible deadlock
   36.26          FramePeer peer = (FramePeer)this.peer;
   36.27          if (peer != null) {
   36.28              peer.setState(state);
   36.29 @@ -804,12 +809,27 @@
   36.30       * @see     #setExtendedState(int)
   36.31       * @since 1.4
   36.32       */
   36.33 -    public synchronized int getExtendedState() {
   36.34 -        FramePeer peer = (FramePeer)this.peer;
   36.35 -        if (peer != null) {
   36.36 -            state = peer.getState();
   36.37 +    public int getExtendedState() {
   36.38 +        synchronized (getObjectLock()) {
   36.39 +            return state;
   36.40          }
   36.41 -        return state;
   36.42 +    }
   36.43 +
   36.44 +    static {
   36.45 +        AWTAccessor.setFrameAccessor(
   36.46 +            new AWTAccessor.FrameAccessor() {
   36.47 +                public void setExtendedState(Frame frame, int state) {
   36.48 +                    synchronized(frame.getObjectLock()) {
   36.49 +                        frame.state = state;
   36.50 +                    }
   36.51 +                }
   36.52 +                public int getExtendedState(Frame frame) {
   36.53 +                    synchronized(frame.getObjectLock()) {
   36.54 +                        return frame.state;
   36.55 +                    }
   36.56 +                }
   36.57 +            }
   36.58 +        );
   36.59      }
   36.60  
   36.61      /**
   36.62 @@ -967,7 +987,7 @@
   36.63          if (resizable) {
   36.64              str += ",resizable";
   36.65          }
   36.66 -        getExtendedState();     // sync with peer
   36.67 +        int state = getExtendedState();
   36.68          if (state == NORMAL) {
   36.69              str += ",normal";
   36.70          }
    37.1 --- a/src/share/classes/java/awt/GraphicsConfiguration.java	Thu Apr 16 17:42:00 2009 +0100
    37.2 +++ b/src/share/classes/java/awt/GraphicsConfiguration.java	Thu Apr 16 19:10:32 2009 -0700
    37.3 @@ -1,5 +1,5 @@
    37.4  /*
    37.5 - * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
    37.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    37.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    37.8   *
    37.9   * This code is free software; you can redistribute it and/or modify it
   37.10 @@ -434,4 +434,20 @@
   37.11          }
   37.12          return defaultImageCaps;
   37.13      }
   37.14 +
   37.15 +    /**
   37.16 +     * Returns whether this GraphicsConfiguration supports
   37.17 +     * the {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
   37.18 +     * PERPIXEL_TRANSLUCENT} kind of translucency.
   37.19 +     *
   37.20 +     * @param gc GraphicsConfiguration
   37.21 +     * @throws NullPointerException if the gc argument is null
   37.22 +     * @return whether the given GraphicsConfiguration supports
   37.23 +     *         the translucency effects.
   37.24 +     * @see Window#setBackground(Color)
   37.25 +     */
   37.26 +    /*public */boolean isTranslucencyCapable() {
   37.27 +        // Overridden in subclasses
   37.28 +        return false;
   37.29      }
   37.30 +}
    38.1 --- a/src/share/classes/java/awt/GraphicsDevice.java	Thu Apr 16 17:42:00 2009 +0100
    38.2 +++ b/src/share/classes/java/awt/GraphicsDevice.java	Thu Apr 16 19:10:32 2009 -0700
    38.3 @@ -1,5 +1,5 @@
    38.4  /*
    38.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    38.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    38.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    38.8   *
    38.9   * This code is free software; you can redistribute it and/or modify it
   38.10 @@ -27,7 +27,10 @@
   38.11  package java.awt;
   38.12  
   38.13  import java.awt.image.ColorModel;
   38.14 +
   38.15 +import sun.awt.AWTAccessor;
   38.16  import sun.awt.AppContext;
   38.17 +import sun.awt.SunToolkit;
   38.18  
   38.19  /**
   38.20   * The <code>GraphicsDevice</code> class describes the graphics devices
   38.21 @@ -109,6 +112,31 @@
   38.22       */
   38.23      public final static int TYPE_IMAGE_BUFFER           = 2;
   38.24  
   38.25 +    /** Kinds of translucency supported by the underlying system.
   38.26 +     *  @see #isTranslucencySupported
   38.27 +     */
   38.28 +    /*public */static enum WindowTranslucency {
   38.29 +        /**
   38.30 +         * Represents support in the underlying system for windows each pixel
   38.31 +         * of which is guaranteed to be either completely opaque, with
   38.32 +         * an alpha value of 1.0, or completely transparent, with an alpha
   38.33 +         * value of 0.0.
   38.34 +         */
   38.35 +        PERPIXEL_TRANSPARENT,
   38.36 +        /**
   38.37 +         * Represents support in the underlying system for windows all of
   38.38 +         * the pixels of which have the same alpha value between or including
   38.39 +         * 0.0 and 1.0.
   38.40 +         */
   38.41 +        TRANSLUCENT,
   38.42 +        /**
   38.43 +         * Represents support in the underlying system for windows that
   38.44 +         * contain or might contain pixels with arbitrary alpha values
   38.45 +         * between and including 0.0 and 1.0.
   38.46 +         */
   38.47 +        PERPIXEL_TRANSLUCENT;
   38.48 +    }
   38.49 +
   38.50      /**
   38.51       * Returns the type of this <code>GraphicsDevice</code>.
   38.52       * @return the type of this <code>GraphicsDevice</code>, which can
   38.53 @@ -235,6 +263,21 @@
   38.54       * @since 1.4
   38.55       */
   38.56      public void setFullScreenWindow(Window w) {
   38.57 +        if (w != null) {
   38.58 +            //XXX: The actions should be documented in some non-update release.
   38.59 +            /*
   38.60 +            if (w.getShape() != null) {
   38.61 +                w.setShape(w, null);
   38.62 +            }
   38.63 +            if (!w.isOpaque()) {
   38.64 +                w.setOpaque(false);
   38.65 +            }
   38.66 +            if (w.getOpacity() < 1.0f) {
   38.67 +                w.setOpacity(1.0f);
   38.68 +            }
   38.69 +            */
   38.70 +        }
   38.71 +
   38.72          if (fullScreenWindow != null && windowedModeBounds != null) {
   38.73              // if the window went into fs mode before it was realized it may
   38.74              // have (0,0) dimensions
   38.75 @@ -424,4 +467,94 @@
   38.76      public int getAvailableAcceleratedMemory() {
   38.77          return -1;
   38.78      }
   38.79 +
   38.80 +    /**
   38.81 +     * Returns whether the given level of translucency is supported
   38.82 +     * this graphics device.
   38.83 +     *
   38.84 +     * @param translucencyKind a kind of translucency support
   38.85 +     * @return whether the given translucency kind is supported
   38.86 +     */
   38.87 +    /*public */boolean isWindowTranslucencySupported(WindowTranslucency translucencyKind) {
   38.88 +        switch (translucencyKind) {
   38.89 +            case PERPIXEL_TRANSPARENT:
   38.90 +                return isWindowShapingSupported();
   38.91 +            case TRANSLUCENT:
   38.92 +                return isWindowOpacitySupported();
   38.93 +            case PERPIXEL_TRANSLUCENT:
   38.94 +                return isWindowPerpixelTranslucencySupported();
   38.95 +        }
   38.96 +        return false;
   38.97 +    }
   38.98 +
   38.99 +    /**
  38.100 +     * Returns whether the windowing system supports changing the shape
  38.101 +     * of top-level windows.
  38.102 +     * Note that this method may sometimes return true, but the native
  38.103 +     * windowing system may still not support the concept of
  38.104 +     * shaping (due to the bugs in the windowing system).
  38.105 +     */
  38.106 +    static boolean isWindowShapingSupported() {
  38.107 +        Toolkit curToolkit = Toolkit.getDefaultToolkit();
  38.108 +        if (!(curToolkit instanceof SunToolkit)) {
  38.109 +            return false;
  38.110 +        }
  38.111 +        return ((SunToolkit)curToolkit).isWindowShapingSupported();
  38.112 +    }
  38.113 +
  38.114 +    /**
  38.115 +     * Returns whether the windowing system supports changing the opacity
  38.116 +     * value of top-level windows.
  38.117 +     * Note that this method may sometimes return true, but the native
  38.118 +     * windowing system may still not support the concept of
  38.119 +     * translucency (due to the bugs in the windowing system).
  38.120 +     */
  38.121 +    static boolean isWindowOpacitySupported() {
  38.122 +        Toolkit curToolkit = Toolkit.getDefaultToolkit();
  38.123 +        if (!(curToolkit instanceof SunToolkit)) {
  38.124 +            return false;
  38.125 +        }
  38.126 +        return ((SunToolkit)curToolkit).isWindowOpacitySupported();
  38.127 +    }
  38.128 +
  38.129 +    boolean isWindowPerpixelTranslucencySupported() {
  38.130 +        /*
  38.131 +         * Per-pixel alpha is supported if all the conditions are TRUE:
  38.132 +         *    1. The toolkit is a sort of SunToolkit
  38.133 +         *    2. The toolkit supports translucency in general
  38.134 +         *        (isWindowTranslucencySupported())
  38.135 +         *    3. There's at least one translucency-capable
  38.136 +         *        GraphicsConfiguration
  38.137 +         */
  38.138 +        Toolkit curToolkit = Toolkit.getDefaultToolkit();
  38.139 +        if (!(curToolkit instanceof SunToolkit)) {
  38.140 +            return false;
  38.141 +        }
  38.142 +        if (!((SunToolkit)curToolkit).isWindowTranslucencySupported()) {
  38.143 +            return false;
  38.144 +        }
  38.145 +
  38.146 +        // TODO: cache translucency capable GC
  38.147 +        return getTranslucencyCapableGC() != null;
  38.148 +    }
  38.149 +
  38.150 +    GraphicsConfiguration getTranslucencyCapableGC() {
  38.151 +        // If the default GC supports translucency return true.
  38.152 +        // It is important to optimize the verification this way,
  38.153 +        // see CR 6661196 for more details.
  38.154 +        GraphicsConfiguration defaultGC = getDefaultConfiguration();
  38.155 +        if (defaultGC.isTranslucencyCapable()) {
  38.156 +            return defaultGC;
  38.157 +        }
  38.158 +
  38.159 +        // ... otherwise iterate through all the GCs.
  38.160 +        GraphicsConfiguration[] configs = getConfigurations();
  38.161 +        for (int j = 0; j < configs.length; j++) {
  38.162 +            if (configs[j].isTranslucencyCapable()) {
  38.163 +                return configs[j];
  38.164 +            }
  38.165 +        }
  38.166 +
  38.167 +        return null;
  38.168 +    }
  38.169  }
    39.1 --- a/src/share/classes/java/awt/KeyboardFocusManager.java	Thu Apr 16 17:42:00 2009 +0100
    39.2 +++ b/src/share/classes/java/awt/KeyboardFocusManager.java	Thu Apr 16 19:10:32 2009 -0700
    39.3 @@ -61,6 +61,7 @@
    39.4  import sun.awt.SunToolkit;
    39.5  import sun.awt.CausedFocusEvent;
    39.6  import sun.awt.KeyboardFocusManagerPeerProvider;
    39.7 +import sun.awt.AWTAccessor;
    39.8  
    39.9  /**
   39.10   * The KeyboardFocusManager is responsible for managing the active and focused
   39.11 @@ -118,6 +119,32 @@
   39.12          if (!GraphicsEnvironment.isHeadless()) {
   39.13              initIDs();
   39.14          }
   39.15 +        AWTAccessor.setKeyboardFocusManagerAccessor(
   39.16 +            new AWTAccessor.KeyboardFocusManagerAccessor() {
   39.17 +                public int shouldNativelyFocusHeavyweight(Component heavyweight,
   39.18 +                                                   Component descendant,
   39.19 +                                                   boolean temporary,
   39.20 +                                                   boolean focusedWindowChangeAllowed,
   39.21 +                                                   long time,
   39.22 +                                                   CausedFocusEvent.Cause cause)
   39.23 +                {
   39.24 +                    return KeyboardFocusManager.shouldNativelyFocusHeavyweight(
   39.25 +                        heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause);
   39.26 +                }
   39.27 +                public boolean processSynchronousLightweightTransfer(Component heavyweight,
   39.28 +                                                              Component descendant,
   39.29 +                                                              boolean temporary,
   39.30 +                                                              boolean focusedWindowChangeAllowed,
   39.31 +                                                              long time)
   39.32 +                {
   39.33 +                    return KeyboardFocusManager.processSynchronousLightweightTransfer(
   39.34 +                        heavyweight, descendant, temporary, focusedWindowChangeAllowed, time);
   39.35 +                }
   39.36 +                public void removeLastFocusRequest(Component heavyweight) {
   39.37 +                    KeyboardFocusManager.removeLastFocusRequest(heavyweight);
   39.38 +                }
   39.39 +            }
   39.40 +        );
   39.41      }
   39.42  
   39.43      transient KeyboardFocusManagerPeer peer;
   39.44 @@ -2208,7 +2235,7 @@
   39.45                                                    boolean temporary, boolean focusedWindowChangeAllowed,
   39.46                                                    long time)
   39.47      {
   39.48 -        Window parentWindow = Component.getContainingWindow(heavyweight);
   39.49 +        Window parentWindow = SunToolkit.getContainingWindow(heavyweight);
   39.50          if (parentWindow == null || !parentWindow.syncLWRequests) {
   39.51              return false;
   39.52          }
   39.53 @@ -2443,79 +2470,7 @@
   39.54              }
   39.55          }
   39.56      }
   39.57 -    static void heavyweightButtonDown(Component heavyweight, long time) {
   39.58 -        heavyweightButtonDown(heavyweight, time, false);
   39.59 -    }
   39.60 -    static void heavyweightButtonDown(Component heavyweight, long time, boolean acceptDuplicates) {
   39.61 -        if (log.isLoggable(Level.FINE)) {
   39.62 -            if (heavyweight == null) {
   39.63 -                log.log(Level.FINE, "Assertion (heavyweight != null) failed");
   39.64 -            }
   39.65 -            if (time == 0) {
   39.66 -                log.log(Level.FINE, "Assertion (time != 0) failed");
   39.67 -            }
   39.68 -        }
   39.69 -        KeyboardFocusManager manager = getCurrentKeyboardFocusManager(SunToolkit.targetToAppContext(heavyweight));
   39.70  
   39.71 -        synchronized (heavyweightRequests) {
   39.72 -            HeavyweightFocusRequest hwFocusRequest = getLastHWRequest();
   39.73 -            Component currentNativeFocusOwner = (hwFocusRequest == null)
   39.74 -                ? manager.getNativeFocusOwner()
   39.75 -                : hwFocusRequest.heavyweight;
   39.76 -
   39.77 -            // Behavior for all use cases:
   39.78 -            // 1. Heavyweight leaf Components (e.g., Button, Checkbox, Choice,
   39.79 -            //    List, TextComponent, Canvas) that respond to button down.
   39.80 -            //
   39.81 -            //    Native platform will generate a FOCUS_GAINED if and only if
   39.82 -            //    the Component is not the focus owner (or, will not be the
   39.83 -            //    focus owner when all outstanding focus requests are
   39.84 -            //    processed).
   39.85 -            //
   39.86 -            // 2. Panel with no descendants.
   39.87 -            //
   39.88 -            //    Same as (1).
   39.89 -            //
   39.90 -            // 3. Panel with at least one heavyweight descendant.
   39.91 -            //
   39.92 -            //    This function should NOT be called for this case!
   39.93 -            //
   39.94 -            // 4. Panel with only lightweight descendants.
   39.95 -            //
   39.96 -            //    Native platform will generate a FOCUS_GAINED if and only if
   39.97 -            //    neither the Panel, nor any of its recursive, lightweight
   39.98 -            //    descendants, is the focus owner. However, we want a
   39.99 -            //    requestFocus() for any lightweight descendant to win out over
  39.100 -            //    the focus request for the Panel. To accomplish this, we
  39.101 -            //    differ from the algorithm for shouldNativelyFocusHeavyweight
  39.102 -            //    as follows:
  39.103 -            //      a. If the requestFocus() for a lightweight descendant has
  39.104 -            //         been fully handled by the time this function is invoked,
  39.105 -            //         then 'hwFocusRequest' will be null and 'heavyweight'
  39.106 -            //         will be the native focus owner. Do *not* synthesize a
  39.107 -            //         focus transfer to the Panel.
  39.108 -            //      b. If the requestFocus() for a lightweight descendant has
  39.109 -            //         been recorded, but not handled, then 'hwFocusRequest'
  39.110 -            //         will be non-null and 'hwFocusRequest.heavyweight' will
  39.111 -            //         equal 'heavyweight'. Do *not* append 'heavyweight' to
  39.112 -            //         hwFocusRequest.lightweightRequests.
  39.113 -            //      c. If the requestFocus() for a lightweight descendant is
  39.114 -            //         yet to be made, then post a new HeavyweightFocusRequest.
  39.115 -            //         If no lightweight descendant ever requests focus, then
  39.116 -            //         the Panel will get focus. If some descendant does, then
  39.117 -            //         the descendant will get focus by either a synthetic
  39.118 -            //         focus transfer, or a lightweightRequests focus transfer.
  39.119 -
  39.120 -            if (acceptDuplicates || heavyweight != currentNativeFocusOwner) {
  39.121 -                getCurrentKeyboardFocusManager
  39.122 -                    (SunToolkit.targetToAppContext(heavyweight)).
  39.123 -                    enqueueKeyEvents(time, heavyweight);
  39.124 -                heavyweightRequests.add
  39.125 -                    (new HeavyweightFocusRequest(heavyweight, heavyweight,
  39.126 -                                                 false, CausedFocusEvent.Cause.MOUSE_EVENT));
  39.127 -            }
  39.128 -        }
  39.129 -    }
  39.130      /**
  39.131       * Returns the Window which will be active after processing this request,
  39.132       * or null if this is a duplicate request. The active Window is useful
  39.133 @@ -2542,7 +2497,7 @@
  39.134                  (HeavyweightFocusRequest.CLEAR_GLOBAL_FOCUS_OWNER);
  39.135  
  39.136              Component activeWindow = ((hwFocusRequest != null)
  39.137 -                ? Component.getContainingWindow(hwFocusRequest.heavyweight)
  39.138 +                ? SunToolkit.getContainingWindow(hwFocusRequest.heavyweight)
  39.139                  : nativeFocusedWindow);
  39.140              while (activeWindow != null &&
  39.141                     !((activeWindow instanceof Frame) ||
  39.142 @@ -3013,8 +2968,8 @@
  39.143      }
  39.144  
  39.145      private static boolean focusedWindowChanged(Component to, Component from) {
  39.146 -        Window wto = Component.getContainingWindow(to);
  39.147 -        Window wfrom = Component.getContainingWindow(from);
  39.148 +        Window wto = SunToolkit.getContainingWindow(to);
  39.149 +        Window wfrom = SunToolkit.getContainingWindow(from);
  39.150          if (wto == null && wfrom == null) {
  39.151              return true;
  39.152          }
  39.153 @@ -3028,8 +2983,8 @@
  39.154      }
  39.155  
  39.156      private static boolean isTemporary(Component to, Component from) {
  39.157 -        Window wto = Component.getContainingWindow(to);
  39.158 -        Window wfrom = Component.getContainingWindow(from);
  39.159 +        Window wto = SunToolkit.getContainingWindow(to);
  39.160 +        Window wfrom = SunToolkit.getContainingWindow(from);
  39.161          if (wto == null && wfrom == null) {
  39.162              return false;
  39.163          }
    40.1 --- a/src/share/classes/java/awt/MenuItem.java	Thu Apr 16 17:42:00 2009 +0100
    40.2 +++ b/src/share/classes/java/awt/MenuItem.java	Thu Apr 16 19:10:32 2009 -0700
    40.3 @@ -1,5 +1,5 @@
    40.4  /*
    40.5 - * Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
    40.6 + * Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
    40.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    40.8   *
    40.9   * This code is free software; you can redistribute it and/or modify it
   40.10 @@ -398,9 +398,11 @@
   40.11      boolean handleShortcut(KeyEvent e) {
   40.12          MenuShortcut s = new MenuShortcut(e.getKeyCode(),
   40.13                               (e.getModifiers() & InputEvent.SHIFT_MASK) > 0);
   40.14 +        MenuShortcut sE = new MenuShortcut(e.getExtendedKeyCode(),
   40.15 +                             (e.getModifiers() & InputEvent.SHIFT_MASK) > 0);
   40.16          // Fix For 6185151: Menu shortcuts of all menuitems within a menu
   40.17          // should be disabled when the menu itself is disabled
   40.18 -        if (s.equals(shortcut) && isItemEnabled()) {
   40.19 +        if ((s.equals(shortcut) || sE.equals(shortcut)) && isItemEnabled()) {
   40.20              // MenuShortcut match -- issue an event on keydown.
   40.21              if (e.getID() == KeyEvent.KEY_PRESSED) {
   40.22                  doMenuEvent(e.getWhen(), e.getModifiers());
    41.1 --- a/src/share/classes/java/awt/MenuShortcut.java	Thu Apr 16 17:42:00 2009 +0100
    41.2 +++ b/src/share/classes/java/awt/MenuShortcut.java	Thu Apr 16 19:10:32 2009 -0700
    41.3 @@ -1,5 +1,5 @@
    41.4  /*
    41.5 - * Copyright 1996-2003 Sun Microsystems, Inc.  All Rights Reserved.
    41.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    41.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    41.8   *
    41.9   * This code is free software; you can redistribute it and/or modify it
   41.10 @@ -34,7 +34,21 @@
   41.11   * For example, a menu shortcut for Ctrl-a (assuming that Control is
   41.12   * the accelerator key) would be created with code like the following:
   41.13   * <p>
   41.14 - * MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false);
   41.15 + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false);</code>
   41.16 + * <p> or alternatively
   41.17 + * <p>
   41.18 + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.getExtendedKeyCodeForChar('A'), false);</code>
   41.19 + * <p>
   41.20 + * Menu shortcuts may also be constructed for a wider set of keycodes
   41.21 + * using the <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code> call.
   41.22 + * For example, a menu shortcut for "Ctrl+cyrillic ef" is created by
   41.23 + * <p>
   41.24 + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.getExtendedKeyCodeForChar('\u0444'), false);</code>
   41.25 + * <p>
   41.26 + * Note that shortcuts created with a keycode or an extended keycode defined as a constant in <code>KeyEvent</code>
   41.27 + * work regardless of the current keyboard layout. However, a shortcut made of
   41.28 + * an extended keycode not listed in <code>KeyEvent</code>
   41.29 + * only work if the current keyboard layout produces a corresponding letter.
   41.30   * <p>
   41.31   * The accelerator key is platform-dependent and may be obtained
   41.32   * via {@link Toolkit#getMenuShortcutKeyMask}.
    42.1 --- a/src/share/classes/java/awt/Window.java	Thu Apr 16 17:42:00 2009 +0100
    42.2 +++ b/src/share/classes/java/awt/Window.java	Thu Apr 16 19:10:32 2009 -0700
    42.3 @@ -1,5 +1,5 @@
    42.4  /*
    42.5 - * Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
    42.6 + * Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
    42.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    42.8   *
    42.9   * This code is free software; you can redistribute it and/or modify it
   42.10 @@ -25,8 +25,10 @@
   42.11  package java.awt;
   42.12  
   42.13  import java.awt.event.*;
   42.14 +import java.awt.geom.Point2D;
   42.15  import java.awt.im.InputContext;
   42.16  import java.awt.image.BufferStrategy;
   42.17 +import java.awt.image.BufferedImage;
   42.18  import java.awt.peer.ComponentPeer;
   42.19  import java.awt.peer.WindowPeer;
   42.20  import java.beans.PropertyChangeListener;
   42.21 @@ -49,6 +51,7 @@
   42.22  import java.util.logging.Logger;
   42.23  import java.util.concurrent.atomic.AtomicBoolean;
   42.24  import javax.accessibility.*;
   42.25 +import sun.awt.AWTAccessor;
   42.26  import sun.awt.AppContext;
   42.27  import sun.awt.CausedFocusEvent;
   42.28  import sun.awt.SunToolkit;
   42.29 @@ -291,6 +294,25 @@
   42.30       */
   42.31      transient boolean isInShow = false;
   42.32  
   42.33 +    /*
   42.34 +     * Opacity level of the window
   42.35 +     *
   42.36 +     * @see #setOpacity(float)
   42.37 +     * @see #getOpacity()
   42.38 +     * @since 1.7
   42.39 +     */
   42.40 +    private float opacity = 1.0f;
   42.41 +
   42.42 +    /*
   42.43 +     * The shape assigned to this window. This field is set to null if
   42.44 +     * no shape is set (rectangular window).
   42.45 +     *
   42.46 +     * @see #getShape()
   42.47 +     * @see #setShape(Shape)
   42.48 +     * @since 1.7
   42.49 +     */
   42.50 +    private Shape shape = null;
   42.51 +
   42.52      private static final String base = "win";
   42.53      private static int nameCounter = 0;
   42.54  
   42.55 @@ -305,6 +327,23 @@
   42.56  
   42.57      transient boolean isTrayIconWindow = false;
   42.58  
   42.59 +    /**
   42.60 +     * These fields are initialized in the native peer code
   42.61 +     * or via AWTAccessor's WindowAccessor.
   42.62 +     */
   42.63 +    private transient volatile int securityWarningWidth = 0;
   42.64 +    private transient volatile int securityWarningHeight = 0;
   42.65 +
   42.66 +    /**
   42.67 +     * These fields represent the desired location for the security
   42.68 +     * warning if this window is untrusted.
   42.69 +     * See com.sun.awt.SecurityWarning for more details.
   42.70 +     */
   42.71 +    private transient double securityWarningPointX = 2.0;
   42.72 +    private transient double securityWarningPointY = 0.0;
   42.73 +    private transient float securityWarningAlignmentX = RIGHT_ALIGNMENT;
   42.74 +    private transient float securityWarningAlignmentY = TOP_ALIGNMENT;
   42.75 +
   42.76      static {
   42.77          /* ensure that the necessary native libraries are loaded */
   42.78          Toolkit.loadLibraries();
   42.79 @@ -373,6 +412,18 @@
   42.80          }
   42.81      }
   42.82  
   42.83 +    private GraphicsConfiguration initGC(GraphicsConfiguration gc) {
   42.84 +        GraphicsEnvironment.checkHeadless();
   42.85 +
   42.86 +        if (gc == null) {
   42.87 +            gc = GraphicsEnvironment.getLocalGraphicsEnvironment().
   42.88 +                getDefaultScreenDevice().getDefaultConfiguration();
   42.89 +        }
   42.90 +        setGraphicsConfiguration(gc);
   42.91 +
   42.92 +        return gc;
   42.93 +    }
   42.94 +
   42.95      private void init(GraphicsConfiguration gc) {
   42.96          GraphicsEnvironment.checkHeadless();
   42.97  
   42.98 @@ -384,14 +435,10 @@
   42.99          setWarningString();
  42.100          this.cursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
  42.101          this.visible = false;
  42.102 -        if (gc == null) {
  42.103 -            this.graphicsConfig =
  42.104 -                GraphicsEnvironment.getLocalGraphicsEnvironment().
  42.105 -             getDefaultScreenDevice().getDefaultConfiguration();
  42.106 -        } else {
  42.107 -            this.graphicsConfig = gc;
  42.108 -        }
  42.109 -        if (graphicsConfig.getDevice().getType() !=
  42.110 +
  42.111 +        gc = initGC(gc);
  42.112 +
  42.113 +        if (gc.getDevice().getType() !=
  42.114              GraphicsDevice.TYPE_RASTER_SCREEN) {
  42.115              throw new IllegalArgumentException("not a screen device");
  42.116          }
  42.117 @@ -399,8 +446,8 @@
  42.118  
  42.119          /* offset the initial location with the original of the screen */
  42.120          /* and any insets                                              */
  42.121 -        Rectangle screenBounds = graphicsConfig.getBounds();
  42.122 -        Insets screenInsets = getToolkit().getScreenInsets(graphicsConfig);
  42.123 +        Rectangle screenBounds = gc.getBounds();
  42.124 +        Insets screenInsets = getToolkit().getScreenInsets(gc);
  42.125          int x = getX() + screenBounds.x + screenInsets.left;
  42.126          int y = getY() + screenBounds.y + screenInsets.top;
  42.127          if (x != this.x || y != this.y) {
  42.128 @@ -2744,7 +2791,7 @@
  42.129          sun.java2d.Disposer.addRecord(anchor, new WindowDisposerRecord(appContext, this));
  42.130  
  42.131          addToWindowList();
  42.132 -
  42.133 +        initGC(null);
  42.134      }
  42.135  
  42.136      private void deserializeResources(ObjectInputStream s)
  42.137 @@ -2849,6 +2896,15 @@
  42.138           if(aot) {
  42.139               setAlwaysOnTop(aot); // since 1.5; subject to permission check
  42.140           }
  42.141 +         shape = (Shape)f.get("shape", null);
  42.142 +         opacity = (Float)f.get("opacity", 1.0f);
  42.143 +
  42.144 +         this.securityWarningWidth = 0;
  42.145 +         this.securityWarningHeight = 0;
  42.146 +         this.securityWarningPointX = 2.0;
  42.147 +         this.securityWarningPointY = 0.0;
  42.148 +         this.securityWarningAlignmentX = RIGHT_ALIGNMENT;
  42.149 +         this.securityWarningAlignmentY = TOP_ALIGNMENT;
  42.150  
  42.151           deserializeResources(s);
  42.152      }
  42.153 @@ -2916,41 +2972,18 @@
  42.154  
  42.155      } // inner class AccessibleAWTWindow
  42.156  
  42.157 -    /**
  42.158 -     * This method returns the GraphicsConfiguration used by this Window.
  42.159 -     * @since 1.3
  42.160 -     */
  42.161 -    public GraphicsConfiguration getGraphicsConfiguration() {
  42.162 -                //NOTE: for multiscreen, this will need to take into account
  42.163 -                //which screen the window is on/mostly on instead of returning the
  42.164 -                //default or constructor argument config.
  42.165 -        synchronized(getTreeLock()) {
  42.166 -            if (graphicsConfig == null  && !GraphicsEnvironment.isHeadless()) {
  42.167 -                graphicsConfig =
  42.168 -                    GraphicsEnvironment. getLocalGraphicsEnvironment().
  42.169 -                    getDefaultScreenDevice().
  42.170 -                    getDefaultConfiguration();
  42.171 -            }
  42.172 -            return graphicsConfig;
  42.173 -            }
  42.174 -    }
  42.175 -
  42.176 -    /**
  42.177 -     * Reset this Window's GraphicsConfiguration to match its peer.
  42.178 -     */
  42.179 -    void resetGC() {
  42.180 -        if (!GraphicsEnvironment.isHeadless()) {
  42.181 -            // use the peer's GC
  42.182 -            setGCFromPeer();
  42.183 -            // if it's still null, use the default
  42.184 -            if (graphicsConfig == null) {
  42.185 -                graphicsConfig = GraphicsEnvironment.
  42.186 +    @Override
  42.187 +    void setGraphicsConfiguration(GraphicsConfiguration gc) {
  42.188 +        if (gc == null) {
  42.189 +            gc = GraphicsEnvironment.
  42.190                      getLocalGraphicsEnvironment().
  42.191                      getDefaultScreenDevice().
  42.192                      getDefaultConfiguration();
  42.193 -            }
  42.194 +        }
  42.195 +        synchronized (getTreeLock()) {
  42.196 +            super.setGraphicsConfiguration(gc);
  42.197              if (log.isLoggable(Level.FINER)) {
  42.198 -                log.finer("+ Window.resetGC(): new GC is \n+ " + graphicsConfig + "\n+ this is " + this);
  42.199 +                log.finer("+ Window.setGraphicsConfiguration(): new GC is \n+ " + getGraphicsConfiguration_NoClientCode() + "\n+ this is " + this);
  42.200              }
  42.201          }
  42.202      }
  42.203 @@ -3010,13 +3043,13 @@
  42.204          // target location
  42.205          int dx = 0, dy = 0;
  42.206          // target GC
  42.207 -        GraphicsConfiguration gc = this.graphicsConfig;
  42.208 +        GraphicsConfiguration gc = getGraphicsConfiguration_NoClientCode();
  42.209          Rectangle gcBounds = gc.getBounds();
  42.210  
  42.211          Dimension windowSize = getSize();
  42.212  
  42.213          // search a top-level of c
  42.214 -        Window componentWindow = Component.getContainingWindow(c);
  42.215 +        Window componentWindow = SunToolkit.getContainingWindow(c);
  42.216          if ((c == null) || (componentWindow == null)) {
  42.217              GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  42.218              gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
  42.219 @@ -3304,6 +3337,225 @@
  42.220      }
  42.221  
  42.222  
  42.223 +    // ******************** SHAPES & TRANSPARENCY CODE ********************
  42.224 +
  42.225 +    /**
  42.226 +     * JavaDoc
  42.227 +     */
  42.228 +    /*public */float getOpacity() {
  42.229 +        synchronized (getTreeLock()) {
  42.230 +            return opacity;
  42.231 +        }
  42.232 +    }
  42.233 +
  42.234 +    /**
  42.235 +     * JavaDoc
  42.236 +     */
  42.237 +    /*public */void setOpacity(float opacity) {
  42.238 +        synchronized (getTreeLock()) {
  42.239 +            if (opacity < 0.0f || opacity > 1.0f) {
  42.240 +                throw new IllegalArgumentException(
  42.241 +                    "The value of opacity should be in the range [0.0f .. 1.0f].");
  42.242 +            }
  42.243 +            GraphicsConfiguration gc = getGraphicsConfiguration();
  42.244 +            GraphicsDevice gd = gc.getDevice();
  42.245 +            if (!gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {
  42.246 +                throw new UnsupportedOperationException(
  42.247 +                        "TRANSLUCENT translucency is not supported.");
  42.248 +            }
  42.249 +            if ((gc.getDevice().getFullScreenWindow() == this) && (opacity < 1.0f)) {
  42.250 +                throw new IllegalArgumentException(
  42.251 +                    "Setting opacity for full-screen window is not supported.");
  42.252 +            }
  42.253 +            this.opacity = opacity;
  42.254 +            WindowPeer peer = (WindowPeer)getPeer();
  42.255 +            if (peer != null) {
  42.256 +                peer.setOpacity(opacity);
  42.257 +            }
  42.258 +        }
  42.259 +    }
  42.260 +
  42.261 +    /**
  42.262 +     * JavaDoc
  42.263 +     */
  42.264 +    /*public */Shape getShape() {
  42.265 +        synchronized (getTreeLock()) {
  42.266 +            return shape;
  42.267 +        }
  42.268 +    }
  42.269 +
  42.270 +    /**
  42.271 +     * JavaDoc
  42.272 +     *
  42.273 +     * @param window the window to set the shape to
  42.274 +     * @param shape the shape to set to the window
  42.275 +     * @throws IllegalArgumentException if the window is in full screen mode,
  42.276 +     *                                  and the shape is not null
  42.277 +     */
  42.278 +    /*public */void setShape(Shape shape) {
  42.279 +        synchronized (getTreeLock()) {
  42.280 +            GraphicsConfiguration gc = getGraphicsConfiguration();
  42.281 +            GraphicsDevice gd = gc.getDevice();
  42.282 +            if (!gd.isWindowTranslucencySupported(
  42.283 +                    GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT))
  42.284 +            {
  42.285 +                throw new UnsupportedOperationException(
  42.286 +                        "PERPIXEL_TRANSPARENT translucency is not supported.");
  42.287 +            }
  42.288 +            if ((gc.getDevice().getFullScreenWindow() == this) && (shape != null)) {
  42.289 +                throw new IllegalArgumentException(
  42.290 +                    "Setting shape for full-screen window is not supported.");
  42.291 +            }
  42.292 +            this.shape = shape;
  42.293 +            WindowPeer peer = (WindowPeer)getPeer();
  42.294 +            if (peer != null) {
  42.295 +                peer.applyShape(shape == null ? null : Region.getInstance(shape, null));
  42.296 +            }
  42.297 +        }
  42.298 +    }
  42.299 +
  42.300 +    /**
  42.301 +     * JavaDoc
  42.302 +     */
  42.303 +/*
  42.304 +    @Override
  42.305 +    public void setBackground(Color bgColor) {
  42.306 +        int alpha = bgColor.getAlpha();
  42.307 +        if (alpha < 255) { // non-opaque window
  42.308 +            GraphicsConfiguration gc = getGraphicsConfiguration();
  42.309 +            GraphicsDevice gd = gc.getDevice();
  42.310 +            if (gc.getDevice().getFullScreenWindow() == this) {
  42.311 +                throw new IllegalArgumentException(
  42.312 +                    "Making full-screen window non opaque is not supported.");
  42.313 +            }
  42.314 +            if (!gc.isTranslucencyCapable()) {
  42.315 +                GraphicsConfiguration capableGC = gd.getTranslucencyCapableGC();
  42.316 +                if (capableGC == null) {
  42.317 +                    throw new IllegalArgumentException(
  42.318 +                        "PERPIXEL_TRANSLUCENT translucency is not supported");
  42.319 +                }
  42.320 +                // TODO: change GC
  42.321 +            }
  42.322 +            setLayersOpaque(this, false);
  42.323 +        }
  42.324 +
  42.325 +        super.setBackground(bgColor);
  42.326 +
  42.327 +        WindowPeer peer = (WindowPeer)getPeer();
  42.328 +        if (peer != null) {
  42.329 +            peer.setOpaque(alpha == 255);
  42.330 +        }
  42.331 +    }
  42.332 +*/
  42.333 +
  42.334 +    private transient boolean opaque = true;
  42.335 +
  42.336 +    void setOpaque(boolean opaque) {
  42.337 +        synchronized (getTreeLock()) {
  42.338 +            GraphicsConfiguration gc = getGraphicsConfiguration();
  42.339 +            if (!opaque && !com.sun.awt.AWTUtilities.isTranslucencyCapable(gc)) {
  42.340 +            throw new IllegalArgumentException(
  42.341 +                    "The window must use a translucency-compatible graphics configuration");
  42.342 +            }
  42.343 +            if (!com.sun.awt.AWTUtilities.isTranslucencySupported(
  42.344 +                    com.sun.awt.AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT))
  42.345 +            {
  42.346 +                throw new UnsupportedOperationException(
  42.347 +                        "PERPIXEL_TRANSLUCENT translucency is not supported.");
  42.348 +            }
  42.349 +            if ((gc.getDevice().getFullScreenWindow() == this) && !opaque) {
  42.350 +                throw new IllegalArgumentException(
  42.351 +                    "Making full-screen window non opaque is not supported.");
  42.352 +            }
  42.353 +            setLayersOpaque(this, opaque);
  42.354 +            this.opaque = opaque;
  42.355 +            WindowPeer peer = (WindowPeer)getPeer();
  42.356 +            if (peer != null) {
  42.357 +                peer.setOpaque(opaque);
  42.358 +            }
  42.359 +        }
  42.360 +    }
  42.361 +
  42.362 +    private void updateWindow(BufferedImage backBuffer) {
  42.363 +        synchronized (getTreeLock()) {
  42.364 +            WindowPeer peer = (WindowPeer)getPeer();
  42.365 +            if (peer != null) {
  42.366 +                peer.updateWindow(backBuffer);
  42.367 +            }
  42.368 +        }
  42.369 +    }
  42.370 +
  42.371 +    private static final Color TRANSPARENT_BACKGROUND_COLOR = new Color(0, 0, 0, 0);
  42.372 +
  42.373 +    private static void setLayersOpaque(Component component, boolean isOpaque) {
  42.374 +        // Shouldn't use instanceof to avoid loading Swing classes
  42.375 +        //    if it's a pure AWT application.
  42.376 +        if (Component.doesImplement(component, "javax.swing.RootPaneContainer")) {
  42.377 +            javax.swing.RootPaneContainer rpc = (javax.swing.RootPaneContainer)component;
  42.378 +            javax.swing.JRootPane root = rpc.getRootPane();
  42.379 +            javax.swing.JLayeredPane lp = root.getLayeredPane();
  42.380 +            Container c = root.getContentPane();
  42.381 +            javax.swing.JComponent content =
  42.382 +                (c instanceof javax.swing.JComponent) ? (javax.swing.JComponent)c : null;
  42.383 +            javax.swing.JComponent gp =
  42.384 +                (rpc.getGlassPane() instanceof javax.swing.JComponent) ?
  42.385 +                (javax.swing.JComponent)rpc.getGlassPane() : null;
  42.386 +            if (gp != null) {
  42.387 +                gp.setDoubleBuffered(isOpaque);
  42.388 +            }
  42.389 +            lp.setOpaque(isOpaque);
  42.390 +            root.setOpaque(isOpaque);
  42.391 +            root.setDoubleBuffered(isOpaque); //XXX: the "white rect" workaround
  42.392 +            if (content != null) {
  42.393 +                content.setOpaque(isOpaque);
  42.394 +                content.setDoubleBuffered(isOpaque); //XXX: the "white rect" workaround
  42.395 +
  42.396 +                // Iterate down one level to see whether we have a JApplet
  42.397 +                // (which is also a RootPaneContainer) which requires processing
  42.398 +                int numChildren = content.getComponentCount();
  42.399 +                if (numChildren > 0) {
  42.400 +                    Component child = content.getComponent(0);
  42.401 +                    // It's OK to use instanceof here because we've
  42.402 +                    // already loaded the RootPaneContainer class by now
  42.403 +                    if (child instanceof javax.swing.RootPaneContainer) {
  42.404 +                        setLayersOpaque(child, isOpaque);
  42.405 +                    }
  42.406 +                }
  42.407 +            }
  42.408 +        }
  42.409 +
  42.410 +        Color bg = component.getBackground();
  42.411 +        boolean hasTransparentBg = TRANSPARENT_BACKGROUND_COLOR.equals(bg);
  42.412 +
  42.413 +        Container container = null;
  42.414 +        if (component instanceof Container) {
  42.415 +            container = (Container) component;
  42.416 +        }
  42.417 +
  42.418 +        if (isOpaque) {
  42.419 +            if (hasTransparentBg) {
  42.420 +                // Note: we use the SystemColor.window color as the default.
  42.421 +                // This color is used in the WindowPeer implementations to
  42.422 +                // initialize the background color of the window if it is null.
  42.423 +                // (This might not be the right thing to do for other
  42.424 +                // RootPaneContainers we might be invoked with)
  42.425 +                Color newColor = null;
  42.426 +                if (container != null && container.preserveBackgroundColor != null) {
  42.427 +                    newColor = container.preserveBackgroundColor;
  42.428 +                } else {
  42.429 +                    newColor = SystemColor.window;
  42.430 +                }
  42.431 +                component.setBackground(newColor);
  42.432 +            }
  42.433 +        } else {
  42.434 +            if (!hasTransparentBg && container != null) {
  42.435 +                container.preserveBackgroundColor = bg;
  42.436 +            }
  42.437 +            component.setBackground(TRANSPARENT_BACKGROUND_COLOR);
  42.438 +        }
  42.439 +    }
  42.440 +
  42.441 +
  42.442      // ************************** MIXING CODE *******************************
  42.443  
  42.444      // A window has a parent, but it does NOT have a container
  42.445 @@ -3341,6 +3593,87 @@
  42.446  
  42.447      // ****************** END OF MIXING CODE ********************************
  42.448  
  42.449 +    // This method gets the window location/size as reported by the native
  42.450 +    // system since the locally cached values may represent outdated data.
  42.451 +    // NOTE: this method is invoked on the toolkit thread, and therefore
  42.452 +    // is not supposed to become public/user-overridable.
  42.453 +    private Point2D calculateSecurityWarningPosition(double x, double y,
  42.454 +            double w, double h)
  42.455 +    {
  42.456 +        return new Point2D.Double(
  42.457 +                x + w * securityWarningAlignmentX + securityWarningPointX,
  42.458 +                y + h * securityWarningAlignmentY + securityWarningPointY);
  42.459 +    }
  42.460 +
  42.461 +    static {
  42.462 +        AWTAccessor.setWindowAccessor(new AWTAccessor.WindowAccessor() {
  42.463 +            public float getOpacity(Window window) {
  42.464 +                return window.opacity;
  42.465 +            }
  42.466 +            public void setOpacity(Window window, float opacity) {
  42.467 +                window.setOpacity(opacity);
  42.468 +            }
  42.469 +            public Shape getShape(Window window) {
  42.470 +                return window.getShape();
  42.471 +            }
  42.472 +            public void setShape(Window window, Shape shape) {
  42.473 +                window.setShape(shape);
  42.474 +            }
  42.475 +            public boolean isOpaque(Window window) {
  42.476 +                /*
  42.477 +                return window.getBackground().getAlpha() < 255;
  42.478 +                */
  42.479 +                synchronized (window.getTreeLock()) {
  42.480 +                    return window.opaque;
  42.481 +                }
  42.482 +            }
  42.483 +            public void setOpaque(Window window, boolean opaque) {
  42.484 +                /*
  42.485 +                Color bg = window.getBackground();
  42.486 +                window.setBackground(new Color(bg.getRed(), bg.getGreen(), bg.getBlue(),
  42.487 +                                               opaque ? 255 : 0));
  42.488 +                */
  42.489 +                window.setOpaque(opaque);
  42.490 +            }
  42.491 +            public void updateWindow(Window window, BufferedImage backBuffer) {
  42.492 +                window.updateWindow(backBuffer);
  42.493 +            }
  42.494 +
  42.495 +            public Dimension getSecurityWarningSize(Window window) {
  42.496 +                return new Dimension(window.securityWarningWidth,
  42.497 +                        window.securityWarningHeight);
  42.498 +            }
  42.499 +
  42.500 +            public void setSecurityWarningSize(Window window, int width, int height)
  42.501 +            {
  42.502 +                window.securityWarningWidth = width;
  42.503 +                window.securityWarningHeight = height;
  42.504 +            }
  42.505 +
  42.506 +            public void setSecurityWarningPosition(Window window,
  42.507 +                    Point2D point, float alignmentX, float alignmentY)
  42.508 +            {
  42.509 +                window.securityWarningPointX = point.getX();
  42.510 +                window.securityWarningPointY = point.getY();
  42.511 +                window.securityWarningAlignmentX = alignmentX;
  42.512 +                window.securityWarningAlignmentY = alignmentY;
  42.513 +
  42.514 +                synchronized (window.getTreeLock()) {
  42.515 +                    WindowPeer peer = (WindowPeer)window.getPeer();
  42.516 +                    if (peer != null) {
  42.517 +                        peer.repositionSecurityWarning();
  42.518 +                    }
  42.519 +                }
  42.520 +            }
  42.521 +
  42.522 +            public Point2D calculateSecurityWarningPosition(Window window,
  42.523 +                    double x, double y, double w, double h)
  42.524 +            {
  42.525 +                return window.calculateSecurityWarningPosition(x, y, w, h);
  42.526 +            }
  42.527 +        }); // WindowAccessor
  42.528 +    } // static
  42.529 +
  42.530  } // class Window
  42.531  
  42.532  
    43.1 --- a/src/share/classes/java/awt/event/KeyEvent.java	Thu Apr 16 17:42:00 2009 +0100
    43.2 +++ b/src/share/classes/java/awt/event/KeyEvent.java	Thu Apr 16 19:10:32 2009 -0700
    43.3 @@ -1,5 +1,5 @@
    43.4  /*
    43.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
    43.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    43.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    43.8   *
    43.9   * This code is free software; you can redistribute it and/or modify it
   43.10 @@ -65,15 +65,16 @@
   43.11   * <p>
   43.12   * For key pressed and key released events, the getKeyCode method returns
   43.13   * the event's keyCode.  For key typed events, the getKeyCode method
   43.14 - * always returns VK_UNDEFINED.
   43.15 + * always returns {@code VK_UNDEFINED}. The {@code getExtendedKeyCode} method
   43.16 + * may also be used with many international keyboard layouts.
   43.17   *
   43.18   * <p>
   43.19   * <em>"Key pressed" and "key released" events</em> are lower-level and depend
   43.20   * on the platform and keyboard layout. They are generated whenever a key is
   43.21   * pressed or released, and are the only way to find out about keys that don't
   43.22   * generate character input (e.g., action keys, modifier keys, etc.). The key
   43.23 - * being pressed or released is indicated by the getKeyCode method, which returns
   43.24 - * a virtual key code.
   43.25 + * being pressed or released is indicated by the {@code getKeyCode} and {@code getExtendedKeyCode}
   43.26 + * methods, which return a virtual key code.
   43.27   *
   43.28   * <p>
   43.29   * <em>Virtual key codes</em> are used to report which keyboard key has
   43.30 @@ -111,6 +112,11 @@
   43.31   * platform and keyboard layout. For example, the key that generates VK_Q
   43.32   * when using a U.S. keyboard layout will generate VK_A when using a French
   43.33   * keyboard layout.
   43.34 + * <li>The key that generates {@code VK_Q} when using a U.S. keyboard layout also
   43.35 + * generates a unique code for Russian or Hebrew layout. There is no a
   43.36 + * {@code VK_} constant for these and many other codes in various layouts. These codes
   43.37 + * may be obtained by using {@code getExtendedKeyCode} and are used whenever
   43.38 + * a {@code VK_} constant is used.
   43.39   * <li>Not all characters have a keycode associated with them.  For example,
   43.40   * there is no keycode for the question mark because there is no keyboard
   43.41   * for which it appears on the primary layer.
   43.42 @@ -891,6 +897,12 @@
   43.43       */
   43.44      int keyLocation;
   43.45  
   43.46 +    //set from native code.
   43.47 +    private transient long rawCode = 0;
   43.48 +    private transient long primaryLevelUnicode = 0;
   43.49 +    private transient long scancode = 0; // for MS Windows only
   43.50 +    private transient long extendedKeyCode = 0;
   43.51 +
   43.52      /*
   43.53       * JDK 1.1 serialVersionUID
   43.54       */
   43.55 @@ -1315,6 +1327,9 @@
   43.56              return numpad + "-" + c;
   43.57          }
   43.58  
   43.59 +        if ((keyCode & 0x01000000) != 0) {
   43.60 +            return String.valueOf((char)(keyCode ^ 0x01000000 ));
   43.61 +        }
   43.62          String unknown = Toolkit.getProperty("AWT.unknown", "Unknown");
   43.63          return unknown + " keyCode: 0x" + Integer.toString(keyCode, 16);
   43.64      }
   43.65 @@ -1551,9 +1566,44 @@
   43.66              str.append("KEY_LOCATION_UNKNOWN");
   43.67              break;
   43.68          }
   43.69 +        str.append(",rawCode=").append(rawCode);
   43.70 +        str.append(",primaryLevelUnicode=").append(primaryLevelUnicode);
   43.71 +        str.append(",scancode=").append(scancode);
   43.72 +        str.append(",extendedKeyCode=0x").append(Long.toHexString(extendedKeyCode));
   43.73  
   43.74          return str.toString();
   43.75      }
   43.76 +    /**
   43.77 +     * Returns an extended key code for the event.
   43.78 +     * The extended key code is a unique id assigned to  a key on the keyboard
   43.79 +     * just like {@code keyCode}. However, unlike {@code keyCode}, this value depends on the
   43.80 +     * current keyboard layout. For instance, pressing the left topmost letter key
   43.81 +     * in a common English layout produces the same value as {@code keyCode}, {@code VK_Q}.
   43.82 +     * Pressing the same key in a regular Russian layout gives another code, unique for the
   43.83 +     * letter "Cyrillic I short".
   43.84 +     *
   43.85 +     * @since 1.7
   43.86 +     *
   43.87 +     */
   43.88 +    public  int getExtendedKeyCode() {
   43.89 +        return (int)extendedKeyCode;
   43.90 +    }
   43.91 +    /**
   43.92 +     * Returns an extended key code for a unicode character.
   43.93 +     *
   43.94 +     * @return for a unicode character with a corresponding {@code VK_} constant -- this
   43.95 +     *   {@code VK_} constant; for a character appearing on the primary
   43.96 +     *   level of a known keyboard layout -- a unique integer.
   43.97 +     *   If a character does not appear on the primary level of a known keyboard,
   43.98 +     *   {@code VK_UNDEFINED} is returned.
   43.99 +     *
  43.100 +     * @since 1.7
  43.101 +     *
  43.102 +     */
  43.103 +    public static int getExtendedKeyCodeForChar(int c) {
  43.104 +        // Return a keycode (if any) associated with a character.
  43.105 +        return sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(c);
  43.106 +    }
  43.107  
  43.108      /**
  43.109       * Sets new modifiers by the old ones. The key modifiers
    44.1 --- a/src/share/classes/java/awt/peer/CanvasPeer.java	Thu Apr 16 17:42:00 2009 +0100
    44.2 +++ b/src/share/classes/java/awt/peer/CanvasPeer.java	Thu Apr 16 19:10:32 2009 -0700
    44.3 @@ -25,6 +25,7 @@
    44.4  package java.awt.peer;
    44.5  
    44.6  import java.awt.Canvas;
    44.7 +import java.awt.GraphicsConfiguration;
    44.8  
    44.9  /**
   44.10   * The peer interface for {@link Canvas}.
   44.11 @@ -36,4 +37,13 @@
   44.12   * instances.
   44.13   */
   44.14  public interface CanvasPeer extends ComponentPeer {
   44.15 +    /**
   44.16 +     * Requests a GC that best suits this Canvas. The returned GC may differ
   44.17 +     * from the requested GC passed as the argument to this method. This method
   44.18 +     * must return a non-null value (given the argument is non-null as well).
   44.19 +     *
   44.20 +     * @since 1.7
   44.21 +     */
   44.22 +    GraphicsConfiguration getAppropriateGraphicsConfiguration(
   44.23 +            GraphicsConfiguration gc);
   44.24  }
    45.1 --- a/src/share/classes/java/awt/peer/ComponentPeer.java	Thu Apr 16 17:42:00 2009 +0100
    45.2 +++ b/src/share/classes/java/awt/peer/ComponentPeer.java	Thu Apr 16 19:10:32 2009 -0700
    45.3 @@ -539,4 +539,16 @@
    45.4       */
    45.5      void applyShape(Region shape);
    45.6  
    45.7 +    /**
    45.8 +     * Lowers this component at the bottom of the above HW peer. If the above parameter
    45.9 +     * is null then the method places this component at the top of the Z-order.
   45.10 +     */
   45.11 +    void setZOrder(ComponentPeer above);
   45.12 +
   45.13 +    /**
   45.14 +     * Updates internal data structures related to the component's GC.
   45.15 +     *
   45.16 +     * @since 1.7
   45.17 +     */
   45.18 +    void updateGraphicsData(GraphicsConfiguration gc);
   45.19  }
    46.1 --- a/src/share/classes/java/awt/peer/ContainerPeer.java	Thu Apr 16 17:42:00 2009 +0100
    46.2 +++ b/src/share/classes/java/awt/peer/ContainerPeer.java	Thu Apr 16 19:10:32 2009 -0700
    46.3 @@ -76,21 +76,4 @@
    46.4       * @see Container#validateTree()
    46.5       */
    46.6      void endLayout();
    46.7 -
    46.8 -    /**
    46.9 -     * Restacks native windows - children of this native window - according to
   46.10 -     * Java container order.
   46.11 -     *
   46.12 -     * @since 1.5
   46.13 -     */
   46.14 -    void restack();
   46.15 -
   46.16 -    /**
   46.17 -     * Indicates availability of restacking operation in this container.
   46.18 -     *
   46.19 -     * @return Returns true if restack is supported, false otherwise
   46.20 -     *
   46.21 -     * @since 1.5
   46.22 -     */
   46.23 -    boolean isRestackSupported();
   46.24  }
    47.1 --- a/src/share/classes/java/awt/peer/WindowPeer.java	Thu Apr 16 17:42:00 2009 +0100
    47.2 +++ b/src/share/classes/java/awt/peer/WindowPeer.java	Thu Apr 16 19:10:32 2009 -0700
    47.3 @@ -1,5 +1,5 @@
    47.4  /*
    47.5 - * Copyright 1995-2007 Sun Microsystems, Inc.  All Rights Reserved.
    47.6 + * Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
    47.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    47.8   *
    47.9   * This code is free software; you can redistribute it and/or modify it
   47.10 @@ -27,6 +27,8 @@
   47.11  
   47.12  import java.awt.*;
   47.13  
   47.14 +import java.awt.image.BufferedImage;
   47.15 +
   47.16  /**
   47.17   * The peer interface for {@link Window}.
   47.18   *
   47.19 @@ -92,4 +94,31 @@
   47.20       * @see Window#setIconImages(java.util.List)
   47.21       */
   47.22      void updateIconImages();
   47.23 +
   47.24 +    /**
   47.25 +     * Sets the level of opacity for the window.
   47.26 +     *
   47.27 +     * @see Window#setOpacity(float)
   47.28 +     */
   47.29 +    void setOpacity(float opacity);
   47.30 +
   47.31 +    /**
   47.32 +     * Enables the per-pixel alpha support for the window.
   47.33 +     *
   47.34 +     * @see Window#setBackground(Color)
   47.35 +     */
   47.36 +    void setOpaque(boolean isOpaque);
   47.37 +
   47.38 +    /**
   47.39 +     * Updates the native part of non-opaque window using
   47.40 +     * the given image with color+alpha values for each pixel.
   47.41 +     *
   47.42 +     * @see Window#setBackground(Color)
   47.43 +     */
   47.44 +    void updateWindow(BufferedImage backBuffer);
   47.45 +
   47.46 +    /**
   47.47 +     * Instructs the peer to update the position of the security warning.
   47.48 +     */
   47.49 +    void repositionSecurityWarning();
   47.50  }
    48.1 --- a/src/share/classes/java/beans/Beans.java	Thu Apr 16 17:42:00 2009 +0100
    48.2 +++ b/src/share/classes/java/beans/Beans.java	Thu Apr 16 19:10:32 2009 -0700
    48.3 @@ -1,5 +1,5 @@
    48.4  /*
    48.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
    48.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    48.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    48.8   *
    48.9   * This code is free software; you can redistribute it and/or modify it
   48.10 @@ -27,26 +27,41 @@
   48.11  
   48.12  import com.sun.beans.finder.ClassFinder;
   48.13  
   48.14 -import java.applet.*;
   48.15 +import java.applet.Applet;
   48.16 +import java.applet.AppletContext;
   48.17 +import java.applet.AppletStub;
   48.18 +import java.applet.AudioClip;
   48.19  
   48.20 -import java.awt.*;
   48.21 -
   48.22 -import java.beans.AppletInitializer;
   48.23 +import java.awt.GraphicsEnvironment;
   48.24 +import java.awt.Image;
   48.25  
   48.26  import java.beans.beancontext.BeanContext;
   48.27  
   48.28 -import java.io.*;
   48.29 -
   48.30 -import java.lang.reflect.Constructor;
   48.31 +import java.io.IOException;
   48.32 +import java.io.InputStream;
   48.33 +import java.io.ObjectInputStream;
   48.34 +import java.io.ObjectStreamClass;
   48.35 +import java.io.StreamCorruptedException;
   48.36  
   48.37  import java.net.URL;
   48.38 -import java.lang.reflect.Array;
   48.39 +
   48.40 +import java.security.AccessController;
   48.41 +import java.security.PrivilegedAction;
   48.42 +
   48.43 +import java.util.Enumeration;
   48.44 +import java.util.Hashtable;
   48.45 +import java.util.Iterator;
   48.46 +import java.util.Vector;
   48.47 +
   48.48 +import sun.awt.AppContext;
   48.49  
   48.50  /**
   48.51   * This class provides some general purpose beans control methods.
   48.52   */
   48.53  
   48.54  public class Beans {
   48.55 +    private static final Object DESIGN_TIME = new Object();
   48.56 +    private static final Object GUI_AVAILABLE = new Object();
   48.57  
   48.58      /**
   48.59       * <p>
   48.60 @@ -59,12 +74,12 @@
   48.61       * @param     beanName    the name of the bean within the class-loader.
   48.62       *                        For example "sun.beanbox.foobah"
   48.63       *
   48.64 -     * @exception java.lang.ClassNotFoundException if the class of a serialized
   48.65 +     * @exception ClassNotFoundException if the class of a serialized
   48.66       *              object could not be found.
   48.67 -     * @exception java.io.IOException if an I/O error occurs.
   48.68 +     * @exception IOException if an I/O error occurs.
   48.69       */
   48.70  
   48.71 -    public static Object instantiate(ClassLoader cls, String beanName) throws java.io.IOException, ClassNotFoundException {
   48.72 +    public static Object instantiate(ClassLoader cls, String beanName) throws IOException, ClassNotFoundException {
   48.73          return Beans.instantiate(cls, beanName, null, null);
   48.74      }
   48.75  
   48.76 @@ -80,12 +95,12 @@
   48.77       *                        For example "sun.beanbox.foobah"
   48.78       * @param     beanContext The BeanContext in which to nest the new bean
   48.79       *
   48.80 -     * @exception java.lang.ClassNotFoundException if the class of a serialized
   48.81 +     * @exception ClassNotFoundException if the class of a serialized
   48.82       *              object could not be found.
   48.83 -     * @exception java.io.IOException if an I/O error occurs.
   48.84 +     * @exception IOException if an I/O error occurs.
   48.85       */
   48.86  
   48.87 -    public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws java.io.IOException, ClassNotFoundException {
   48.88 +    public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws IOException, ClassNotFoundException {
   48.89          return Beans.instantiate(cls, beanName, beanContext, null);
   48.90      }
   48.91  
   48.92 @@ -135,19 +150,19 @@
   48.93       * @param     beanContext The BeanContext in which to nest the new bean
   48.94       * @param     initializer The AppletInitializer for the new bean
   48.95       *
   48.96 -     * @exception java.lang.ClassNotFoundException if the class of a serialized
   48.97 +     * @exception ClassNotFoundException if the class of a serialized
   48.98       *              object could not be found.
   48.99 -     * @exception java.io.IOException if an I/O error occurs.
  48.100 +     * @exception IOException if an I/O error occurs.
  48.101       */
  48.102  
  48.103      public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext, AppletInitializer initializer)
  48.104 -                        throws java.io.IOException, ClassNotFoundException {
  48.105 +                        throws IOException, ClassNotFoundException {
  48.106  
  48.107 -        java.io.InputStream ins;
  48.108 -        java.io.ObjectInputStream oins = null;
  48.109 +        InputStream ins;
  48.110 +        ObjectInputStream oins = null;
  48.111          Object result = null;
  48.112          boolean serialized = false;
  48.113 -        java.io.IOException serex = null;
  48.114 +        IOException serex = null;
  48.115  
  48.116          // If the given classloader is null, we check if an
  48.117          // system classloader is available and (if so)
  48.118 @@ -166,8 +181,8 @@
  48.119          // Try to find a serialized object with this name
  48.120          final String serName = beanName.replace('.','/').concat(".ser");
  48.121          final ClassLoader loader = cls;
  48.122 -        ins = (InputStream)java.security.AccessController.doPrivileged
  48.123 -            (new java.security.PrivilegedAction() {
  48.124 +        ins = (InputStream)AccessController.doPrivileged
  48.125 +            (new PrivilegedAction() {
  48.126                  public Object run() {
  48.127                      if (loader == null)
  48.128                          return ClassLoader.getSystemResourceAsStream(serName);
  48.129 @@ -185,7 +200,7 @@
  48.130                  result = oins.readObject();
  48.131                  serialized = true;
  48.132                  oins.close();
  48.133 -            } catch (java.io.IOException ex) {
  48.134 +            } catch (IOException ex) {
  48.135                  ins.close();
  48.136                  // Drop through and try opening the class.  But remember
  48.137                  // the exception in case we can't find the class either.
  48.138 @@ -264,8 +279,8 @@
  48.139  
  48.140                      final ClassLoader cloader = cls;
  48.141                      objectUrl = (URL)
  48.142 -                        java.security.AccessController.doPrivileged
  48.143 -                        (new java.security.PrivilegedAction() {
  48.144 +                        AccessController.doPrivileged
  48.145 +                        (new PrivilegedAction() {
  48.146                              public Object run() {
  48.147                                  if (cloader == null)
  48.148                                      return ClassLoader.getSystemResource
  48.149 @@ -377,10 +392,11 @@
  48.150       * @return  True if we are running in an application construction
  48.151       *          environment.
  48.152       *
  48.153 -     * @see java.beans.DesignMode
  48.154 +     * @see DesignMode
  48.155       */
  48.156      public static boolean isDesignTime() {
  48.157 -        return designTime;
  48.158 +        Object value = AppContext.getAppContext().get(DESIGN_TIME);
  48.159 +        return (value instanceof Boolean) && (Boolean) value;
  48.160      }
  48.161  
  48.162      /**
  48.163 @@ -393,11 +409,12 @@
  48.164       *     false in a server environment or if an application is
  48.165       *     running as part of a batch job.
  48.166       *
  48.167 -     * @see java.beans.Visibility
  48.168 +     * @see Visibility
  48.169       *
  48.170       */
  48.171      public static boolean isGuiAvailable() {
  48.172 -        return guiAvailable;
  48.173 +        Object value = AppContext.getAppContext().get(GUI_AVAILABLE);
  48.174 +        return (value instanceof Boolean) ? (Boolean) value : !GraphicsEnvironment.isHeadless();
  48.175      }
  48.176  
  48.177      /**
  48.178 @@ -423,7 +440,7 @@
  48.179          if (sm != null) {
  48.180              sm.checkPropertiesAccess();
  48.181          }
  48.182 -        designTime = isDesignTime;
  48.183 +        AppContext.getAppContext().put(DESIGN_TIME, Boolean.valueOf(isDesignTime));
  48.184      }
  48.185  
  48.186      /**
  48.187 @@ -449,14 +466,7 @@
  48.188          if (sm != null) {
  48.189              sm.checkPropertiesAccess();
  48.190          }
  48.191 -        guiAvailable = isGuiAvailable;
  48.192 -    }
  48.193 -
  48.194 -
  48.195 -    private static boolean designTime;
  48.196 -    private static boolean guiAvailable;
  48.197 -    static {
  48.198 -        guiAvailable = !GraphicsEnvironment.isHeadless();
  48.199 +        AppContext.getAppContext().put(GUI_AVAILABLE, Boolean.valueOf(isGuiAvailable));
  48.200      }
  48.201  }
  48.202  
  48.203 @@ -501,7 +511,7 @@
  48.204  
  48.205  class BeansAppletContext implements AppletContext {
  48.206      Applet target;
  48.207 -    java.util.Hashtable imageCache = new java.util.Hashtable();
  48.208 +    Hashtable imageCache = new Hashtable();
  48.209  
  48.210      BeansAppletContext(Applet target) {
  48.211          this.target = target;
  48.212 @@ -546,8 +556,8 @@
  48.213          return null;
  48.214      }
  48.215  
  48.216 -    public java.util.Enumeration getApplets() {
  48.217 -        java.util.Vector applets = new java.util.Vector();
  48.218 +    public Enumeration getApplets() {
  48.219 +        Vector applets = new Vector();
  48.220          applets.addElement(target);
  48.221          return applets.elements();
  48.222      }
  48.223 @@ -573,7 +583,7 @@
  48.224          return null;
  48.225      }
  48.226  
  48.227 -    public java.util.Iterator getStreamKeys(){
  48.228 +    public Iterator getStreamKeys(){
  48.229          // We do nothing.
  48.230          return null;
  48.231      }
    49.1 --- a/src/share/classes/java/beans/IndexedPropertyChangeEvent.java	Thu Apr 16 17:42:00 2009 +0100
    49.2 +++ b/src/share/classes/java/beans/IndexedPropertyChangeEvent.java	Thu Apr 16 19:10:32 2009 -0700
    49.3 @@ -1,5 +1,5 @@
    49.4  /*
    49.5 - * Copyright 2003 Sun Microsystems, Inc.  All Rights Reserved.
    49.6 + * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
    49.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    49.8   *
    49.9   * This code is free software; you can redistribute it and/or modify it
   49.10 @@ -41,6 +41,7 @@
   49.11   * @author Mark Davidson
   49.12   */
   49.13  public class IndexedPropertyChangeEvent extends PropertyChangeEvent {
   49.14 +    private static final long serialVersionUID = -320227448495806870L;
   49.15  
   49.16      private int index;
   49.17  
    50.1 --- a/src/share/classes/java/beans/IntrospectionException.java	Thu Apr 16 17:42:00 2009 +0100
    50.2 +++ b/src/share/classes/java/beans/IntrospectionException.java	Thu Apr 16 19:10:32 2009 -0700
    50.3 @@ -1,5 +1,5 @@
    50.4  /*
    50.5 - * Copyright 1996-1998 Sun Microsystems, Inc.  All Rights Reserved.
    50.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    50.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    50.8   *
    50.9   * This code is free software; you can redistribute it and/or modify it
   50.10 @@ -36,6 +36,7 @@
   50.11  
   50.12  public
   50.13  class IntrospectionException extends Exception {
   50.14 +    private static final long serialVersionUID = -3728150539969542619L;
   50.15  
   50.16      /**
   50.17       * Constructs an <code>IntrospectionException</code> with a
    51.1 --- a/src/share/classes/java/beans/PropertyChangeEvent.java	Thu Apr 16 17:42:00 2009 +0100
    51.2 +++ b/src/share/classes/java/beans/PropertyChangeEvent.java	Thu Apr 16 19:10:32 2009 -0700
    51.3 @@ -1,5 +1,5 @@
    51.4  /*
    51.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
    51.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    51.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    51.8   *
    51.9   * This code is free software; you can redistribute it and/or modify it
   51.10 @@ -44,6 +44,7 @@
   51.11   */
   51.12  
   51.13  public class PropertyChangeEvent extends java.util.EventObject {
   51.14 +    private static final long serialVersionUID = 7042693688939648123L;
   51.15  
   51.16      /**
   51.17       * Constructs a new <code>PropertyChangeEvent</code>.
    52.1 --- a/src/share/classes/java/beans/PropertyVetoException.java	Thu Apr 16 17:42:00 2009 +0100
    52.2 +++ b/src/share/classes/java/beans/PropertyVetoException.java	Thu Apr 16 19:10:32 2009 -0700
    52.3 @@ -1,5 +1,5 @@
    52.4  /*
    52.5 - * Copyright 1996-1998 Sun Microsystems, Inc.  All Rights Reserved.
    52.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    52.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    52.8   *
    52.9   * This code is free software; you can redistribute it and/or modify it
   52.10 @@ -33,7 +33,7 @@
   52.11  
   52.12  public
   52.13  class PropertyVetoException extends Exception {
   52.14 -
   52.15 +    private static final long serialVersionUID = 129596057694162164L;
   52.16  
   52.17      /**
   52.18       * Constructs a <code>PropertyVetoException</code> with a
    53.1 --- a/src/share/classes/java/beans/beancontext/BeanContextEvent.java	Thu Apr 16 17:42:00 2009 +0100
    53.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextEvent.java	Thu Apr 16 19:10:32 2009 -0700
    53.3 @@ -1,5 +1,5 @@
    53.4  /*
    53.5 - * Copyright 1997-2003 Sun Microsystems, Inc.  All Rights Reserved.
    53.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    53.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    53.8   *
    53.9   * This code is free software; you can redistribute it and/or modify it
   53.10 @@ -48,6 +48,7 @@
   53.11   */
   53.12  
   53.13  public abstract class BeanContextEvent extends EventObject {
   53.14 +    private static final long serialVersionUID = 7267998073569045052L;
   53.15  
   53.16      /**
   53.17       * Contruct a BeanContextEvent
    54.1 --- a/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java	Thu Apr 16 17:42:00 2009 +0100
    54.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java	Thu Apr 16 19:10:32 2009 -0700
    54.3 @@ -1,5 +1,5 @@
    54.4  /*
    54.5 - * Copyright 1997-2004 Sun Microsystems, Inc.  All Rights Reserved.
    54.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    54.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    54.8   *
    54.9   * This code is free software; you can redistribute it and/or modify it
   54.10 @@ -55,6 +55,7 @@
   54.11   * @see         java.beans.beancontext.BeanContextMembershipListener
   54.12   */
   54.13  public class BeanContextMembershipEvent extends BeanContextEvent {
   54.14 +    private static final long serialVersionUID = 3499346510334590959L;
   54.15  
   54.16      /**
   54.17       * Contruct a BeanContextMembershipEvent
    55.1 --- a/src/share/classes/java/beans/beancontext/BeanContextServiceAvailableEvent.java	Thu Apr 16 17:42:00 2009 +0100
    55.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextServiceAvailableEvent.java	Thu Apr 16 19:10:32 2009 -0700
    55.3 @@ -1,5 +1,5 @@
    55.4  /*
    55.5 - * Copyright 1998-2004 Sun Microsystems, Inc.  All Rights Reserved.
    55.6 + * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
    55.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    55.8   *
    55.9   * This code is free software; you can redistribute it and/or modify it
   55.10 @@ -40,6 +40,7 @@
   55.11   */
   55.12  
   55.13  public class BeanContextServiceAvailableEvent extends BeanContextEvent {
   55.14 +    private static final long serialVersionUID = -5333985775656400778L;
   55.15  
   55.16      /**
   55.17       * Construct a <code>BeanContextAvailableServiceEvent</code>.
    56.1 --- a/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedEvent.java	Thu Apr 16 17:42:00 2009 +0100
    56.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedEvent.java	Thu Apr 16 19:10:32 2009 -0700
    56.3 @@ -1,5 +1,5 @@
    56.4  /*
    56.5 - * Copyright 1998-2004 Sun Microsystems, Inc.  All Rights Reserved.
    56.6 + * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
    56.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    56.8   *
    56.9   * This code is free software; you can redistribute it and/or modify it
   56.10 @@ -37,6 +37,7 @@
   56.11   * </p>
   56.12   */
   56.13  public class BeanContextServiceRevokedEvent extends BeanContextEvent {
   56.14 +    private static final long serialVersionUID = -1295543154724961754L;
   56.15  
   56.16      /**
   56.17       * Construct a <code>BeanContextServiceEvent</code>.
    57.1 --- a/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java	Thu Apr 16 17:42:00 2009 +0100
    57.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java	Thu Apr 16 19:10:32 2009 -0700
    57.3 @@ -1,5 +1,5 @@
    57.4  /*
    57.5 - * Copyright 1998-2006 Sun Microsystems, Inc.  All Rights Reserved.
    57.6 + * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
    57.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    57.8   *
    57.9   * This code is free software; you can redistribute it and/or modify it
   57.10 @@ -60,6 +60,7 @@
   57.11  
   57.12  public class      BeanContextServicesSupport extends BeanContextSupport
   57.13         implements BeanContextServices {
   57.14 +    private static final long serialVersionUID = -8494482757288719206L;
   57.15  
   57.16      /**
   57.17       * <p>
   57.18 @@ -594,6 +595,7 @@
   57.19           */
   57.20  
   57.21          protected static class BCSSServiceProvider implements Serializable {
   57.22 +            private static final long serialVersionUID = 861278251667444782L;
   57.23  
   57.24              BCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {
   57.25                  super();
    58.1 --- a/src/share/classes/java/lang/Character.java	Thu Apr 16 17:42:00 2009 +0100
    58.2 +++ b/src/share/classes/java/lang/Character.java	Thu Apr 16 19:10:32 2009 -0700
    58.3 @@ -1,5 +1,5 @@
    58.4  /*
    58.5 - * Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
    58.6 + * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
    58.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    58.8   *
    58.9   * This code is free software; you can redistribute it and/or modify it
   58.10 @@ -920,9 +920,9 @@
   58.11           */
   58.12          public static final UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS =
   58.13              new UnicodeBlock("COMBINING_MARKS_FOR_SYMBOLS", new String[] {"Combining Diacritical Marks for Symbols",
   58.14 -                                                                                                                                                  "CombiningDiacriticalMarksforSymbols",
   58.15 -                                                                          "Combining Marks for Symbols",
   58.16 -                                                                          "CombiningMarksforSymbols" });
   58.17 +                                                                                                                                                   "CombiningDiacriticalMarksforSymbols",
   58.18 +                                                                           "Combining Marks for Symbols",
   58.19 +                                                                           "CombiningMarksforSymbols" });
   58.20  
   58.21          /**
   58.22           * Constant for the "Letterlike Symbols" Unicode character block.
   58.23 @@ -1332,8 +1332,11 @@
   58.24           * @since 1.5
   58.25           */
   58.26          public static final UnicodeBlock CYRILLIC_SUPPLEMENTARY =
   58.27 -            new UnicodeBlock("CYRILLIC_SUPPLEMENTARY", new String[] {"Cyrillic Supplementary",
   58.28 -                                                                     "CyrillicSupplementary"});
   58.29 +            new UnicodeBlock("CYRILLIC_SUPPLEMENTARY",
   58.30 +                             new String[] {"Cyrillic Supplementary",
   58.31 +                                           "CyrillicSupplementary",
   58.32 +                                           "Cyrillic Supplement",
   58.33 +                                           "CyrillicSupplement"});
   58.34  
   58.35          /**
   58.36           * Constant for the "Tagalog" Unicode character block.
   58.37 @@ -1641,157 +1644,579 @@
   58.38          public static final UnicodeBlock LOW_SURROGATES =
   58.39              new UnicodeBlock("LOW_SURROGATES", new String[] {"Low Surrogates", "LowSurrogates"});
   58.40  
   58.41 +        /**
   58.42 +         * Constant for the "Arabic Supplement" Unicode character block.
   58.43 +         * @since 1.7
   58.44 +         */
   58.45 +        public static final UnicodeBlock ARABIC_SUPPLEMENT =
   58.46 +            new UnicodeBlock("ARABIC_SUPPLEMENT",
   58.47 +                             new String[] { "Arabic Supplement",
   58.48 +                                            "ArabicSupplement"});
   58.49 +
   58.50 +        /**
   58.51 +         * Constant for the "NKo" Unicode character block.
   58.52 +         * @since 1.7
   58.53 +         */
   58.54 +        public static final UnicodeBlock NKO = new UnicodeBlock("NKO");
   58.55 +
   58.56 +        /**
   58.57 +         * Constant for the "Ethiopic Supplement" Unicode character block.
   58.58 +         * @since 1.7
   58.59 +         */
   58.60 +        public static final UnicodeBlock ETHIOPIC_SUPPLEMENT =
   58.61 +            new UnicodeBlock("ETHIOPIC_SUPPLEMENT",
   58.62 +                             new String[] { "Ethiopic Supplement",
   58.63 +                                            "EthiopicSupplement"});
   58.64 +
   58.65 +        /**
   58.66 +         * Constant for the "New Tai Lue" Unicode character block.
   58.67 +         * @since 1.7
   58.68 +         */
   58.69 +        public static final UnicodeBlock NEW_TAI_LUE =
   58.70 +            new UnicodeBlock("NEW_TAI_LUE",
   58.71 +                             new String[] { "New Tai Lue",
   58.72 +                                            "NewTaiLue"});
   58.73 +
   58.74 +        /**
   58.75 +         * Constant for the "Buginese" Unicode character block.
   58.76 +         * @since 1.7
   58.77 +         */
   58.78 +        public static final UnicodeBlock BUGINESE =
   58.79 +            new UnicodeBlock("BUGINESE");
   58.80 +
   58.81 +        /**
   58.82 +         * Constant for the "Balinese" Unicode character block.
   58.83 +         * @since 1.7
   58.84 +         */
   58.85 +        public static final UnicodeBlock BALINESE =
   58.86 +            new UnicodeBlock("BALINESE");
   58.87 +
   58.88 +        /**
   58.89 +         * Constant for the "Sundanese" Unicode character block.
   58.90 +         * @since 1.7
   58.91 +         */
   58.92 +        public static final UnicodeBlock SUNDANESE =
   58.93 +            new UnicodeBlock("SUNDANESE");
   58.94 +
   58.95 +        /**
   58.96 +         * Constant for the "Lepcha" Unicode character block.
   58.97 +         * @since 1.7
   58.98 +         */
   58.99 +        public static final UnicodeBlock LEPCHA = new UnicodeBlock("LEPCHA");
  58.100 +
  58.101 +        /**
  58.102 +         * Constant for the "Ol Chiki" Unicode character block.
  58.103 +         * @since 1.7
  58.104 +         */
  58.105 +        public static final UnicodeBlock OL_CHIKI =
  58.106 +            new UnicodeBlock("OL_CHIKI",
  58.107 +                             new String[] { "Ol Chiki",
  58.108 +                                            "OlChiki"});
  58.109 +
  58.110 +        /**
  58.111 +         * Constant for the "Phonetic Extensions Supplement" Unicode character
  58.112 +         * block.
  58.113 +         * @since 1.7
  58.114 +         */
  58.115 +        public static final UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT =
  58.116 +            new UnicodeBlock("PHONETIC_EXTENSIONS_SUPPLEMENT",
  58.117 +                             new String[] { "Phonetic Extensions Supplement",
  58.118 +                                            "PhoneticExtensionsSupplement"});
  58.119 +
  58.120 +        /**
  58.121 +         * Constant for the "Combining Diacritical Marks Supplement" Unicode
  58.122 +         * character block.
  58.123 +         * @since 1.7
  58.124 +         */
  58.125 +        public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT =
  58.126 +            new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_SUPPLEMENT",
  58.127 +                             new String[] { "Combining Diacritical Marks Supplement",
  58.128 +                                            "CombiningDiacriticalMarksSupplement"});
  58.129 +
  58.130 +        /**
  58.131 +         * Constant for the "Glagolitic" Unicode character block.
  58.132 +         * @since 1.7
  58.133 +         */
  58.134 +        public static final UnicodeBlock GLAGOLITIC =
  58.135 +            new UnicodeBlock("GLAGOLITIC");
  58.136 +
  58.137 +        /**
  58.138 +         * Constant for the "Latin Extended-C" Unicode character block.
  58.139 +         * @since 1.7
  58.140 +         */
  58.141 +        public static final UnicodeBlock LATIN_EXTENDED_C =
  58.142 +            new UnicodeBlock("LATIN_EXTENDED_C",
  58.143 +                             new String[] { "Latin Extended-C",
  58.144 +                                            "LatinExtended-C"});
  58.145 +
  58.146 +        /**
  58.147 +         * Constant for the "Coptic" Unicode character block.
  58.148 +         * @since 1.7
  58.149 +         */
  58.150 +        public static final UnicodeBlock COPTIC = new UnicodeBlock("COPTIC");
  58.151 +
  58.152 +        /**
  58.153 +         * Constant for the "Georgian Supplement" Unicode character block.
  58.154 +         * @since 1.7
  58.155 +         */
  58.156 +        public static final UnicodeBlock GEORGIAN_SUPPLEMENT =
  58.157 +            new UnicodeBlock("GEORGIAN_SUPPLEMENT",
  58.158 +                             new String[] { "Georgian Supplement",
  58.159 +                                            "GeorgianSupplement"});
  58.160 +
  58.161 +        /**
  58.162 +         * Constant for the "Tifinagh" Unicode character block.
  58.163 +         * @since 1.7
  58.164 +         */
  58.165 +        public static final UnicodeBlock TIFINAGH =
  58.166 +            new UnicodeBlock("TIFINAGH");
  58.167 +
  58.168 +        /**
  58.169 +         * Constant for the "Ethiopic Extended" Unicode character block.
  58.170 +         * @since 1.7
  58.171 +         */
  58.172 +        public static final UnicodeBlock ETHIOPIC_EXTENDED =
  58.173 +            new UnicodeBlock("ETHIOPIC_EXTENDED",
  58.174 +                             new String[] { "Ethiopic Extended",
  58.175 +                                            "EthiopicExtended"});
  58.176 +
  58.177 +        /**
  58.178 +         * Constant for the "Cyrillic Extended-A" Unicode character block.
  58.179 +         * @since 1.7
  58.180 +         */
  58.181 +        public static final UnicodeBlock CYRILLIC_EXTENDED_A =
  58.182 +            new UnicodeBlock("CYRILLIC_EXTENDED_A",
  58.183 +                             new String[] { "Cyrillic Extended-A",
  58.184 +                                            "CyrillicExtended-A"});
  58.185 +
  58.186 +        /**
  58.187 +         * Constant for the "Supplemental Punctuation" Unicode character block.
  58.188 +         * @since 1.7
  58.189 +         */
  58.190 +        public static final UnicodeBlock SUPPLEMENTAL_PUNCTUATION =
  58.191 +            new UnicodeBlock("SUPPLEMENTAL_PUNCTUATION",
  58.192 +                             new String[] { "Supplemental Punctuation",
  58.193 +                                            "SupplementalPunctuation"});
  58.194 +
  58.195 +        /**
  58.196 +         * Constant for the "CJK Strokes" Unicode character block.
  58.197 +         * @since 1.7
  58.198 +         */
  58.199 +        public static final UnicodeBlock CJK_STROKES =
  58.200 +            new UnicodeBlock("CJK_STROKES",
  58.201 +                             new String[] { "CJK Strokes",
  58.202 +                                            "CJKStrokes"});
  58.203 +
  58.204 +        /**
  58.205 +         * Constant for the "Vai" Unicode character block.
  58.206 +         * @since 1.7
  58.207 +         */
  58.208 +        public static final UnicodeBlock VAI = new UnicodeBlock("VAI");
  58.209 +
  58.210 +        /**
  58.211 +         * Constant for the "Cyrillic Extended-B" Unicode character block.
  58.212 +         * @since 1.7
  58.213 +         */
  58.214 +        public static final UnicodeBlock CYRILLIC_EXTENDED_B =
  58.215 +            new UnicodeBlock("CYRILLIC_EXTENDED_B",
  58.216 +                             new String[] { "Cyrillic Extended-B",
  58.217 +                                            "CyrillicExtended-B"});
  58.218 +
  58.219 +        /**
  58.220 +         * Constant for the "Modifier Tone Letters" Unicode character block.
  58.221 +         * @since 1.7
  58.222 +         */
  58.223 +        public static final UnicodeBlock MODIFIER_TONE_LETTERS =
  58.224 +            new UnicodeBlock("MODIFIER_TONE_LETTERS",
  58.225 +                             new String[] { "Modifier Tone Letters",
  58.226 +                                            "ModifierToneLetters"});
  58.227 +
  58.228 +        /**
  58.229 +         * Constant for the "Latin Extended-D" Unicode character block.
  58.230 +         * @since 1.7
  58.231 +         */
  58.232 +        public static final UnicodeBlock LATIN_EXTENDED_D =
  58.233 +            new UnicodeBlock("LATIN_EXTENDED_D",
  58.234 +                             new String[] { "Latin Extended-D",
  58.235 +                                            "LatinExtended-D"});
  58.236 +
  58.237 +        /**
  58.238 +         * Constant for the "Syloti Nagri" Unicode character block.
  58.239 +         * @since 1.7
  58.240 +         */
  58.241 +        public static final UnicodeBlock SYLOTI_NAGRI =
  58.242 +            new UnicodeBlock("SYLOTI_NAGRI",
  58.243 +                             new String[] { "Syloti Nagri",
  58.244 +                                            "SylotiNagri"});
  58.245 +
  58.246 +        /**
  58.247 +         * Constant for the "Phags-pa" Unicode character block.
  58.248 +         * @since 1.7
  58.249 +         */
  58.250 +        public static final UnicodeBlock PHAGS_PA =
  58.251 +            new UnicodeBlock("PHAGS_PA", new String[] { "Phags-pa"});
  58.252 +
  58.253 +        /**
  58.254 +         * Constant for the "Saurashtra" Unicode character block.
  58.255 +         * @since 1.7
  58.256 +         */
  58.257 +        public static final UnicodeBlock SAURASHTRA =
  58.258 +            new UnicodeBlock("SAURASHTRA");
  58.259 +
  58.260 +        /**
  58.261 +         * Constant for the "Kayah Li" Unicode character block.
  58.262 +         * @since 1.7
  58.263 +         */
  58.264 +        public static final UnicodeBlock KAYAH_LI =
  58.265 +            new UnicodeBlock("KAYAH_LI",
  58.266 +                             new String[] { "Kayah Li",
  58.267 +                                            "KayahLi"});
  58.268 +
  58.269 +        /**
  58.270 +         * Constant for the "Rejang" Unicode character block.
  58.271 +         * @since 1.7
  58.272 +         */
  58.273 +        public static final UnicodeBlock REJANG = new UnicodeBlock("REJANG");
  58.274 +
  58.275 +        /**
  58.276 +         * Constant for the "Cham" Unicode character block.
  58.277 +         * @since 1.7
  58.278 +         */
  58.279 +        public static final UnicodeBlock CHAM = new UnicodeBlock("CHAM");
  58.280 +
  58.281 +        /**
  58.282 +         * Constant for the "Vertical Forms" Unicode character block.
  58.283 +         * @since 1.7
  58.284 +         */
  58.285 +        public static final UnicodeBlock VERTICAL_FORMS =
  58.286 +            new UnicodeBlock("VERTICAL_FORMS",
  58.287 +                             new String[] { "Vertical Forms",
  58.288 +                                            "VerticalForms"});
  58.289 +
  58.290 +        /**
  58.291 +         * Constant for the "Ancient Greek Numbers" Unicode character block.
  58.292 +         * @since 1.7
  58.293 +         */
  58.294 +        public static final UnicodeBlock ANCIENT_GREEK_NUMBERS =
  58.295 +            new UnicodeBlock("ANCIENT_GREEK_NUMBERS",
  58.296 +                             new String[] { "Ancient Greek Numbers",
  58.297 +                                            "AncientGreekNumbers"});
  58.298 +
  58.299 +        /**
  58.300 +         * Constant for the "Ancient Symbols" Unicode character block.
  58.301 +         * @since 1.7
  58.302 +         */
  58.303 +        public static final UnicodeBlock ANCIENT_SYMBOLS =
  58.304 +            new UnicodeBlock("ANCIENT_SYMBOLS",
  58.305 +                             new String[] { "Ancient Symbols",
  58.306 +                                            "AncientSymbols"});
  58.307 +
  58.308 +        /**
  58.309 +         * Constant for the "Phaistos Disc" Unicode character block.
  58.310 +         * @since 1.7
  58.311 +         */
  58.312 +        public static final UnicodeBlock PHAISTOS_DISC =
  58.313 +            new UnicodeBlock("PHAISTOS_DISC",
  58.314 +                             new String[] { "Phaistos Disc",
  58.315 +                                            "PhaistosDisc"});
  58.316 +
  58.317 +        /**
  58.318 +         * Constant for the "Lycian" Unicode character block.
  58.319 +         * @since 1.7
  58.320 +         */
  58.321 +        public static final UnicodeBlock LYCIAN = new UnicodeBlock("LYCIAN");
  58.322 +
  58.323 +        /**
  58.324 +         * Constant for the "Carian" Unicode character block.
  58.325 +         * @since 1.7
  58.326 +         */
  58.327 +        public static final UnicodeBlock CARIAN = new UnicodeBlock("CARIAN");
  58.328 +
  58.329 +        /**
  58.330 +         * Constant for the "Old Persian" Unicode character block.
  58.331 +         * @since 1.7
  58.332 +         */
  58.333 +        public static final UnicodeBlock OLD_PERSIAN =
  58.334 +            new UnicodeBlock("OLD_PERSIAN",
  58.335 +                             new String[] { "Old Persian",
  58.336 +                                            "OldPersian"});
  58.337 +
  58.338 +        /**
  58.339 +         * Constant for the "Phoenician" Unicode character block.
  58.340 +         * @since 1.7
  58.341 +         */
  58.342 +        public static final UnicodeBlock PHOENICIAN =
  58.343 +            new UnicodeBlock("PHOENICIAN");
  58.344 +
  58.345 +        /**
  58.346 +         * Constant for the "Lydian" Unicode character block.
  58.347 +         * @since 1.7
  58.348 +         */
  58.349 +        public static final UnicodeBlock LYDIAN = new UnicodeBlock("LYDIAN");
  58.350 +
  58.351 +        /**
  58.352 +         * Constant for the "Kharoshthi" Unicode character block.
  58.353 +         * @since 1.7
  58.354 +         */
  58.355 +        public static final UnicodeBlock KHAROSHTHI =
  58.356 +            new UnicodeBlock("KHAROSHTHI");
  58.357 +
  58.358 +        /**
  58.359 +         * Constant for the "Cuneiform" Unicode character block.
  58.360 +         * @since 1.7
  58.361 +         */
  58.362 +        public static final UnicodeBlock CUNEIFORM =
  58.363 +            new UnicodeBlock("CUNEIFORM");
  58.364 +
  58.365 +        /**
  58.366 +         * Constant for the "Cuneiform Numbers and Punctuation" Unicode
  58.367 +         * character block.
  58.368 +         * @since 1.7
  58.369 +         */
  58.370 +        public static final UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION =
  58.371 +            new UnicodeBlock("CUNEIFORM_NUMBERS_AND_PUNCTUATION",
  58.372 +                             new String[] { "Cuneiform Numbers and Punctuation",
  58.373 +                                            "CuneiformNumbersandPunctuation"});
  58.374 +
  58.375 +        /**
  58.376 +         * Constant for the "Ancient Greek Musical Notation" Unicode character
  58.377 +         * block.
  58.378 +         * @since 1.7
  58.379 +         */
  58.380 +        public static final UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION =
  58.381 +            new UnicodeBlock("ANCIENT_GREEK_MUSICAL_NOTATION",
  58.382 +                             new String[] { "Ancient Greek Musical Notation",
  58.383 +                                            "AncientGreekMusicalNotation"});
  58.384 +
  58.385 +        /**
  58.386 +         * Constant for the "Counting Rod Numerals" Unicode character block.
  58.387 +         * @since 1.7
  58.388 +         */
  58.389 +        public static final UnicodeBlock COUNTING_ROD_NUMERALS =
  58.390 +            new UnicodeBlock("COUNTING_ROD_NUMERALS",
  58.391 +                             new String[] { "Counting Rod Numerals",
  58.392 +                                            "CountingRodNumerals"});
  58.393 +
  58.394 +        /**
  58.395 +         * Constant for the "Mahjong Tiles" Unicode character block.
  58.396 +         * @since 1.7
  58.397 +         */
  58.398 +        public static final UnicodeBlock MAHJONG_TILES =
  58.399 +            new UnicodeBlock("MAHJONG_TILES",
  58.400 +                             new String[] { "Mahjong Tiles",
  58.401 +                                            "MahjongTiles"});
  58.402 +
  58.403 +        /**
  58.404 +         * Constant for the "Domino Tiles" Unicode character block.
  58.405 +         * @since 1.7
  58.406 +         */
  58.407 +        public static final UnicodeBlock DOMINO_TILES =
  58.408 +            new UnicodeBlock("DOMINO_TILES",
  58.409 +                             new String[] { "Domino Tiles",
  58.410 +                                            "DominoTiles"});
  58.411 +
  58.412          private static final int blockStarts[] = {
  58.413 -            0x0000, // Basic Latin
  58.414 -            0x0080, // Latin-1 Supplement
  58.415 -            0x0100, // Latin Extended-A
  58.416 -            0x0180, // Latin Extended-B
  58.417 -            0x0250, // IPA Extensions
  58.418 -            0x02B0, // Spacing Modifier Letters
  58.419 -            0x0300, // Combining Diacritical Marks
  58.420 -            0x0370, // Greek and Coptic
  58.421 -            0x0400, // Cyrillic
  58.422 -            0x0500, // Cyrillic Supplementary
  58.423 -            0x0530, // Armenian
  58.424 -            0x0590, // Hebrew
  58.425 -            0x0600, // Arabic
  58.426 -            0x0700, // Syriac
  58.427 -            0x0750, // unassigned
  58.428 -            0x0780, // Thaana
  58.429 -            0x07C0, // unassigned
  58.430 -            0x0900, // Devanagari
  58.431 -            0x0980, // Bengali
  58.432 -            0x0A00, // Gurmukhi
  58.433 -            0x0A80, // Gujarati
  58.434 -            0x0B00, // Oriya
  58.435 -            0x0B80, // Tamil
  58.436 -            0x0C00, // Telugu
  58.437 -            0x0C80, // Kannada
  58.438 -            0x0D00, // Malayalam
  58.439 -            0x0D80, // Sinhala
  58.440 -            0x0E00, // Thai
  58.441 -            0x0E80, // Lao
  58.442 -            0x0F00, // Tibetan
  58.443 -            0x1000, // Myanmar
  58.444 -            0x10A0, // Georgian
  58.445 -            0x1100, // Hangul Jamo
  58.446 -            0x1200, // Ethiopic
  58.447 -            0x1380, // unassigned
  58.448 -            0x13A0, // Cherokee
  58.449 -            0x1400, // Unified Canadian Aboriginal Syllabics
  58.450 -            0x1680, // Ogham
  58.451 -            0x16A0, // Runic
  58.452 -            0x1700, // Tagalog
  58.453 -            0x1720, // Hanunoo
  58.454 -            0x1740, // Buhid
  58.455 -            0x1760, // Tagbanwa
  58.456 -            0x1780, // Khmer
  58.457 -            0x1800, // Mongolian
  58.458 -            0x18B0, // unassigned
  58.459 -            0x1900, // Limbu
  58.460 -            0x1950, // Tai Le
  58.461 -            0x1980, // unassigned
  58.462 -            0x19E0, // Khmer Symbols
  58.463 -            0x1A00, // unassigned
  58.464 -            0x1D00, // Phonetic Extensions
  58.465 -            0x1D80, // unassigned
  58.466 -            0x1E00, // Latin Extended Additional
  58.467 -            0x1F00, // Greek Extended
  58.468 -            0x2000, // General Punctuation
  58.469 -            0x2070, // Superscripts and Subscripts
  58.470 -            0x20A0, // Currency Symbols
  58.471 -            0x20D0, // Combining Diacritical Marks for Symbols
  58.472 -            0x2100, // Letterlike Symbols
  58.473 -            0x2150, // Number Forms
  58.474 -            0x2190, // Arrows
  58.475 -            0x2200, // Mathematical Operators
  58.476 -            0x2300, // Miscellaneous Technical
  58.477 -            0x2400, // Control Pictures
  58.478 -            0x2440, // Optical Character Recognition
  58.479 -            0x2460, // Enclosed Alphanumerics
  58.480 -            0x2500, // Box Drawing
  58.481 -            0x2580, // Block Elements
  58.482 -            0x25A0, // Geometric Shapes
  58.483 -            0x2600, // Miscellaneous Symbols
  58.484 -            0x2700, // Dingbats
  58.485 -            0x27C0, // Miscellaneous Mathematical Symbols-A
  58.486 -            0x27F0, // Supplemental Arrows-A
  58.487 -            0x2800, // Braille Patterns
  58.488 -            0x2900, // Supplemental Arrows-B
  58.489 -            0x2980, // Miscellaneous Mathematical Symbols-B
  58.490 -            0x2A00, // Supplemental Mathematical Operators
  58.491 -            0x2B00, // Miscellaneous Symbols and Arrows
  58.492 -            0x2C00, // unassigned
  58.493 -            0x2E80, // CJK Radicals Supplement
  58.494 -            0x2F00, // Kangxi Radicals
  58.495 -            0x2FE0, // unassigned
  58.496 -            0x2FF0, // Ideographic Description Characters
  58.497 -            0x3000, // CJK Symbols and Punctuation
  58.498 -            0x3040, // Hiragana
  58.499 -            0x30A0, // Katakana
  58.500 -            0x3100, // Bopomofo
  58.501 -            0x3130, // Hangul Compatibility Jamo
  58.502 -            0x3190, // Kanbun
  58.503 -            0x31A0, // Bopomofo Extended
  58.504 -            0x31C0, // unassigned
  58.505 -            0x31F0, // Katakana Phonetic Extensions
  58.506 -            0x3200, // Enclosed CJK Letters and Months
  58.507 -            0x3300, // CJK Compatibility
  58.508 -            0x3400, // CJK Unified Ideographs Extension A
  58.509 -            0x4DC0, // Yijing Hexagram Symbols
  58.510 -            0x4E00, // CJK Unified Ideographs
  58.511 -            0xA000, // Yi Syllables
  58.512 -            0xA490, // Yi Radicals
  58.513 -            0xA4D0, // unassigned
  58.514 -            0xAC00, // Hangul Syllables
  58.515 -            0xD7B0, // unassigned
  58.516 -            0xD800, // High Surrogates
  58.517 -            0xDB80, // High Private Use Surrogates
  58.518 -            0xDC00, // Low Surrogates
  58.519 -            0xE000, // Private Use
  58.520 -            0xF900, // CJK Compatibility Ideographs
  58.521 -            0xFB00, // Alphabetic Presentation Forms
  58.522 -            0xFB50, // Arabic Presentation Forms-A
  58.523 -            0xFE00, // Variation Selectors
  58.524 -            0xFE10, // unassigned
  58.525 -            0xFE20, // Combining Half Marks
  58.526 -            0xFE30, // CJK Compatibility Forms
  58.527 -            0xFE50, // Small Form Variants
  58.528 -            0xFE70, // Arabic Presentation Forms-B
  58.529 -            0xFF00, // Halfwidth and Fullwidth Forms
  58.530 -            0xFFF0, // Specials
  58.531 -            0x10000, // Linear B Syllabary
  58.532 -            0x10080, // Linear B Ideograms
  58.533 -            0x10100, // Aegean Numbers
  58.534 -            0x10140, // unassigned
  58.535 -            0x10300, // Old Italic
  58.536 -            0x10330, // Gothic
  58.537 -            0x10350, // unassigned
  58.538 -            0x10380, // Ugaritic
  58.539 -            0x103A0, // unassigned
  58.540 -            0x10400, // Deseret
  58.541 -            0x10450, // Shavian
  58.542 -            0x10480, // Osmanya
  58.543 -            0x104B0, // unassigned
  58.544 -            0x10800, // Cypriot Syllabary
  58.545 -            0x10840, // unassigned
  58.546 -            0x1D000, // Byzantine Musical Symbols
  58.547 -            0x1D100, // Musical Symbols
  58.548 -            0x1D200, // unassigned
  58.549 -            0x1D300, // Tai Xuan Jing Symbols
  58.550 -            0x1D360, // unassigned
  58.551 -            0x1D400, // Mathematical Alphanumeric Symbols
  58.552 -            0x1D800, // unassigned
  58.553 -            0x20000, // CJK Unified Ideographs Extension B
  58.554 -            0x2A6E0, // unassigned
  58.555 -            0x2F800, // CJK Compatibility Ideographs Supplement
  58.556 -            0x2FA20, // unassigned
  58.557 -            0xE0000, // Tags
  58.558 -            0xE0080, // unassigned
  58.559 -            0xE0100, // Variation Selectors Supplement
  58.560 -            0xE01F0, // unassigned
  58.561 -            0xF0000, // Supplementary Private Use Area-A
  58.562 -            0x100000, // Supplementary Private Use Area-B
  58.563 +            0x0000,   // 0000..007F; Basic Latin
  58.564 +            0x0080,   // 0080..00FF; Latin-1 Supplement
  58.565 +            0x0100,   // 0100..017F; Latin Extended-A
  58.566 +            0x0180,   // 0180..024F; Latin Extended-B
  58.567 +            0x0250,   // 0250..02AF; IPA Extensions
  58.568 +            0x02B0,   // 02B0..02FF; Spacing Modifier Letters
  58.569 +            0x0300,   // 0300..036F; Combining Diacritical Marks
  58.570 +            0x0370,   // 0370..03FF; Greek and Coptic
  58.571 +            0x0400,   // 0400..04FF; Cyrillic
  58.572 +            0x0500,   // 0500..052F; Cyrillic Supplement
  58.573 +            0x0530,   // 0530..058F; Armenian
  58.574 +            0x0590,   // 0590..05FF; Hebrew
  58.575 +            0x0600,   // 0600..06FF; Arabic
  58.576 +            0x0700,   // 0700..074F; Syria
  58.577 +            0x0750,   // 0750..077F; Arabic Supplement
  58.578 +            0x0780,   // 0780..07BF; Thaana
  58.579 +            0x07C0,   // 07C0..07FF; NKo
  58.580 +            0x0800,   //             unassigned
  58.581 +            0x0900,   // 0900..097F; Devanagari
  58.582 +            0x0980,   // 0980..09FF; Bengali
  58.583 +            0x0A00,   // 0A00..0A7F; Gurmukhi
  58.584 +            0x0A80,   // 0A80..0AFF; Gujarati
  58.585 +            0x0B00,   // 0B00..0B7F; Oriya
  58.586 +            0x0B80,   // 0B80..0BFF; Tamil
  58.587 +            0x0C00,   // 0C00..0C7F; Telugu
  58.588 +            0x0C80,   // 0C80..0CFF; Kannada
  58.589 +            0x0D00,   // 0D00..0D7F; Malayalam
  58.590 +            0x0D80,   // 0D80..0DFF; Sinhala
  58.591 +            0x0E00,   // 0E00..0E7F; Thai
  58.592 +            0x0E80,   // 0E80..0EFF; Lao
  58.593 +            0x0F00,   // 0F00..0FFF; Tibetan
  58.594 +            0x1000,   // 1000..109F; Myanmar
  58.595 +            0x10A0,   // 10A0..10FF; Georgian
  58.596 +            0x1100,   // 1100..11FF; Hangul Jamo
  58.597 +            0x1200,   // 1200..137F; Ethiopic
  58.598 +            0x1380,   // 1380..139F; Ethiopic Supplement
  58.599 +            0x13A0,   // 13A0..13FF; Cherokee
  58.600 +            0x1400,   // 1400..167F; Unified Canadian Aboriginal Syllabics
  58.601 +            0x1680,   // 1680..169F; Ogham
  58.602 +            0x16A0,   // 16A0..16FF; Runic
  58.603 +            0x1700,   // 1700..171F; Tagalog
  58.604 +            0x1720,   // 1720..173F; Hanunoo
  58.605 +            0x1740,   // 1740..175F; Buhid
  58.606 +            0x1760,   // 1760..177F; Tagbanwa
  58.607 +            0x1780,   // 1780..17FF; Khmer
  58.608 +            0x1800,   // 1800..18AF; Mongolian
  58.609 +            0x18B0,   //             unassigned
  58.610 +            0x1900,   // 1900..194F; Limbu
  58.611 +            0x1950,   // 1950..197F; Tai Le
  58.612 +            0x1980,   // 1980..19DF; New Tai Lue
  58.613 +            0x19E0,   // 19E0..19FF; Khmer Symbols
  58.614 +            0x1A00,   // 1A00..1A1F; Buginese
  58.615 +            0x1A20,   //             unassigned
  58.616 +            0x1B00,   // 1B00..1B7F; Balinese
  58.617 +            0x1B80,   // 1B80..1BBF; Sundanese
  58.618 +            0x1BC0,   //             unassigned
  58.619 +            0x1C00,   // 1C00..1C4F; Lepcha
  58.620 +            0x1C50,   // 1C50..1C7F; Ol Chiki
  58.621 +            0x1C80,   //             unassigned
  58.622 +            0x1D00,   // 1D00..1D7F; Phonetic Extensions
  58.623 +            0x1D80,   // 1D80..1DBF; Phonetic Extensions Supplement
  58.624 +            0x1DC0,   // 1DC0..1DFF; Combining Diacritical Marks Supplement
  58.625 +            0x1E00,   // 1E00..1EFF; Latin Extended Additional
  58.626 +            0x1F00,   // 1F00..1FFF; Greek Extended
  58.627 +            0x2000,   // 2000..206F; General Punctuation
  58.628 +            0x2070,   // 2070..209F; Superscripts and Subscripts
  58.629 +            0x20A0,   // 20A0..20CF; Currency Symbols
  58.630 +            0x20D0,   // 20D0..20FF; Combining Diacritical Marks for Symbols
  58.631 +            0x2100,   // 2100..214F; Letterlike Symbols
  58.632 +            0x2150,   // 2150..218F; Number Forms
  58.633 +            0x2190,   // 2190..21FF; Arrows
  58.634 +            0x2200,   // 2200..22FF; Mathematical Operators
  58.635 +            0x2300,   // 2300..23FF; Miscellaneous Technical
  58.636 +            0x2400,   // 2400..243F; Control Pictures
  58.637 +            0x2440,   // 2440..245F; Optical Character Recognition
  58.638 +            0x2460,   // 2460..24FF; Enclosed Alphanumerics
  58.639 +            0x2500,   // 2500..257F; Box Drawing
  58.640 +            0x2580,   // 2580..259F; Block Elements
  58.641 +            0x25A0,   // 25A0..25FF; Geometric Shapes
  58.642 +            0x2600,   // 2600..26FF; Miscellaneous Symbols
  58.643 +            0x2700,   // 2700..27BF; Dingbats
  58.644 +            0x27C0,   // 27C0..27EF; Miscellaneous Mathematical Symbols-A
  58.645 +            0x27F0,   // 27F0..27FF; Supplemental Arrows-A
  58.646 +            0x2800,   // 2800..28FF; Braille Patterns
  58.647 +            0x2900,   // 2900..297F; Supplemental Arrows-B
  58.648 +            0x2980,   // 2980..29FF; Miscellaneous Mathematical Symbols-B
  58.649 +            0x2A00,   // 2A00..2AFF; Supplemental Mathematical Operators
  58.650 +            0x2B00,   // 2B00..2BFF; Miscellaneous Symbols and Arrows
  58.651 +            0x2C00,   // 2C00..2C5F; Glagolitic
  58.652 +            0x2C60,   // 2C60..2C7F; Latin Extended-C
  58.653 +            0x2C80,   // 2C80..2CFF; Coptic
  58.654 +            0x2D00,   // 2D00..2D2F; Georgian Supplement
  58.655 +            0x2D30,   // 2D30..2D7F; Tifinagh
  58.656 +            0x2D80,   // 2D80..2DDF; Ethiopic Extended
  58.657 +            0x2DE0,   // 2DE0..2DFF; Cyrillic Extended-A
  58.658 +            0x2E00,   // 2E00..2E7F; Supplemental Punctuation
  58.659 +            0x2E80,   // 2E80..2EFF; CJK Radicals Supplement
  58.660 +            0x2F00,   // 2F00..2FDF; Kangxi Radicals
  58.661 +            0x2FE0,   //             unassigned
  58.662 +            0x2FF0,   // 2FF0..2FFF; Ideographic Description Characters
  58.663 +            0x3000,   // 3000..303F; CJK Symbols and Punctuation
  58.664 +            0x3040,   // 3040..309F; Hiragana
  58.665 +            0x30A0,   // 30A0..30FF; Katakana
  58.666 +            0x3100,   // 3100..312F; Bopomofo
  58.667 +            0x3130,   // 3130..318F; Hangul Compatibility Jamo
  58.668 +            0x3190,   // 3190..319F; Kanbun
  58.669 +            0x31A0,   // 31A0..31BF; Bopomofo Extended
  58.670 +            0x31C0,   // 31C0..31EF; CJK Strokes
  58.671 +            0x31F0,   // 31F0..31FF; Katakana Phonetic Extensions
  58.672 +            0x3200,   // 3200..32FF; Enclosed CJK Letters and Months
  58.673 +            0x3300,   // 3300..33FF; CJK Compatibility
  58.674 +            0x3400,   // 3400..4DBF; CJK Unified Ideographs Extension A
  58.675 +            0x4DC0,   // 4DC0..4DFF; Yijing Hexagram Symbols
  58.676 +            0x4E00,   // 4E00..9FFF; CJK Unified Ideograph
  58.677 +            0xA000,   // A000..A48F; Yi Syllables
  58.678 +            0xA490,   // A490..A4CF; Yi Radicals
  58.679 +            0xA4D0,   //             unassigned
  58.680 +            0xA500,   // A500..A63F; Vai
  58.681 +            0xA640,   // A640..A69F; Cyrillic Extended-B
  58.682 +            0xA6A0,   //             unassigned
  58.683 +            0xA700,   // A700..A71F; Modifier Tone Letters
  58.684 +            0xA720,   // A720..A7FF; Latin Extended-D
  58.685 +            0xA800,   // A800..A82F; Syloti Nagri
  58.686 +            0xA830,   //             unassigned
  58.687 +            0xA840,   // A840..A87F; Phags-pa
  58.688 +            0xA880,   // A880..A8DF; Saurashtra
  58.689 +            0xA8E0,   //             unassigned
  58.690 +            0xA900,   // A900..A92F; Kayah Li
  58.691 +            0xA930,   // A930..A95F; Rejang
  58.692 +            0xA960,   //             unassigned
  58.693 +            0xAA00,   // AA00..AA5F; Cham
  58.694 +            0xAA60,   //             unassigned
  58.695 +            0xAC00,   // AC00..D7AF; Hangul Syllables
  58.696 +            0xD7B0,   //             unassigned
  58.697 +            0xD800,   // D800..DB7F; High Surrogates
  58.698 +            0xDB80,   // DB80..DBFF; High Private Use Surrogates
  58.699 +            0xDC00,   // DC00..DFFF; Low Surrogates
  58.700 +            0xE000,   // E000..F8FF; Private Use Area
  58.701 +            0xF900,   // F900..FAFF; CJK Compatibility Ideographs
  58.702 +            0xFB00,   // FB00..FB4F; Alphabetic Presentation Forms
  58.703 +            0xFB50,   // FB50..FDFF; Arabic Presentation Forms-A
  58.704 +            0xFE00,   // FE00..FE0F; Variation Selectors
  58.705 +            0xFE10,   // FE10..FE1F; Vertical Forms
  58.706 +            0xFE20,   // FE20..FE2F; Combining Half Marks
  58.707 +            0xFE30,   // FE30..FE4F; CJK Compatibility Forms
  58.708 +            0xFE50,   // FE50..FE6F; Small Form Variants
  58.709 +            0xFE70,   // FE70..FEFF; Arabic Presentation Forms-B
  58.710 +            0xFF00,   // FF00..FFEF; Halfwidth and Fullwidth Forms
  58.711 +            0xFFF0,   // FFF0..FFFF; Specials
  58.712 +            0x10000,  // 10000..1007F; Linear B Syllabary
  58.713 +            0x10080,  // 10080..100FF; Linear B Ideograms
  58.714 +            0x10100,  // 10100..1013F; Aegean Numbers
  58.715 +            0x10140,  // 10140..1018F; Ancient Greek Numbers
  58.716 +            0x10190,  // 10190..101CF; Ancient Symbols
  58.717 +            0x101D0,  // 101D0..101FF; Phaistos Disc
  58.718 +            0x10200,  //               unassigned
  58.719 +            0x10280,  // 10280..1029F; Lycian
  58.720 +            0x102A0,  // 102A0..102DF; Carian
  58.721 +            0x102E0,  //               unassigned
  58.722 +            0x10300,  // 10300..1032F; Old Italic
  58.723 +            0x10330,  // 10330..1034F; Gothic
  58.724 +            0x10350,  //               unassigned
  58.725 +            0x10380,  // 10380..1039F; Ugaritic
  58.726 +            0x103A0,  // 103A0..103DF; Old Persian
  58.727 +            0x103E0,  //               unassigned
  58.728 +            0x10400,  // 10400..1044F; Desere
  58.729 +            0x10450,  // 10450..1047F; Shavian
  58.730 +            0x10480,  // 10480..104AF; Osmanya
  58.731 +            0x104B0,  //               unassigned
  58.732 +            0x10800,  // 10800..1083F; Cypriot Syllabary
  58.733 +            0x10840,  //               unassigned
  58.734 +            0x10900,  // 10900..1091F; Phoenician
  58.735 +            0x10920,  // 10920..1093F; Lydian
  58.736 +            0x10940,  //               unassigned
  58.737 +            0x10A00,  // 10A00..10A5F; Kharoshthi
  58.738 +            0x10A60,  //               unassigned
  58.739 +            0x12000,  // 12000..123FF; Cuneiform
  58.740 +            0x12400,  // 12400..1247F; Cuneiform Numbers and Punctuation
  58.741 +            0x12480,  //               unassigned
  58.742 +            0x1D000,  // 1D000..1D0FF; Byzantine Musical Symbols
  58.743 +            0x1D100,  // 1D100..1D1FF; Musical Symbols
  58.744 +            0x1D200,  // 1D200..1D24F; Ancient Greek Musical Notation
  58.745 +            0x1D250,  //               unassigned
  58.746 +            0x1D300,  // 1D300..1D35F; Tai Xuan Jing Symbols
  58.747 +            0x1D360,  // 1D360..1D37F; Counting Rod Numerals
  58.748 +            0x1D380,  //               unassigned
  58.749 +            0x1D400,  // 1D400..1D7FF; Mathematical Alphanumeric Symbols
  58.750 +            0x1D800,  //               unassigned
  58.751 +            0x1F000,  // 1F000..1F02F; Mahjong Tiles
  58.752 +            0x1F030,  // 1F030..1F09F; Domino Tiles
  58.753 +            0x1F0A0,  //               unassigned
  58.754 +            0x20000,  // 20000..2A6DF; CJK Unified Ideographs Extension B
  58.755 +            0x2A6E0,  //               unassigned
  58.756 +            0x2F800,  // 2F800..2FA1F; CJK Compatibility Ideographs Supplement
  58.757 +            0x2FA20,  //               unassigned
  58.758 +            0xE0000,  // E0000..E007F; Tags
  58.759 +            0xE0080,  //               unassigned
  58.760 +            0xE0100,  // E0100..E01EF; Variation Selectors Supplement
  58.761 +            0xE01F0,  //               unassigned
  58.762 +            0xF0000,  // F0000..FFFFF; Supplementary Private Use Area-A
  58.763 +            0x100000, // 100000..10FFFF; Supplementary Private Use Area-B
  58.764          };
  58.765  
  58.766          private static final UnicodeBlock[] blocks = {
  58.767 @@ -1809,8 +2234,9 @@
  58.768              HEBREW,
  58.769              ARABIC,
  58.770              SYRIAC,
  58.771 -            null,
  58.772 +            ARABIC_SUPPLEMENT,
  58.773              THAANA,
  58.774 +            NKO,
  58.775              null,
  58.776              DEVANAGARI,
  58.777              BENGALI,
  58.778 @@ -1829,7 +2255,7 @@
  58.779              GEORGIAN,
  58.780              HANGUL_JAMO,
  58.781              ETHIOPIC,
  58.782 -            null,
  58.783 +            ETHIOPIC_SUPPLEMENT,
  58.784              CHEROKEE,
  58.785              UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS,
  58.786              OGHAM,
  58.787 @@ -1843,11 +2269,19 @@
  58.788              null,
  58.789              LIMBU,
  58.790              TAI_LE,
  58.791 +            NEW_TAI_LUE,
  58.792 +            KHMER_SYMBOLS,
  58.793 +            BUGINESE,
  58.794              null,
  58.795 -            KHMER_SYMBOLS,
  58.796 +            BALINESE,
  58.797 +            SUNDANESE,
  58.798 +            null,
  58.799 +            LEPCHA,
  58.800 +            OL_CHIKI,
  58.801              null,
  58.802              PHONETIC_EXTENSIONS,
  58.803 -            null,
  58.804 +            PHONETIC_EXTENSIONS_SUPPLEMENT,
  58.805 +            COMBINING_DIACRITICAL_MARKS_SUPPLEMENT,
  58.806              LATIN_EXTENDED_ADDITIONAL,
  58.807              GREEK_EXTENDED,
  58.808              GENERAL_PUNCTUATION,
  58.809 @@ -1874,7 +2308,14 @@
  58.810              MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B,
  58.811              SUPPLEMENTAL_MATHEMATICAL_OPERATORS,
  58.812              MISCELLANEOUS_SYMBOLS_AND_ARROWS,
  58.813 -            null,
  58.814 +            GLAGOLITIC,
  58.815 +            LATIN_EXTENDED_C,
  58.816 +            COPTIC,
  58.817 +            GEORGIAN_SUPPLEMENT,
  58.818 +            TIFINAGH,
  58.819 +            ETHIOPIC_EXTENDED,
  58.820 +            CYRILLIC_EXTENDED_A,
  58.821 +            SUPPLEMENTAL_PUNCTUATION,
  58.822              CJK_RADICALS_SUPPLEMENT,
  58.823              KANGXI_RADICALS,
  58.824              null,
  58.825 @@ -1886,7 +2327,7 @@
  58.826              HANGUL_COMPATIBILITY_JAMO,
  58.827              KANBUN,
  58.828              BOPOMOFO_EXTENDED,
  58.829 -            null,
  58.830 +            CJK_STROKES,
  58.831              KATAKANA_PHONETIC_EXTENSIONS,
  58.832              ENCLOSED_CJK_LETTERS_AND_MONTHS,
  58.833              CJK_COMPATIBILITY,
  58.834 @@ -1896,6 +2337,21 @@
  58.835              YI_SYLLABLES,
  58.836              YI_RADICALS,
  58.837              null,
  58.838 +            VAI,
  58.839 +            CYRILLIC_EXTENDED_B,
  58.840 +            null,
  58.841 +            MODIFIER_TONE_LETTERS,
  58.842 +            LATIN_EXTENDED_D,
  58.843 +            SYLOTI_NAGRI,
  58.844 +            null,
  58.845 +            PHAGS_PA,
  58.846 +            SAURASHTRA,
  58.847 +            null,
  58.848 +            KAYAH_LI,
  58.849 +            REJANG,
  58.850 +            null,
  58.851 +            CHAM,
  58.852 +            null,
  58.853              HANGUL_SYLLABLES,
  58.854              null,
  58.855              HIGH_SURROGATES,
  58.856 @@ -1906,7 +2362,7 @@
  58.857              ALPHABETIC_PRESENTATION_FORMS,
  58.858              ARABIC_PRESENTATION_FORMS_A,
  58.859              VARIATION_SELECTORS,
  58.860 -            null,
  58.861 +            VERTICAL_FORMS,
  58.862              COMBINING_HALF_MARKS,
  58.863              CJK_COMPATIBILITY_FORMS,
  58.864              SMALL_FORM_VARIANTS,
  58.865 @@ -1916,11 +2372,18 @@
  58.866              LINEAR_B_SYLLABARY,
  58.867              LINEAR_B_IDEOGRAMS,
  58.868              AEGEAN_NUMBERS,
  58.869 +            ANCIENT_GREEK_NUMBERS,
  58.870 +            ANCIENT_SYMBOLS,
  58.871 +            PHAISTOS_DISC,
  58.872 +            null,
  58.873 +            LYCIAN,
  58.874 +            CARIAN,
  58.875              null,
  58.876              OLD_ITALIC,
  58.877              GOTHIC,
  58.878              null,
  58.879              UGARITIC,
  58.880 +            OLD_PERSIAN,
  58.881              null,
  58.882              DESERET,
  58.883              SHAVIAN,
  58.884 @@ -1928,13 +2391,26 @@
  58.885              null,
  58.886              CYPRIOT_SYLLABARY,
  58.887              null,
  58.888 +            PHOENICIAN,
  58.889 +            LYDIAN,
  58.890 +            null,
  58.891 +            KHAROSHTHI,
  58.892 +            null,
  58.893 +            CUNEIFORM,
  58.894 +            CUNEIFORM_NUMBERS_AND_PUNCTUATION,
  58.895 +            null,
  58.896              BYZANTINE_MUSICAL_SYMBOLS,
  58.897              MUSICAL_SYMBOLS,
  58.898 +            ANCIENT_GREEK_MUSICAL_NOTATION,
  58.899              null,
  58.900              TAI_XUAN_JING_SYMBOLS,
  58.901 +            COUNTING_ROD_NUMERALS,
  58.902              null,
  58.903              MATHEMATICAL_ALPHANUMERIC_SYMBOLS,
  58.904              null,
  58.905 +            MAHJONG_TILES,
  58.906 +            DOMINO_TILES,
  58.907 +            null,
  58.908              CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
  58.909              null,
  58.910              CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,
    59.1 --- a/src/share/classes/java/lang/Class.java	Thu Apr 16 17:42:00 2009 +0100
    59.2 +++ b/src/share/classes/java/lang/Class.java	Thu Apr 16 19:10:32 2009 -0700
    59.3 @@ -1,5 +1,5 @@
    59.4  /*
    59.5 - * Copyright 1994-2008 Sun Microsystems, Inc.  All Rights Reserved.
    59.6 + * Copyright 1994-2009 Sun Microsystems, Inc.  All Rights Reserved.
    59.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    59.8   *
    59.9   * This code is free software; you can redistribute it and/or modify it
   59.10 @@ -2846,14 +2846,14 @@
   59.11          if (loader == null)
   59.12              return desiredAssertionStatus0(this);
   59.13  
   59.14 -        synchronized(loader) {
   59.15 -            // If the classloader has been initialized with
   59.16 -            // the assertion directives, ask it. Otherwise,
   59.17 -            // ask the VM.
   59.18 -            return (loader.classAssertionStatus == null ?
   59.19 -                    desiredAssertionStatus0(this) :
   59.20 -                    loader.desiredAssertionStatus(getName()));
   59.21 +        // If the classloader has been initialized with the assertion
   59.22 +        // directives, ask it. Otherwise, ask the VM.
   59.23 +        synchronized(loader.assertionLock) {
   59.24 +            if (loader.classAssertionStatus != null) {
   59.25 +                return loader.desiredAssertionStatus(getName());
   59.26 +            }
   59.27          }
   59.28 +        return desiredAssertionStatus0(this);
   59.29      }
   59.30  
   59.31      // Retrieves the desired assertion status of this class from the VM
    60.1 --- a/src/share/classes/java/lang/ClassLoader.java	Thu Apr 16 17:42:00 2009 +0100
    60.2 +++ b/src/share/classes/java/lang/ClassLoader.java	Thu Apr 16 19:10:32 2009 -0700
    60.3 @@ -1,5 +1,5 @@
    60.4  /*
    60.5 - * Copyright 1994-2008 Sun Microsystems, Inc.  All Rights Reserved.
    60.6 + * Copyright 1994-2009 Sun Microsystems, Inc.  All Rights Reserved.
    60.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    60.8   *
    60.9   * This code is free software; you can redistribute it and/or modify it
   60.10 @@ -40,14 +40,17 @@
   60.11  import java.security.PrivilegedExceptionAction;
   60.12  import java.security.ProtectionDomain;
   60.13  import java.security.cert.Certificate;
   60.14 +import java.util.Collections;
   60.15  import java.util.Enumeration;
   60.16 -import java.util.Hashtable;
   60.17  import java.util.HashMap;
   60.18  import java.util.HashSet;
   60.19  import java.util.Set;
   60.20  import java.util.Stack;
   60.21  import java.util.Map;
   60.22  import java.util.Vector;
   60.23 +import java.util.Hashtable;
   60.24 +import java.util.WeakHashMap;
   60.25 +import java.util.concurrent.ConcurrentHashMap;
   60.26  import sun.misc.ClassFileTransformer;
   60.27  import sun.misc.CompoundEnumeration;
   60.28  import sun.misc.Resource;
   60.29 @@ -91,6 +94,17 @@
   60.30   * called the "bootstrap class loader", does not itself have a parent but may
   60.31   * serve as the parent of a <tt>ClassLoader</tt> instance.
   60.32   *
   60.33 + * <p> Class loaders that support concurrent loading of classes are known as
   60.34 + * <em>parallel capable</em> class loaders and are required to register
   60.35 + * themselves at their class initialization time by invoking the
   60.36 + * {@link
   60.37 + * #registerAsParallelCapable <tt>ClassLoader.registerAsParallelCapable</tt>}
   60.38 + * method. In environments in which the delegation model is not strictly
   60.39 + * hierarchical, class loaders need to be parallel capable, otherise class
   60.40 + * loading can lead to deadlocks because the loader lock is held for the
   60.41 + * duration of the class loading process (see {@link #loadClass
   60.42 + * <tt>loadClass</tt>} methods).
   60.43 + *
   60.44   * <p> Normally, the Java virtual machine loads classes from the local file
   60.45   * system in a platform-dependent manner.  For example, on UNIX systems, the
   60.46   * virtual machine loads classes from the directory defined by the
   60.47 @@ -160,31 +174,51 @@
   60.48  public abstract class ClassLoader {
   60.49  
   60.50      private static native void registerNatives();
   60.51 +
   60.52 +    // Set of classes which are registered as parallel capable class loaders
   60.53 +    private static final Set<Class<? extends ClassLoader>> parallelLoaders
   60.54 +        = Collections.newSetFromMap(Collections.synchronizedMap
   60.55 +              (new WeakHashMap<Class<? extends ClassLoader>, Boolean>()));
   60.56 +
   60.57      static {
   60.58          registerNatives();
   60.59 +        parallelLoaders.add(ClassLoader.class);
   60.60      }
   60.61  
   60.62      // If initialization succeed this is set to true and security checks will
   60.63      // succeed.  Otherwise the object is not initialized and the object is
   60.64      // useless.
   60.65 -    private boolean initialized = false;
   60.66 +    private final boolean initialized;
   60.67  
   60.68      // The parent class loader for delegation
   60.69 -    private ClassLoader parent;
   60.70 +    // Note: VM hardcoded the offset of this field, thus all new fields
   60.71 +    // must be added *after* it.
   60.72 +    private final ClassLoader parent;
   60.73 +
   60.74 +    // Maps class name to the corresponding lock object when the current
   60.75 +    // class loader is parallel capable.
   60.76 +    // Note: VM also uses this field to decide if the current class loader
   60.77 +    // is parallel capable and the appropriate lock object for class loading.
   60.78 +    private final ConcurrentHashMap<String, Object> parallelLockMap;
   60.79  
   60.80      // Hashtable that maps packages to certs
   60.81 -    private Hashtable<String, Certificate[]> package2certs
   60.82 -        = new Hashtable<String, Certificate[]>(11);
   60.83 +    private final Map <String, Certificate[]> package2certs;
   60.84  
   60.85      // Shared among all packages with unsigned classes
   60.86 -    Certificate[] nocerts;
   60.87 +    private static final Certificate[] nocerts = new Certificate[0];
   60.88  
   60.89 -    // The classes loaded by this class loader.  The only purpose of this table
   60.90 +    // The classes loaded by this class loader. The only purpose of this table
   60.91      // is to keep the classes from being GC'ed until the loader is GC'ed.
   60.92 -    private Vector<Class<?>> classes = new Vector<Class<?>>();
   60.93 +    private final Vector<Class<?>> classes = new Vector<Class<?>>();
   60.94 +
   60.95 +    // The "default" domain. Set as the default ProtectionDomain on newly
   60.96 +    // created classes.
   60.97 +    private final ProtectionDomain defaultDomain =
   60.98 +        new ProtectionDomain(new CodeSource(null, (Certificate[]) null),
   60.99 +                             null, this, null);
  60.100  
  60.101      // The initiating protection domains for all classes loaded by this loader
  60.102 -    private Set<ProtectionDomain> domains = new HashSet<ProtectionDomain>();
  60.103 +    private final Set<ProtectionDomain> domains;
  60.104  
  60.105      // Invoked by the VM to record every loaded class with this loader.
  60.106      void addClass(Class c) {
  60.107 @@ -193,7 +227,9 @@
  60.108  
  60.109      // The packages defined in this class loader.  Each package name is mapped
  60.110      // to its corresponding Package object.
  60.111 -    private HashMap<String, Package> packages = new HashMap<String, Package>();
  60.112 +    // @GuardedBy("itself")
  60.113 +    private final HashMap<String, Package> packages =
  60.114 +        new HashMap<String, Package>();
  60.115  
  60.116      /**
  60.117       * Creates a new class loader using the specified parent class loader for
  60.118 @@ -220,6 +256,19 @@
  60.119              security.checkCreateClassLoader();
  60.120          }
  60.121          this.parent = parent;
  60.122 +        if (parallelLoaders.contains(this.getClass())) {
  60.123 +            parallelLockMap = new ConcurrentHashMap<String, Object>();
  60.124 +            package2certs = new ConcurrentHashMap<String, Certificate[]>();
  60.125 +            domains =
  60.126 +                Collections.synchronizedSet(new HashSet<ProtectionDomain>());
  60.127 +            assertionLock = new Object();
  60.128 +        } else {
  60.129 +            // no finer-grained lock; lock on the classloader instance
  60.130 +            parallelLockMap = null;
  60.131 +            package2certs = new Hashtable<String, Certificate[]>();
  60.132 +            domains = new HashSet<ProtectionDomain>();
  60.133 +            assertionLock = this;
  60.134 +        }
  60.135          initialized = true;
  60.136      }
  60.137  
  60.138 @@ -244,10 +293,22 @@
  60.139              security.checkCreateClassLoader();
  60.140          }
  60.141          this.parent = getSystemClassLoader();
  60.142 +        if (parallelLoaders.contains(this.getClass())) {
  60.143 +            parallelLockMap = new ConcurrentHashMap<String, Object>();
  60.144 +            package2certs = new ConcurrentHashMap<String, Certificate[]>();
  60.145 +            domains =
  60.146 +                Collections.synchronizedSet(new HashSet<ProtectionDomain>());
  60.147 +            assertionLock = new Object();
  60.148 +        } else {
  60.149 +            // no finer-grained lock; lock on the classloader instance
  60.150 +            parallelLockMap = null;
  60.151 +            package2certs = new Hashtable<String, Certificate[]>();
  60.152 +            domains = new HashSet<ProtectionDomain>();
  60.153 +            assertionLock = this;
  60.154 +        }
  60.155          initialized = true;
  60.156      }
  60.157  
  60.158 -
  60.159      // -- Class --
  60.160  
  60.161      /**
  60.162 @@ -296,6 +357,10 @@
  60.163       * <p> Subclasses of <tt>ClassLoader</tt> are encouraged to override {@link
  60.164       * #findClass(String)}, rather than this method.  </p>
  60.165       *
  60.166 +     * <p> Unless overridden, this method synchronizes on the result of
  60.167 +     * {@link #getClassLoadingLock <tt>getClassLoadingLock</tt>} method
  60.168 +     * during the entire class loading process.
  60.169 +     *
  60.170       * @param  name
  60.171       *         The <a href="#name">binary name</a> of the class
  60.172       *
  60.173 @@ -307,37 +372,80 @@
  60.174       * @throws  ClassNotFoundException
  60.175       *          If the class could not be found
  60.176       */
  60.177 -    protected synchronized Class<?> loadClass(String name, boolean resolve)
  60.178 +    protected Class<?> loadClass(String name, boolean resolve)
  60.179          throws ClassNotFoundException
  60.180      {
  60.181 -        // First, check if the class has already been loaded
  60.182 -        Class c = findLoadedClass(name);
  60.183 -        if (c == null) {
  60.184 -            try {
  60.185 -                if (parent != null) {
  60.186 -                    c = parent.loadClass(name, false);
  60.187 -                } else {
  60.188 -                    c = findBootstrapClass0(name);
  60.189 +        synchronized (getClassLoadingLock(name)) {
  60.190 +            // First, check if the class has already been loaded
  60.191 +            Class c = findLoadedClass(name);
  60.192 +            if (c == null) {
  60.193 +                try {
  60.194 +                    if (parent != null) {
  60.195 +                        c = parent.loadClass(name, false);
  60.196 +                    } else {
  60.197 +                        c = findBootstrapClass0(name);
  60.198 +                    }
  60.199 +                } catch (ClassNotFoundException e) {
  60.200 +                    // If still not found, then invoke findClass in order
  60.201 +                    // to find the class.
  60.202 +                    c = findClass(name);
  60.203                  }
  60.204 -            } catch (ClassNotFoundException e) {
  60.205 -                // If still not found, then invoke findClass in order
  60.206 -                // to find the class.
  60.207 -                c = findClass(name);
  60.208 +            }
  60.209 +            if (resolve) {
  60.210 +                resolveClass(c);
  60.211 +            }
  60.212 +            return c;
  60.213 +        }
  60.214 +    }
  60.215 +
  60.216 +    /**
  60.217 +     * Returns the lock object for class loading operations.
  60.218 +     * For backward compatibility, the default implementation of this method
  60.219 +     * behaves as follows. If this ClassLoader object is registered as
  60.220 +     * parallel capable, the method returns a dedicated object associated
  60.221 +     * with the specified class name. Otherwise, the method returns this
  60.222 +     * ClassLoader object. </p>
  60.223 +     *
  60.224 +     * @param  className
  60.225 +     *         The name of the to-be-loaded class
  60.226 +     *
  60.227 +     * @return the lock for class loading operations
  60.228 +     *
  60.229 +     * @throws NullPointerException
  60.230 +     *         If registered as parallel capable and <tt>className</tt> is null
  60.231 +     *
  60.232 +     * @see #loadClass(String, boolean)
  60.233 +     *
  60.234 +     * @since  1.7
  60.235 +     */
  60.236 +    protected Object getClassLoadingLock(String className) {
  60.237 +        Object lock = this;
  60.238 +        if (parallelLockMap != null) {
  60.239 +            Object newLock = new Object();
  60.240 +            lock = parallelLockMap.putIfAbsent(className, newLock);
  60.241 +            if (lock == null) {
  60.242 +                lock = newLock;
  60.243              }
  60.244          }
  60.245 -        if (resolve) {
  60.246 -            resolveClass(c);
  60.247 -        }
  60.248 -        return c;
  60.249 +        return lock;
  60.250      }
  60.251  
  60.252      // This method is invoked by the virtual machine to load a class.
  60.253 -    private synchronized Class loadClassInternal(String name)
  60.254 +    private Class loadClassInternal(String name)
  60.255          throws ClassNotFoundException
  60.256      {
  60.257 -        return loadClass(name);
  60.258 +        // For backward compatibility, explicitly lock on 'this' when
  60.259 +        // the current class loader is not parallel capable.
  60.260 +        if (parallelLockMap == null) {
  60.261 +            synchronized (this) {
  60.262 +                 return loadClass(name);
  60.263 +            }
  60.264 +        } else {
  60.265 +            return loadClass(name);
  60.266 +        }
  60.267      }
  60.268  
  60.269 +    // Invoked by the VM after loading class with this loader.
  60.270      private void checkPackageAccess(Class cls, ProtectionDomain pd) {
  60.271          final SecurityManager sm = System.getSecurityManager();
  60.272          if (sm != null) {
  60.273 @@ -486,31 +594,32 @@
  60.274  
  60.275      /* Determine protection domain, and check that:
  60.276          - not define java.* class,
  60.277 -        - signer of this class matches signers for the rest of the classes in package.
  60.278 +        - signer of this class matches signers for the rest of the classes in
  60.279 +          package.
  60.280      */
  60.281      private ProtectionDomain preDefineClass(String name,
  60.282 -                                            ProtectionDomain protectionDomain)
  60.283 +                                            ProtectionDomain pd)
  60.284      {
  60.285          if (!checkName(name))
  60.286              throw new NoClassDefFoundError("IllegalName: " + name);
  60.287  
  60.288          if ((name != null) && name.startsWith("java.")) {
  60.289 -            throw new SecurityException("Prohibited package name: " +
  60.290 -                                        name.substring(0, name.lastIndexOf('.')));
  60.291 +            throw new SecurityException
  60.292 +                ("Prohibited package name: " +
  60.293 +                 name.substring(0, name.lastIndexOf('.')));
  60.294          }
  60.295 -        if (protectionDomain == null) {
  60.296 -            protectionDomain = getDefaultDomain();
  60.297 +        if (pd == null) {
  60.298 +            pd = defaultDomain;
  60.299          }
  60.300  
  60.301 -        if (name != null)
  60.302 -            checkCerts(name, protectionDomain.getCodeSource());
  60.303 +        if (name != null) checkCerts(name, pd.getCodeSource());
  60.304  
  60.305 -        return protectionDomain;
  60.306 +        return pd;
  60.307      }
  60.308  
  60.309 -    private String defineClassSourceLocation(ProtectionDomain protectionDomain)
  60.310 +    private String defineClassSourceLocation(ProtectionDomain pd)
  60.311      {
  60.312 -        CodeSource cs = protectionDomain.getCodeSource();
  60.313 +        CodeSource cs = pd.getCodeSource();
  60.314          String source = null;
  60.315          if (cs != null && cs.getLocation() != null) {
  60.316              source = cs.getLocation().toString();
  60.317 @@ -519,14 +628,15 @@
  60.318      }
  60.319  
  60.320      private Class defineTransformedClass(String name, byte[] b, int off, int len,
  60.321 -                                         ProtectionDomain protectionDomain,
  60.322 +                                         ProtectionDomain pd,
  60.323                                           ClassFormatError cfe, String source)
  60.324        throws ClassFormatError
  60.325      {
  60.326          // Class format error - try to transform the bytecode and
  60.327          // define the class again
  60.328          //
  60.329 -        ClassFileTransformer[] transformers = ClassFileTransformer.getTransformers();
  60.330 +        ClassFileTransformer[] transformers =
  60.331 +            ClassFileTransformer.getTransformers();
  60.332          Class c = null;
  60.333  
  60.334          if (transformers != null) {
  60.335 @@ -535,7 +645,7 @@
  60.336                      // Transform byte code using transformer
  60.337                      byte[] tb = transformer.transform(b, off, len);
  60.338                      c = defineClass1(name, tb, 0, tb.length,
  60.339 -                                     protectionDomain, source);
  60.340 +                                     pd, source);
  60.341                      break;
  60.342                  } catch (ClassFormatError cfe2)     {
  60.343                      // If ClassFormatError occurs, try next transformer
  60.344 @@ -552,11 +662,10 @@
  60.345          return c;
  60.346      }
  60.347  
  60.348 -    private void postDefineClass(Class c, ProtectionDomain protectionDomain)
  60.349 +    private void postDefineClass(Class c, ProtectionDomain pd)
  60.350      {
  60.351 -        if (protectionDomain.getCodeSource() != null) {
  60.352 -            Certificate certs[] =
  60.353 -                protectionDomain.getCodeSource().getCertificates();
  60.354 +        if (pd.getCodeSource() != null) {
  60.355 +            Certificate certs[] = pd.getCodeSource().getCertificates();
  60.356              if (certs != null)
  60.357                  setSigners(c, certs);
  60.358          }
  60.359 @@ -641,7 +750,8 @@
  60.360          try {
  60.361              c = defineClass1(name, b, off, len, protectionDomain, source);
  60.362          } catch (ClassFormatError cfe) {
  60.363 -            c = defineTransformedClass(name, b, off, len, protectionDomain, cfe, source);
  60.364 +            c = defineTransformedClass(name, b, off, len, protectionDomain, cfe,
  60.365 +                                       source);
  60.366          }
  60.367  
  60.368          postDefineClass(c, protectionDomain);
  60.369 @@ -656,10 +766,10 @@
  60.370       * specified in the documentation for {@link #defineClass(String, byte[],
  60.371       * int, int)}.  Before the class can be used it must be resolved.
  60.372       *
  60.373 -     * <p>The rules about the first class defined in a package determining the set of
  60.374 -     * certificates for the package, and the restrictions on class names are identical
  60.375 -     * to those specified in the documentation for {@link #defineClass(String, byte[],
  60.376 -     * int, int, ProtectionDomain)}.
  60.377 +     * <p>The rules about the first class defined in a package determining the
  60.378 +     * set of certificates for the package, and the restrictions on class names
  60.379 +     * are identical to those specified in the documentation for {@link
  60.380 +     * #defineClass(String, byte[], int, int, ProtectionDomain)}.
  60.381       *
  60.382       * <p> An invocation of this method of the form
  60.383       * <i>cl</i><tt>.defineClass(</tt><i>name</i><tt>,</tt>
  60.384 @@ -668,12 +778,13 @@
  60.385       *
  60.386       * <blockquote><tt>
  60.387       * ...<br>
  60.388 -     * byte[] temp = new byte[</tt><i>bBuffer</i><tt>.{@link java.nio.ByteBuffer#remaining
  60.389 -     * remaining}()];<br>
  60.390 +     * byte[] temp = new byte[</tt><i>bBuffer</i><tt>.{@link
  60.391 +     * java.nio.ByteBuffer#remaining remaining}()];<br>
  60.392       *     </tt><i>bBuffer</i><tt>.{@link java.nio.ByteBuffer#get(byte[])
  60.393       * get}(temp);<br>
  60.394       *     return {@link #defineClass(String, byte[], int, int, ProtectionDomain)
  60.395 -     * </tt><i>cl</i><tt>.defineClass}(</tt><i>name</i><tt>, temp, 0, temp.length, </tt><i>pd</i><tt>);<br>
  60.396 +     * </tt><i>cl</i><tt>.defineClass}(</tt><i>name</i><tt>, temp, 0,
  60.397 +     * temp.length, </tt><i>pd</i><tt>);<br>
  60.398       * </tt></blockquote>
  60.399       *
  60.400       * @param  name
  60.401 @@ -682,9 +793,9 @@
  60.402       *
  60.403       * @param  b
  60.404       *         The bytes that make up the class data. The bytes from positions
  60.405 -     *         <tt>b.position()</tt> through <tt>b.position() + b.limit() -1 </tt>
  60.406 -     *         should have the format of a valid class file as defined by the <a
  60.407 -     *         href="http://java.sun.com/docs/books/vmspec/">Java Virtual
  60.408 +     *         <tt>b.position()</tt> through <tt>b.position() + b.limit() -1
  60.409 +     *         </tt> should have the format of a valid class file as defined by
  60.410 +     *         the <a href="http://java.sun.com/docs/books/vmspec/">Java Virtual
  60.411       *         Machine Specification</a>.
  60.412       *
  60.413       * @param  protectionDomain
  60.414 @@ -738,11 +849,13 @@
  60.415          String source = defineClassSourceLocation(protectionDomain);
  60.416  
  60.417          try {
  60.418 -            c = defineClass2(name, b, b.position(), len, protectionDomain, source);
  60.419 +            c = defineClass2(name, b, b.position(), len, protectionDomain,
  60.420 +                             source);
  60.421          } catch (ClassFormatError cfe) {
  60.422              byte[] tb = new byte[len];
  60.423              b.get(tb);  // get bytes out of byte buffer.
  60.424 -            c = defineTransformedClass(name, tb, 0, len, protectionDomain, cfe, source);
  60.425 +            c = defineTransformedClass(name, tb, 0, len, protectionDomain, cfe,
  60.426 +                                       source);
  60.427          }
  60.428  
  60.429          postDefineClass(c, protectionDomain);
  60.430 @@ -769,33 +882,29 @@
  60.431          return true;
  60.432      }
  60.433  
  60.434 -    private synchronized void checkCerts(String name, CodeSource cs) {
  60.435 +    private void checkCerts(String name, CodeSource cs) {
  60.436          int i = name.lastIndexOf('.');
  60.437          String pname = (i == -1) ? "" : name.substring(0, i);
  60.438 -        Certificate[] pcerts = package2certs.get(pname);
  60.439 -        if (pcerts == null) {
  60.440 -            // first class in this package gets to define which
  60.441 -            // certificates must be the same for all other classes
  60.442 -            // in this package
  60.443 -            if (cs != null) {
  60.444 -                pcerts = cs.getCertificates();
  60.445 +
  60.446 +        Certificate[] certs = null;
  60.447 +        if (cs != null) {
  60.448 +            certs = cs.getCertificates();
  60.449 +        }
  60.450 +        Certificate[] pcerts = null;
  60.451 +        if (parallelLockMap == null) {
  60.452 +            synchronized (this) {
  60.453 +                pcerts = package2certs.get(pname);
  60.454 +                if (pcerts == null) {
  60.455 +                    package2certs.put(pname, (certs == null? nocerts:certs));
  60.456 +                }
  60.457              }
  60.458 -            if (pcerts == null) {
  60.459 -                if (nocerts == null)
  60.460 -                    nocerts = new Certificate[0];
  60.461 -                pcerts = nocerts;
  60.462 -            }
  60.463 -            package2certs.put(pname, pcerts);
  60.464          } else {
  60.465 -            Certificate[] certs = null;
  60.466 -            if (cs != null) {
  60.467 -                certs = cs.getCertificates();
  60.468 -            }
  60.469 -
  60.470 -            if (!compareCerts(pcerts, certs)) {
  60.471 -                throw new SecurityException("class \""+ name +
  60.472 -                                            "\"'s signer information does not match signer information of other classes in the same package");
  60.473 -            }
  60.474 +            pcerts = ((ConcurrentHashMap<String, Certificate[]>)package2certs).
  60.475 +                putIfAbsent(pname, (certs == null? nocerts:certs));
  60.476 +        }
  60.477 +        if (pcerts != null && !compareCerts(pcerts, certs)) {
  60.478 +            throw new SecurityException("class \""+ name +
  60.479 +                 "\"'s signer information does not match signer information of other classes in the same package");
  60.480          }
  60.481      }
  60.482  
  60.483 @@ -1075,6 +1184,47 @@
  60.484          return java.util.Collections.emptyEnumeration();
  60.485      }
  60.486  
  60.487 +    // index 0: java.lang.ClassLoader.class
  60.488 +    // index 1: the immediate caller of index 0.
  60.489 +    // index 2: the immediate caller of index 1.
  60.490 +    private static native Class<? extends ClassLoader> getCaller(int index);
  60.491 +
  60.492 +    /**
  60.493 +     * Registers the caller class loader as parallel capable.
  60.494 +     * In order for the registration to succeed, all super classes
  60.495 +     * of the caller class loader must also be registered as
  60.496 +     * parallel capable when this method is called. </p>
  60.497 +     * Note that once a class loader is registered as
  60.498 +     * parallel capable, there is no way to change it back.
  60.499 +     * In addition, registration should be done statically before
  60.500 +     * any instance of the caller classloader being constructed. </p>
  60.501 +     *
  60.502 +     * @return  true if the caller is successfully registered as
  60.503 +     *          parallel capable and false if otherwise.
  60.504 +     *
  60.505 +     * @since   1.7
  60.506 +     */
  60.507 +    protected static boolean registerAsParallelCapable() {
  60.508 +        Class<? extends ClassLoader> caller = getCaller(1);
  60.509 +        Class superCls = caller.getSuperclass();
  60.510 +        boolean result = false;
  60.511 +        // Explicit synchronization needed for composite action
  60.512 +        synchronized (parallelLoaders) {
  60.513 +            if (!parallelLoaders.contains(caller)) {
  60.514 +                if (parallelLoaders.contains(superCls)) {
  60.515 +                    // register the immediate caller as parallel capable
  60.516 +                    // if and only if all of its super classes are.
  60.517 +                    // Note: given current classloading sequence, if
  60.518 +                    // the immediate super class is parallel capable,
  60.519 +                    // all the super classes higher up must be too.
  60.520 +                    result = true;
  60.521 +                    parallelLoaders.add(caller);
  60.522 +                }
  60.523 +            } else result = true;
  60.524 +        }
  60.525 +        return result;
  60.526 +    }
  60.527 +
  60.528      /**
  60.529       * Find a resource of the specified name from the search path used to load
  60.530       * classes.  This method locates the resource through the system class
  60.531 @@ -1141,7 +1291,8 @@
  60.532      private static Enumeration<URL> getBootstrapResources(String name)
  60.533          throws IOException
  60.534      {
  60.535 -        final Enumeration<Resource> e = getBootstrapClassPath().getResources(name);
  60.536 +        final Enumeration<Resource> e =
  60.537 +            getBootstrapClassPath().getResources(name);
  60.538          return new Enumeration<URL> () {
  60.539              public URL nextElement() {
  60.540                  return e.nextElement().getURL();
  60.541 @@ -1377,9 +1528,11 @@
  60.542      }
  60.543  
  60.544      // The class loader for the system
  60.545 +    // @GuardedBy("ClassLoader.class")
  60.546      private static ClassLoader scl;
  60.547  
  60.548      // Set to true once the system class loader has been set
  60.549 +    // @GuardedBy("ClassLoader.class")
  60.550      private static boolean sclSet;
  60.551  
  60.552  
  60.553 @@ -1592,19 +1745,6 @@
  60.554          }
  60.555      }
  60.556  
  60.557 -    // The "default" domain. Set as the default ProtectionDomain on newly
  60.558 -    // created classes.
  60.559 -    private ProtectionDomain defaultDomain = null;
  60.560 -
  60.561 -    // Returns (and initializes) the default domain.
  60.562 -    private synchronized ProtectionDomain getDefaultDomain() {
  60.563 -        if (defaultDomain == null) {
  60.564 -            CodeSource cs = new CodeSource(null, (Certificate[]) null);
  60.565 -            defaultDomain = new ProtectionDomain(cs, null, this, null);
  60.566 -        }
  60.567 -        return defaultDomain;
  60.568 -    }
  60.569 -
  60.570      // All native library names we've loaded.
  60.571      private static Vector<String> loadedLibraryNames
  60.572          = new Vector<String>();
  60.573 @@ -1622,8 +1762,8 @@
  60.574          = new Stack<NativeLibrary>();
  60.575  
  60.576      // The paths searched for libraries
  60.577 -    static private String usr_paths[];
  60.578 -    static private String sys_paths[];
  60.579 +    private static String usr_paths[];
  60.580 +    private static String sys_paths[];
  60.581  
  60.582      private static String[] initializePath(String propname) {
  60.583          String ldpath = System.getProperty(propname, "");
  60.584 @@ -1803,7 +1943,10 @@
  60.585  
  60.586      // -- Assertion management --
  60.587  
  60.588 +    final Object assertionLock;
  60.589 +
  60.590      // The default toggle for assertion checking.
  60.591 +    // @GuardedBy("assertionLock")
  60.592      private boolean defaultAssertionStatus = false;
  60.593  
  60.594      // Maps String packageName to Boolean package default assertion status Note
  60.595 @@ -1811,12 +1954,14 @@
  60.596      // is null then we are delegating assertion status queries to the VM, i.e.,
  60.597      // none of this ClassLoader's assertion status modification methods have
  60.598      // been invoked.
  60.599 +    // @GuardedBy("assertionLock")
  60.600      private Map<String, Boolean> packageAssertionStatus = null;
  60.601  
  60.602      // Maps String fullyQualifiedClassName to Boolean assertionStatus If this
  60.603      // field is null then we are delegating assertion status queries to the VM,
  60.604      // i.e., none of this ClassLoader's assertion status modification methods
  60.605      // have been invoked.
  60.606 +    // @GuardedBy("assertionLock")
  60.607      Map<String, Boolean> classAssertionStatus = null;
  60.608  
  60.609      /**
  60.610 @@ -1834,11 +1979,13 @@
  60.611       *
  60.612       * @since  1.4
  60.613       */
  60.614 -    public synchronized void setDefaultAssertionStatus(boolean enabled) {
  60.615 -        if (classAssertionStatus == null)
  60.616 -            initializeJavaAssertionMaps();
  60.617 +    public void setDefaultAssertionStatus(boolean enabled) {
  60.618 +        synchronized (assertionLock) {
  60.619 +            if (classAssertionStatus == null)
  60.620 +                initializeJavaAssertionMaps();
  60.621  
  60.622 -        defaultAssertionStatus = enabled;
  60.623 +            defaultAssertionStatus = enabled;
  60.624 +        }
  60.625      }
  60.626  
  60.627      /**
  60.628 @@ -1878,13 +2025,14 @@
  60.629       *
  60.630       * @since  1.4
  60.631       */
  60.632 -    public synchronized void setPackageAssertionStatus(String packageName,
  60.633 -                                                       boolean enabled)
  60.634 -    {
  60.635 -        if (packageAssertionStatus == null)
  60.636 -            initializeJavaAssertionMaps();
  60.637 +    public void setPackageAssertionStatus(String packageName,
  60.638 +                                          boolean enabled) {
  60.639 +        synchronized (assertionLock) {
  60.640 +            if (packageAssertionStatus == null)
  60.641 +                initializeJavaAssertionMaps();
  60.642  
  60.643 -        packageAssertionStatus.put(packageName, enabled);
  60.644 +            packageAssertionStatus.put(packageName, enabled);
  60.645 +        }
  60.646      }
  60.647  
  60.648      /**
  60.649 @@ -1909,13 +2057,13 @@
  60.650       *
  60.651       * @since  1.4
  60.652       */
  60.653 -    public synchronized void setClassAssertionStatus(String className,
  60.654 -                                                     boolean enabled)
  60.655 -    {
  60.656 -        if (classAssertionStatus == null)
  60.657 -            initializeJavaAssertionMaps();
  60.658 +    public void setClassAssertionStatus(String className, boolean enabled) {
  60.659 +        synchronized (assertionLock) {
  60.660 +            if (classAssertionStatus == null)
  60.661 +                initializeJavaAssertionMaps();
  60.662  
  60.663 -        classAssertionStatus.put(className, enabled);
  60.664 +            classAssertionStatus.put(className, enabled);
  60.665 +        }
  60.666      }
  60.667  
  60.668      /**
  60.669 @@ -1928,15 +2076,16 @@
  60.670       *
  60.671       * @since  1.4
  60.672       */
  60.673 -    public synchronized void clearAssertionStatus() {
  60.674 +    public void clearAssertionStatus() {
  60.675          /*
  60.676           * Whether or not "Java assertion maps" are initialized, set
  60.677           * them to empty maps, effectively ignoring any present settings.
  60.678           */
  60.679 -        classAssertionStatus = new HashMap<String, Boolean>();
  60.680 -        packageAssertionStatus = new HashMap<String, Boolean>();
  60.681 -
  60.682 -        defaultAssertionStatus = false;
  60.683 +        synchronized (assertionLock) {
  60.684 +            classAssertionStatus = new HashMap<String, Boolean>();
  60.685 +            packageAssertionStatus = new HashMap<String, Boolean>();
  60.686 +            defaultAssertionStatus = false;
  60.687 +        }
  60.688      }
  60.689  
  60.690      /**
  60.691 @@ -1961,39 +2110,40 @@
  60.692       *
  60.693       * @since  1.4
  60.694       */
  60.695 -    synchronized boolean desiredAssertionStatus(String className) {
  60.696 -        Boolean result;
  60.697 +    boolean desiredAssertionStatus(String className) {
  60.698 +        synchronized (assertionLock) {
  60.699 +            // assert classAssertionStatus   != null;
  60.700 +            // assert packageAssertionStatus != null;
  60.701  
  60.702 -        // assert classAssertionStatus   != null;
  60.703 -        // assert packageAssertionStatus != null;
  60.704 -
  60.705 -        // Check for a class entry
  60.706 -        result = classAssertionStatus.get(className);
  60.707 -        if (result != null)
  60.708 -            return result.booleanValue();
  60.709 -
  60.710 -        // Check for most specific package entry
  60.711 -        int dotIndex = className.lastIndexOf(".");
  60.712 -        if (dotIndex < 0) { // default package
  60.713 -            result = packageAssertionStatus.get(null);
  60.714 +            // Check for a class entry
  60.715 +            Boolean result = classAssertionStatus.get(className);
  60.716              if (result != null)
  60.717                  return result.booleanValue();
  60.718 +
  60.719 +            // Check for most specific package entry
  60.720 +            int dotIndex = className.lastIndexOf(".");
  60.721 +            if (dotIndex < 0) { // default package
  60.722 +                result = packageAssertionStatus.get(null);
  60.723 +                if (result != null)
  60.724 +                    return result.booleanValue();
  60.725 +            }
  60.726 +            while(dotIndex > 0) {
  60.727 +                className = className.substring(0, dotIndex);
  60.728 +                result = packageAssertionStatus.get(className);
  60.729 +                if (result != null)
  60.730 +                    return result.booleanValue();
  60.731 +                dotIndex = className.lastIndexOf(".", dotIndex-1);
  60.732 +            }
  60.733 +
  60.734 +            // Return the classloader default
  60.735 +            return defaultAssertionStatus;
  60.736          }
  60.737 -        while(dotIndex > 0) {
  60.738 -            className = className.substring(0, dotIndex);
  60.739 -            result = packageAssertionStatus.get(className);
  60.740 -            if (result != null)
  60.741 -                return result.booleanValue();
  60.742 -            dotIndex = className.lastIndexOf(".", dotIndex-1);
  60.743 -        }
  60.744 -
  60.745 -        // Return the classloader default
  60.746 -        return defaultAssertionStatus;
  60.747      }
  60.748  
  60.749      // Set up the assertions with information provided by the VM.
  60.750 +    // Note: Should only be called inside a synchronized block
  60.751      private void initializeJavaAssertionMaps() {
  60.752 -        // assert Thread.holdsLock(this);
  60.753 +        // assert Thread.holdsLock(assertionLock);
  60.754  
  60.755          classAssertionStatus = new HashMap<String, Boolean>();
  60.756          packageAssertionStatus = new HashMap<String, Boolean>();
    61.1 --- a/src/share/classes/java/lang/ConditionalSpecialCasing.java	Thu Apr 16 17:42:00 2009 +0100
    61.2 +++ b/src/share/classes/java/lang/ConditionalSpecialCasing.java	Thu Apr 16 19:10:32 2009 -0700
    61.3 @@ -74,6 +74,7 @@
    61.4          new Entry(0x00CC, new char[]{0x0069, 0x0307, 0x0300}, new char[]{0x00CC}, "lt", 0), // # LATIN CAPITAL LETTER I WITH GRAVE
    61.5          new Entry(0x00CD, new char[]{0x0069, 0x0307, 0x0301}, new char[]{0x00CD}, "lt", 0), // # LATIN CAPITAL LETTER I WITH ACUTE
    61.6          new Entry(0x0128, new char[]{0x0069, 0x0307, 0x0303}, new char[]{0x0128}, "lt", 0), // # LATIN CAPITAL LETTER I WITH TILDE
    61.7 +        new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "lt", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
    61.8  
    61.9          //# ================================================================================
   61.10          //# Turkish and Azeri
   61.11 @@ -84,7 +85,10 @@
   61.12          new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "tr", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
   61.13          new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "az", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
   61.14          new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN SMALL LETTER I
   61.15 -        new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0)  // # LATIN SMALL LETTER I
   61.16 +        new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN SMALL LETTER I
   61.17 +        //# ================================================================================
   61.18 +        //# Other
   61.19 +        new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "en", 0), // # LATIN CAPITALLETTER I WITH DOT ABOVE
   61.20      };
   61.21  
   61.22      // A hash table that contains the above entries
    62.1 --- a/src/share/classes/java/lang/Integer.java	Thu Apr 16 17:42:00 2009 +0100
    62.2 +++ b/src/share/classes/java/lang/Integer.java	Thu Apr 16 19:10:32 2009 -0700
    62.3 @@ -25,6 +25,8 @@
    62.4  
    62.5  package java.lang;
    62.6  
    62.7 +import java.util.Properties;
    62.8 +
    62.9  /**
   62.10   * The {@code Integer} class wraps a value of the primitive type
   62.11   * {@code int} in an object. An object of type {@code Integer}
   62.12 @@ -442,6 +444,12 @@
   62.13      public static int parseInt(String s, int radix)
   62.14                  throws NumberFormatException
   62.15      {
   62.16 +        /*
   62.17 +         * WARNING: This method may be invoked early during VM initialization
   62.18 +         * before IntegerCache is initialized. Care must be taken to not use
   62.19 +         * the valueOf method.
   62.20 +         */
   62.21 +
   62.22          if (s == null) {
   62.23              throw new NumberFormatException("null");
   62.24          }
   62.25 @@ -545,7 +553,7 @@
   62.26       *            does not contain a parsable {@code int}.
   62.27       */
   62.28      public static Integer valueOf(String s, int radix) throws NumberFormatException {
   62.29 -        return new Integer(parseInt(s,radix));
   62.30 +        return Integer.valueOf(parseInt(s,radix));
   62.31      }
   62.32  
   62.33      /**
   62.34 @@ -570,20 +578,56 @@
   62.35       * @exception  NumberFormatException  if the string cannot be parsed
   62.36       *             as an integer.
   62.37       */
   62.38 -    public static Integer valueOf(String s) throws NumberFormatException
   62.39 -    {
   62.40 -        return new Integer(parseInt(s, 10));
   62.41 +    public static Integer valueOf(String s) throws NumberFormatException {
   62.42 +        return Integer.valueOf(parseInt(s, 10));
   62.43 +    }
   62.44 +
   62.45 +    /**
   62.46 +     * Cache to support the object identity semantics of autoboxing for values between
   62.47 +     * -128 and 127 (inclusive) as required by JLS.
   62.48 +     *
   62.49 +     * The cache is initialized on first usage. During VM initialization the
   62.50 +     * getAndRemoveCacheProperties method may be used to get and remove any system
   62.51 +     * properites that configure the cache size. At this time, the size of the
   62.52 +     * cache may be controlled by the -XX:AutoBoxCacheMax=<size> option.
   62.53 +     */
   62.54 +
   62.55 +    // value of java.lang.Integer.IntegerCache.high property (obtained during VM init)
   62.56 +    private static String integerCacheHighPropValue;
   62.57 +
   62.58 +    static void getAndRemoveCacheProperties() {
   62.59 +        if (!sun.misc.VM.isBooted()) {
   62.60 +            Properties props = System.getProperties();
   62.61 +            integerCacheHighPropValue =
   62.62 +                (String)props.remove("java.lang.Integer.IntegerCache.high");
   62.63 +            if (integerCacheHighPropValue != null)
   62.64 +                System.setProperties(props);  // remove from system props
   62.65 +        }
   62.66      }
   62.67  
   62.68      private static class IntegerCache {
   62.69 -        private IntegerCache(){}
   62.70 -
   62.71 -        static final Integer cache[] = new Integer[-(-128) + 127 + 1];
   62.72 +        static final int low = -128;
   62.73 +        static final int high;
   62.74 +        static final Integer cache[];
   62.75  
   62.76          static {
   62.77 -            for(int i = 0; i < cache.length; i++)
   62.78 -                cache[i] = new Integer(i - 128);
   62.79 +            // high value may be configured by property
   62.80 +            int h = 127;
   62.81 +            if (integerCacheHighPropValue != null) {
   62.82 +                int i = parseInt(integerCacheHighPropValue);
   62.83 +                i = Math.max(i, 127);
   62.84 +                // Maximum array size is Integer.MAX_VALUE
   62.85 +                h = Math.min(i, Integer.MAX_VALUE - (-low));
   62.86 +            }
   62.87 +            high = h;
   62.88 +
   62.89 +            cache = new Integer[(high - low) + 1];
   62.90 +            int j = low;
   62.91 +            for(int k = 0; k < cache.length; k++)
   62.92 +                cache[k] = new Integer(j++);
   62.93          }
   62.94 +
   62.95 +        private IntegerCache() {}
   62.96      }
   62.97  
   62.98      /**
   62.99 @@ -599,10 +643,9 @@
  62.100       * @since  1.5
  62.101       */
  62.102      public static Integer valueOf(int i) {
  62.103 -        final int offset = 128;
  62.104 -        if (i >= -128 && i <= 127) { // must cache
  62.105 -            return IntegerCache.cache[i + offset];
  62.106 -        }
  62.107 +        assert IntegerCache.high >= 127;
  62.108 +        if (i >= IntegerCache.low && i <= IntegerCache.high)
  62.109 +            return IntegerCache.cache[i + (-IntegerCache.low)];
  62.110          return new Integer(i);
  62.111      }
  62.112  
  62.113 @@ -806,7 +849,7 @@
  62.114       */
  62.115      public static Integer getInteger(String nm, int val) {
  62.116          Integer result = getInteger(nm, null);
  62.117 -        return (result == null) ? new Integer(val) : result;
  62.118 +        return (result == null) ? Integer.valueOf(val) : result;
  62.119      }
  62.120  
  62.121      /**
  62.122 @@ -938,7 +981,7 @@
  62.123  
  62.124          try {
  62.125              result = Integer.valueOf(nm.substring(index), radix);
  62.126 -            result = negative ? new Integer(-result.intValue()) : result;
  62.127 +            result = negative ? Integer.valueOf(-result.intValue()) : result;
  62.128          } catch (NumberFormatException e) {
  62.129              // If number is Integer.MIN_VALUE, we'll end up here. The next line
  62.130              // handles this case, and causes any genuine format error to be
    63.1 --- a/src/share/classes/java/lang/Long.java	Thu Apr 16 17:42:00 2009 +0100
    63.2 +++ b/src/share/classes/java/lang/Long.java	Thu Apr 16 19:10:32 2009 -0700
    63.3 @@ -510,7 +510,7 @@
    63.4       *             contain a parsable {@code long}.
    63.5       */
    63.6      public static Long valueOf(String s, int radix) throws NumberFormatException {
    63.7 -        return new Long(parseLong(s, radix));
    63.8 +        return Long.valueOf(parseLong(s, radix));
    63.9      }
   63.10  
   63.11      /**
   63.12 @@ -537,7 +537,7 @@
   63.13       */
   63.14      public static Long valueOf(String s) throws NumberFormatException
   63.15      {
   63.16 -        return new Long(parseLong(s, 10));
   63.17 +        return Long.valueOf(parseLong(s, 10));
   63.18      }
   63.19  
   63.20      private static class LongCache {
   63.21 @@ -650,7 +650,7 @@
   63.22  
   63.23          try {
   63.24              result = Long.valueOf(nm.substring(index), radix);
   63.25 -            result = negative ? new Long(-result.longValue()) : result;
   63.26 +            result = negative ? Long.valueOf(-result.longValue()) : result;
   63.27          } catch (NumberFormatException e) {
   63.28              // If number is Long.MIN_VALUE, we'll end up here. The next line
   63.29              // handles this case, and causes any genuine format error to be
   63.30 @@ -869,7 +869,7 @@
   63.31       */
   63.32      public static Long getLong(String nm, long val) {
   63.33          Long result = Long.getLong(nm, null);
   63.34 -        return (result == null) ? new Long(val) : result;
   63.35 +        return (result == null) ? Long.valueOf(val) : result;
   63.36      }
   63.37  
   63.38      /**
    64.1 --- a/src/share/classes/java/lang/String.java	Thu Apr 16 17:42:00 2009 +0100
    64.2 +++ b/src/share/classes/java/lang/String.java	Thu Apr 16 19:10:32 2009 -0700
    64.3 @@ -2451,14 +2451,21 @@
    64.4              }
    64.5              if (localeDependent || srcChar == '\u03A3') { // GREEK CAPITAL LETTER SIGMA
    64.6                  lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale);
    64.7 +            } else if (srcChar == '\u0130') { // LATIN CAPITAL LETTER I DOT
    64.8 +                lowerChar = Character.ERROR;
    64.9              } else {
   64.10                  lowerChar = Character.toLowerCase(srcChar);
   64.11              }
   64.12              if ((lowerChar == Character.ERROR) ||
   64.13                  (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) {
   64.14                  if (lowerChar == Character.ERROR) {
   64.15 -                    lowerCharArray =
   64.16 -                        ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
   64.17 +                     if (!localeDependent && srcChar == '\u0130') {
   64.18 +                         lowerCharArray =
   64.19 +                             ConditionalSpecialCasing.toLowerCaseCharArray(this, i, Locale.ENGLISH);
   64.20 +                     } else {
   64.21 +                        lowerCharArray =
   64.22 +                            ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
   64.23 +                     }
   64.24                  } else if (srcCount == 2) {
   64.25                      resultOffset += Character.toChars(lowerChar, result, i + resultOffset) - srcCount;
   64.26                      continue;
    65.1 --- a/src/share/classes/java/lang/System.java	Thu Apr 16 17:42:00 2009 +0100
    65.2 +++ b/src/share/classes/java/lang/System.java	Thu Apr 16 19:10:32 2009 -0700
    65.3 @@ -1105,6 +1105,13 @@
    65.4          props = new Properties();
    65.5          initProperties(props);
    65.6          sun.misc.Version.init();
    65.7 +
    65.8 +        // Gets and removes system properties that configure the Integer
    65.9 +        // cache used to support the object identity semantics of autoboxing.
   65.10 +        // At this time, the size of the cache may be controlled by the
   65.11 +        // -XX:AutoBoxCacheMax=<size> option.
   65.12 +        Integer.getAndRemoveCacheProperties();
   65.13 +
   65.14          FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
   65.15          FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
   65.16          FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
    66.1 --- a/src/share/classes/java/lang/ref/ReferenceQueue.java	Thu Apr 16 17:42:00 2009 +0100
    66.2 +++ b/src/share/classes/java/lang/ref/ReferenceQueue.java	Thu Apr 16 19:10:32 2009 -0700
    66.3 @@ -51,7 +51,7 @@
    66.4  
    66.5      static private class Lock { };
    66.6      private Lock lock = new Lock();
    66.7 -    private Reference<? extends T> head = null;
    66.8 +    private volatile Reference<? extends T> head = null;
    66.9      private long queueLength = 0;
   66.10  
   66.11      boolean enqueue(Reference<? extends T> r) { /* Called only by Reference class */
   66.12 @@ -95,6 +95,8 @@
   66.13       *          otherwise <code>null</code>
   66.14       */
   66.15      public Reference<? extends T> poll() {
   66.16 +        if (head == null)
   66.17 +            return null;
   66.18          synchronized (lock) {
   66.19              return reallyPoll();
   66.20          }
    67.1 --- a/src/share/classes/java/lang/ref/SoftReference.java	Thu Apr 16 17:42:00 2009 +0100
    67.2 +++ b/src/share/classes/java/lang/ref/SoftReference.java	Thu Apr 16 19:10:32 2009 -0700
    67.3 @@ -63,11 +63,13 @@
    67.4  
    67.5  public class SoftReference<T> extends Reference<T> {
    67.6  
    67.7 -    /* Timestamp clock, updated by the garbage collector
    67.8 +    /**
    67.9 +     * Timestamp clock, updated by the garbage collector
   67.10       */
   67.11      static private long clock;
   67.12  
   67.13 -    /* Timestamp updated by each invocation of the get method.  The VM may use
   67.14 +    /**
   67.15 +     * Timestamp updated by each invocation of the get method.  The VM may use
   67.16       * this field when selecting soft references to be cleared, but it is not
   67.17       * required to do so.
   67.18       */
   67.19 @@ -108,7 +110,8 @@
   67.20       */
   67.21      public T get() {
   67.22          T o = super.get();
   67.23 -        if (o != null) this.timestamp = clock;
   67.24 +        if (o != null && this.timestamp != clock)
   67.25 +            this.timestamp = clock;
   67.26          return o;
   67.27      }
   67.28  
    68.1 --- a/src/share/classes/java/net/AbstractPlainSocketImpl.java	Thu Apr 16 17:42:00 2009 +0100
    68.2 +++ b/src/share/classes/java/net/AbstractPlainSocketImpl.java	Thu Apr 16 19:10:32 2009 -0700
    68.3 @@ -33,6 +33,7 @@
    68.4  import java.io.ByteArrayOutputStream;
    68.5  
    68.6  import sun.net.ConnectionResetException;
    68.7 +import sun.net.NetHooks;
    68.8  
    68.9  /**
   68.10   * Default Socket Implementation. This implementation does
   68.11 @@ -304,6 +305,11 @@
   68.12       */
   68.13  
   68.14      synchronized void doConnect(InetAddress address, int port, int timeout) throws IOException {
   68.15 +        synchronized (fdLock) {
   68.16 +            if (!closePending && (socket == null || !socket.isBound())) {
   68.17 +                NetHooks.beforeTcpConnect(fd, address, port);
   68.18 +            }
   68.19 +        }
   68.20          try {
   68.21              FileDescriptor fd = acquireFD();
   68.22              try {
   68.23 @@ -339,6 +345,11 @@
   68.24      protected synchronized void bind(InetAddress address, int lport)
   68.25          throws IOException
   68.26      {
   68.27 +       synchronized (fdLock) {
   68.28 +            if (!closePending && (socket == null || !socket.isBound())) {
   68.29 +                NetHooks.beforeTcpBind(fd, address, lport);
   68.30 +            }
   68.31 +        }
   68.32          socketBind(address, lport);
   68.33          if (socket != null)
   68.34              socket.setBound();
    69.1 --- a/src/share/classes/java/net/URLClassLoader.java	Thu Apr 16 17:42:00 2009 +0100
    69.2 +++ b/src/share/classes/java/net/URLClassLoader.java	Thu Apr 16 19:10:32 2009 -0700
    69.3 @@ -1,5 +1,5 @@
    69.4  /*
    69.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    69.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    69.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    69.8   *
    69.9   * This code is free software; you can redistribute it and/or modify it
   69.10 @@ -74,10 +74,10 @@
   69.11   */
   69.12  public class URLClassLoader extends SecureClassLoader implements Closeable {
   69.13      /* The search path for classes and resources */
   69.14 -    URLClassPath ucp;
   69.15 +    private final URLClassPath ucp;
   69.16  
   69.17      /* The context to be used when loading classes and resources */
   69.18 -    private AccessControlContext acc;
   69.19 +    private final AccessControlContext acc;
   69.20  
   69.21      /**
   69.22       * Constructs a new URLClassLoader for the given URLs. The URLs will be
   69.23 @@ -105,7 +105,19 @@
   69.24              security.checkCreateClassLoader();
   69.25          }
   69.26          ucp = new URLClassPath(urls);
   69.27 -        acc = AccessController.getContext();
   69.28 +        this.acc = AccessController.getContext();
   69.29 +    }
   69.30 +
   69.31 +    URLClassLoader(URL[] urls, ClassLoader parent,
   69.32 +                   AccessControlContext acc) {
   69.33 +        super(parent);
   69.34 +        // this is to make the stack depth consistent with 1.1
   69.35 +        SecurityManager security = System.getSecurityManager();
   69.36 +        if (security != null) {
   69.37 +            security.checkCreateClassLoader();
   69.38 +        }
   69.39 +        ucp = new URLClassPath(urls);
   69.40 +        this.acc = acc;
   69.41      }
   69.42  
   69.43      /**
   69.44 @@ -136,7 +148,18 @@
   69.45              security.checkCreateClassLoader();
   69.46          }
   69.47          ucp = new URLClassPath(urls);
   69.48 -        acc = AccessController.getContext();
   69.49 +        this.acc = AccessController.getContext();
   69.50 +    }
   69.51 +
   69.52 +    URLClassLoader(URL[] urls, AccessControlContext acc) {
   69.53 +        super();
   69.54 +        // this is to make the stack depth consistent with 1.1
   69.55 +        SecurityManager security = System.getSecurityManager();
   69.56 +        if (security != null) {
   69.57 +            security.checkCreateClassLoader();
   69.58 +        }
   69.59 +        ucp = new URLClassPath(urls);
   69.60 +        this.acc = acc;
   69.61      }
   69.62  
   69.63      /**
   69.64 @@ -599,17 +622,14 @@
   69.65      public static URLClassLoader newInstance(final URL[] urls,
   69.66                                               final ClassLoader parent) {
   69.67          // Save the caller's context
   69.68 -        AccessControlContext acc = AccessController.getContext();
   69.69 +        final AccessControlContext acc = AccessController.getContext();
   69.70          // Need a privileged block to create the class loader
   69.71          URLClassLoader ucl = AccessController.doPrivileged(
   69.72              new PrivilegedAction<URLClassLoader>() {
   69.73                  public URLClassLoader run() {
   69.74 -                    return new FactoryURLClassLoader(urls, parent);
   69.75 +                    return new FactoryURLClassLoader(urls, parent, acc);
   69.76                  }
   69.77              });
   69.78 -        // Now set the context on the loader using the one we saved,
   69.79 -        // not the one inside the privileged block...
   69.80 -        ucl.acc = acc;
   69.81          return ucl;
   69.82      }
   69.83  
   69.84 @@ -626,18 +646,14 @@
   69.85       */
   69.86      public static URLClassLoader newInstance(final URL[] urls) {
   69.87          // Save the caller's context
   69.88 -        AccessControlContext acc = AccessController.getContext();
   69.89 +        final AccessControlContext acc = AccessController.getContext();
   69.90          // Need a privileged block to create the class loader
   69.91          URLClassLoader ucl = AccessController.doPrivileged(
   69.92              new PrivilegedAction<URLClassLoader>() {
   69.93                  public URLClassLoader run() {
   69.94 -                    return new FactoryURLClassLoader(urls);
   69.95 +                    return new FactoryURLClassLoader(urls, acc);
   69.96                  }
   69.97              });
   69.98 -
   69.99 -        // Now set the context on the loader using the one we saved,
  69.100 -        // not the one inside the privileged block...
  69.101 -        ucl.acc = acc;
  69.102          return ucl;
  69.103      }
  69.104  
  69.105 @@ -649,20 +665,26 @@
  69.106                  }
  69.107              }
  69.108          );
  69.109 +        ClassLoader.registerAsParallelCapable();
  69.110      }
  69.111  }
  69.112  
  69.113  final class FactoryURLClassLoader extends URLClassLoader {
  69.114  
  69.115 -    FactoryURLClassLoader(URL[] urls, ClassLoader parent) {
  69.116 -        super(urls, parent);
  69.117 +    static {
  69.118 +        ClassLoader.registerAsParallelCapable();
  69.119      }
  69.120  
  69.121 -    FactoryURLClassLoader(URL[] urls) {
  69.122 -        super(urls);
  69.123 +    FactoryURLClassLoader(URL[] urls, ClassLoader parent,
  69.124 +                          AccessControlContext acc) {
  69.125 +        super(urls, parent, acc);
  69.126      }
  69.127  
  69.128 -    public final synchronized Class loadClass(String name, boolean resolve)
  69.129 +    FactoryURLClassLoader(URL[] urls, AccessControlContext acc) {
  69.130 +        super(urls, acc);
  69.131 +    }
  69.132 +
  69.133 +    public final Class loadClass(String name, boolean resolve)
  69.134          throws ClassNotFoundException
  69.135      {
  69.136          // First check if we have permission to access the package. This
    70.1 --- a/src/share/classes/java/nio/channels/DatagramChannel.java	Thu Apr 16 17:42:00 2009 +0100
    70.2 +++ b/src/share/classes/java/nio/channels/DatagramChannel.java	Thu Apr 16 19:10:32 2009 -0700
    70.3 @@ -261,7 +261,10 @@
    70.4       *
    70.5       * <p> This method may be invoked at any time.  It will not have any effect
    70.6       * on read or write operations that are already in progress at the moment
    70.7 -     * that it is invoked.  </p>
    70.8 +     * that it is invoked. If this channel's socket is not bound then this method
    70.9 +     * will first cause the socket to be bound to an address that is assigned
   70.10 +     * automatically, as if invoking the {@link #bind bind} method with a
   70.11 +     * parameter of {@code null}. </p>
   70.12       *
   70.13       * @param  remote
   70.14       *         The remote address to which this channel is to be connected
   70.15 @@ -356,7 +359,10 @@
   70.16       * <p> This method may be invoked at any time.  If another thread has
   70.17       * already initiated a read operation upon this channel, however, then an
   70.18       * invocation of this method will block until the first operation is
   70.19 -     * complete. </p>
   70.20 +     * complete. If this channel's socket is not bound then this method will
   70.21 +     * first cause the socket to be bound to an address that is assigned
   70.22 +     * automatically, as if invoking the {@link #bind bind} method with a
   70.23 +     * parameter of {@code null}. </p>
   70.24       *
   70.25       * @param  dst
   70.26       *         The buffer into which the datagram is to be transferred
   70.27 @@ -413,7 +419,10 @@
   70.28       * <p> This method may be invoked at any time.  If another thread has
   70.29       * already initiated a write operation upon this channel, however, then an
   70.30       * invocation of this method will block until the first operation is
   70.31 -     * complete. </p>
   70.32 +     * complete. If this channel's socket is not bound then this method will
   70.33 +     * first cause the socket to be bound to an address that is assigned
   70.34 +     * automatically, as if by invoking the {@link #bind bind) method with a
   70.35 +     * parameter of {@code null}. </p>
   70.36       *
   70.37       * @param  src
   70.38       *         The buffer containing the datagram to be sent
    71.1 --- a/src/share/classes/java/security/SecureClassLoader.java	Thu Apr 16 17:42:00 2009 +0100
    71.2 +++ b/src/share/classes/java/security/SecureClassLoader.java	Thu Apr 16 19:10:32 2009 -0700
    71.3 @@ -1,5 +1,5 @@
    71.4  /*
    71.5 - * Copyright 1997-2006 Sun Microsystems, Inc.  All Rights Reserved.
    71.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    71.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    71.8   *
    71.9   * This code is free software; you can redistribute it and/or modify it
   71.10 @@ -45,14 +45,19 @@
   71.11       * succeed. Otherwise the object is not initialized and the object is
   71.12       * useless.
   71.13       */
   71.14 -    private boolean initialized = false;
   71.15 +    private final boolean initialized;
   71.16  
   71.17      // HashMap that maps CodeSource to ProtectionDomain
   71.18 -    private HashMap<CodeSource, ProtectionDomain> pdcache =
   71.19 +    // @GuardedBy("pdcache")
   71.20 +    private final HashMap<CodeSource, ProtectionDomain> pdcache =
   71.21                          new HashMap<CodeSource, ProtectionDomain>(11);
   71.22  
   71.23      private static final Debug debug = Debug.getInstance("scl");
   71.24  
   71.25 +    static {
   71.26 +        ClassLoader.registerAsParallelCapable();
   71.27 +    }
   71.28 +
   71.29      /**
   71.30       * Creates a new SecureClassLoader using the specified parent
   71.31       * class loader for delegation.
   71.32 @@ -136,10 +141,7 @@
   71.33                                           byte[] b, int off, int len,
   71.34                                           CodeSource cs)
   71.35      {
   71.36 -        if (cs == null)
   71.37 -            return defineClass(name, b, off, len);
   71.38 -        else
   71.39 -            return defineClass(name, b, off, len, getProtectionDomain(cs));
   71.40 +        return defineClass(name, b, off, len, getProtectionDomain(cs));
   71.41      }
   71.42  
   71.43      /**
   71.44 @@ -172,10 +174,7 @@
   71.45      protected final Class<?> defineClass(String name, java.nio.ByteBuffer b,
   71.46                                           CodeSource cs)
   71.47      {
   71.48 -        if (cs == null)
   71.49 -            return defineClass(name, b, (ProtectionDomain)null);
   71.50 -        else
   71.51 -            return defineClass(name, b, getProtectionDomain(cs));
   71.52 +        return defineClass(name, b, getProtectionDomain(cs));
   71.53      }
   71.54  
   71.55      /**
   71.56 @@ -209,12 +208,10 @@
   71.57              if (pd == null) {
   71.58                  PermissionCollection perms = getPermissions(cs);
   71.59                  pd = new ProtectionDomain(cs, perms, this, null);
   71.60 -                if (pd != null) {
   71.61 -                    pdcache.put(cs, pd);
   71.62 -                    if (debug != null) {
   71.63 -                        debug.println(" getPermissions "+ pd);
   71.64 -                        debug.println("");
   71.65 -                    }
   71.66 +                pdcache.put(cs, pd);
   71.67 +                if (debug != null) {
   71.68 +                    debug.println(" getPermissions "+ pd);
   71.69 +                    debug.println("");
   71.70                  }
   71.71              }
   71.72          }
    72.1 --- a/src/share/classes/java/util/TreeMap.java	Thu Apr 16 17:42:00 2009 +0100
    72.2 +++ b/src/share/classes/java/util/TreeMap.java	Thu Apr 16 19:10:32 2009 -0700
    72.3 @@ -1068,14 +1068,14 @@
    72.4          }
    72.5          public NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
    72.6                                        E toElement,   boolean toInclusive) {
    72.7 -            return new TreeSet<E>(m.subMap(fromElement, fromInclusive,
    72.8 -                                           toElement,   toInclusive));
    72.9 +            return new KeySet<E>(m.subMap(fromElement, fromInclusive,
   72.10 +                                          toElement,   toInclusive));
   72.11          }
   72.12          public NavigableSet<E> headSet(E toElement, boolean inclusive) {
   72.13 -            return new TreeSet<E>(m.headMap(toElement, inclusive));
   72.14 +            return new KeySet<E>(m.headMap(toElement, inclusive));
   72.15          }
   72.16          public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
   72.17 -            return new TreeSet<E>(m.tailMap(fromElement, inclusive));
   72.18 +            return new KeySet<E>(m.tailMap(fromElement, inclusive));
   72.19          }
   72.20          public SortedSet<E> subSet(E fromElement, E toElement) {
   72.21              return subSet(fromElement, true, toElement, false);
   72.22 @@ -1087,7 +1087,7 @@
   72.23              return tailSet(fromElement, true);
   72.24          }
   72.25          public NavigableSet<E> descendingSet() {
   72.26 -            return new TreeSet(m.descendingMap());
   72.27 +            return new KeySet(m.descendingMap());
   72.28          }
   72.29      }
   72.30  
    73.1 --- a/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Thu Apr 16 17:42:00 2009 +0100
    73.2 +++ b/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Thu Apr 16 19:10:32 2009 -0700
    73.3 @@ -2394,15 +2394,14 @@
    73.4                                        boolean fromInclusive,
    73.5                                        E toElement,
    73.6                                        boolean toInclusive) {
    73.7 -            return new ConcurrentSkipListSet<E>
    73.8 -                (m.subMap(fromElement, fromInclusive,
    73.9 -                          toElement,   toInclusive));
   73.10 +            return new KeySet<E>(m.subMap(fromElement, fromInclusive,
   73.11 +                                          toElement,   toInclusive));
   73.12          }
   73.13          public NavigableSet<E> headSet(E toElement, boolean inclusive) {
   73.14 -            return new ConcurrentSkipListSet<E>(m.headMap(toElement, inclusive));
   73.15 +            return new KeySet<E>(m.headMap(toElement, inclusive));
   73.16          }
   73.17          public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
   73.18 -            return new ConcurrentSkipListSet<E>(m.tailMap(fromElement, inclusive));
   73.19 +            return new KeySet<E>(m.tailMap(fromElement, inclusive));
   73.20          }
   73.21          public NavigableSet<E> subSet(E fromElement, E toElement) {
   73.22              return subSet(fromElement, true, toElement, false);
   73.23 @@ -2414,7 +2413,7 @@
   73.24              return tailSet(fromElement, true);
   73.25          }
   73.26          public NavigableSet<E> descendingSet() {
   73.27 -            return new ConcurrentSkipListSet(m.descendingMap());
   73.28 +            return new KeySet(m.descendingMap());
   73.29          }
   73.30      }
   73.31  
    74.1 --- a/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java	Thu Apr 16 17:42:00 2009 +0100
    74.2 +++ b/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java	Thu Apr 16 19:10:32 2009 -0700
    74.3 @@ -166,6 +166,11 @@
    74.4          static final int SIGNAL    = -1;
    74.5          /** waitStatus value to indicate thread is waiting on condition */
    74.6          static final int CONDITION = -2;
    74.7 +        /**
    74.8 +         * waitStatus value to indicate the next acquireShared should
    74.9 +         * unconditionally propagate
   74.10 +         */
   74.11 +        static final int PROPAGATE = -3;
   74.12  
   74.13          /**
   74.14           * Status field, taking on only the values:
   74.15 @@ -180,10 +185,16 @@
   74.16           *               Nodes never leave this state. In particular,
   74.17           *               a thread with cancelled node never again blocks.
   74.18           *   CONDITION:  This node is currently on a condition queue.
   74.19 -         *               It will not be used as a sync queue node until
   74.20 -         *               transferred. (Use of this value here
   74.21 -         *               has nothing to do with the other uses
   74.22 -         *               of the field, but simplifies mechanics.)
   74.23 +         *               It will not be used as a sync queue node
   74.24 +         *               until transferred, at which time the status
   74.25 +         *               will be set to 0. (Use of this value here has
   74.26 +         *               nothing to do with the other uses of the
   74.27 +         *               field, but simplifies mechanics.)
   74.28 +         *   PROPAGATE:  A releaseShared should be propagated to other
   74.29 +         *               nodes. This is set (for head node only) in
   74.30 +         *               doReleaseShared to ensure propagation
   74.31 +         *               continues, even if other operations have
   74.32 +         *               since intervened.
   74.33           *   0:          None of the above
   74.34           *
   74.35           * The values are arranged numerically to simplify use.
   74.36 @@ -403,10 +414,13 @@
   74.37       */
   74.38      private void unparkSuccessor(Node node) {
   74.39          /*
   74.40 -         * Try to clear status in anticipation of signalling.  It is
   74.41 -         * OK if this fails or if status is changed by waiting thread.
   74.42 +         * If status is negative (i.e., possibly needing signal) try
   74.43 +         * to clear in anticipation of signalling.  It is OK if this
   74.44 +         * fails or if status is changed by waiting thread.
   74.45           */
   74.46 -        compareAndSetWaitStatus(node, Node.SIGNAL, 0);
   74.47 +        int ws = node.waitStatus;
   74.48 +        if (ws < 0)
   74.49 +            compareAndSetWaitStatus(node, ws, 0);
   74.50  
   74.51          /*
   74.52           * Thread to unpark is held in successor, which is normally
   74.53 @@ -426,23 +440,70 @@
   74.54      }
   74.55  
   74.56      /**
   74.57 +     * Release action for shared mode -- signal successor and ensure
   74.58 +     * propagation. (Note: For exclusive mode, release just amounts
   74.59 +     * to calling unparkSuccessor of head if it needs signal.)
   74.60 +     */
   74.61 +    private void doReleaseShared() {
   74.62 +        /*
   74.63 +         * Ensure that a release propagates, even if there are other
   74.64 +         * in-progress acquires/releases.  This proceeds in the usual
   74.65 +         * way of trying to unparkSuccessor of head if it needs
   74.66 +         * signal. But if it does not, status is set to PROPAGATE to
   74.67 +         * ensure that upon release, propagation continues.
   74.68 +         * Additionally, we must loop in case a new node is added
   74.69 +         * while we are doing this. Also, unlike other uses of
   74.70 +         * unparkSuccessor, we need to know if CAS to reset status
   74.71 +         * fails, if so rechecking.
   74.72 +         */
   74.73 +        for (;;) {
   74.74 +            Node h = head;
   74.75 +            if (h != null && h != tail) {
   74.76 +                int ws = h.waitStatus;
   74.77 +                if (ws == Node.SIGNAL) {
   74.78 +                    if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0))
   74.79 +                        continue;            // loop to recheck cases
   74.80 +                    unparkSuccessor(h);
   74.81 +                }
   74.82 +                else if (ws == 0 &&
   74.83 +                         !compareAndSetWaitStatus(h, 0, Node.PROPAGATE))
   74.84 +                    continue;                // loop on failed CAS
   74.85 +            }
   74.86 +            if (h == head)                   // loop if head changed
   74.87 +                break;
   74.88 +        }
   74.89 +    }
   74.90 +
   74.91 +    /**
   74.92       * Sets head of queue, and checks if successor may be waiting
   74.93 -     * in shared mode, if so propagating if propagate > 0.
   74.94 +     * in shared mode, if so propagating if either propagate > 0 or
   74.95 +     * PROPAGATE status was set.
   74.96       *
   74.97 -     * @param pred the node holding waitStatus for node
   74.98       * @param node the node
   74.99       * @param propagate the return value from a tryAcquireShared
  74.100       */
  74.101      private void setHeadAndPropagate(Node node, long propagate) {
  74.102 +        Node h = head; // Record old head for check below
  74.103          setHead(node);
  74.104 -        if (propagate > 0 && node.waitStatus != 0) {
  74.105 -            /*
  74.106 -             * Don't bother fully figuring out successor.  If it
  74.107 -             * looks null, call unparkSuccessor anyway to be safe.
  74.108 -             */
  74.109 +        /*
  74.110 +         * Try to signal next queued node if:
  74.111 +         *   Propagation was indicated by caller,
  74.112 +         *     or was recorded (as h.waitStatus) by a previous operation
  74.113 +         *     (note: this uses sign-check of waitStatus because
  74.114 +         *      PROPAGATE status may transition to SIGNAL.)
  74.115 +         * and
  74.116 +         *   The next node is waiting in shared mode,
  74.117 +         *     or we don't know, because it appears null
  74.118 +         *
  74.119 +         * The conservatism in both of these checks may cause
  74.120 +         * unnecessary wake-ups, but only when there are multiple
  74.121 +         * racing acquires/releases, so most need signals now or soon
  74.122 +         * anyway.
  74.123 +         */
  74.124 +        if (propagate > 0 || h == null || h.waitStatus < 0) {
  74.125              Node s = node.next;
  74.126              if (s == null || s.isShared())
  74.127 -                unparkSuccessor(node);
  74.128 +                doReleaseShared();
  74.129          }
  74.130      }
  74.131  
  74.132 @@ -465,23 +526,27 @@
  74.133          while (pred.waitStatus > 0)
  74.134              node.prev = pred = pred.prev;
  74.135  
  74.136 -        // Getting this before setting waitStatus ensures staleness
  74.137 +        // predNext is the apparent node to unsplice. CASes below will
  74.138 +        // fail if not, in which case, we lost race vs another cancel
  74.139 +        // or signal, so no further action is necessary.
  74.140          Node predNext = pred.next;
  74.141  
  74.142 -        // Can use unconditional write instead of CAS here
  74.143 +        // Can use unconditional write instead of CAS here.
  74.144 +        // After this atomic step, other Nodes can skip past us.
  74.145 +        // Before, we are free of interference from other threads.
  74.146          node.waitStatus = Node.CANCELLED;
  74.147  
  74.148 -        // If we are the tail, remove ourselves
  74.149 +        // If we are the tail, remove ourselves.
  74.150          if (node == tail && compareAndSetTail(node, pred)) {
  74.151              compareAndSetNext(pred, predNext, null);
  74.152          } else {
  74.153 -            // If "active" predecessor found...
  74.154 -            if (pred != head
  74.155 -                && (pred.waitStatus == Node.SIGNAL
  74.156 -                    || compareAndSetWaitStatus(pred, 0, Node.SIGNAL))
  74.157 -                && pred.thread != null) {
  74.158 -
  74.159 -                // If successor is active, set predecessor's next link
  74.160 +            // If successor needs signal, try to set pred's next-link
  74.161 +            // so it will get one. Otherwise wake it up to propagate.
  74.162 +            int ws;
  74.163 +            if (pred != head &&
  74.164 +                ((ws = pred.waitStatus) == Node.SIGNAL ||
  74.165 +                 (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) &&
  74.166 +                pred.thread != null) {
  74.167                  Node next = node.next;
  74.168                  if (next != null && next.waitStatus <= 0)
  74.169                      compareAndSetNext(pred, predNext, next);
  74.170 @@ -503,14 +568,14 @@
  74.171       * @return {@code true} if thread should block
  74.172       */
  74.173      private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) {
  74.174 -        int s = pred.waitStatus;
  74.175 -        if (s < 0)
  74.176 +        int ws = pred.waitStatus;
  74.177 +        if (ws == Node.SIGNAL)
  74.178              /*
  74.179               * This node has already set status asking a release
  74.180               * to signal it, so it can safely park.
  74.181               */
  74.182              return true;
  74.183 -        if (s > 0) {
  74.184 +        if (ws > 0) {
  74.185              /*
  74.186               * Predecessor was cancelled. Skip over predecessors and
  74.187               * indicate retry.
  74.188 @@ -519,14 +584,14 @@
  74.189                  node.prev = pred = pred.prev;
  74.190              } while (pred.waitStatus > 0);
  74.191              pred.next = node;
  74.192 +        } else {
  74.193 +            /*
  74.194 +             * waitStatus must be 0 or PROPAGATE.  Indicate that we
  74.195 +             * need a signal, but don't park yet.  Caller will need to
  74.196 +             * retry to make sure it cannot acquire before parking.
  74.197 +             */
  74.198 +            compareAndSetWaitStatus(pred, ws, Node.SIGNAL);
  74.199          }
  74.200 -        else
  74.201 -            /*
  74.202 -             * Indicate that we need a signal, but don't park yet. Caller
  74.203 -             * will need to retry to make sure it cannot acquire before
  74.204 -             * parking.
  74.205 -             */
  74.206 -            compareAndSetWaitStatus(pred, 0, Node.SIGNAL);
  74.207          return false;
  74.208      }
  74.209  
  74.210 @@ -1046,9 +1111,7 @@
  74.211       */
  74.212      public final boolean releaseShared(long arg) {
  74.213          if (tryReleaseShared(arg)) {
  74.214 -            Node h = head;
  74.215 -            if (h != null && h.waitStatus != 0)
  74.216 -                unparkSuccessor(h);
  74.217 +            doReleaseShared();
  74.218              return true;
  74.219          }
  74.220          return false;
  74.221 @@ -1390,8 +1453,8 @@
  74.222           * case the waitStatus can be transiently and harmlessly wrong).
  74.223           */
  74.224          Node p = enq(node);
  74.225 -        int c = p.waitStatus;
  74.226 -        if (c > 0 || !compareAndSetWaitStatus(p, c, Node.SIGNAL))
  74.227 +        int ws = p.waitStatus;
  74.228 +        if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL))
  74.229              LockSupport.unpark(node.thread);
  74.230          return true;
  74.231      }
    75.1 --- a/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java	Thu Apr 16 17:42:00 2009 +0100
    75.2 +++ b/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java	Thu Apr 16 19:10:32 2009 -0700
    75.3 @@ -389,6 +389,11 @@
    75.4          static final int SIGNAL    = -1;
    75.5          /** waitStatus value to indicate thread is waiting on condition */
    75.6          static final int CONDITION = -2;
    75.7 +        /**
    75.8 +         * waitStatus value to indicate the next acquireShared should
    75.9 +         * unconditionally propagate
   75.10 +         */
   75.11 +        static final int PROPAGATE = -3;
   75.12  
   75.13          /**
   75.14           * Status field, taking on only the values:
   75.15 @@ -403,10 +408,16 @@
   75.16           *               Nodes never leave this state. In particular,
   75.17           *               a thread with cancelled node never again blocks.
   75.18           *   CONDITION:  This node is currently on a condition queue.
   75.19 -         *               It will not be used as a sync queue node until
   75.20 -         *               transferred. (Use of this value here
   75.21 -         *               has nothing to do with the other uses
   75.22 -         *               of the field, but simplifies mechanics.)
   75.23 +         *               It will not be used as a sync queue node
   75.24 +         *               until transferred, at which time the status
   75.25 +         *               will be set to 0. (Use of this value here has
   75.26 +         *               nothing to do with the other uses of the
   75.27 +         *               field, but simplifies mechanics.)
   75.28 +         *   PROPAGATE:  A releaseShared should be propagated to other
   75.29 +         *               nodes. This is set (for head node only) in
   75.30 +         *               doReleaseShared to ensure propagation
   75.31 +         *               continues, even if other operations have
   75.32 +         *               since intervened.
   75.33           *   0:          None of the above
   75.34           *
   75.35           * The values are arranged numerically to simplify use.
   75.36 @@ -626,10 +637,13 @@
   75.37       */
   75.38      private void unparkSuccessor(Node node) {
   75.39          /*
   75.40 -         * Try to clear status in anticipation of signalling.  It is
   75.41 -         * OK if this fails or if status is changed by waiting thread.
   75.42 +         * If status is negative (i.e., possibly needing signal) try
   75.43 +         * to clear in anticipation of signalling.  It is OK if this
   75.44 +         * fails or if status is changed by waiting thread.
   75.45           */
   75.46 -        compareAndSetWaitStatus(node, Node.SIGNAL, 0);
   75.47 +        int ws = node.waitStatus;
   75.48 +        if (ws < 0)
   75.49 +            compareAndSetWaitStatus(node, ws, 0);
   75.50  
   75.51          /*
   75.52           * Thread to unpark is held in successor, which is normally
   75.53 @@ -649,23 +663,70 @@
   75.54      }
   75.55  
   75.56      /**
   75.57 +     * Release action for shared mode -- signal successor and ensure
   75.58 +     * propagation. (Note: For exclusive mode, release just amounts
   75.59 +     * to calling unparkSuccessor of head if it needs signal.)
   75.60 +     */
   75.61 +    private void doReleaseShared() {
   75.62 +        /*
   75.63 +         * Ensure that a release propagates, even if there are other
   75.64 +         * in-progress acquires/releases.  This proceeds in the usual
   75.65 +         * way of trying to unparkSuccessor of head if it needs
   75.66 +         * signal. But if it does not, status is set to PROPAGATE to
   75.67 +         * ensure that upon release, propagation continues.
   75.68 +         * Additionally, we must loop in case a new node is added
   75.69 +         * while we are doing this. Also, unlike other uses of
   75.70 +         * unparkSuccessor, we need to know if CAS to reset status
   75.71 +         * fails, if so rechecking.
   75.72 +         */
   75.73 +        for (;;) {
   75.74 +            Node h = head;
   75.75 +            if (h != null && h != tail) {
   75.76 +                int ws = h.waitStatus;
   75.77 +                if (ws == Node.SIGNAL) {
   75.78 +                    if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0))
   75.79 +                        continue;            // loop to recheck cases
   75.80 +                    unparkSuccessor(h);
   75.81 +                }
   75.82 +                else if (ws == 0 &&
   75.83 +                         !compareAndSetWaitStatus(h, 0, Node.PROPAGATE))
   75.84 +                    continue;                // loop on failed CAS
   75.85 +            }
   75.86 +            if (h == head)                   // loop if head changed
   75.87 +                break;
   75.88 +        }
   75.89 +    }
   75.90 +
   75.91 +    /**
   75.92       * Sets head of queue, and checks if successor may be waiting
   75.93 -     * in shared mode, if so propagating if propagate > 0.
   75.94 +     * in shared mode, if so propagating if either propagate > 0 or
   75.95 +     * PROPAGATE status was set.
   75.96       *
   75.97 -     * @param pred the node holding waitStatus for node
   75.98       * @param node the node
   75.99       * @param propagate the return value from a tryAcquireShared
  75.100       */
  75.101      private void setHeadAndPropagate(Node node, int propagate) {
  75.102 +        Node h = head; // Record old head for check below
  75.103          setHead(node);
  75.104 -        if (propagate > 0 && node.waitStatus != 0) {
  75.105 -            /*
  75.106 -             * Don't bother fully figuring out successor.  If it
  75.107 -             * looks null, call unparkSuccessor anyway to be safe.
  75.108 -             */
  75.109 +        /*
  75.110 +         * Try to signal next queued node if:
  75.111 +         *   Propagation was indicated by caller,
  75.112 +         *     or was recorded (as h.waitStatus) by a previous operation
  75.113 +         *     (note: this uses sign-check of waitStatus because
  75.114 +         *      PROPAGATE status may transition to SIGNAL.)
  75.115 +         * and
  75.116 +         *   The next node is waiting in shared mode,
  75.117 +         *     or we don't know, because it appears null
  75.118 +         *
  75.119 +         * The conservatism in both of these checks may cause
  75.120 +         * unnecessary wake-ups, but only when there are multiple
  75.121 +         * racing acquires/releases, so most need signals now or soon
  75.122 +         * anyway.
  75.123 +         */
  75.124 +        if (propagate > 0 || h == null || h.waitStatus < 0) {
  75.125              Node s = node.next;
  75.126              if (s == null || s.isShared())
  75.127 -                unparkSuccessor(node);
  75.128 +                doReleaseShared();
  75.129          }
  75.130      }
  75.131  
  75.132 @@ -688,23 +749,27 @@
  75.133          while (pred.waitStatus > 0)
  75.134              node.prev = pred = pred.prev;
  75.135  
  75.136 -        // Getting this before setting waitStatus ensures staleness
  75.137 +        // predNext is the apparent node to unsplice. CASes below will
  75.138 +        // fail if not, in which case, we lost race vs another cancel
  75.139 +        // or signal, so no further action is necessary.
  75.140          Node predNext = pred.next;
  75.141  
  75.142 -        // Can use unconditional write instead of CAS here
  75.143 +        // Can use unconditional write instead of CAS here.
  75.144 +        // After this atomic step, other Nodes can skip past us.
  75.145 +        // Before, we are free of interference from other threads.
  75.146          node.waitStatus = Node.CANCELLED;
  75.147  
  75.148 -        // If we are the tail, remove ourselves
  75.149 +        // If we are the tail, remove ourselves.
  75.150          if (node == tail && compareAndSetTail(node, pred)) {
  75.151              compareAndSetNext(pred, predNext, null);
  75.152          } else {
  75.153 -            // If "active" predecessor found...
  75.154 -            if (pred != head
  75.155 -                && (pred.waitStatus == Node.SIGNAL
  75.156 -                    || compareAndSetWaitStatus(pred, 0, Node.SIGNAL))
  75.157 -                && pred.thread != null) {
  75.158 -
  75.159 -                // If successor is active, set predecessor's next link
  75.160 +            // If successor needs signal, try to set pred's next-link
  75.161 +            // so it will get one. Otherwise wake it up to propagate.
  75.162 +            int ws;
  75.163 +            if (pred != head &&
  75.164 +                ((ws = pred.waitStatus) == Node.SIGNAL ||
  75.165 +                 (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) &&
  75.166 +                pred.thread != null) {
  75.167                  Node next = node.next;
  75.168                  if (next != null && next.waitStatus <= 0)
  75.169                      compareAndSetNext(pred, predNext, next);
  75.170 @@ -726,14 +791,14 @@
  75.171       * @return {@code true} if thread should block
  75.172       */
  75.173      private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) {
  75.174 -        int s = pred.waitStatus;
  75.175 -        if (s < 0)
  75.176 +        int ws = pred.waitStatus;
  75.177 +        if (ws == Node.SIGNAL)
  75.178              /*
  75.179               * This node has already set status asking a release
  75.180               * to signal it, so it can safely park.
  75.181               */
  75.182              return true;
  75.183 -        if (s > 0) {
  75.184 +        if (ws > 0) {
  75.185              /*
  75.186               * Predecessor was cancelled. Skip over predecessors and
  75.187               * indicate retry.
  75.188 @@ -742,14 +807,14 @@
  75.189                  node.prev = pred = pred.prev;
  75.190              } while (pred.waitStatus > 0);
  75.191              pred.next = node;
  75.192 +        } else {
  75.193 +            /*
  75.194 +             * waitStatus must be 0 or PROPAGATE.  Indicate that we
  75.195 +             * need a signal, but don't park yet.  Caller will need to
  75.196 +             * retry to make sure it cannot acquire before parking.
  75.197 +             */
  75.198 +            compareAndSetWaitStatus(pred, ws, Node.SIGNAL);
  75.199          }
  75.200 -        else
  75.201 -            /*
  75.202 -             * Indicate that we need a signal, but don't park yet. Caller
  75.203 -             * will need to retry to make sure it cannot acquire before
  75.204 -             * parking.
  75.205 -             */
  75.206 -            compareAndSetWaitStatus(pred, 0, Node.SIGNAL);
  75.207          return false;
  75.208      }
  75.209  
  75.210 @@ -1269,9 +1334,7 @@
  75.211       */
  75.212      public final boolean releaseShared(int arg) {
  75.213          if (tryReleaseShared(arg)) {
  75.214 -            Node h = head;
  75.215 -            if (h != null && h.waitStatus != 0)
  75.216 -                unparkSuccessor(h);
  75.217 +            doReleaseShared();
  75.218              return true;
  75.219          }
  75.220          return false;
  75.221 @@ -1613,8 +1676,8 @@
  75.222           * case the waitStatus can be transiently and harmlessly wrong).
  75.223           */
  75.224          Node p = enq(node);
  75.225 -        int c = p.waitStatus;
  75.226 -        if (c > 0 || !compareAndSetWaitStatus(p, c, Node.SIGNAL))
  75.227 +        int ws = p.waitStatus;
  75.228 +        if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL))
  75.229              LockSupport.unpark(node.thread);
  75.230          return true;
  75.231      }
    76.1 --- a/src/share/classes/java/util/concurrent/locks/ReentrantReadWriteLock.java	Thu Apr 16 17:42:00 2009 +0100
    76.2 +++ b/src/share/classes/java/util/concurrent/locks/ReentrantReadWriteLock.java	Thu Apr 16 19:10:32 2009 -0700
    76.3 @@ -276,7 +276,7 @@
    76.4           * Maintained as a ThreadLocal; cached in cachedHoldCounter
    76.5           */
    76.6          static final class HoldCounter {
    76.7 -            int count;
    76.8 +            int count = 0;
    76.9              // Use id, not reference, to avoid garbage retention
   76.10              final long tid = Thread.currentThread().getId();
   76.11          }
   76.12 @@ -293,8 +293,9 @@
   76.13          }
   76.14  
   76.15          /**
   76.16 -         * The number of read locks held by current thread.
   76.17 +         * The number of reentrant read locks held by current thread.
   76.18           * Initialized only in constructor and readObject.
   76.19 +         * Removed whenever a thread's read hold count drops to 0.
   76.20           */
   76.21          private transient ThreadLocalHoldCounter readHolds;
   76.22  
   76.23 @@ -304,17 +305,35 @@
   76.24           * where the next thread to release is the last one to
   76.25           * acquire. This is non-volatile since it is just used
   76.26           * as a heuristic, and would be great for threads to cache.
   76.27 +         *
   76.28 +         * <p>Can outlive the Thread for which it is caching the read
   76.29 +         * hold count, but avoids garbage retention by not retaining a
   76.30 +         * reference to the Thread.
   76.31 +         *
   76.32 +         * <p>Accessed via a benign data race; relies on the memory
   76.33 +         * model's final field and out-of-thin-air guarantees.
   76.34           */
   76.35          private transient HoldCounter cachedHoldCounter;
   76.36  
   76.37          /**
   76.38           * firstReader is the first thread to have acquired the read lock.
   76.39           * firstReaderHoldCount is firstReader's hold count.
   76.40 -         * This allows tracking of read holds for uncontended read
   76.41 +         *
   76.42 +         * <p>More precisely, firstReader is the unique thread that last
   76.43 +         * changed the shared count from 0 to 1, and has not released the
   76.44 +         * read lock since then; null if there is no such thread.
   76.45 +         *
   76.46 +         * <p>Cannot cause garbage retention unless the thread terminated
   76.47 +         * without relinquishing its read locks, since tryReleaseShared
   76.48 +         * sets it to null.
   76.49 +         *
   76.50 +         * <p>Accessed via a benign data race; relies on the memory
   76.51 +         * model's out-of-thin-air guarantees for references.
   76.52 +         *
   76.53 +         * <p>This allows tracking of read holds for uncontended read
   76.54           * locks to be very cheap.
   76.55           */
   76.56 -        private final static long INVALID_THREAD_ID = -1;
   76.57 -        private transient long firstReader = INVALID_THREAD_ID;
   76.58 +        private transient Thread firstReader = null;
   76.59          private transient int firstReaderHoldCount;
   76.60  
   76.61          Sync() {
   76.62 @@ -393,16 +412,16 @@
   76.63          }
   76.64  
   76.65          protected final boolean tryReleaseShared(int unused) {
   76.66 -            long tid = Thread.currentThread().getId();
   76.67 -            if (firstReader == tid) {
   76.68 +            Thread current = Thread.currentThread();
   76.69 +            if (firstReader == current) {
   76.70                  // assert firstReaderHoldCount > 0;
   76.71                  if (firstReaderHoldCount == 1)
   76.72 -                    firstReader = INVALID_THREAD_ID;
   76.73 +                    firstReader = null;
   76.74                  else
   76.75                      firstReaderHoldCount--;
   76.76              } else {
   76.77                  HoldCounter rh = cachedHoldCounter;
   76.78 -                if (rh == null || rh.tid != tid)
   76.79 +                if (rh == null || rh.tid != current.getId())
   76.80                      rh = readHolds.get();
   76.81                  int count = rh.count;
   76.82                  if (count <= 1) {
   76.83 @@ -416,6 +435,9 @@
   76.84                  int c = getState();
   76.85                  int nextc = c - SHARED_UNIT;
   76.86                  if (compareAndSetState(c, nextc))
   76.87 +                    // Releasing the read lock has no effect on readers,
   76.88 +                    // but it may allow waiting writers to proceed if
   76.89 +                    // both read and write locks are now free.
   76.90                      return nextc == 0;
   76.91              }
   76.92          }
   76.93 @@ -450,15 +472,14 @@
   76.94              if (!readerShouldBlock() &&
   76.95                  r < MAX_COUNT &&
   76.96                  compareAndSetState(c, c + SHARED_UNIT)) {
   76.97 -                long tid = current.getId();
   76.98                  if (r == 0) {
   76.99 -                    firstReader = tid;
  76.100 +                    firstReader = current;
  76.101                      firstReaderHoldCount = 1;
  76.102 -                } else if (firstReader == tid) {
  76.103 +                } else if (firstReader == current) {
  76.104                      firstReaderHoldCount++;
  76.105                  } else {
  76.106                      HoldCounter rh = cachedHoldCounter;
  76.107 -                    if (rh == null || rh.tid != tid)
  76.108 +                    if (rh == null || rh.tid != current.getId())
  76.109                          cachedHoldCounter = rh = readHolds.get();
  76.110                      else if (rh.count == 0)
  76.111                          readHolds.set(rh);
  76.112 @@ -485,19 +506,17 @@
  76.113                  int c = getState();
  76.114                  if (exclusiveCount(c) != 0) {
  76.115                      if (getExclusiveOwnerThread() != current)
  76.116 -                        //if (removeNeeded) readHolds.remove();
  76.117                          return -1;
  76.118                      // else we hold the exclusive lock; blocking here
  76.119                      // would cause deadlock.
  76.120                  } else if (readerShouldBlock()) {
  76.121                      // Make sure we're not acquiring read lock reentrantly
  76.122 -                    long tid = current.getId();
  76.123 -                    if (firstReader == tid) {
  76.124 +                    if (firstReader == current) {
  76.125                          // assert firstReaderHoldCount > 0;
  76.126                      } else {
  76.127                          if (rh == null) {
  76.128                              rh = cachedHoldCounter;
  76.129 -                            if (rh == null || rh.tid != tid) {
  76.130 +                            if (rh == null || rh.tid != current.getId()) {
  76.131                                  rh = readHolds.get();
  76.132                                  if (rh.count == 0)
  76.133                                      readHolds.remove();
  76.134 @@ -510,25 +529,20 @@
  76.135                  if (sharedCount(c) == MAX_COUNT)
  76.136                      throw new Error("Maximum lock count exceeded");
  76.137                  if (compareAndSetState(c, c + SHARED_UNIT)) {
  76.138 -                    long tid = current.getId();
  76.139                      if (sharedCount(c) == 0) {
  76.140 -                        firstReader = tid;
  76.141 +                        firstReader = current;
  76.142                          firstReaderHoldCount = 1;
  76.143 -                    } else if (firstReader == tid) {
  76.144 +                    } else if (firstReader == current) {
  76.145                          firstReaderHoldCount++;
  76.146                      } else {
  76.147 -                        if (rh == null) {
  76.148 +                        if (rh == null)
  76.149                              rh = cachedHoldCounter;
  76.150 -                            if (rh != null && rh.tid == tid) {
  76.151 -                                if (rh.count == 0)
  76.152 -                                    readHolds.set(rh);
  76.153 -                            } else {
  76.154 -                                rh = readHolds.get();
  76.155 -                            }
  76.156 -                        } else if (rh.count == 0)
  76.157 +                        if (rh == null || rh.tid != current.getId())
  76.158 +                            rh = readHolds.get();
  76.159 +                        else if (rh.count == 0)
  76.160                              readHolds.set(rh);
  76.161 +                        rh.count++;
  76.162                          cachedHoldCounter = rh; // cache for release
  76.163 -                        rh.count++;
  76.164                      }
  76.165                      return 1;
  76.166                  }
  76.167 @@ -572,15 +586,14 @@
  76.168                  if (r == MAX_COUNT)
  76.169                      throw new Error("Maximum lock count exceeded");
  76.170                  if (compareAndSetState(c, c + SHARED_UNIT)) {
  76.171 -                    long tid = current.getId();
  76.172                      if (r == 0) {
  76.173 -                        firstReader = tid;
  76.174 +                        firstReader = current;
  76.175                          firstReaderHoldCount = 1;
  76.176 -                    } else if (firstReader == tid) {
  76.177 +                    } else if (firstReader == current) {
  76.178                          firstReaderHoldCount++;
  76.179                      } else {
  76.180                          HoldCounter rh = cachedHoldCounter;
  76.181 -                        if (rh == null || rh.tid != tid)
  76.182 +                        if (rh == null || rh.tid != current.getId())
  76.183                              cachedHoldCounter = rh = readHolds.get();
  76.184                          else if (rh.count == 0)
  76.185                              readHolds.set(rh);
  76.186 @@ -626,12 +639,12 @@
  76.187              if (getReadLockCount() == 0)
  76.188                  return 0;
  76.189  
  76.190 -            long tid = Thread.currentThread().getId();
  76.191 -            if (firstReader == tid)
  76.192 +            Thread current = Thread.currentThread();
  76.193 +            if (firstReader == current)
  76.194                  return firstReaderHoldCount;
  76.195  
  76.196              HoldCounter rh = cachedHoldCounter;
  76.197 -            if (rh != null && rh.tid == tid)
  76.198 +            if (rh != null && rh.tid == current.getId())
  76.199                  return rh.count;
  76.200  
  76.201              int count = readHolds.get().count;
  76.202 @@ -647,7 +660,6 @@
  76.203              throws java.io.IOException, ClassNotFoundException {
  76.204              s.defaultReadObject();
  76.205              readHolds = new ThreadLocalHoldCounter();
  76.206 -            firstReader = INVALID_THREAD_ID;
  76.207              setState(0); // reset to unlocked state
  76.208          }
  76.209  
    77.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    77.2 +++ b/src/share/classes/java/util/zip/ZipConstants64.java	Thu Apr 16 19:10:32 2009 -0700
    77.3 @@ -0,0 +1,77 @@
    77.4 +/*
    77.5 + * Copyright 1995-1996 Sun Microsystems, Inc.  All Rights Reserved.
    77.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    77.7 + *
    77.8 + * This code is free software; you can redistribute it and/or modify it
    77.9 + * under the terms of the GNU General Public License version 2 only, as
   77.10 + * published by the Free Software Foundation.  Sun designates this
   77.11 + * particular file as subject to the "Classpath" exception as provided
   77.12 + * by Sun in the LICENSE file that accompanied this code.
   77.13 + *
   77.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
   77.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   77.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   77.17 + * version 2 for more details (a copy is included in the LICENSE file that
   77.18 + * accompanied this code).
   77.19 + *
   77.20 + * You should have received a copy of the GNU General Public License version
   77.21 + * 2 along with this work; if not, write to the Free Software Foundation,
   77.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   77.23 + *
   77.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
   77.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
   77.26 + * have any questions.
   77.27 + */
   77.28 +
   77.29 +package java.util.zip;
   77.30 +
   77.31 +/*
   77.32 + * This class defines the constants that are used by the classes
   77.33 + * which manipulate Zip64 files.
   77.34 + */
   77.35 +
   77.36 +class ZipConstants64 {
   77.37 +
   77.38 +    /*
   77.39 +     * ZIP64 constants
   77.40 +     */
   77.41 +    static final long ZIP64_ENDSIG = 0x06064b50L;  // "PK\006\006"
   77.42 +    static final long ZIP64_LOCSIG = 0x07064b50L;  // "PK\006\007"
   77.43 +    static final int  ZIP64_ENDHDR = 56;           // ZIP64 end header size
   77.44 +    static final int  ZIP64_LOCHDR = 20;           // ZIP64 end loc header size
   77.45 +    static final int  ZIP64_EXTHDR = 24;           // EXT header size
   77.46 +    static final int  ZIP64_EXTID  = 0x0001;       // Extra field Zip64 header ID
   77.47 +
   77.48 +    static final int  ZIP64_MAGICCOUNT = 0xFFFF;
   77.49 +    static final long ZIP64_MAGICVAL = 0xFFFFFFFFL;
   77.50 +
   77.51 +    /*
   77.52 +     * Zip64 End of central directory (END) header field offsets
   77.53 +     */
   77.54 +    static final int  ZIP64_ENDLEN = 4;       // size of zip64 end of central dir
   77.55 +    static final int  ZIP64_ENDVEM = 12;      // version made by
   77.56 +    static final int  ZIP64_ENDVER = 14;      // version needed to extract
   77.57 +    static final int  ZIP64_ENDNMD = 16;      // number of this disk
   77.58 +    static final int  ZIP64_ENDDSK = 20;      // disk number of start
   77.59 +    static final int  ZIP64_ENDTOD = 24;      // total number of entries on this disk
   77.60 +    static final int  ZIP64_ENDTOT = 32;      // total number of entries
   77.61 +    static final int  ZIP64_ENDSIZ = 40;      // central directory size in bytes
   77.62 +    static final int  ZIP64_ENDOFF = 48;      // offset of first CEN header
   77.63 +    static final int  ZIP64_ENDEXT = 56;      // zip64 extensible data sector
   77.64 +
   77.65 +    /*
   77.66 +     * Zip64 End of central directory locator field offsets
   77.67 +     */
   77.68 +    static final int  ZIP64_LOCDSK = 4;       // disk number start
   77.69 +    static final int  ZIP64_LOCOFF = 8;       // offset of zip64 end
   77.70 +    static final int  ZIP64_LOCTOT = 16;      // total number of disks
   77.71 +
   77.72 +    /*
   77.73 +     * Zip64 Extra local (EXT) header field offsets
   77.74 +     */
   77.75 +    static final int  ZIP64_EXTCRC = 4;       // uncompressed file crc-32 value
   77.76 +    static final int  ZIP64_EXTSIZ = 8;       // compressed size, 8-byte
   77.77 +    static final int  ZIP64_EXTLEN = 16;      // uncompressed size, 8-byte
   77.78 +
   77.79 +    private ZipConstants64() {}
   77.80 +}
    78.1 --- a/src/share/classes/java/util/zip/ZipEntry.java	Thu Apr 16 17:42:00 2009 +0100
    78.2 +++ b/src/share/classes/java/util/zip/ZipEntry.java	Thu Apr 16 19:10:32 2009 -0700
    78.3 @@ -1,5 +1,5 @@
    78.4  /*
    78.5 - * Copyright 1995-2005 Sun Microsystems, Inc.  All Rights Reserved.
    78.6 + * Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
    78.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    78.8   *
    78.9   * This code is free software; you can redistribute it and/or modify it
   78.10 @@ -144,11 +144,13 @@
   78.11       * Sets the uncompressed size of the entry data.
   78.12       * @param size the uncompressed size in bytes
   78.13       * @exception IllegalArgumentException if the specified size is less
   78.14 -     *            than 0 or greater than 0xFFFFFFFF bytes
   78.15 +     *            than 0, is greater than 0xFFFFFFFF when
   78.16 +     *            <a href="package-summary.html#zip64">ZIP64 format</a> is not supported,
   78.17 +     *            or is less than 0 when ZIP64 is supported
   78.18       * @see #getSize()
   78.19       */
   78.20      public void setSize(long size) {
   78.21 -        if (size < 0 || size > 0xFFFFFFFFL) {
   78.22 +        if (size < 0) {
   78.23              throw new IllegalArgumentException("invalid entry size");
   78.24          }
   78.25          this.size = size;
    79.1 --- a/src/share/classes/java/util/zip/ZipInputStream.java	Thu Apr 16 17:42:00 2009 +0100
    79.2 +++ b/src/share/classes/java/util/zip/ZipInputStream.java	Thu Apr 16 19:10:32 2009 -0700
    79.3 @@ -1,5 +1,5 @@
    79.4  /*
    79.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
    79.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    79.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    79.8   *
    79.9   * This code is free software; you can redistribute it and/or modify it
   79.10 @@ -29,6 +29,7 @@
   79.11  import java.io.IOException;
   79.12  import java.io.EOFException;
   79.13  import java.io.PushbackInputStream;
   79.14 +import static java.util.zip.ZipConstants64.*;
   79.15  
   79.16  /**
   79.17   * This class implements an input stream filter for reading files in the
   79.18 @@ -285,6 +286,29 @@
   79.19              byte[] bb = new byte[len];
   79.20              readFully(bb, 0, len);
   79.21              e.setExtra(bb);
   79.22 +            // extra fields are in "HeaderID(2)DataSize(2)Data... format
   79.23 +            if (e.csize == ZIP64_MAGICVAL || e.size == ZIP64_MAGICVAL) {
   79.24 +                int off = 0;
   79.25 +                while (off + 4 < len) {
   79.26 +                    int sz = get16(bb, off + 2);
   79.27 +                    if (get16(bb, off) == ZIP64_EXTID) {
   79.28 +                        off += 4;
   79.29 +                        // LOC extra zip64 entry MUST include BOTH original and
   79.30 +                        // compressed file size fields
   79.31 +                        if (sz < 16 || (off + sz) > len ) {
   79.32 +                            // Invalid zip64 extra fields, simply skip. Even it's
   79.33 +                            // rare, it's possible the entry size happens to be
   79.34 +                            // the magic value and it "accidnetly" has some bytes
   79.35 +                            // in extra match the id.
   79.36 +                            return e;
   79.37 +                        }
   79.38 +                        e.size = get64(bb, off);
   79.39 +                        e.csize = get64(bb, off + 8);
   79.40 +                        break;
   79.41 +                    }
   79.42 +                    off += (sz + 4);
   79.43 +                }
   79.44 +            }
   79.45          }
   79.46          return e;
   79.47      }
   79.48 @@ -375,18 +399,36 @@
   79.49          }
   79.50          if ((flag & 8) == 8) {
   79.51              /* "Data Descriptor" present */
   79.52 -            readFully(tmpbuf, 0, EXTHDR);
   79.53 -            long sig = get32(tmpbuf, 0);
   79.54 -            if (sig != EXTSIG) { // no EXTSIG present
   79.55 -                e.crc = sig;
   79.56 -                e.csize = get32(tmpbuf, EXTSIZ - EXTCRC);
   79.57 -                e.size = get32(tmpbuf, EXTLEN - EXTCRC);
   79.58 -                ((PushbackInputStream)in).unread(
   79.59 -                                           tmpbuf, EXTHDR - EXTCRC - 1, EXTCRC);
   79.60 +            if (inf.getBytesWritten() > ZIP64_MAGICVAL ||
   79.61 +                inf.getBytesRead() > ZIP64_MAGICVAL) {
   79.62 +                // ZIP64 format
   79.63 +                readFully(tmpbuf, 0, ZIP64_EXTHDR);
   79.64 +                long sig = get32(tmpbuf, 0);
   79.65 +                if (sig != EXTSIG) { // no EXTSIG present
   79.66 +                    e.crc = sig;
   79.67 +                    e.csize = get64(tmpbuf, ZIP64_EXTSIZ - ZIP64_EXTCRC);
   79.68 +                    e.size = get64(tmpbuf, ZIP64_EXTLEN - ZIP64_EXTCRC);
   79.69 +                    ((PushbackInputStream)in).unread(
   79.70 +                        tmpbuf, ZIP64_EXTHDR - ZIP64_EXTCRC - 1, ZIP64_EXTCRC);
   79.71 +                } else {
   79.72 +                    e.crc = get32(tmpbuf, ZIP64_EXTCRC);
   79.73 +                    e.csize = get64(tmpbuf, ZIP64_EXTSIZ);
   79.74 +                    e.size = get64(tmpbuf, ZIP64_EXTLEN);
   79.75 +                }
   79.76              } else {
   79.77 -                e.crc = get32(tmpbuf, EXTCRC);
   79.78 -                e.csize = get32(tmpbuf, EXTSIZ);
   79.79 -                e.size = get32(tmpbuf, EXTLEN);
   79.80 +                readFully(tmpbuf, 0, EXTHDR);
   79.81 +                long sig = get32(tmpbuf, 0);
   79.82 +                if (sig != EXTSIG) { // no EXTSIG present
   79.83 +                    e.crc = sig;
   79.84 +                    e.csize = get32(tmpbuf, EXTSIZ - EXTCRC);
   79.85 +                    e.size = get32(tmpbuf, EXTLEN - EXTCRC);
   79.86 +                    ((PushbackInputStream)in).unread(
   79.87 +                                               tmpbuf, EXTHDR - EXTCRC - 1, EXTCRC);
   79.88 +                } else {
   79.89 +                    e.crc = get32(tmpbuf, EXTCRC);
   79.90 +                    e.csize = get32(tmpbuf, EXTSIZ);
   79.91 +                    e.size = get32(tmpbuf, EXTLEN);
   79.92 +                }
   79.93              }
   79.94          }
   79.95          if (e.size != inf.getBytesWritten()) {
   79.96 @@ -433,6 +475,14 @@
   79.97       * The bytes are assumed to be in Intel (little-endian) byte order.
   79.98       */
   79.99      private static final long get32(byte b[], int off) {
  79.100 -        return get16(b, off) | ((long)get16(b, off+2) << 16);
  79.101 +        return (get16(b, off) | ((long)get16(b, off+2) << 16)) & 0xffffffffL;
  79.102 +    }
  79.103 +
  79.104 +    /*
  79.105 +     * Fetches signed 64-bit value from byte array at specified offset.
  79.106 +     * The bytes are assumed to be in Intel (little-endian) byte order.
  79.107 +     */
  79.108 +    private static final long get64(byte b[], int off) {
  79.109 +        return get32(b, off) | (get32(b, off+4) << 32);
  79.110      }
  79.111  }
    80.1 --- a/src/share/classes/java/util/zip/ZipOutputStream.java	Thu Apr 16 17:42:00 2009 +0100
    80.2 +++ b/src/share/classes/java/util/zip/ZipOutputStream.java	Thu Apr 16 19:10:32 2009 -0700
    80.3 @@ -1,5 +1,5 @@
    80.4  /*
    80.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
    80.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
    80.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    80.8   *
    80.9   * This code is free software; you can redistribute it and/or modify it
   80.10 @@ -29,6 +29,7 @@
   80.11  import java.io.IOException;
   80.12  import java.util.Vector;
   80.13  import java.util.HashSet;
   80.14 +import static java.util.zip.ZipConstants64.*;
   80.15  
   80.16  /**
   80.17   * This class implements an output stream filter for writing files in the
   80.18 @@ -343,26 +344,52 @@
   80.19      private void writeLOC(XEntry xentry) throws IOException {
   80.20          ZipEntry e = xentry.entry;
   80.21          int flag = xentry.flag;
   80.22 +        int elen = (e.extra != null) ? e.extra.length : 0;
   80.23 +        boolean hasZip64 = false;
   80.24 +
   80.25          writeInt(LOCSIG);           // LOC header signature
   80.26 -        writeShort(version(e));     // version needed to extract
   80.27 -        writeShort(flag);           // general purpose bit flag
   80.28 -        writeShort(e.method);       // compression method
   80.29 -        writeInt(e.time);           // last modification time
   80.30 +
   80.31          if ((flag & 8) == 8) {
   80.32 +            writeShort(version(e));     // version needed to extract
   80.33 +            writeShort(flag);           // general purpose bit flag
   80.34 +            writeShort(e.method);       // compression method
   80.35 +            writeInt(e.time);           // last modification time
   80.36 +
   80.37              // store size, uncompressed size, and crc-32 in data descriptor
   80.38              // immediately following compressed entry data
   80.39              writeInt(0);
   80.40              writeInt(0);
   80.41              writeInt(0);
   80.42          } else {
   80.43 -            writeInt(e.crc);        // crc-32
   80.44 -            writeInt(e.csize);      // compressed size
   80.45 -            writeInt(e.size);       // uncompressed size
   80.46 +            if (e.csize >= ZIP64_MAGICVAL || e.size >= ZIP64_MAGICVAL) {
   80.47 +                hasZip64 = true;
   80.48 +                writeShort(45);         // ver 4.5 for zip64
   80.49 +            } else {
   80.50 +                writeShort(version(e)); // version needed to extract
   80.51 +            }
   80.52 +            writeShort(flag);           // general purpose bit flag
   80.53 +            writeShort(e.method);       // compression method
   80.54 +            writeInt(e.time);           // last modification time
   80.55 +            writeInt(e.crc);            // crc-32
   80.56 +            if (hasZip64) {
   80.57 +                writeInt(ZIP64_MAGICVAL);
   80.58 +                writeInt(ZIP64_MAGICVAL);
   80.59 +                elen += 20;        //headid(2) + size(2) + size(8) + csize(8)
   80.60 +            } else {
   80.61 +                writeInt(e.csize);  // compressed size
   80.62 +                writeInt(e.size);   // uncompressed size
   80.63 +            }
   80.64          }
   80.65          byte[] nameBytes = getUTF8Bytes(e.name);
   80.66          writeShort(nameBytes.length);
   80.67 -        writeShort(e.extra != null ? e.extra.length : 0);
   80.68 +        writeShort(elen);
   80.69          writeBytes(nameBytes, 0, nameBytes.length);
   80.70 +        if (hasZip64) {
   80.71 +            writeShort(ZIP64_EXTID);
   80.72 +            writeShort(16);
   80.73 +            writeLong(e.size);
   80.74 +            writeLong(e.csize);
   80.75 +        }
   80.76          if (e.extra != null) {
   80.77              writeBytes(e.extra, 0, e.extra.length);
   80.78          }
   80.79 @@ -375,8 +402,13 @@
   80.80      private void writeEXT(ZipEntry e) throws IOException {
   80.81          writeInt(EXTSIG);           // EXT header signature
   80.82          writeInt(e.crc);            // crc-32
   80.83 -        writeInt(e.csize);          // compressed size
   80.84 -        writeInt(e.size);           // uncompressed size
   80.85 +        if (e.csize >= ZIP64_MAGICVAL || e.size >= ZIP64_MAGICVAL) {
   80.86 +            writeLong(e.csize);
   80.87 +            writeLong(e.size);
   80.88 +        } else {
   80.89 +            writeInt(e.csize);          // compressed size
   80.90 +            writeInt(e.size);           // uncompressed size
   80.91 +        }
   80.92      }
   80.93  
   80.94      /*
   80.95 @@ -387,18 +419,49 @@
   80.96          ZipEntry e  = xentry.entry;
   80.97          int flag = xentry.flag;
   80.98          int version = version(e);
   80.99 +
  80.100 +        long csize = e.csize;
  80.101 +        long size = e.size;
  80.102 +        long offset = xentry.offset;
  80.103 +        int e64len = 0;
  80.104 +        boolean hasZip64 = false;
  80.105 +        if (e.csize >= ZIP64_MAGICVAL) {
  80.106 +            csize = ZIP64_MAGICVAL;
  80.107 +            e64len += 8;              // csize(8)
  80.108 +            hasZip64 = true;
  80.109 +        }
  80.110 +        if (e.size >= ZIP64_MAGICVAL) {
  80.111 +            size = ZIP64_MAGICVAL;    // size(8)
  80.112 +            e64len += 8;
  80.113 +            hasZip64 = true;
  80.114 +        }
  80.115 +        if (xentry.offset >= ZIP64_MAGICVAL) {
  80.116 +            offset = ZIP64_MAGICVAL;
  80.117 +            e64len += 8;              // offset(8)
  80.118 +            hasZip64 = true;
  80.119 +        }
  80.120          writeInt(CENSIG);           // CEN header signature
  80.121 -        writeShort(version);        // version made by
  80.122 -        writeShort(version);        // version needed to extract
  80.123 +        if (hasZip64) {
  80.124 +            writeShort(45);         // ver 4.5 for zip64
  80.125 +            writeShort(45);
  80.126 +        } else {
  80.127 +            writeShort(version);    // version made by
  80.128 +            writeShort(version);    // version needed to extract
  80.129 +        }
  80.130          writeShort(flag);           // general purpose bit flag
  80.131          writeShort(e.method);       // compression method
  80.132          writeInt(e.time);           // last modification time
  80.133          writeInt(e.crc);            // crc-32
  80.134 -        writeInt(e.csize);          // compressed size
  80.135 -        writeInt(e.size);           // uncompressed size
  80.136 +        writeInt(csize);            // compressed size
  80.137 +        writeInt(size);             // uncompressed size
  80.138          byte[] nameBytes = getUTF8Bytes(e.name);
  80.139          writeShort(nameBytes.length);
  80.140 -        writeShort(e.extra != null ? e.extra.length : 0);
  80.141 +        if (hasZip64) {
  80.142 +            // + headid(2) + datasize(2)
  80.143 +            writeShort(e64len + 4 + (e.extra != null ? e.extra.length : 0));
  80.144 +        } else {
  80.145 +            writeShort(e.extra != null ? e.extra.length : 0);
  80.146 +        }
  80.147          byte[] commentBytes;
  80.148          if (e.comment != null) {
  80.149              commentBytes = getUTF8Bytes(e.comment);
  80.150 @@ -410,8 +473,18 @@
  80.151          writeShort(0);              // starting disk number
  80.152          writeShort(0);              // internal file attributes (unused)
  80.153          writeInt(0);                // external file attributes (unused)
  80.154 -        writeInt(xentry.offset);    // relative offset of local header
  80.155 +        writeInt(offset);           // relative offset of local header
  80.156          writeBytes(nameBytes, 0, nameBytes.length);
  80.157 +        if (hasZip64) {
  80.158 +            writeShort(ZIP64_EXTID);// Zip64 extra
  80.159 +            writeShort(e64len);
  80.160 +            if (size == ZIP64_MAGICVAL)
  80.161 +                writeLong(e.size);
  80.162 +            if (csize == ZIP64_MAGICVAL)
  80.163 +                writeLong(e.csize);
  80.164 +            if (offset == ZIP64_MAGICVAL)
  80.165 +                writeLong(xentry.offset);
  80.166 +        }
  80.167          if (e.extra != null) {
  80.168              writeBytes(e.extra, 0, e.extra.length);
  80.169          }
  80.170 @@ -424,15 +497,50 @@
  80.171       * Writes end of central directory (END) header.
  80.172       */
  80.173      private void writeEND(long off, long len) throws IOException {
  80.174 +        boolean hasZip64 = false;
  80.175 +        long xlen = len;
  80.176 +        long xoff = off;
  80.177 +        if (xlen >= ZIP64_MAGICVAL) {
  80.178 +            xlen = ZIP64_MAGICVAL;
  80.179 +            hasZip64 = true;
  80.180 +        }
  80.181 +        if (xoff >= ZIP64_MAGICVAL) {
  80.182 +            xoff = ZIP64_MAGICVAL;
  80.183 +            hasZip64 = true;
  80.184 +        }
  80.185          int count = xentries.size();
  80.186 -        writeInt(ENDSIG);           // END record signature
  80.187 -        writeShort(0);              // number of this disk
  80.188 -        writeShort(0);              // central directory start disk
  80.189 -        writeShort(count);          // number of directory entries on disk
  80.190 -        writeShort(count);          // total number of directory entries
  80.191 -        writeInt(len);              // length of central directory
  80.192 -        writeInt(off);              // offset of central directory
  80.193 -        if (comment != null) {      // zip file comment
  80.194 +        if (count >= ZIP64_MAGICCOUNT) {
  80.195 +            count = ZIP64_MAGICCOUNT;
  80.196 +            hasZip64 = true;
  80.197 +        }
  80.198 +        if (hasZip64) {
  80.199 +            long off64 = written;
  80.200 +            //zip64 end of central directory record
  80.201 +            writeInt(ZIP64_ENDSIG);        // zip64 END record signature
  80.202 +            writeLong(ZIP64_ENDHDR - 12);  // size of zip64 end
  80.203 +            writeShort(45);                // version made by
  80.204 +            writeShort(45);                // version needed to extract
  80.205 +            writeInt(0);                   // number of this disk
  80.206 +            writeInt(0);                   // central directory start disk
  80.207 +            writeLong(xentries.size());    // number of directory entires on disk
  80.208 +            writeLong(xentries.size());    // number of directory entires
  80.209 +            writeLong(len);                // length of central directory
  80.210 +            writeLong(off);                // offset of central directory
  80.211 +
  80.212 +            //zip64 end of central directory locator
  80.213 +            writeInt(ZIP64_LOCSIG);        // zip64 END locator signature
  80.214 +            writeInt(0);                   // zip64 END start disk
  80.215 +            writeLong(off64);              // offset of zip64 END
  80.216 +            writeInt(1);                   // total number of disks (?)
  80.217 +        }
  80.218 +        writeInt(ENDSIG);                 // END record signature
  80.219 +        writeShort(0);                    // number of this disk
  80.220 +        writeShort(0);                    // central directory start disk
  80.221 +        writeShort(count);                // number of directory entries on disk
  80.222 +        writeShort(count);                // total number of directory entries
  80.223 +        writeInt(xlen);                   // length of central directory
  80.224 +        writeInt(xoff);                   // offset of central directory
  80.225 +        if (comment != null) {            // zip file comment
  80.226              byte[] b = getUTF8Bytes(comment);
  80.227              writeShort(b.length);
  80.228              writeBytes(b, 0, b.length);
  80.229 @@ -464,6 +572,22 @@
  80.230      }
  80.231  
  80.232      /*
  80.233 +     * Writes a 64-bit int to the output stream in little-endian byte order.
  80.234 +     */
  80.235 +    private void writeLong(long v) throws IOException {
  80.236 +        OutputStream out = this.out;
  80.237 +        out.write((int)((v >>>  0) & 0xff));
  80.238 +        out.write((int)((v >>>  8) & 0xff));
  80.239 +        out.write((int)((v >>> 16) & 0xff));
  80.240 +        out.write((int)((v >>> 24) & 0xff));
  80.241 +        out.write((int)((v >>> 32) & 0xff));
  80.242 +        out.write((int)((v >>> 40) & 0xff));
  80.243 +        out.write((int)((v >>> 48) & 0xff));
  80.244 +        out.write((int)((v >>> 56) & 0xff));
  80.245 +        written += 8;
  80.246 +    }
  80.247 +
  80.248 +    /*
  80.249       * Writes an array of bytes to the output stream.
  80.250       */
  80.251      private void writeBytes(byte[] b, int off, int len) throws IOException {
    81.1 --- a/src/share/classes/java/util/zip/package.html	Thu Apr 16 17:42:00 2009 +0100
    81.2 +++ b/src/share/classes/java/util/zip/package.html	Thu Apr 16 19:10:32 2009 -0700
    81.3 @@ -46,6 +46,13 @@
    81.4        </a> - a detailed description of the Info-ZIP format upon which
    81.5        the <code>java.util.zip</code> classes are based.
    81.6  <p>
    81.7 +  <a name="zip64">
    81.8 +  <li>An implementation may optionally support the ZIP64(tm) format extensions
    81.9 +      defined by the 
   81.10 +      <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
   81.11 +      PKWARE ZIP File Format Specification</a>. The ZIP64(tm) format extensions
   81.12 +      are used to overcome the size limitations of the original ZIP format.
   81.13 +<p>
   81.14    <li><a href="http://www.isi.edu/in-notes/rfc1950.txt">
   81.15        ZLIB Compressed Data Format Specification version 3.3</a>
   81.16        &nbsp;
   81.17 @@ -70,7 +77,6 @@
   81.18    <li>CRC-32 checksum is described in RFC 1952 (above)
   81.19  <p>
   81.20    <li>Adler-32 checksum is described in RFC 1950 (above)
   81.21 -
   81.22  </ul>
   81.23  
   81.24  
    82.1 --- a/src/share/classes/javax/swing/AbstractButton.java	Thu Apr 16 17:42:00 2009 +0100
    82.2 +++ b/src/share/classes/javax/swing/AbstractButton.java	Thu Apr 16 19:10:32 2009 -0700
    82.3 @@ -1,5 +1,5 @@
    82.4  /*
    82.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    82.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    82.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    82.8   *
    82.9   * This code is free software; you can redistribute it and/or modify it
   82.10 @@ -1545,6 +1545,9 @@
   82.11       * A mnemonic must correspond to a single key on the keyboard
   82.12       * and should be specified using one of the <code>VK_XXX</code>
   82.13       * keycodes defined in <code>java.awt.event.KeyEvent</code>.
   82.14 +     * These codes and the wider array of codes for international
   82.15 +     * keyboards may be obtained through
   82.16 +     * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
   82.17       * Mnemonics are case-insensitive, therefore a key event
   82.18       * with the corresponding keycode would cause the button to be
   82.19       * activated whether or not the Shift modifier was pressed.
    83.1 --- a/src/share/classes/javax/swing/Action.java	Thu Apr 16 17:42:00 2009 +0100
    83.2 +++ b/src/share/classes/javax/swing/Action.java	Thu Apr 16 19:10:32 2009 -0700
    83.3 @@ -1,5 +1,5 @@
    83.4  /*
    83.5 - * Copyright 1997-2006 Sun Microsystems, Inc.  All Rights Reserved.
    83.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    83.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    83.8   *
    83.9   * This code is free software; you can redistribute it and/or modify it
   83.10 @@ -272,7 +272,9 @@
   83.11       * one of the <code>KeyEvent</code> key codes.  The value is
   83.12       * commonly used to specify a mnemonic.  For example:
   83.13       * <code>myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A)</code>
   83.14 -     * sets the mnemonic of <code>myAction</code> to 'a'.
   83.15 +     * sets the mnemonic of <code>myAction</code> to 'a', while
   83.16 +     * <code>myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.getExtendedKeyCodeForChar('\u0444'))</code>
   83.17 +     * sets the mnemonic of <code>myAction</code> to Cyrillic letter "Ef".
   83.18       *
   83.19       * @since 1.3
   83.20       */
    84.1 --- a/src/share/classes/javax/swing/JComponent.java	Thu Apr 16 17:42:00 2009 +0100
    84.2 +++ b/src/share/classes/javax/swing/JComponent.java	Thu Apr 16 19:10:32 2009 -0700
    84.3 @@ -1,5 +1,5 @@
    84.4  /*
    84.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    84.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    84.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    84.8   *
    84.9   * This code is free software; you can redistribute it and/or modify it
   84.10 @@ -2888,7 +2888,10 @@
   84.11            return false;
   84.12        }
   84.13        // Get the KeyStroke
   84.14 +      // There may be two keystrokes associated with a low-level key event;
   84.15 +      // in this case a keystroke made of an extended key code has a priority.
   84.16        KeyStroke ks;
   84.17 +      KeyStroke ksE = null;
   84.18  
   84.19        if (e.getID() == KeyEvent.KEY_TYPED) {
   84.20            ks = KeyStroke.getKeyStroke(e.getKeyChar());
   84.21 @@ -2896,9 +2899,18 @@
   84.22        else {
   84.23            ks = KeyStroke.getKeyStroke(e.getKeyCode(),e.getModifiers(),
   84.24                                      (pressed ? false:true));
   84.25 +          if (e.getKeyCode() != e.getExtendedKeyCode()) {
   84.26 +              ksE = KeyStroke.getKeyStroke(e.getExtendedKeyCode(),e.getModifiers(),
   84.27 +                                    (pressed ? false:true));
   84.28 +          }
   84.29        }
   84.30  
   84.31 -      /* Do we have a key binding for e? */
   84.32 +      // Do we have a key binding for e?
   84.33 +      // If we have a binding by an extended code, use it.
   84.34 +      // If not, check for regular code binding.
   84.35 +      if(ksE != null && processKeyBinding(ksE, e, WHEN_FOCUSED, pressed)) {
   84.36 +          return true;
   84.37 +      }
   84.38        if(processKeyBinding(ks, e, WHEN_FOCUSED, pressed))
   84.39            return true;
   84.40  
   84.41 @@ -2910,6 +2922,9 @@
   84.42        while (parent != null && !(parent instanceof Window) &&
   84.43               !(parent instanceof Applet)) {
   84.44            if(parent instanceof JComponent) {
   84.45 +              if(ksE != null && ((JComponent)parent).processKeyBinding(ksE, e,
   84.46 +                               WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, pressed))
   84.47 +                  return true;
   84.48                if(((JComponent)parent).processKeyBinding(ks, e,
   84.49                                 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, pressed))
   84.50                    return true;
    85.1 --- a/src/share/classes/javax/swing/JLabel.java	Thu Apr 16 17:42:00 2009 +0100
    85.2 +++ b/src/share/classes/javax/swing/JLabel.java	Thu Apr 16 19:10:32 2009 -0700
    85.3 @@ -1,5 +1,5 @@
    85.4  /*
    85.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    85.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    85.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    85.8   *
    85.9   * This code is free software; you can redistribute it and/or modify it
   85.10 @@ -503,10 +503,10 @@
   85.11       * @see #setDisplayedMnemonic(int)
   85.12       */
   85.13      public void setDisplayedMnemonic(char aChar) {
   85.14 -        int vk = (int) aChar;
   85.15 -        if(vk >= 'a' && vk <='z')
   85.16 -            vk -= ('a' - 'A');
   85.17 -        setDisplayedMnemonic(vk);
   85.18 +        int vk = java.awt.event.KeyEvent.getExtendedKeyCodeForChar(aChar);
   85.19 +        if (vk != java.awt.event.KeyEvent.VK_UNDEFINED) {
   85.20 +            setDisplayedMnemonic(vk);
   85.21 +        }
   85.22      }
   85.23  
   85.24  
    86.1 --- a/src/share/classes/javax/swing/JTabbedPane.java	Thu Apr 16 17:42:00 2009 +0100
    86.2 +++ b/src/share/classes/javax/swing/JTabbedPane.java	Thu Apr 16 19:10:32 2009 -0700
    86.3 @@ -1,5 +1,5 @@
    86.4  /*
    86.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    86.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    86.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    86.8   *
    86.9   * This code is free software; you can redistribute it and/or modify it
   86.10 @@ -1628,7 +1628,9 @@
   86.11       * <p>
   86.12       * A mnemonic must correspond to a single key on the keyboard
   86.13       * and should be specified using one of the <code>VK_XXX</code>
   86.14 -     * keycodes defined in <code>java.awt.event.KeyEvent</code>.
   86.15 +     * keycodes defined in <code>java.awt.event.KeyEvent</code>
   86.16 +     * or one of the extended keycodes obtained through
   86.17 +     * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
   86.18       * Mnemonics are case-insensitive, therefore a key event
   86.19       * with the corresponding keycode would cause the button to be
   86.20       * activated whether or not the Shift modifier was pressed.
    87.1 --- a/src/share/classes/javax/swing/KeyStroke.java	Thu Apr 16 17:42:00 2009 +0100
    87.2 +++ b/src/share/classes/javax/swing/KeyStroke.java	Thu Apr 16 19:10:32 2009 -0700
    87.3 @@ -1,5 +1,5 @@
    87.4  /*
    87.5 - * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
    87.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    87.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    87.8   *
    87.9   * This code is free software; you can redistribute it and/or modify it
   87.10 @@ -162,6 +162,9 @@
   87.11       * <li>java.awt.event.KeyEvent.VK_TAB
   87.12       * <li>java.awt.event.KeyEvent.VK_SPACE
   87.13       * </ul>
   87.14 +     * Alternatively, the key code may be obtained by calling
   87.15 +     * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
   87.16 +     *
   87.17       * The modifiers consist of any combination of:<ul>
   87.18       * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK
   87.19       * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK
   87.20 @@ -210,6 +213,9 @@
   87.21       * <li>java.awt.event.KeyEvent.VK_TAB
   87.22       * <li>java.awt.event.KeyEvent.VK_SPACE
   87.23       * </ul>
   87.24 +     * Alternatively, the key code may be obtained by calling
   87.25 +     * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
   87.26 +     *
   87.27       * The modifiers consist of any combination of:<ul>
   87.28       * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK
   87.29       * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK
    88.1 --- a/src/share/classes/javax/swing/KeyboardManager.java	Thu Apr 16 17:42:00 2009 +0100
    88.2 +++ b/src/share/classes/javax/swing/KeyboardManager.java	Thu Apr 16 19:10:32 2009 -0700
    88.3 @@ -1,5 +1,5 @@
    88.4  /*
    88.5 - * Copyright 1998-2008 Sun Microsystems, Inc.  All Rights Reserved.
    88.6 + * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
    88.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    88.8   *
    88.9   * This code is free software; you can redistribute it and/or modify it
   88.10 @@ -212,19 +212,35 @@
   88.11                Thread.dumpStack();
   88.12           }
   88.13  
   88.14 +         // There may be two keystrokes associated with a low-level key event;
   88.15 +         // in this case a keystroke made of an extended key code has a priority.
   88.16           KeyStroke ks;
   88.17 +         KeyStroke ksE = null;
   88.18  
   88.19  
   88.20           if(e.getID() == KeyEvent.KEY_TYPED) {
   88.21                 ks=KeyStroke.getKeyStroke(e.getKeyChar());
   88.22           } else {
   88.23 +               if(e.getKeyCode() != e.getExtendedKeyCode()) {
   88.24 +                   ksE=KeyStroke.getKeyStroke(e.getExtendedKeyCode(), e.getModifiers(), !pressed);
   88.25 +               }
   88.26                 ks=KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiers(), !pressed);
   88.27           }
   88.28  
   88.29           Hashtable keyMap = containerMap.get(topAncestor);
   88.30           if (keyMap != null) { // this container isn't registered, so bail
   88.31  
   88.32 -             Object tmp = keyMap.get(ks);
   88.33 +             Object tmp = null;
   88.34 +             // extended code has priority
   88.35 +             if( ksE != null ) {
   88.36 +                 tmp = keyMap.get(ksE);
   88.37 +                 if( tmp != null ) {
   88.38 +                     ks = ksE;
   88.39 +                 }
   88.40 +             }
   88.41 +             if( tmp == null ) {
   88.42 +                 tmp = keyMap.get(ks);
   88.43 +             }
   88.44  
   88.45               if (tmp == null) {
   88.46                 // don't do anything
   88.47 @@ -269,7 +285,12 @@
   88.48                   while (iter.hasMoreElements()) {
   88.49                       JMenuBar mb = (JMenuBar)iter.nextElement();
   88.50                       if ( mb.isShowing() && mb.isEnabled() ) { // don't want to give these out
   88.51 -                         fireBinding(mb, ks, e, pressed);
   88.52 +                         if( !(ks.equals(ksE)) ) {
   88.53 +                             fireBinding(mb, ksE, e, pressed);
   88.54 +                         }
   88.55 +                         if(ks.equals(ksE) || !e.isConsumed()) {
   88.56 +                             fireBinding(mb, ks, e, pressed);
   88.57 +                         }
   88.58                           if (e.isConsumed()) {
   88.59                               return true;
   88.60                           }
    89.1 --- a/src/share/classes/javax/swing/PopupFactory.java	Thu Apr 16 17:42:00 2009 +0100
    89.2 +++ b/src/share/classes/javax/swing/PopupFactory.java	Thu Apr 16 19:10:32 2009 -0700
    89.3 @@ -552,14 +552,15 @@
    89.4              boolean result = false;
    89.5              Component component = getComponent();
    89.6              if (owner != null && component != null) {
    89.7 -                Container parent = (Container) SwingUtilities.getRoot(owner);
    89.8                  int popupWidth = component.getWidth();
    89.9                  int popupHeight = component.getHeight();
   89.10 -                Rectangle parentBounds = parent.getBounds();
   89.11 +
   89.12 +                Container parent = (Container) SwingUtilities.getRoot(owner);
   89.13                  if (parent instanceof JFrame ||
   89.14                      parent instanceof JDialog ||
   89.15                      parent instanceof JWindow) {
   89.16  
   89.17 +                    Rectangle parentBounds = parent.getBounds();
   89.18                      Insets i = parent.getInsets();
   89.19                      parentBounds.x += i.left;
   89.20                      parentBounds.y += i.top;
   89.21 @@ -577,11 +578,11 @@
   89.22                                  .contains(x, y, popupWidth, popupHeight);
   89.23                      }
   89.24                  } else if (parent instanceof JApplet) {
   89.25 +                    Rectangle parentBounds = parent.getBounds();
   89.26                      Point p = parent.getLocationOnScreen();
   89.27                      parentBounds.x = p.x;
   89.28                      parentBounds.y = p.y;
   89.29 -                    result = parentBounds
   89.30 -                            .contains(x, y, popupWidth, popupHeight);
   89.31 +                    result = parentBounds.contains(x, y, popupWidth, popupHeight);
   89.32                  }
   89.33              }
   89.34              return result;
    90.1 --- a/src/share/classes/javax/swing/RepaintManager.java	Thu Apr 16 17:42:00 2009 +0100
    90.2 +++ b/src/share/classes/javax/swing/RepaintManager.java	Thu Apr 16 19:10:32 2009 -0700
    90.3 @@ -1,5 +1,5 @@
    90.4  /*
    90.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    90.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    90.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    90.8   *
    90.9   * This code is free software; you can redistribute it and/or modify it
   90.10 @@ -34,6 +34,7 @@
   90.11  import java.util.*;
   90.12  import java.applet.*;
   90.13  
   90.14 +import sun.awt.AWTAccessor;
   90.15  import sun.awt.AppContext;
   90.16  import sun.awt.DisplayChangedListener;
   90.17  import sun.awt.SunToolkit;
   90.18 @@ -716,6 +717,44 @@
   90.19          }
   90.20      }
   90.21  
   90.22 +    private Map<Component,Rectangle>
   90.23 +        updateWindows(Map<Component,Rectangle> dirtyComponents)
   90.24 +    {
   90.25 +        Toolkit toolkit = Toolkit.getDefaultToolkit();
   90.26 +        if (!(toolkit instanceof SunToolkit &&
   90.27 +              ((SunToolkit)toolkit).needUpdateWindow()))
   90.28 +        {
   90.29 +            return dirtyComponents;
   90.30 +        }
   90.31 +
   90.32 +        Set<Window> windows = new HashSet<Window>();
   90.33 +        Set<Component> dirtyComps = dirtyComponents.keySet();
   90.34 +        for (Iterator<Component> it = dirtyComps.iterator(); it.hasNext();) {
   90.35 +            Component dirty = it.next();
   90.36 +            Window window = dirty instanceof Window ?
   90.37 +                (Window)dirty :
   90.38 +                SwingUtilities.getWindowAncestor(dirty);
   90.39 +
   90.40 +            if (window != null &&
   90.41 +                !AWTAccessor.getWindowAccessor().isOpaque(window))
   90.42 +            {
   90.43 +                // if this component's toplevel is perpixel translucent, it will
   90.44 +                // be repainted below
   90.45 +                it.remove();
   90.46 +                // add to the set of windows to update (so that we don't update
   90.47 +                // the window many times for each component to be repainted that
   90.48 +                // belongs to this window)
   90.49 +                windows.add(window);
   90.50 +            }
   90.51 +        }
   90.52 +
   90.53 +        for (Window window : windows) {
   90.54 +            AWTAccessor.getWindowAccessor().updateWindow(window, null);
   90.55 +        }
   90.56 +
   90.57 +        return dirtyComponents;
   90.58 +    }
   90.59 +
   90.60      /**
   90.61       * Paint all of the components that have been marked dirty.
   90.62       *
   90.63 @@ -749,6 +788,10 @@
   90.64          int localBoundsW;
   90.65          Enumeration keys;
   90.66  
   90.67 +        // the components belonging to perpixel-translucent windows will be
   90.68 +        // removed from the list
   90.69 +        tmpDirtyComponents = updateWindows(tmpDirtyComponents);
   90.70 +
   90.71          roots = new ArrayList<Component>(count);
   90.72  
   90.73          for (Component dirty : tmpDirtyComponents.keySet()) {
    91.1 --- a/src/share/classes/javax/swing/SwingUtilities.java	Thu Apr 16 17:42:00 2009 +0100
    91.2 +++ b/src/share/classes/javax/swing/SwingUtilities.java	Thu Apr 16 19:10:32 2009 -0700
    91.3 @@ -1,5 +1,5 @@
    91.4  /*
    91.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    91.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    91.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    91.8   *
    91.9   * This code is free software; you can redistribute it and/or modify it
   91.10 @@ -1589,15 +1589,6 @@
   91.11       * processing the key bindings associated with JComponents.
   91.12       */
   91.13      static boolean isValidKeyEventForKeyBindings(KeyEvent e) {
   91.14 -        if (e.getID() == KeyEvent.KEY_TYPED) {
   91.15 -            int mod = e.getModifiers();
   91.16 -            if (((mod & ActionEvent.ALT_MASK) != 0) &&
   91.17 -                ((mod & ActionEvent.CTRL_MASK) == 0)) {
   91.18 -                // filter out typed "alt-?" keys, but not those created
   91.19 -                // with AltGr, and not control characters
   91.20 -                return false;
   91.21 -            }
   91.22 -        }
   91.23          return true;
   91.24      }
   91.25  
    92.1 --- a/src/share/classes/javax/swing/SwingWorker.java	Thu Apr 16 17:42:00 2009 +0100
    92.2 +++ b/src/share/classes/javax/swing/SwingWorker.java	Thu Apr 16 19:10:32 2009 -0700
    92.3 @@ -1,5 +1,5 @@
    92.4  /*
    92.5 - * Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
    92.6 + * Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
    92.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    92.8   *
    92.9   * This code is free software; you can redistribute it and/or modify it
   92.10 @@ -778,35 +778,33 @@
   92.11                                         threadFactory);
   92.12              appContext.put(SwingWorker.class, executorService);
   92.13  
   92.14 -            //register shutdown hook for this executor service
   92.15 +            // Don't use ShutdownHook here as it's not enough. We should track
   92.16 +            // AppContext disposal instead of JVM shutdown, see 6799345 for details
   92.17              final ExecutorService es = executorService;
   92.18 -            final Runnable shutdownHook =
   92.19 -                new Runnable() {
   92.20 -                    final WeakReference<ExecutorService> executorServiceRef =
   92.21 -                        new WeakReference<ExecutorService>(es);
   92.22 -                    public void run() {
   92.23 -                        final ExecutorService executorService =
   92.24 -                            executorServiceRef.get();
   92.25 -                        if (executorService != null) {
   92.26 -                            AccessController.doPrivileged(
   92.27 -                                new PrivilegedAction<Void>() {
   92.28 -                                    public Void run() {
   92.29 -                                        executorService.shutdown();
   92.30 -                                        return null;
   92.31 +            appContext.addPropertyChangeListener(AppContext.DISPOSED_PROPERTY_NAME,
   92.32 +                new PropertyChangeListener() {
   92.33 +                    @Override
   92.34 +                    public void propertyChange(PropertyChangeEvent pce) {
   92.35 +                        boolean disposed = (Boolean)pce.getNewValue();
   92.36 +                        if (disposed) {
   92.37 +                            final WeakReference<ExecutorService> executorServiceRef =
   92.38 +                                new WeakReference<ExecutorService>(es);
   92.39 +                            final ExecutorService executorService =
   92.40 +                                executorServiceRef.get();
   92.41 +                            if (executorService != null) {
   92.42 +                                AccessController.doPrivileged(
   92.43 +                                    new PrivilegedAction<Void>() {
   92.44 +                                        public Void run() {
   92.45 +                                            executorService.shutdown();
   92.46 +                                            return null;
   92.47 +                                        }
   92.48                                      }
   92.49 -                                });
   92.50 +                                );
   92.51 +                            }
   92.52                          }
   92.53                      }
   92.54 -                };
   92.55 -
   92.56 -            AccessController.doPrivileged(
   92.57 -                new PrivilegedAction<Void>() {
   92.58 -                    public Void run() {
   92.59 -                        Runtime.getRuntime().addShutdownHook(
   92.60 -                            new Thread(shutdownHook));
   92.61 -                        return null;
   92.62 -                    }
   92.63 -            });
   92.64 +                }
   92.65 +            );
   92.66          }
   92.67          return executorService;
   92.68      }
    93.1 --- a/src/share/classes/javax/swing/TimerQueue.java	Thu Apr 16 17:42:00 2009 +0100
    93.2 +++ b/src/share/classes/javax/swing/TimerQueue.java	Thu Apr 16 19:10:32 2009 -0700
    93.3 @@ -1,5 +1,5 @@
    93.4  /*
    93.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
    93.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
    93.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    93.8   *
    93.9   * This code is free software; you can redistribute it and/or modify it
   93.10 @@ -191,7 +191,12 @@
   93.11                      } finally {
   93.12                          timer.getLock().unlock();
   93.13                      }
   93.14 -                } catch (InterruptedException ignore) {
   93.15 +                } catch (InterruptedException ie) {
   93.16 +                    // Shouldn't ignore InterruptedExceptions here, so AppContext
   93.17 +                    // is disposed gracefully, see 6799345 for details
   93.18 +                    if (AppContext.getAppContext().isDisposed()) {
   93.19 +                        break;
   93.20 +                    }
   93.21                  }
   93.22              }
   93.23          }
    94.1 --- a/src/share/classes/javax/swing/UIManager.java	Thu Apr 16 17:42:00 2009 +0100
    94.2 +++ b/src/share/classes/javax/swing/UIManager.java	Thu Apr 16 19:10:32 2009 -0700
    94.3 @@ -58,6 +58,8 @@
    94.4  import sun.security.action.GetPropertyAction;
    94.5  import sun.swing.SwingUtilities2;
    94.6  import java.lang.reflect.Method;
    94.7 +import java.util.HashMap;
    94.8 +import sun.awt.AppContext;
    94.9  
   94.10  
   94.11  /**
   94.12 @@ -1323,19 +1325,29 @@
   94.13              return;
   94.14          }
   94.15  
   94.16 -        String metalLnf = getCrossPlatformLookAndFeelClassName();
   94.17 -        String lnfDefault = metalLnf;
   94.18 +        // Try to get default LAF from system property, then from AppContext
   94.19 +        // (6653395), then use cross-platform one by default.
   94.20 +        String lafName = null;
   94.21 +        HashMap lafData =
   94.22 +                (HashMap) AppContext.getAppContext().remove("swing.lafdata");
   94.23 +        if (lafData != null) {
   94.24 +            lafName = (String) lafData.remove("defaultlaf");
   94.25 +        }
   94.26 +        if (lafName == null) {
   94.27 +            lafName = getCrossPlatformLookAndFeelClassName();
   94.28 +        }
   94.29 +        lafName = swingProps.getProperty(defaultLAFKey, lafName);
   94.30  
   94.31 -        String lnfName = "<undefined>" ;
   94.32          try {
   94.33 -            lnfName = swingProps.getProperty(defaultLAFKey, lnfDefault);
   94.34 -            setLookAndFeel(lnfName);
   94.35 +            setLookAndFeel(lafName);
   94.36          } catch (Exception e) {
   94.37 -            try {
   94.38 -                lnfName = swingProps.getProperty(defaultLAFKey, metalLnf);
   94.39 -                setLookAndFeel(lnfName);
   94.40 -            } catch (Exception e2) {
   94.41 -                throw new Error("can't load " + lnfName);
   94.42 +            throw new Error("Cannot load " + lafName);
   94.43 +        }
   94.44 +
   94.45 +        // Set any properties passed through AppContext (6653395).
   94.46 +        if (lafData != null) {
   94.47 +            for (Object key: lafData.keySet()) {
   94.48 +                UIManager.put(key, lafData.get(key));
   94.49              }
   94.50          }
   94.51      }
    95.1 --- a/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Thu Apr 16 17:42:00 2009 +0100
    95.2 +++ b/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Thu Apr 16 19:10:32 2009 -0700
    95.3 @@ -27,6 +27,7 @@
    95.4  
    95.5  import java.io.File;
    95.6  import java.util.*;
    95.7 +import java.util.concurrent.Callable;
    95.8  import javax.swing.*;
    95.9  import javax.swing.filechooser.*;
   95.10  import javax.swing.event.*;
   95.11 @@ -223,113 +224,115 @@
   95.12              this.fid = fid;
   95.13          }
   95.14  
   95.15 -        private void invokeLater(DoChangeContents runnable) {
   95.16 -            runnables.addElement(runnable);
   95.17 -            SwingUtilities.invokeLater(runnable);
   95.18 -        }
   95.19 -
   95.20          public void run() {
   95.21              run0();
   95.22              setBusy(false, fid);
   95.23          }
   95.24  
   95.25          public void run0() {
   95.26 -            FileSystemView fileSystem = filechooser.getFileSystemView();
   95.27 +            DoChangeContents doChangeContents = ShellFolder.getInvoker().invoke(new Callable<DoChangeContents>() {
   95.28 +                public DoChangeContents call() throws Exception {
   95.29 +                    FileSystemView fileSystem = filechooser.getFileSystemView();
   95.30  
   95.31 -            File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled());
   95.32 +                    File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled());
   95.33  
   95.34 -            Vector<File> acceptsList = new Vector<File>();
   95.35 +                    Vector<File> acceptsList = new Vector<File>();
   95.36  
   95.37 -            if (isInterrupted()) {
   95.38 -                return;
   95.39 -            }
   95.40 +                    if (isInterrupted()) {
   95.41 +                        return null;
   95.42 +                    }
   95.43  
   95.44 -            // run through the file list, add directories and selectable files to fileCache
   95.45 -            for (File file : list) {
   95.46 -                if (filechooser.accept(file)) {
   95.47 -                    acceptsList.addElement(file);
   95.48 -                }
   95.49 -            }
   95.50 +                    // run through the file list, add directories and selectable files to fileCache
   95.51 +                    for (File file : list) {
   95.52 +                        if (filechooser.accept(file)) {
   95.53 +                            acceptsList.addElement(file);
   95.54 +                        }
   95.55 +                    }
   95.56  
   95.57 -            if (isInterrupted()) {
   95.58 -                return;
   95.59 -            }
   95.60 +                    if (isInterrupted()) {
   95.61 +                        return null;
   95.62 +                    }
   95.63  
   95.64 -            // First sort alphabetically by filename
   95.65 -            sort(acceptsList);
   95.66 +                    // First sort alphabetically by filename
   95.67 +                    sort(acceptsList);
   95.68  
   95.69 -            Vector<File> newDirectories = new Vector<File>(50);
   95.70 -            Vector<File> newFiles = new Vector<File>();
   95.71 -            // run through list grabbing directories in chunks of ten
   95.72 -            for(int i = 0; i < acceptsList.size(); i++) {
   95.73 -                File f = acceptsList.elementAt(i);
   95.74 -                boolean isTraversable = filechooser.isTraversable(f);
   95.75 -                if (isTraversable) {
   95.76 -                    newDirectories.addElement(f);
   95.77 -                } else if (!isTraversable && filechooser.isFileSelectionEnabled()) {
   95.78 -                    newFiles.addElement(f);
   95.79 -                }
   95.80 -                if(isInterrupted()) {
   95.81 -                    return;
   95.82 -                }
   95.83 -            }
   95.84 +                    Vector<File> newDirectories = new Vector<File>(50);
   95.85 +                    Vector<File> newFiles = new Vector<File>();
   95.86 +                    // run through list grabbing directories in chunks of ten
   95.87 +                    for (int i = 0; i < acceptsList.size(); i++) {
   95.88 +                        File f = acceptsList.elementAt(i);
   95.89 +                        boolean isTraversable = filechooser.isTraversable(f);
   95.90 +                        if (isTraversable) {
   95.91 +                            newDirectories.addElement(f);
   95.92 +                        } else if (!isTraversable && filechooser.isFileSelectionEnabled()) {
   95.93 +                            newFiles.addElement(f);
   95.94 +                        }
   95.95 +                        if (isInterrupted()) {
   95.96 +                            return null;
   95.97 +                        }
   95.98 +                    }
   95.99  
  95.100 -            Vector<File> newFileCache = new Vector<File>(newDirectories);
  95.101 -            newFileCache.addAll(newFiles);
  95.102 +                    Vector<File> newFileCache = new Vector<File>(newDirectories);
  95.103 +                    newFileCache.addAll(newFiles);
  95.104  
  95.105 -            int newSize = newFileCache.size();
  95.106 -            int oldSize = fileCache.size();
  95.107 +                    int newSize = newFileCache.size();
  95.108 +                    int oldSize = fileCache.size();
  95.109  
  95.110 -            if (newSize > oldSize) {
  95.111 -                //see if interval is added
  95.112 -                int start = oldSize;
  95.113 -                int end = newSize;
  95.114 -                for (int i = 0; i < oldSize; i++) {
  95.115 -                    if (!newFileCache.get(i).equals(fileCache.get(i))) {
  95.116 -                        start = i;
  95.117 -                        for (int j = i; j < newSize; j++) {
  95.118 -                            if (newFileCache.get(j).equals(fileCache.get(i))) {
  95.119 -                                end = j;
  95.120 +                    if (newSize > oldSize) {
  95.121 +                        //see if interval is added
  95.122 +                        int start = oldSize;
  95.123 +                        int end = newSize;
  95.124 +                        for (int i = 0; i < oldSize; i++) {
  95.125 +                            if (!newFileCache.get(i).equals(fileCache.get(i))) {
  95.126 +                                start = i;
  95.127 +                                for (int j = i; j < newSize; j++) {
  95.128 +                                    if (newFileCache.get(j).equals(fileCache.get(i))) {
  95.129 +                                        end = j;
  95.130 +                                        break;
  95.131 +                                    }
  95.132 +                                }
  95.133                                  break;
  95.134                              }
  95.135                          }
  95.136 -                        break;
  95.137 +                        if (start >= 0 && end > start
  95.138 +                            && newFileCache.subList(end, newSize).equals(fileCache.subList(start, oldSize))) {
  95.139 +                            if (isInterrupted()) {
  95.140 +                                return null;
  95.141 +                            }
  95.142 +                            return new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid);
  95.143 +                        }
  95.144 +                    } else if (newSize < oldSize) {
  95.145 +                        //see if interval is removed
  95.146 +                        int start = -1;
  95.147 +                        int end = -1;
  95.148 +                        for (int i = 0; i < newSize; i++) {
  95.149 +                            if (!newFileCache.get(i).equals(fileCache.get(i))) {
  95.150 +                                start = i;
  95.151 +                                end = i + oldSize - newSize;
  95.152 +                                break;
  95.153 +                            }
  95.154 +                        }
  95.155 +                        if (start >= 0 && end > start
  95.156 +                            && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) {
  95.157 +                            if (isInterrupted()) {
  95.158 +                                return null;
  95.159 +                            }
  95.160 +                            return new DoChangeContents(null, 0, new Vector(fileCache.subList(start, end)), start, fid);
  95.161 +                        }
  95.162                      }
  95.163 +                    if (!fileCache.equals(newFileCache)) {
  95.164 +                        if (isInterrupted()) {
  95.165 +                            cancelRunnables(runnables);
  95.166 +                        }
  95.167 +                        return new DoChangeContents(newFileCache, 0, fileCache, 0, fid);
  95.168 +                    }
  95.169 +                    return null;
  95.170                  }
  95.171 -                if (start >= 0 && end > start
  95.172 -                    && newFileCache.subList(end, newSize).equals(fileCache.subList(start, oldSize))) {
  95.173 -                    if(isInterrupted()) {
  95.174 -                        return;
  95.175 -                    }
  95.176 -                    invokeLater(new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid));
  95.177 -                    newFileCache = null;
  95.178 -                }
  95.179 -            } else if (newSize < oldSize) {
  95.180 -                //see if interval is removed
  95.181 -                int start = -1;
  95.182 -                int end = -1;
  95.183 -                for (int i = 0; i < newSize; i++) {
  95.184 -                    if (!newFileCache.get(i).equals(fileCache.get(i))) {
  95.185 -                        start = i;
  95.186 -                        end = i + oldSize - newSize;
  95.187 -                        break;
  95.188 -                    }
  95.189 -                }
  95.190 -                if (start >= 0 && end > start
  95.191 -                    && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) {
  95.192 -                    if(isInterrupted()) {
  95.193 -                        return;
  95.194 -                    }
  95.195 -                    invokeLater(new DoChangeContents(null, 0, new Vector<File>(fileCache.subList(start, end)),
  95.196 -                                                     start, fid));
  95.197 -                    newFileCache = null;
  95.198 -                }
  95.199 -            }
  95.200 -            if (newFileCache != null && !fileCache.equals(newFileCache)) {
  95.201 -                if (isInterrupted()) {
  95.202 -                    cancelRunnables(runnables);
  95.203 -                }
  95.204 -                invokeLater(new DoChangeContents(newFileCache, 0, fileCache, 0, fid));
  95.205 +            });
  95.206 +
  95.207 +            if (doChangeContents != null) {
  95.208 +                runnables.addElement(doChangeContents);
  95.209 +                SwingUtilities.invokeLater(doChangeContents);
  95.210              }
  95.211          }
  95.212  
    96.1 --- a/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Thu Apr 16 17:42:00 2009 +0100
    96.2 +++ b/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Thu Apr 16 19:10:32 2009 -0700
    96.3 @@ -1004,47 +1004,62 @@
    96.4          g.setColor(DefaultLookup.getColor(slider, this, "Slider.tickColor", Color.black));
    96.5  
    96.6          if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
    96.7 -           g.translate( 0, tickBounds.y);
    96.8 +            g.translate(0, tickBounds.y);
    96.9  
   96.10 -            int value = slider.getMinimum();
   96.11 -            int xPos;
   96.12 +            if (slider.getMinorTickSpacing() > 0) {
   96.13 +                int value = slider.getMinimum();
   96.14  
   96.15 -            if ( slider.getMinorTickSpacing() > 0 ) {
   96.16                  while ( value <= slider.getMaximum() ) {
   96.17 -                    xPos = xPositionForValue( value );
   96.18 +                    int xPos = xPositionForValue(value);
   96.19                      paintMinorTickForHorizSlider( g, tickBounds, xPos );
   96.20 +
   96.21 +                    // Overflow checking
   96.22 +                    if (Integer.MAX_VALUE - slider.getMinorTickSpacing() < value) {
   96.23 +                        break;
   96.24 +                    }
   96.25 +
   96.26                      value += slider.getMinorTickSpacing();
   96.27                  }
   96.28              }
   96.29  
   96.30 -            if ( slider.getMajorTickSpacing() > 0 ) {
   96.31 -                value = slider.getMinimum();
   96.32 +            if (slider.getMajorTickSpacing() > 0) {
   96.33 +                int value = slider.getMinimum();
   96.34  
   96.35                  while ( value <= slider.getMaximum() ) {
   96.36 -                    xPos = xPositionForValue( value );
   96.37 +                    int xPos = xPositionForValue(value);
   96.38                      paintMajorTickForHorizSlider( g, tickBounds, xPos );
   96.39 +
   96.40 +                    // Overflow checking
   96.41 +                    if (Integer.MAX_VALUE - slider.getMajorTickSpacing() < value) {
   96.42 +                        break;
   96.43 +                    }
   96.44 +
   96.45                      value += slider.getMajorTickSpacing();
   96.46                  }
   96.47              }
   96.48  
   96.49              g.translate( 0, -tickBounds.y);
   96.50 -        }
   96.51 -        else {
   96.52 -           g.translate(tickBounds.x, 0);
   96.53 +        } else {
   96.54 +            g.translate(tickBounds.x, 0);
   96.55  
   96.56 -            int value = slider.getMinimum();
   96.57 -            int yPos;
   96.58 -
   96.59 -            if ( slider.getMinorTickSpacing() > 0 ) {
   96.60 +            if (slider.getMinorTickSpacing() > 0) {
   96.61                  int offset = 0;
   96.62                  if(!BasicGraphicsUtils.isLeftToRight(slider)) {
   96.63                      offset = tickBounds.width - tickBounds.width / 2;
   96.64                      g.translate(offset, 0);
   96.65                  }
   96.66  
   96.67 -                while ( value <= slider.getMaximum() ) {
   96.68 -                    yPos = yPositionForValue( value );
   96.69 +                int value = slider.getMinimum();
   96.70 +
   96.71 +                while (value <= slider.getMaximum()) {
   96.72 +                    int yPos = yPositionForValue(value);
   96.73                      paintMinorTickForVertSlider( g, tickBounds, yPos );
   96.74 +
   96.75 +                    // Overflow checking
   96.76 +                    if (Integer.MAX_VALUE - slider.getMinorTickSpacing() < value) {
   96.77 +                        break;
   96.78 +                    }
   96.79 +
   96.80                      value += slider.getMinorTickSpacing();
   96.81                  }
   96.82  
   96.83 @@ -1053,15 +1068,22 @@
   96.84                  }
   96.85              }
   96.86  
   96.87 -            if ( slider.getMajorTickSpacing() > 0 ) {
   96.88 -                value = slider.getMinimum();
   96.89 +            if (slider.getMajorTickSpacing() > 0) {
   96.90                  if(!BasicGraphicsUtils.isLeftToRight(slider)) {
   96.91                      g.translate(2, 0);
   96.92                  }
   96.93  
   96.94 -                while ( value <= slider.getMaximum() ) {
   96.95 -                    yPos = yPositionForValue( value );
   96.96 +                int value = slider.getMinimum();
   96.97 +
   96.98 +                while (value <= slider.getMaximum()) {
   96.99 +                    int yPos = yPositionForValue(value);
  96.100                      paintMajorTickForVertSlider( g, tickBounds, yPos );
  96.101 +
  96.102 +                    // Overflow checking
  96.103 +                    if (Integer.MAX_VALUE - slider.getMajorTickSpacing() < value) {
  96.104 +                        break;
  96.105 +                    }
  96.106 +
  96.107                      value += slider.getMajorTickSpacing();
  96.108                  }
  96.109  
  96.110 @@ -1775,8 +1797,6 @@
  96.111                  thumbMiddle = thumbLeft + halfThumbWidth;
  96.112                  slider.setValue(valueForXPosition(thumbMiddle));
  96.113                  break;
  96.114 -            default:
  96.115 -                return;
  96.116              }
  96.117          }
  96.118  
    97.1 --- a/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java	Thu Apr 16 17:42:00 2009 +0100
    97.2 +++ b/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java	Thu Apr 16 19:10:32 2009 -0700
    97.3 @@ -38,6 +38,8 @@
    97.4  import java.io.FileNotFoundException;
    97.5  import java.io.IOException;
    97.6  import java.util.*;
    97.7 +import java.security.AccessController;
    97.8 +import java.security.PrivilegedAction;
    97.9  import javax.accessibility.*;
   97.10  
   97.11  import sun.awt.shell.ShellFolder;
   97.12 @@ -937,7 +939,11 @@
   97.13  
   97.14              File[] baseFolders;
   97.15              if (useShellFolder) {
   97.16 -                baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");
   97.17 +                baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
   97.18 +                    public File[] run() {
   97.19 +                        return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
   97.20 +                    }
   97.21 +                });
   97.22              } else {
   97.23                  baseFolders = fsv.getRoots();
   97.24              }
    98.1 --- a/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java	Thu Apr 16 17:42:00 2009 +0100
    98.2 +++ b/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java	Thu Apr 16 19:10:32 2009 -0700
    98.3 @@ -233,7 +233,7 @@
    98.4          tabContext.getStyle().getGraphicsUtils(tabContext).layoutText(
    98.5                  tabContext, metrics, title, icon, SwingUtilities.CENTER,
    98.6                  SwingUtilities.CENTER, SwingUtilities.LEADING,
    98.7 -                SwingUtilities.TRAILING, calcRect,
    98.8 +                SwingUtilities.CENTER, calcRect,
    98.9                  iconRect, textRect, textIconGap);
   98.10          return textRect.y + metrics.getAscent() + getBaselineOffset();
   98.11      }
   98.12 @@ -426,7 +426,7 @@
   98.13  
   98.14          ss.getStyle().getGraphicsUtils(ss).layoutText(ss, metrics, title,
   98.15                           icon, SwingUtilities.CENTER, SwingUtilities.CENTER,
   98.16 -                         SwingUtilities.LEADING, SwingUtilities.TRAILING,
   98.17 +                         SwingUtilities.LEADING, SwingUtilities.CENTER,
   98.18                           tabRect, iconRect, textRect, textIconGap);
   98.19  
   98.20          tabPane.putClientProperty("html", null);
    99.1 --- a/src/share/classes/javax/swing/text/GlyphView.java	Thu Apr 16 17:42:00 2009 +0100
    99.2 +++ b/src/share/classes/javax/swing/text/GlyphView.java	Thu Apr 16 19:10:32 2009 -0700
    99.3 @@ -30,6 +30,7 @@
    99.4  import java.util.BitSet;
    99.5  import java.util.Locale;
    99.6  
    99.7 +import javax.swing.UIManager;
    99.8  import sun.swing.SwingUtilities2;
    99.9  
   99.10  /**
   99.11 @@ -382,11 +383,10 @@
   99.12          Color bg = getBackground();
   99.13          Color fg = getForeground();
   99.14  
   99.15 -        if (c instanceof JTextComponent) {
   99.16 -            JTextComponent tc = (JTextComponent) c;
   99.17 -            if  (!tc.isEnabled()) {
   99.18 -                fg = tc.getDisabledTextColor();
   99.19 -            }
   99.20 +        if (c != null && ! c.isEnabled()) {
   99.21 +            fg = (c instanceof JTextComponent ?
   99.22 +                ((JTextComponent)c).getDisabledTextColor() :
   99.23 +                UIManager.getColor("textInactiveText"));
   99.24          }
   99.25          if (bg != null) {
   99.26              g.setColor(bg);
   100.1 --- a/src/share/classes/javax/swing/text/html/ImageView.java	Thu Apr 16 17:42:00 2009 +0100
   100.2 +++ b/src/share/classes/javax/swing/text/html/ImageView.java	Thu Apr 16 19:10:32 2009 -0700
   100.3 @@ -25,9 +25,7 @@
   100.4  package javax.swing.text.html;
   100.5  
   100.6  import java.awt.*;
   100.7 -import java.awt.event.*;
   100.8  import java.awt.image.ImageObserver;
   100.9 -import java.io.*;
  100.10  import java.net.*;
  100.11  import java.util.Dictionary;
  100.12  import javax.swing.*;
  100.13 @@ -97,6 +95,7 @@
  100.14  
  100.15      private AttributeSet attr;
  100.16      private Image image;
  100.17 +    private Image disabledImage;
  100.18      private int width;
  100.19      private int height;
  100.20      /** Bitmask containing some of the above bitmask values. Because the
  100.21 @@ -193,6 +192,17 @@
  100.22          return image;
  100.23      }
  100.24  
  100.25 +    private Image getImage(boolean enabled) {
  100.26 +        Image img = getImage();
  100.27 +        if (! enabled) {
  100.28 +            if (disabledImage == null) {
  100.29 +                disabledImage = GrayFilter.createDisabledImage(img);
  100.30 +            }
  100.31 +            img = disabledImage;
  100.32 +        }
  100.33 +        return img;
  100.34 +    }
  100.35 +
  100.36      /**
  100.37       * Sets how the image is loaded. If <code>newValue</code> is true,
  100.38       * the image we be loaded when first asked for, otherwise it will
  100.39 @@ -338,8 +348,6 @@
  100.40  
  100.41          Rectangle rect = (a instanceof Rectangle) ? (Rectangle)a :
  100.42                           a.getBounds();
  100.43 -
  100.44 -        Image image = getImage();
  100.45          Rectangle clip = g.getClipBounds();
  100.46  
  100.47          fBounds.setBounds(rect);
  100.48 @@ -350,29 +358,29 @@
  100.49                         rect.width - leftInset - rightInset,
  100.50                         rect.height - topInset - bottomInset);
  100.51          }
  100.52 -        if (image != null) {
  100.53 -            if (!hasPixels(image)) {
  100.54 +
  100.55 +        Container host = getContainer();
  100.56 +        Image img = getImage(host == null || host.isEnabled());
  100.57 +        if (img != null) {
  100.58 +            if (! hasPixels(img)) {
  100.59                  // No pixels yet, use the default
  100.60 -                Icon icon = (image == null) ? getNoImageIcon() :
  100.61 -                                               getLoadingImageIcon();
  100.62 -
  100.63 +                Icon icon = getLoadingImageIcon();
  100.64                  if (icon != null) {
  100.65 -                    icon.paintIcon(getContainer(), g, rect.x + leftInset,
  100.66 -                                   rect.y + topInset);
  100.67 +                    icon.paintIcon(host, g,
  100.68 +                            rect.x + leftInset, rect.y + topInset);
  100.69                  }
  100.70              }
  100.71              else {
  100.72                  // Draw the image
  100.73 -                g.drawImage(image, rect.x + leftInset, rect.y + topInset,
  100.74 +                g.drawImage(img, rect.x + leftInset, rect.y + topInset,
  100.75                              width, height, imageObserver);
  100.76              }
  100.77          }
  100.78          else {
  100.79              Icon icon = getNoImageIcon();
  100.80 -
  100.81              if (icon != null) {
  100.82 -                icon.paintIcon(getContainer(), g, rect.x + leftInset,
  100.83 -                               rect.y + topInset);
  100.84 +                icon.paintIcon(host, g,
  100.85 +                        rect.x + leftInset, rect.y + topInset);
  100.86              }
  100.87              View view = getAltView();
  100.88              // Paint the view representing the alt text, if its non-null
  100.89 @@ -855,7 +863,9 @@
  100.90          // it will pick up the new height/width, if necessary.
  100.91          public boolean imageUpdate(Image img, int flags, int x, int y,
  100.92                                     int newWidth, int newHeight ) {
  100.93 -            if (image == null || image != img || getParent() == null) {
  100.94 +            if (img != image && img != disabledImage ||
  100.95 +                image == null || getParent() == null) {
  100.96 +
  100.97                  return false;
  100.98              }
  100.99  
 100.100 @@ -873,6 +883,8 @@
 100.101                          if ((state & HEIGHT_FLAG) != HEIGHT_FLAG) {
 100.102                              height = DEFAULT_HEIGHT;
 100.103                          }
 100.104 +                    } else {
 100.105 +                        disabledImage = null;
 100.106                      }
 100.107                      if ((state & LOADING_FLAG) == LOADING_FLAG) {
 100.108                          // No need to resize or repaint, still in the process
 100.109 @@ -885,38 +897,37 @@
 100.110                  return false;
 100.111              }
 100.112  
 100.113 -            // Resize image if necessary:
 100.114 -            short changed = 0;
 100.115 -            if ((flags & ImageObserver.HEIGHT) != 0 && !getElement().
 100.116 -                  getAttributes().isDefined(HTML.Attribute.HEIGHT)) {
 100.117 -                changed |= 1;
 100.118 -            }
 100.119 -            if ((flags & ImageObserver.WIDTH) != 0 && !getElement().
 100.120 -                  getAttributes().isDefined(HTML.Attribute.WIDTH)) {
 100.121 -                changed |= 2;
 100.122 -            }
 100.123 +            if (image == img) {
 100.124 +                // Resize image if necessary:
 100.125 +                short changed = 0;
 100.126 +                if ((flags & ImageObserver.HEIGHT) != 0 && !getElement().
 100.127 +                      getAttributes().isDefined(HTML.Attribute.HEIGHT)) {
 100.128 +                    changed |= 1;
 100.129 +                }
 100.130 +                if ((flags & ImageObserver.WIDTH) != 0 && !getElement().
 100.131 +                      getAttributes().isDefined(HTML.Attribute.WIDTH)) {
 100.132 +                    changed |= 2;
 100.133 +                }
 100.134  
 100.135 -            synchronized(ImageView.this) {
 100.136 -                if (image != img) {
 100.137 -                    return false;
 100.138 +                synchronized(ImageView.this) {
 100.139 +                    if ((changed & 1) == 1 && (state & WIDTH_FLAG) == 0) {
 100.140 +                        width = newWidth;
 100.141 +                    }
 100.142 +                    if ((changed & 2) == 2 && (state & HEIGHT_FLAG) == 0) {
 100.143 +                        height = newHeight;
 100.144 +                    }
 100.145 +                    if ((state & LOADING_FLAG) == LOADING_FLAG) {
 100.146 +                        // No need to resize or repaint, still in the process of
 100.147 +                        // loading.
 100.148 +                        return true;
 100.149 +                    }
 100.150                  }
 100.151 -                if ((changed & 1) == 1 && (state & WIDTH_FLAG) == 0) {
 100.152 -                    width = newWidth;
 100.153 -                }
 100.154 -                if ((changed & 2) == 2 && (state & HEIGHT_FLAG) == 0) {
 100.155 -                    height = newHeight;
 100.156 -                }
 100.157 -                if ((state & LOADING_FLAG) == LOADING_FLAG) {
 100.158 -                    // No need to resize or repaint, still in the process of
 100.159 -                    // loading.
 100.160 +                if (changed != 0) {
 100.161 +                    // May need to resize myself, asynchronously:
 100.162 +                    safePreferenceChanged();
 100.163                      return true;
 100.164                  }
 100.165              }
 100.166 -            if (changed != 0) {
 100.167 -                // May need to resize myself, asynchronously:
 100.168 -                safePreferenceChanged();
 100.169 -                return true;
 100.170 -            }
 100.171  
 100.172              // Repaint when done or when new pixels arrive:
 100.173              if ((flags & (FRAMEBITS|ALLBITS)) != 0) {
   101.1 --- a/src/share/classes/javax/swing/text/html/StyleSheet.java	Thu Apr 16 17:42:00 2009 +0100
   101.2 +++ b/src/share/classes/javax/swing/text/html/StyleSheet.java	Thu Apr 16 19:10:32 2009 -0700
   101.3 @@ -31,6 +31,7 @@
   101.4  import java.net.*;
   101.5  import javax.swing.Icon;
   101.6  import javax.swing.ImageIcon;
   101.7 +import javax.swing.UIManager;
   101.8  import javax.swing.border.*;
   101.9  import javax.swing.event.ChangeListener;
  101.10  import javax.swing.text.*;
  101.11 @@ -2161,6 +2162,7 @@
  101.12           */
  101.13          public void paint(Graphics g, float x, float y, float w, float h, View v, int item) {
  101.14              View cv = v.getView(item);
  101.15 +            Container host = v.getContainer();
  101.16              Object name = cv.getElement().getAttributes().getAttribute
  101.17                           (StyleConstants.NameAttribute);
  101.18              // Only draw something if the View is a list item. This won't
  101.19 @@ -2171,7 +2173,7 @@
  101.20              }
  101.21              // deside on what side draw bullets, etc.
  101.22              isLeftToRight =
  101.23 -                cv.getContainer().getComponentOrientation().isLeftToRight();
  101.24 +                host.getComponentOrientation().isLeftToRight();
  101.25  
  101.26              // How the list indicator is aligned is not specified, it is
  101.27              // left up to the UA. IE and NS differ on this behavior.
  101.28 @@ -2200,15 +2202,15 @@
  101.29              }
  101.30  
  101.31              // set the color of a decoration
  101.32 -            if (ss != null) {
  101.33 -                g.setColor(ss.getForeground(cv.getAttributes()));
  101.34 -            } else {
  101.35 -                g.setColor(Color.black);
  101.36 -            }
  101.37 +            Color c = (host.isEnabled()
  101.38 +                ? (ss != null
  101.39 +                    ? ss.getForeground(cv.getAttributes())
  101.40 +                    : host.getForeground())
  101.41 +                : UIManager.getColor("textInactiveText"));
  101.42 +            g.setColor(c);
  101.43  
  101.44              if (img != null) {
  101.45 -                drawIcon(g, (int) x, (int) y, (int) w, (int) h, align,
  101.46 -                         v.getContainer());
  101.47 +                drawIcon(g, (int) x, (int) y, (int) w, (int) h, align, host);
  101.48                  return;
  101.49              }
  101.50              CSS.Value childtype = getChildType(cv);
   102.1 --- a/src/share/classes/sun/awt/AWTAccessor.java	Thu Apr 16 17:42:00 2009 +0100
   102.2 +++ b/src/share/classes/sun/awt/AWTAccessor.java	Thu Apr 16 19:10:32 2009 -0700
   102.3 @@ -1,5 +1,5 @@
   102.4  /*
   102.5 - * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   102.6 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   102.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   102.8   *
   102.9   * This code is free software; you can redistribute it and/or modify it
  102.10 @@ -26,46 +26,229 @@
  102.11  package sun.awt;
  102.12  
  102.13  import java.awt.*;
  102.14 +import java.awt.geom.Point2D;
  102.15 +import java.awt.image.BufferedImage;
  102.16 +
  102.17  import sun.misc.Unsafe;
  102.18  
  102.19 -/** The AWTAccessor utility class.
  102.20 +/**
  102.21 + * The AWTAccessor utility class.
  102.22   * The main purpose of this class is to enable accessing
  102.23   * private and package-private fields of classes from
  102.24   * different classes/packages. See sun.misc.SharedSecretes
  102.25   * for another example.
  102.26   */
  102.27  public final class AWTAccessor {
  102.28 +
  102.29      private static final Unsafe unsafe = Unsafe.getUnsafe();
  102.30  
  102.31 -    /** We don't need any objects of this class.
  102.32 +    /*
  102.33 +     * We don't need any objects of this class.
  102.34       * It's rather a collection of static methods
  102.35       * and interfaces.
  102.36       */
  102.37      private AWTAccessor() {
  102.38      }
  102.39  
  102.40 -    /** An accessor for the java.awt.Component class.
  102.41 +    /*
  102.42 +     * An interface of accessor for the java.awt.Component class.
  102.43       */
  102.44      public interface ComponentAccessor {
  102.45 -        // See 6797587
  102.46 -        // Also see: 6776743, 6768307, and 6768332.
  102.47 -        /**
  102.48 +        /*
  102.49 +         * Sets whether the native background erase for a component
  102.50 +         * has been disabled via SunToolkit.disableBackgroundErase().
  102.51 +         */
  102.52 +        void setBackgroundEraseDisabled(Component comp, boolean disabled);
  102.53 +        /*
  102.54 +         * Indicates whether the native background erase for a
  102.55 +         * component has been disabled via
  102.56 +         * SunToolkit.disableBackgroundErase().
  102.57 +         */
  102.58 +        boolean getBackgroundEraseDisabled(Component comp);
  102.59 +        /*
  102.60 +         *
  102.61 +         * Gets the bounds of this component in the form of a
  102.62 +         * <code>Rectangle</code> object. The bounds specify this
  102.63 +         * component's width, height, and location relative to
  102.64 +         * its parent.
  102.65 +         */
  102.66 +        Rectangle getBounds(Component comp);
  102.67 +        /*
  102.68           * Sets the shape of a lw component to cut out from hw components.
  102.69 +         *
  102.70 +         * See 6797587, 6776743, 6768307, and 6768332 for details
  102.71           */
  102.72          void setMixingCutoutShape(Component comp, Shape shape);
  102.73 +
  102.74 +        /**
  102.75 +         * Sets GraphicsConfiguration value for the component.
  102.76 +         */
  102.77 +        void setGraphicsConfiguration(Component comp, GraphicsConfiguration gc);
  102.78 +        /*
  102.79 +         * Requests focus to the component.
  102.80 +         */
  102.81 +        boolean requestFocus(Component comp, CausedFocusEvent.Cause cause);
  102.82 +        /*
  102.83 +         * Determines if the component can gain focus.
  102.84 +         */
  102.85 +        boolean canBeFocusOwner(Component comp);
  102.86 +
  102.87 +        /**
  102.88 +         * Returns whether the component is visible without invoking
  102.89 +         * any client code.
  102.90 +         */
  102.91 +        boolean isVisible_NoClientCode(Component comp);
  102.92      }
  102.93  
  102.94 -    /* The java.awt.Component class accessor object.
  102.95 +    /*
  102.96 +     * An interface of accessor for java.awt.Window class.
  102.97 +     */
  102.98 +    public interface WindowAccessor {
  102.99 +        /*
 102.100 +         * Get opacity level of the given window.
 102.101 +         */
 102.102 +        float getOpacity(Window window);
 102.103 +        /*
 102.104 +         * Set opacity level to the given window.
 102.105 +         */
 102.106 +        void setOpacity(Window window, float opacity);
 102.107 +        /*
 102.108 +         * Get a shape assigned to the given window.
 102.109 +         */
 102.110 +        Shape getShape(Window window);
 102.111 +        /*
 102.112 +         * Set a shape to the given window.
 102.113 +         */
 102.114 +        void setShape(Window window, Shape shape);
 102.115 +        /*
 102.116 +         * Identify whether the given window is opaque (true)
 102.117 +         *  or translucent (false).
 102.118 +         */
 102.119 +        boolean isOpaque(Window window);
 102.120 +        /*
 102.121 +         * Set the opaque preoperty to the given window.
 102.122 +         */
 102.123 +        void setOpaque(Window window, boolean isOpaque);
 102.124 +        /*
 102.125 +         * Update the image of a non-opaque (translucent) window.
 102.126 +         */
 102.127 +        void updateWindow(Window window, BufferedImage backBuffer);
 102.128 +
 102.129 +        /** Get the size of the security warning.
 102.130 +         */
 102.131 +        Dimension getSecurityWarningSize(Window w);
 102.132 +
 102.133 +        /**
 102.134 +         * Set the size of the security warning.
 102.135 +         */
 102.136 +        void setSecurityWarningSize(Window w, int width, int height);
 102.137 +
 102.138 +        /** Set the position of the security warning.
 102.139 +         */
 102.140 +        void setSecurityWarningPosition(Window w, Point2D point,
 102.141 +                float alignmentX, float alignmentY);
 102.142 +
 102.143 +        /** Request to recalculate the new position of the security warning for
 102.144 +         * the given window size/location as reported by the native system.
 102.145 +         */
 102.146 +        Point2D calculateSecurityWarningPosition(Window window,
 102.147 +                double x, double y, double w, double h);
 102.148 +    }
 102.149 +
 102.150 +    /*
 102.151 +     * An accessor for the AWTEvent class.
 102.152 +     */
 102.153 +    public interface AWTEventAccessor {
 102.154 +        /*
 102.155 +         *
 102.156 +         * Sets the flag on this AWTEvent indicating that it was
 102.157 +         * generated by the system.
 102.158 +         */
 102.159 +        void setSystemGenerated(AWTEvent ev);
 102.160 +        /*
 102.161 +         *
 102.162 +         * Indicates whether this AWTEvent was generated by the system.
 102.163 +         */
 102.164 +        boolean isSystemGenerated(AWTEvent ev);
 102.165 +    }
 102.166 +
 102.167 +    /*
 102.168 +     * An accessor for the java.awt.Frame class.
 102.169 +     */
 102.170 +    public interface FrameAccessor {
 102.171 +        /*
 102.172 +         * Sets the state of this frame.
 102.173 +         */
 102.174 +        void setExtendedState(Frame frame, int state);
 102.175 +        /*
 102.176 +         * Gets the state of this frame.
 102.177 +         */
 102.178 +       int getExtendedState(Frame frame);
 102.179 +    }
 102.180 +
 102.181 +    /*
 102.182 +     * An interface of accessor for the java.awt.KeyboardFocusManager class.
 102.183 +     */
 102.184 +    public interface KeyboardFocusManagerAccessor {
 102.185 +        /*
 102.186 +         * Indicates whether the native implementation should
 102.187 +         * proceed with a pending focus request for the heavyweight.
 102.188 +         */
 102.189 +        int shouldNativelyFocusHeavyweight(Component heavyweight,
 102.190 +                                           Component descendant,
 102.191 +                                           boolean temporary,
 102.192 +                                           boolean focusedWindowChangeAllowed,
 102.193 +                                           long time,
 102.194 +                                           CausedFocusEvent.Cause cause);
 102.195 +        /*
 102.196 +         * Delivers focus for the lightweight descendant of the heavyweight
 102.197 +         * synchronously.
 102.198 +         */
 102.199 +        boolean processSynchronousLightweightTransfer(Component heavyweight,
 102.200 +                                                      Component descendant,
 102.201 +                                                      boolean temporary,
 102.202 +                                                      boolean focusedWindowChangeAllowed,
 102.203 +                                                      long time);
 102.204 +        /*
 102.205 +         * Removes the last focus request for the heavyweight from the queue.
 102.206 +         */
 102.207 +        void removeLastFocusRequest(Component heavyweight);
 102.208 +    }
 102.209 +
 102.210 +    /*
 102.211 +     * The java.awt.Component class accessor object.
 102.212       */
 102.213      private static ComponentAccessor componentAccessor;
 102.214  
 102.215 -    /** Set an accessor object for the java.awt.Component class.
 102.216 +    /*
 102.217 +     * The java.awt.Window class accessor object.
 102.218 +     */
 102.219 +    private static WindowAccessor windowAccessor;
 102.220 +
 102.221 +    /*
 102.222 +     * The java.awt.AWTEvent class accessor object.
 102.223 +     */
 102.224 +    private static AWTEventAccessor awtEventAccessor;
 102.225 +
 102.226 +    /*
 102.227 +     * The java.awt.Frame class accessor object.
 102.228 +     */
 102.229 +    private static FrameAccessor frameAccessor;
 102.230 +
 102.231 +    /*
 102.232 +     * The java.awt.KeyboardFocusManager class accessor object.
 102.233 +     */
 102.234 +    private static KeyboardFocusManagerAccessor kfmAccessor;
 102.235 +
 102.236 +    /*
 102.237 +     * Set an accessor object for the java.awt.Component class.
 102.238       */
 102.239      public static void setComponentAccessor(ComponentAccessor ca) {
 102.240          componentAccessor = ca;
 102.241      }
 102.242  
 102.243 -    /** Retrieve the accessor object for the java.awt.Window class.
 102.244 +    /*
 102.245 +     * Retrieve the accessor object for the java.awt.Window class.
 102.246       */
 102.247      public static ComponentAccessor getComponentAccessor() {
 102.248          if (componentAccessor == null) {
 102.249 @@ -74,4 +257,69 @@
 102.250  
 102.251          return componentAccessor;
 102.252      }
 102.253 +
 102.254 +    /*
 102.255 +     * Set an accessor object for the java.awt.Window class.
 102.256 +     */
 102.257 +    public static void setWindowAccessor(WindowAccessor wa) {
 102.258 +        windowAccessor = wa;
 102.259 +    }
 102.260 +
 102.261 +    /*
 102.262 +     * Retrieve the accessor object for the java.awt.Window class.
 102.263 +     */
 102.264 +    public static WindowAccessor getWindowAccessor() {
 102.265 +        if (windowAccessor == null) {
 102.266 +            unsafe.ensureClassInitialized(Window.class);
 102.267 +        }
 102.268 +        return windowAccessor;
 102.269 +    }
 102.270 +
 102.271 +    /*
 102.272 +     * Set an accessor object for the java.awt.AWTEvent class.
 102.273 +     */
 102.274 +    public static void setAWTEventAccessor(AWTEventAccessor aea) {
 102.275 +        awtEventAccessor = aea;
 102.276 +    }
 102.277 +
 102.278 +    /*
 102.279 +     * Retrieve the accessor object for the java.awt.AWTEvent class.
 102.280 +     */
 102.281 +    public static AWTEventAccessor getAWTEventAccessor() {
 102.282 +        return awtEventAccessor;
 102.283 +    }
 102.284 +
 102.285 +    /*
 102.286 +     * Set an accessor object for the java.awt.Frame class.
 102.287 +     */
 102.288 +    public static void setFrameAccessor(FrameAccessor fa) {
 102.289 +        frameAccessor = fa;
 102.290 +    }
 102.291 +
 102.292 +    /*
 102.293 +     * Retrieve the accessor object for the java.awt.Frame class.
 102.294 +     */
 102.295 +    public static FrameAccessor getFrameAccessor() {
 102.296 +        if (frameAccessor == null) {
 102.297 +            unsafe.ensureClassInitialized(Frame.class);
 102.298 +        }
 102.299 +        return frameAccessor;
 102.300 +    }
 102.301 +
 102.302 +    /*
 102.303 +     * Set an accessor object for the java.awt.KeyboardFocusManager class.
 102.304 +     */
 102.305 +    public static void setKeyboardFocusManagerAccessor(KeyboardFocusManagerAccessor kfma) {
 102.306 +        kfmAccessor = kfma;
 102.307 +    }
 102.308 +
 102.309 +    /*
 102.310 +     * Retrieve the accessor object for the java.awt.KeyboardFocusManager class.
 102.311 +     */
 102.312 +    public static KeyboardFocusManagerAccessor getKeyboardFocusManagerAccessor() {
 102.313 +        if (kfmAccessor == null) {
 102.314 +            unsafe.ensureClassInitialized(KeyboardFocusManager.class);
 102.315 +        }
 102.316 +        return kfmAccessor;
 102.317 +    }
 102.318  }
   103.1 --- a/src/share/classes/sun/awt/ComponentAccessor.java	Thu Apr 16 17:42:00 2009 +0100
   103.2 +++ b/src/share/classes/sun/awt/ComponentAccessor.java	Thu Apr 16 19:10:32 2009 -0700
   103.3 @@ -73,7 +73,6 @@
   103.4      private static Field fieldPacked;
   103.5      private static Field fieldIgnoreRepaint;
   103.6      private static Field fieldPeer;
   103.7 -    private static Method methodResetGC;
   103.8      private static Field fieldVisible;
   103.9      private static Method methodIsEnabledImpl;
  103.10      private static Method methodGetCursorNoClientCode;
  103.11 @@ -124,9 +123,6 @@
  103.12                          fieldPeer = componentClass.getDeclaredField("peer");
  103.13                          fieldPeer.setAccessible(true);
  103.14  
  103.15 -                        methodResetGC = componentClass.getDeclaredMethod("resetGC", (Class[]) null);
  103.16 -                        methodResetGC.setAccessible(true);
  103.17 -
  103.18                          fieldVisible = componentClass.getDeclaredField("visible");
  103.19                          fieldVisible.setAccessible(true);
  103.20  
  103.21 @@ -425,18 +421,6 @@
  103.22          return false;
  103.23      }
  103.24  
  103.25 -    public static void resetGC(Component c) {
  103.26 -        try {
  103.27 -            methodResetGC.invoke(c, (Object[]) null);
  103.28 -        }
  103.29 -        catch (IllegalAccessException e) {
  103.30 -            log.log(Level.FINE, "Unable to access the Component object", e);
  103.31 -        }
  103.32 -        catch (InvocationTargetException e) {
  103.33 -            log.log(Level.FINE, "Unable to invoke on the Component object", e);
  103.34 -        }
  103.35 -    }
  103.36 -
  103.37      public static boolean getVisible(Component c) {
  103.38          try {
  103.39              return fieldVisible.getBoolean(c);
   104.1 --- a/src/share/classes/sun/awt/EmbeddedFrame.java	Thu Apr 16 17:42:00 2009 +0100
   104.2 +++ b/src/share/classes/sun/awt/EmbeddedFrame.java	Thu Apr 16 19:10:32 2009 -0700
   104.3 @@ -1,5 +1,5 @@
   104.4  /*
   104.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
   104.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   104.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   104.8   *
   104.9   * This code is free software; you can redistribute it and/or modify it
  104.10 @@ -585,5 +585,14 @@
  104.11          }
  104.12          public void updateMinimumSize() {
  104.13          }
  104.14 -    }
  104.15 +
  104.16 +        public void setOpacity(float opacity) {
  104.17 +        }
  104.18 +        public void setOpaque(boolean isOpaque) {
  104.19 +        }
  104.20 +        public void updateWindow(BufferedImage backBuffer) {
  104.21 +        }
  104.22 +        public void repositionSecurityWarning() {
  104.23 +        }
  104.24 +     }
  104.25  } // class EmbeddedFrame
   105.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   105.2 +++ b/src/share/classes/sun/awt/ExtendedKeyCodes.java	Thu Apr 16 19:10:32 2009 -0700
   105.3 @@ -0,0 +1,670 @@
   105.4 +package sun.awt;
   105.5 +
   105.6 +import java.util.Collections;
   105.7 +import java.util.HashMap;
   105.8 +import java.util.HashSet;
   105.9 +import java.awt.event.KeyEvent;
  105.10 +
  105.11 +public class ExtendedKeyCodes {
  105.12 +    /**
  105.13 +     * ATTN: These are the readonly hashes with load factor == 1;
  105.14 +     * adding a value, please set the inital capacity to exact number of items
  105.15 +     * or higher.
  105.16 +     */
  105.17 +     // Keycodes declared in KeyEvent.java with corresponding Unicode values.
  105.18 +     private final static HashMap<Integer, Integer>  regularKeyCodesMap =
  105.19 +                                          new HashMap<Integer,Integer>(122, 1.0f);
  105.20 +
  105.21 +     // Keycodes derived from Unicode values. Here should be collected codes
  105.22 +     // for characters appearing on the primary layer of at least one
  105.23 +     // known keyboard layout. For instance, sterling sign is on the primary layer
  105.24 +     // of the Mac Italian layout.
  105.25 +     private final static HashSet<Integer> extendedKeyCodesSet =
  105.26 +                                                  new HashSet<Integer>(501, 1.0f);
  105.27 +     final public static int getExtendedKeyCodeForChar( int c ) {
  105.28 +         int rc = KeyEvent.VK_UNDEFINED;
  105.29 +         int uc = Character.toUpperCase( c );
  105.30 +         int lc = Character.toLowerCase( c );
  105.31 +         if (regularKeyCodesMap.containsKey( c )) {
  105.32 +             if(regularKeyCodesMap.containsKey(uc)) {
  105.33 +                 return regularKeyCodesMap.get( uc );
  105.34 +             }
  105.35 +             return regularKeyCodesMap.get( c );
  105.36 +         }
  105.37 +         uc += 0x01000000;
  105.38 +         lc += 0x01000000;
  105.39 +         if (extendedKeyCodesSet.contains( uc )) {
  105.40 +             return uc;
  105.41 +         }else if (extendedKeyCodesSet.contains( lc )) {
  105.42 +             return lc;
  105.43 +         }
  105.44 +         return rc;
  105.45 +     }
  105.46 +     static {
  105.47 +         regularKeyCodesMap.put(0x0a, KeyEvent.VK_ENTER);
  105.48 +         regularKeyCodesMap.put(0x08, KeyEvent.VK_BACK_SPACE);
  105.49 +         regularKeyCodesMap.put(0x09, KeyEvent.VK_TAB);
  105.50 +         regularKeyCodesMap.put(0x1B, KeyEvent.VK_ESCAPE);
  105.51 +         regularKeyCodesMap.put(0x20, KeyEvent.VK_SPACE);
  105.52 +         regularKeyCodesMap.put(0x21, KeyEvent.VK_PAGE_UP);
  105.53 +         regularKeyCodesMap.put(0x22, KeyEvent.VK_PAGE_DOWN);
  105.54 +         regularKeyCodesMap.put(0x23, KeyEvent.VK_END);
  105.55 +         regularKeyCodesMap.put(0x24, KeyEvent.VK_HOME);
  105.56 +         regularKeyCodesMap.put(0x25, KeyEvent.VK_LEFT);
  105.57 +         regularKeyCodesMap.put(0x26, KeyEvent.VK_UP);
  105.58 +         regularKeyCodesMap.put(0x27, KeyEvent.VK_RIGHT);
  105.59 +         regularKeyCodesMap.put(0x28, KeyEvent.VK_DOWN);
  105.60 +         regularKeyCodesMap.put(0x2C, KeyEvent.VK_COMMA);
  105.61 +         regularKeyCodesMap.put(0x2D, KeyEvent.VK_MINUS);
  105.62 +         regularKeyCodesMap.put(0x2E, KeyEvent.VK_PERIOD);
  105.63 +         regularKeyCodesMap.put(0x2F, KeyEvent.VK_SLASH);
  105.64 +         regularKeyCodesMap.put(0x30, KeyEvent.VK_0);
  105.65 +         regularKeyCodesMap.put(0x31, KeyEvent.VK_1);
  105.66 +         regularKeyCodesMap.put(0x32, KeyEvent.VK_2);
  105.67 +         regularKeyCodesMap.put(0x33, KeyEvent.VK_3);
  105.68 +         regularKeyCodesMap.put(0x34, KeyEvent.VK_4);
  105.69 +         regularKeyCodesMap.put(0x35, KeyEvent.VK_5);
  105.70 +         regularKeyCodesMap.put(0x36, KeyEvent.VK_6);
  105.71 +         regularKeyCodesMap.put(0x37, KeyEvent.VK_7);
  105.72 +         regularKeyCodesMap.put(0x38, KeyEvent.VK_8);
  105.73 +         regularKeyCodesMap.put(0x39, KeyEvent.VK_9);
  105.74 +         regularKeyCodesMap.put(0x3B, KeyEvent.VK_SEMICOLON);
  105.75 +         regularKeyCodesMap.put(0x3D, KeyEvent.VK_EQUALS);
  105.76 +         regularKeyCodesMap.put(0x41, KeyEvent.VK_A);
  105.77 +         regularKeyCodesMap.put(0x61, KeyEvent.VK_A);
  105.78 +         regularKeyCodesMap.put(0x42, KeyEvent.VK_B);
  105.79 +         regularKeyCodesMap.put(0x62, KeyEvent.VK_B);
  105.80 +         regularKeyCodesMap.put(0x43, KeyEvent.VK_C);
  105.81 +         regularKeyCodesMap.put(0x63, KeyEvent.VK_C);
  105.82 +         regularKeyCodesMap.put(0x44, KeyEvent.VK_D);
  105.83 +         regularKeyCodesMap.put(0x64, KeyEvent.VK_D);
  105.84 +         regularKeyCodesMap.put(0x45, KeyEvent.VK_E);
  105.85 +         regularKeyCodesMap.put(0x65, KeyEvent.VK_E);
  105.86 +         regularKeyCodesMap.put(0x46, KeyEvent.VK_F);
  105.87 +         regularKeyCodesMap.put(0x66, KeyEvent.VK_F);
  105.88 +         regularKeyCodesMap.put(0x47, KeyEvent.VK_G);
  105.89 +         regularKeyCodesMap.put(0x67, KeyEvent.VK_G);
  105.90 +         regularKeyCodesMap.put(0x48, KeyEvent.VK_H);
  105.91 +         regularKeyCodesMap.put(0x68, KeyEvent.VK_H);
  105.92 +         regularKeyCodesMap.put(0x49, KeyEvent.VK_I);
  105.93 +         regularKeyCodesMap.put(0x69, KeyEvent.VK_I);
  105.94 +         regularKeyCodesMap.put(0x4A, KeyEvent.VK_J);
  105.95 +         regularKeyCodesMap.put(0x6A, KeyEvent.VK_J);
  105.96 +         regularKeyCodesMap.put(0x4B, KeyEvent.VK_K);
  105.97 +         regularKeyCodesMap.put(0x6B, KeyEvent.VK_K);
  105.98 +         regularKeyCodesMap.put(0x4C, KeyEvent.VK_L);
  105.99 +         regularKeyCodesMap.put(0x6C, KeyEvent.VK_L);
 105.100 +         regularKeyCodesMap.put(0x4D, KeyEvent.VK_M);
 105.101 +         regularKeyCodesMap.put(0x6D, KeyEvent.VK_M);
 105.102 +         regularKeyCodesMap.put(0x4E, KeyEvent.VK_N);
 105.103 +         regularKeyCodesMap.put(0x6E, KeyEvent.VK_N);
 105.104 +         regularKeyCodesMap.put(0x4F, KeyEvent.VK_O);
 105.105 +         regularKeyCodesMap.put(0x6F, KeyEvent.VK_O);
 105.106 +         regularKeyCodesMap.put(0x50, KeyEvent.VK_P);
 105.107 +         regularKeyCodesMap.put(0x70, KeyEvent.VK_P);
 105.108 +         regularKeyCodesMap.put(0x51, KeyEvent.VK_Q);
 105.109 +         regularKeyCodesMap.put(0x71, KeyEvent.VK_Q);
 105.110 +         regularKeyCodesMap.put(0x52, KeyEvent.VK_R);
 105.111 +         regularKeyCodesMap.put(0x72, KeyEvent.VK_R);
 105.112 +         regularKeyCodesMap.put(0x53, KeyEvent.VK_S);
 105.113 +         regularKeyCodesMap.put(0x73, KeyEvent.VK_S);
 105.114 +         regularKeyCodesMap.put(0x54, KeyEvent.VK_T);
 105.115 +         regularKeyCodesMap.put(0x74, KeyEvent.VK_T);
 105.116 +         regularKeyCodesMap.put(0x55, KeyEvent.VK_U);
 105.117 +         regularKeyCodesMap.put(0x75, KeyEvent.VK_U);
 105.118 +         regularKeyCodesMap.put(0x56, KeyEvent.VK_V);
 105.119 +         regularKeyCodesMap.put(0x76, KeyEvent.VK_V);
 105.120 +         regularKeyCodesMap.put(0x57, KeyEvent.VK_W);
 105.121 +         regularKeyCodesMap.put(0x77, KeyEvent.VK_W);
 105.122 +         regularKeyCodesMap.put(0x58, KeyEvent.VK_X);
 105.123 +         regularKeyCodesMap.put(0x78, KeyEvent.VK_X);
 105.124 +         regularKeyCodesMap.put(0x59, KeyEvent.VK_Y);
 105.125 +         regularKeyCodesMap.put(0x79, KeyEvent.VK_Y);
 105.126 +         regularKeyCodesMap.put(0x5A, KeyEvent.VK_Z);
 105.127 +         regularKeyCodesMap.put(0x7A, KeyEvent.VK_Z);
 105.128 +         regularKeyCodesMap.put(0x5B, KeyEvent.VK_OPEN_BRACKET);
 105.129 +         regularKeyCodesMap.put(0x5C, KeyEvent.VK_BACK_SLASH);
 105.130 +         regularKeyCodesMap.put(0x5D, KeyEvent.VK_CLOSE_BRACKET);
 105.131 +//         regularKeyCodesMap.put(0x60, KeyEvent.VK_NUMPAD0);
 105.132 +//         regularKeyCodesMap.put(0x61, KeyEvent.VK_NUMPAD1);
 105.133 +//         regularKeyCodesMap.put(0x62, KeyEvent.VK_NUMPAD2);
 105.134 +//         regularKeyCodesMap.put(0x63, KeyEvent.VK_NUMPAD3);
 105.135 +//         regularKeyCodesMap.put(0x64, KeyEvent.VK_NUMPAD4);
 105.136 +//         regularKeyCodesMap.put(0x65, KeyEvent.VK_NUMPAD5);
 105.137 +//         regularKeyCodesMap.put(0x66, KeyEvent.VK_NUMPAD6);
 105.138 +//         regularKeyCodesMap.put(0x67, KeyEvent.VK_NUMPAD7);
 105.139 +//         regularKeyCodesMap.put(0x68, KeyEvent.VK_NUMPAD8);
 105.140 +//         regularKeyCodesMap.put(0x69, KeyEvent.VK_NUMPAD9);
 105.141 +         regularKeyCodesMap.put(0x6A, KeyEvent.VK_MULTIPLY);
 105.142 +         regularKeyCodesMap.put(0x6B, KeyEvent.VK_ADD);
 105.143 +         regularKeyCodesMap.put(0x6C, KeyEvent.VK_SEPARATER);
 105.144 +         regularKeyCodesMap.put(0x6D, KeyEvent.VK_SUBTRACT);
 105.145 +         regularKeyCodesMap.put(0x6E, KeyEvent.VK_DECIMAL);
 105.146 +         regularKeyCodesMap.put(0x6F, KeyEvent.VK_DIVIDE);
 105.147 +         regularKeyCodesMap.put(0x7F, KeyEvent.VK_DELETE);
 105.148 +         regularKeyCodesMap.put(0xC0, KeyEvent.VK_BACK_QUOTE);
 105.149 +         regularKeyCodesMap.put(0xDE, KeyEvent.VK_QUOTE);
 105.150 +         regularKeyCodesMap.put(0x26, KeyEvent.VK_AMPERSAND);
 105.151 +         regularKeyCodesMap.put(0x2A, KeyEvent.VK_ASTERISK);
 105.152 +         regularKeyCodesMap.put(0x22, KeyEvent.VK_QUOTEDBL);
 105.153 +         regularKeyCodesMap.put(0x3C, KeyEvent.VK_LESS);
 105.154 +         regularKeyCodesMap.put(0x3E, KeyEvent.VK_GREATER);
 105.155 +         regularKeyCodesMap.put(0x7B, KeyEvent.VK_BRACELEFT);
 105.156 +         regularKeyCodesMap.put(0x7D, KeyEvent.VK_BRACERIGHT);
 105.157 +         regularKeyCodesMap.put(0x40, KeyEvent.VK_AT);
 105.158 +         regularKeyCodesMap.put(0x3A, KeyEvent.VK_COLON);
 105.159 +         regularKeyCodesMap.put(0x5E, KeyEvent.VK_CIRCUMFLEX);
 105.160 +         regularKeyCodesMap.put(0x24, KeyEvent.VK_DOLLAR);
 105.161 +         regularKeyCodesMap.put(0x20AC, KeyEvent.VK_EURO_SIGN);
 105.162 +         regularKeyCodesMap.put(0x21, KeyEvent.VK_EXCLAMATION_MARK);
 105.163 +         regularKeyCodesMap.put(0xA1, KeyEvent.VK_INVERTED_EXCLAMATION_MARK);
 105.164 +         regularKeyCodesMap.put(0x28, KeyEvent.VK_LEFT_PARENTHESIS);
 105.165 +         regularKeyCodesMap.put(0x23, KeyEvent.VK_NUMBER_SIGN);
 105.166 +         regularKeyCodesMap.put(0x2B, KeyEvent.VK_PLUS);
 105.167 +         regularKeyCodesMap.put(0x29, KeyEvent.VK_RIGHT_PARENTHESIS);
 105.168 +         regularKeyCodesMap.put(0x5F, KeyEvent.VK_UNDERSCORE);
 105.169 +
 105.170 +
 105.171 +         extendedKeyCodesSet.add(0x01000000+0x0060);
 105.172 +         extendedKeyCodesSet.add(0x01000000+0x007C);
 105.173 +         extendedKeyCodesSet.add(0x01000000+0x007E);
 105.174 +         extendedKeyCodesSet.add(0x01000000+0x00A2);
 105.175 +         extendedKeyCodesSet.add(0x01000000+0x00A3);
 105.176 +         extendedKeyCodesSet.add(0x01000000+0x00A5);
 105.177 +         extendedKeyCodesSet.add(0x01000000+0x00A7);
 105.178 +         extendedKeyCodesSet.add(0x01000000+0x00A8);
 105.179 +         extendedKeyCodesSet.add(0x01000000+0x00AB);
 105.180 +         extendedKeyCodesSet.add(0x01000000+0x00B0);
 105.181 +         extendedKeyCodesSet.add(0x01000000+0x00B1);
 105.182 +         extendedKeyCodesSet.add(0x01000000+0x00B2);
 105.183 +         extendedKeyCodesSet.add(0x01000000+0x00B3);
 105.184 +         extendedKeyCodesSet.add(0x01000000+0x00B4);
 105.185 +         extendedKeyCodesSet.add(0x01000000+0x00B5);
 105.186 +         extendedKeyCodesSet.add(0x01000000+0x00B6);
 105.187 +         extendedKeyCodesSet.add(0x01000000+0x00B7);
 105.188 +         extendedKeyCodesSet.add(0x01000000+0x00B9);
 105.189 +         extendedKeyCodesSet.add(0x01000000+0x00BA);
 105.190 +         extendedKeyCodesSet.add(0x01000000+0x00BB);
 105.191 +         extendedKeyCodesSet.add(0x01000000+0x00BC);
 105.192 +         extendedKeyCodesSet.add(0x01000000+0x00BD);
 105.193 +         extendedKeyCodesSet.add(0x01000000+0x00BE);
 105.194 +         extendedKeyCodesSet.add(0x01000000+0x00BF);
 105.195 +         extendedKeyCodesSet.add(0x01000000+0x00C4);
 105.196 +         extendedKeyCodesSet.add(0x01000000+0x00C5);
 105.197 +         extendedKeyCodesSet.add(0x01000000+0x00C6);
 105.198 +         extendedKeyCodesSet.add(0x01000000+0x00C7);
 105.199 +         extendedKeyCodesSet.add(0x01000000+0x00D1);
 105.200 +         extendedKeyCodesSet.add(0x01000000+0x00D6);
 105.201 +         extendedKeyCodesSet.add(0x01000000+0x00D7);
 105.202 +         extendedKeyCodesSet.add(0x01000000+0x00D8);
 105.203 +         extendedKeyCodesSet.add(0x01000000+0x00DF);
 105.204 +         extendedKeyCodesSet.add(0x01000000+0x00E0);
 105.205 +         extendedKeyCodesSet.add(0x01000000+0x00E1);
 105.206 +         extendedKeyCodesSet.add(0x01000000+0x00E2);
 105.207 +         extendedKeyCodesSet.add(0x01000000+0x00E4);
 105.208 +         extendedKeyCodesSet.add(0x01000000+0x00E5);
 105.209 +         extendedKeyCodesSet.add(0x01000000+0x00E6);
 105.210 +         extendedKeyCodesSet.add(0x01000000+0x00E7);
 105.211 +         extendedKeyCodesSet.add(0x01000000+0x00E8);
 105.212 +         extendedKeyCodesSet.add(0x01000000+0x00E9);
 105.213 +         extendedKeyCodesSet.add(0x01000000+0x00EA);
 105.214 +         extendedKeyCodesSet.add(0x01000000+0x00EB);
 105.215 +         extendedKeyCodesSet.add(0x01000000+0x00EC);
 105.216 +         extendedKeyCodesSet.add(0x01000000+0x00ED);
 105.217 +         extendedKeyCodesSet.add(0x01000000+0x00EE);
 105.218 +         extendedKeyCodesSet.add(0x01000000+0x00F0);
 105.219 +         extendedKeyCodesSet.add(0x01000000+0x00F1);
 105.220 +         extendedKeyCodesSet.add(0x01000000+0x00F2);
 105.221 +         extendedKeyCodesSet.add(0x01000000+0x00F3);
 105.222 +         extendedKeyCodesSet.add(0x01000000+0x00F4);
 105.223 +         extendedKeyCodesSet.add(0x01000000+0x00F5);
 105.224 +         extendedKeyCodesSet.add(0x01000000+0x00F6);
 105.225 +         extendedKeyCodesSet.add(0x01000000+0x00F7);
 105.226 +         extendedKeyCodesSet.add(0x01000000+0x00F8);
 105.227 +         extendedKeyCodesSet.add(0x01000000+0x00F9);
 105.228 +         extendedKeyCodesSet.add(0x01000000+0x00FA);
 105.229 +         extendedKeyCodesSet.add(0x01000000+0x00FB);
 105.230 +         extendedKeyCodesSet.add(0x01000000+0x00FC);
 105.231 +         extendedKeyCodesSet.add(0x01000000+0x00FD);
 105.232 +         extendedKeyCodesSet.add(0x01000000+0x00FE);
 105.233 +         extendedKeyCodesSet.add(0x01000000+0x0105);
 105.234 +         extendedKeyCodesSet.add(0x01000000+0x02DB);
 105.235 +         extendedKeyCodesSet.add(0x01000000+0x0142);
 105.236 +         extendedKeyCodesSet.add(0x01000000+0x013E);
 105.237 +         extendedKeyCodesSet.add(0x01000000+0x015B);
 105.238 +         extendedKeyCodesSet.add(0x01000000+0x0161);
 105.239 +         extendedKeyCodesSet.add(0x01000000+0x015F);
 105.240 +         extendedKeyCodesSet.add(0x01000000+0x0165);
 105.241 +         extendedKeyCodesSet.add(0x01000000+0x017E);
 105.242 +         extendedKeyCodesSet.add(0x01000000+0x017C);
 105.243 +         extendedKeyCodesSet.add(0x01000000+0x0103);
 105.244 +         extendedKeyCodesSet.add(0x01000000+0x0107);
 105.245 +         extendedKeyCodesSet.add(0x01000000+0x010D);
 105.246 +         extendedKeyCodesSet.add(0x01000000+0x0119);
 105.247 +         extendedKeyCodesSet.add(0x01000000+0x011B);
 105.248 +         extendedKeyCodesSet.add(0x01000000+0x0111);
 105.249 +         extendedKeyCodesSet.add(0x01000000+0x0148);
 105.250 +         extendedKeyCodesSet.add(0x01000000+0x0151);
 105.251 +         extendedKeyCodesSet.add(0x01000000+0x0171);
 105.252 +         extendedKeyCodesSet.add(0x01000000+0x0159);
 105.253 +         extendedKeyCodesSet.add(0x01000000+0x016F);
 105.254 +         extendedKeyCodesSet.add(0x01000000+0x0163);
 105.255 +         extendedKeyCodesSet.add(0x01000000+0x02D9);
 105.256 +         extendedKeyCodesSet.add(0x01000000+0x0130);
 105.257 +         extendedKeyCodesSet.add(0x01000000+0x0127);
 105.258 +         extendedKeyCodesSet.add(0x01000000+0x0125);
 105.259 +         extendedKeyCodesSet.add(0x01000000+0x0131);
 105.260 +         extendedKeyCodesSet.add(0x01000000+0x011F);
 105.261 +         extendedKeyCodesSet.add(0x01000000+0x0135);
 105.262 +         extendedKeyCodesSet.add(0x01000000+0x010B);
 105.263 +         extendedKeyCodesSet.add(0x01000000+0x0109);
 105.264 +         extendedKeyCodesSet.add(0x01000000+0x0121);
 105.265 +         extendedKeyCodesSet.add(0x01000000+0x011D);
 105.266 +         extendedKeyCodesSet.add(0x01000000+0x016D);
 105.267 +         extendedKeyCodesSet.add(0x01000000+0x015D);
 105.268 +         extendedKeyCodesSet.add(0x01000000+0x0138);
 105.269 +         extendedKeyCodesSet.add(0x01000000+0x0157);
 105.270 +         extendedKeyCodesSet.add(0x01000000+0x013C);
 105.271 +         extendedKeyCodesSet.add(0x01000000+0x0113);
 105.272 +         extendedKeyCodesSet.add(0x01000000+0x0123);
 105.273 +         extendedKeyCodesSet.add(0x01000000+0x0167);
 105.274 +         extendedKeyCodesSet.add(0x01000000+0x014B);
 105.275 +         extendedKeyCodesSet.add(0x01000000+0x0101);
 105.276 +         extendedKeyCodesSet.add(0x01000000+0x012F);
 105.277 +         extendedKeyCodesSet.add(0x01000000+0x0117);
 105.278 +         extendedKeyCodesSet.add(0x01000000+0x012B);
 105.279 +         extendedKeyCodesSet.add(0x01000000+0x0146);
 105.280 +         extendedKeyCodesSet.add(0x01000000+0x014D);
 105.281 +         extendedKeyCodesSet.add(0x01000000+0x0137);
 105.282 +         extendedKeyCodesSet.add(0x01000000+0x0173);
 105.283 +         extendedKeyCodesSet.add(0x01000000+0x016B);
 105.284 +         extendedKeyCodesSet.add(0x01000000+0x0153);
 105.285 +         extendedKeyCodesSet.add(0x01000000+0x30FC);
 105.286 +         extendedKeyCodesSet.add(0x01000000+0x30A2);
 105.287 +         extendedKeyCodesSet.add(0x01000000+0x30A4);
 105.288 +         extendedKeyCodesSet.add(0x01000000+0x30A6);
 105.289 +         extendedKeyCodesSet.add(0x01000000+0x30A8);
 105.290 +         extendedKeyCodesSet.add(0x01000000+0x30AA);
 105.291 +         extendedKeyCodesSet.add(0x01000000+0x30AB);
 105.292 +         extendedKeyCodesSet.add(0x01000000+0x30AD);
 105.293 +         extendedKeyCodesSet.add(0x01000000+0x30AF);
 105.294 +         extendedKeyCodesSet.add(0x01000000+0x30B1);
 105.295 +         extendedKeyCodesSet.add(0x01000000+0x30B3);
 105.296 +         extendedKeyCodesSet.add(0x01000000+0x30B5);
 105.297 +         extendedKeyCodesSet.add(0x01000000+0x30B7);
 105.298 +         extendedKeyCodesSet.add(0x01000000+0x30B9);
 105.299 +         extendedKeyCodesSet.add(0x01000000+0x30BB);
 105.300 +         extendedKeyCodesSet.add(0x01000000+0x30BD);
 105.301 +         extendedKeyCodesSet.add(0x01000000+0x30BF);
 105.302 +         extendedKeyCodesSet.add(0x01000000+0x30C1);
 105.303 +         extendedKeyCodesSet.add(0x01000000+0x30C4);
 105.304 +         extendedKeyCodesSet.add(0x01000000+0x30C6);
 105.305 +         extendedKeyCodesSet.add(0x01000000+0x30C8);
 105.306 +         extendedKeyCodesSet.add(0x01000000+0x30CA);
 105.307 +         extendedKeyCodesSet.add(0x01000000+0x30CB);
 105.308 +         extendedKeyCodesSet.add(0x01000000+0x30CC);
 105.309 +         extendedKeyCodesSet.add(0x01000000+0x30CD);
 105.310 +         extendedKeyCodesSet.add(0x01000000+0x30CE);
 105.311 +         extendedKeyCodesSet.add(0x01000000+0x30CF);
 105.312 +         extendedKeyCodesSet.add(0x01000000+0x30D2);
 105.313 +         extendedKeyCodesSet.add(0x01000000+0x30D5);
 105.314 +         extendedKeyCodesSet.add(0x01000000+0x30D8);
 105.315 +         extendedKeyCodesSet.add(0x01000000+0x30DB);
 105.316 +         extendedKeyCodesSet.add(0x01000000+0x30DE);
 105.317 +         extendedKeyCodesSet.add(0x01000000+0x30DF);
 105.318 +         extendedKeyCodesSet.add(0x01000000+0x30E0);
 105.319 +         extendedKeyCodesSet.add(0x01000000+0x30E1);
 105.320 +         extendedKeyCodesSet.add(0x01000000+0x30E2);
 105.321 +         extendedKeyCodesSet.add(0x01000000+0x30E4);
 105.322 +         extendedKeyCodesSet.add(0x01000000+0x30E6);
 105.323 +         extendedKeyCodesSet.add(0x01000000+0x30E8);
 105.324 +         extendedKeyCodesSet.add(0x01000000+0x30E9);
 105.325 +         extendedKeyCodesSet.add(0x01000000+0x30EA);
 105.326 +         extendedKeyCodesSet.add(0x01000000+0x30EB);
 105.327 +         extendedKeyCodesSet.add(0x01000000+0x30EC);
 105.328 +         extendedKeyCodesSet.add(0x01000000+0x30ED);
 105.329 +         extendedKeyCodesSet.add(0x01000000+0x30EF);
 105.330 +         extendedKeyCodesSet.add(0x01000000+0x30F3);
 105.331 +         extendedKeyCodesSet.add(0x01000000+0x309B);
 105.332 +         extendedKeyCodesSet.add(0x01000000+0x309C);
 105.333 +         extendedKeyCodesSet.add(0x01000000+0x06F0);
 105.334 +         extendedKeyCodesSet.add(0x01000000+0x06F1);
 105.335 +         extendedKeyCodesSet.add(0x01000000+0x06F2);
 105.336 +         extendedKeyCodesSet.add(0x01000000+0x06F3);
 105.337 +         extendedKeyCodesSet.add(0x01000000+0x06F4);
 105.338 +         extendedKeyCodesSet.add(0x01000000+0x06F5);
 105.339 +         extendedKeyCodesSet.add(0x01000000+0x06F6);
 105.340 +         extendedKeyCodesSet.add(0x01000000+0x06F7);
 105.341 +         extendedKeyCodesSet.add(0x01000000+0x06F8);
 105.342 +         extendedKeyCodesSet.add(0x01000000+0x06F9);
 105.343 +         extendedKeyCodesSet.add(0x01000000+0x0670);
 105.344 +         extendedKeyCodesSet.add(0x01000000+0x067E);
 105.345 +         extendedKeyCodesSet.add(0x01000000+0x0686);
 105.346 +         extendedKeyCodesSet.add(0x01000000+0x060C);
 105.347 +         extendedKeyCodesSet.add(0x01000000+0x06D4);
 105.348 +         extendedKeyCodesSet.add(0x01000000+0x0660);
 105.349 +         extendedKeyCodesSet.add(0x01000000+0x0661);
 105.350 +         extendedKeyCodesSet.add(0x01000000+0x0662);
 105.351 +         extendedKeyCodesSet.add(0x01000000+0x0663);
 105.352 +         extendedKeyCodesSet.add(0x01000000+0x0664);
 105.353 +         extendedKeyCodesSet.add(0x01000000+0x0665);
 105.354 +         extendedKeyCodesSet.add(0x01000000+0x0666);
 105.355 +         extendedKeyCodesSet.add(0x01000000+0x0667);
 105.356 +         extendedKeyCodesSet.add(0x01000000+0x0668);
 105.357 +         extendedKeyCodesSet.add(0x01000000+0x0669);
 105.358 +         extendedKeyCodesSet.add(0x01000000+0x061B);
 105.359 +         extendedKeyCodesSet.add(0x01000000+0x0621);
 105.360 +         extendedKeyCodesSet.add(0x01000000+0x0624);
 105.361 +         extendedKeyCodesSet.add(0x01000000+0x0626);
 105.362 +         extendedKeyCodesSet.add(0x01000000+0x0627);
 105.363 +         extendedKeyCodesSet.add(0x01000000+0x0628);
 105.364 +         extendedKeyCodesSet.add(0x01000000+0x0629);
 105.365 +         extendedKeyCodesSet.add(0x01000000+0x062A);
 105.366 +         extendedKeyCodesSet.add(0x01000000+0x062B);
 105.367 +         extendedKeyCodesSet.add(0x01000000+0x062C);
 105.368 +         extendedKeyCodesSet.add(0x01000000+0x062D);
 105.369 +         extendedKeyCodesSet.add(0x01000000+0x062E);
 105.370 +         extendedKeyCodesSet.add(0x01000000+0x062F);
 105.371 +         extendedKeyCodesSet.add(0x01000000+0x0630);
 105.372 +         extendedKeyCodesSet.add(0x01000000+0x0631);
 105.373 +         extendedKeyCodesSet.add(0x01000000+0x0632);
 105.374 +         extendedKeyCodesSet.add(0x01000000+0x0633);
 105.375 +         extendedKeyCodesSet.add(0x01000000+0x0634);
 105.376 +         extendedKeyCodesSet.add(0x01000000+0x0635);
 105.377 +         extendedKeyCodesSet.add(0x01000000+0x0636);
 105.378 +         extendedKeyCodesSet.add(0x01000000+0x0637);
 105.379 +         extendedKeyCodesSet.add(0x01000000+0x0638);
 105.380 +         extendedKeyCodesSet.add(0x01000000+0x0639);
 105.381 +         extendedKeyCodesSet.add(0x01000000+0x063A);
 105.382 +         extendedKeyCodesSet.add(0x01000000+0x0641);
 105.383 +         extendedKeyCodesSet.add(0x01000000+0x0642);
 105.384 +         extendedKeyCodesSet.add(0x01000000+0x0643);
 105.385 +         extendedKeyCodesSet.add(0x01000000+0x0644);
 105.386 +         extendedKeyCodesSet.add(0x01000000+0x0645);
 105.387 +         extendedKeyCodesSet.add(0x01000000+0x0646);
 105.388 +         extendedKeyCodesSet.add(0x01000000+0x0647);
 105.389 +         extendedKeyCodesSet.add(0x01000000+0x0648);
 105.390 +         extendedKeyCodesSet.add(0x01000000+0x0649);
 105.391 +         extendedKeyCodesSet.add(0x01000000+0x064A);
 105.392 +         extendedKeyCodesSet.add(0x01000000+0x064E);
 105.393 +         extendedKeyCodesSet.add(0x01000000+0x064F);
 105.394 +         extendedKeyCodesSet.add(0x01000000+0x0650);
 105.395 +         extendedKeyCodesSet.add(0x01000000+0x0652);
 105.396 +         extendedKeyCodesSet.add(0x01000000+0x0698);
 105.397 +         extendedKeyCodesSet.add(0x01000000+0x06A4);
 105.398 +         extendedKeyCodesSet.add(0x01000000+0x06A9);
 105.399 +         extendedKeyCodesSet.add(0x01000000+0x06AF);
 105.400 +         extendedKeyCodesSet.add(0x01000000+0x06BE);
 105.401 +         extendedKeyCodesSet.add(0x01000000+0x06CC);
 105.402 +         extendedKeyCodesSet.add(0x01000000+0x06CC);
 105.403 +         extendedKeyCodesSet.add(0x01000000+0x06D2);
 105.404 +         extendedKeyCodesSet.add(0x01000000+0x0493);
 105.405 +         extendedKeyCodesSet.add(0x01000000+0x0497);
 105.406 +         extendedKeyCodesSet.add(0x01000000+0x049B);
 105.407 +         extendedKeyCodesSet.add(0x01000000+0x049D);
 105.408 +         extendedKeyCodesSet.add(0x01000000+0x04A3);
 105.409 +         extendedKeyCodesSet.add(0x01000000+0x04AF);
 105.410 +         extendedKeyCodesSet.add(0x01000000+0x04B1);
 105.411 +         extendedKeyCodesSet.add(0x01000000+0x04B3);
 105.412 +         extendedKeyCodesSet.add(0x01000000+0x04B9);
 105.413 +         extendedKeyCodesSet.add(0x01000000+0x04BB);
 105.414 +         extendedKeyCodesSet.add(0x01000000+0x04D9);
 105.415 +         extendedKeyCodesSet.add(0x01000000+0x04E9);
 105.416 +         extendedKeyCodesSet.add(0x01000000+0x0452);
 105.417 +         extendedKeyCodesSet.add(0x01000000+0x0453);
 105.418 +         extendedKeyCodesSet.add(0x01000000+0x0451);
 105.419 +         extendedKeyCodesSet.add(0x01000000+0x0454);
 105.420 +         extendedKeyCodesSet.add(0x01000000+0x0455);
 105.421 +         extendedKeyCodesSet.add(0x01000000+0x0456);
 105.422 +         extendedKeyCodesSet.add(0x01000000+0x0457);
 105.423 +         extendedKeyCodesSet.add(0x01000000+0x0458);
 105.424 +         extendedKeyCodesSet.add(0x01000000+0x0459);
 105.425 +         extendedKeyCodesSet.add(0x01000000+0x045A);
 105.426 +         extendedKeyCodesSet.add(0x01000000+0x045B);
 105.427 +         extendedKeyCodesSet.add(0x01000000+0x045C);
 105.428 +         extendedKeyCodesSet.add(0x01000000+0x0491);
 105.429 +         extendedKeyCodesSet.add(0x01000000+0x045E);
 105.430 +         extendedKeyCodesSet.add(0x01000000+0x045F);
 105.431 +         extendedKeyCodesSet.add(0x01000000+0x2116);
 105.432 +         extendedKeyCodesSet.add(0x01000000+0x044E);
 105.433 +         extendedKeyCodesSet.add(0x01000000+0x0430);
 105.434 +         extendedKeyCodesSet.add(0x01000000+0x0431);
 105.435 +         extendedKeyCodesSet.add(0x01000000+0x0446);
 105.436 +         extendedKeyCodesSet.add(0x01000000+0x0434);
 105.437 +         extendedKeyCodesSet.add(0x01000000+0x0435);
 105.438 +         extendedKeyCodesSet.add(0x01000000+0x0444);
 105.439 +         extendedKeyCodesSet.add(0x01000000+0x0433);
 105.440 +         extendedKeyCodesSet.add(0x01000000+0x0445);
 105.441 +         extendedKeyCodesSet.add(0x01000000+0x0438);
 105.442 +         extendedKeyCodesSet.add(0x01000000+0x0439);
 105.443 +         extendedKeyCodesSet.add(0x01000000+0x043A);
 105.444 +         extendedKeyCodesSet.add(0x01000000+0x043B);
 105.445 +         extendedKeyCodesSet.add(0x01000000+0x043C);
 105.446 +         extendedKeyCodesSet.add(0x01000000+0x043D);
 105.447 +         extendedKeyCodesSet.add(0x01000000+0x043E);
 105.448 +         extendedKeyCodesSet.add(0x01000000+0x043F);
 105.449 +         extendedKeyCodesSet.add(0x01000000+0x044F);
 105.450 +         extendedKeyCodesSet.add(0x01000000+0x0440);
 105.451 +         extendedKeyCodesSet.add(0x01000000+0x0441);
 105.452 +         extendedKeyCodesSet.add(0x01000000+0x0442);
 105.453 +         extendedKeyCodesSet.add(0x01000000+0x0443);
 105.454 +         extendedKeyCodesSet.add(0x01000000+0x0436);
 105.455 +         extendedKeyCodesSet.add(0x01000000+0x0432);
 105.456 +         extendedKeyCodesSet.add(0x01000000+0x044C);
 105.457 +         extendedKeyCodesSet.add(0x01000000+0x044B);
 105.458 +         extendedKeyCodesSet.add(0x01000000+0x0437);
 105.459 +         extendedKeyCodesSet.add(0x01000000+0x0448);
 105.460 +         extendedKeyCodesSet.add(0x01000000+0x044D);
 105.461 +         extendedKeyCodesSet.add(0x01000000+0x0449);
 105.462 +         extendedKeyCodesSet.add(0x01000000+0x0447);
 105.463 +         extendedKeyCodesSet.add(0x01000000+0x044A);
 105.464 +         extendedKeyCodesSet.add(0x01000000+0x2015);
 105.465 +         extendedKeyCodesSet.add(0x01000000+0x03B1);
 105.466 +         extendedKeyCodesSet.add(0x01000000+0x03B2);
 105.467 +         extendedKeyCodesSet.add(0x01000000+0x03B3);
 105.468 +         extendedKeyCodesSet.add(0x01000000+0x03B4);
 105.469 +         extendedKeyCodesSet.add(0x01000000+0x03B5);
 105.470 +         extendedKeyCodesSet.add(0x01000000+0x03B6);
 105.471 +         extendedKeyCodesSet.add(0x01000000+0x03B7);
 105.472 +         extendedKeyCodesSet.add(0x01000000+0x03B8);
 105.473 +         extendedKeyCodesSet.add(0x01000000+0x03B9);
 105.474 +         extendedKeyCodesSet.add(0x01000000+0x03BA);
 105.475 +         extendedKeyCodesSet.add(0x01000000+0x03BB);
 105.476 +         extendedKeyCodesSet.add(0x01000000+0x03BC);
 105.477 +         extendedKeyCodesSet.add(0x01000000+0x03BD);
 105.478 +         extendedKeyCodesSet.add(0x01000000+0x03BE);
 105.479 +         extendedKeyCodesSet.add(0x01000000+0x03BF);
 105.480 +         extendedKeyCodesSet.add(0x01000000+0x03C0);
 105.481 +         extendedKeyCodesSet.add(0x01000000+0x03C1);
 105.482 +         extendedKeyCodesSet.add(0x01000000+0x03C3);
 105.483 +         extendedKeyCodesSet.add(0x01000000+0x03C2);
 105.484 +         extendedKeyCodesSet.add(0x01000000+0x03C4);
 105.485 +         extendedKeyCodesSet.add(0x01000000+0x03C5);
 105.486 +         extendedKeyCodesSet.add(0x01000000+0x03C6);
 105.487 +         extendedKeyCodesSet.add(0x01000000+0x03C7);
 105.488 +         extendedKeyCodesSet.add(0x01000000+0x03C8);
 105.489 +         extendedKeyCodesSet.add(0x01000000+0x03C9);
 105.490 +         extendedKeyCodesSet.add(0x01000000+0x2190);
 105.491 +         extendedKeyCodesSet.add(0x01000000+0x2192);
 105.492 +         extendedKeyCodesSet.add(0x01000000+0x2193);
 105.493 +         extendedKeyCodesSet.add(0x01000000+0x2013);
 105.494 +         extendedKeyCodesSet.add(0x01000000+0x201C);
 105.495 +         extendedKeyCodesSet.add(0x01000000+0x201D);
 105.496 +         extendedKeyCodesSet.add(0x01000000+0x201E);
 105.497 +         extendedKeyCodesSet.add(0x01000000+0x05D0);
 105.498 +         extendedKeyCodesSet.add(0x01000000+0x05D1);
 105.499 +         extendedKeyCodesSet.add(0x01000000+0x05D2);
 105.500 +         extendedKeyCodesSet.add(0x01000000+0x05D3);
 105.501 +         extendedKeyCodesSet.add(0x01000000+0x05D4);
 105.502 +         extendedKeyCodesSet.add(0x01000000+0x05D5);
 105.503 +         extendedKeyCodesSet.add(0x01000000+0x05D6);
 105.504 +         extendedKeyCodesSet.add(0x01000000+0x05D7);
 105.505 +         extendedKeyCodesSet.add(0x01000000+0x05D8);
 105.506 +         extendedKeyCodesSet.add(0x01000000+0x05D9);
 105.507 +         extendedKeyCodesSet.add(0x01000000+0x05DA);
 105.508 +         extendedKeyCodesSet.add(0x01000000+0x05DB);
 105.509 +         extendedKeyCodesSet.add(0x01000000+0x05DC);
 105.510 +         extendedKeyCodesSet.add(0x01000000+0x05DD);
 105.511 +         extendedKeyCodesSet.add(0x01000000+0x05DE);
 105.512 +         extendedKeyCodesSet.add(0x01000000+0x05DF);
 105.513 +         extendedKeyCodesSet.add(0x01000000+0x05E0);
 105.514 +         extendedKeyCodesSet.add(0x01000000+0x05E1);
 105.515 +         extendedKeyCodesSet.add(0x01000000+0x05E2);
 105.516 +         extendedKeyCodesSet.add(0x01000000+0x05E3);
 105.517 +         extendedKeyCodesSet.add(0x01000000+0x05E4);
 105.518 +         extendedKeyCodesSet.add(0x01000000+0x05E5);
 105.519 +         extendedKeyCodesSet.add(0x01000000+0x05E6);
 105.520 +         extendedKeyCodesSet.add(0x01000000+0x05E7);
 105.521 +         extendedKeyCodesSet.add(0x01000000+0x05E8);
 105.522 +         extendedKeyCodesSet.add(0x01000000+0x05E9);
 105.523 +         extendedKeyCodesSet.add(0x01000000+0x05EA);
 105.524 +         extendedKeyCodesSet.add(0x01000000+0x0E01);
 105.525 +         extendedKeyCodesSet.add(0x01000000+0x0E02);
 105.526 +         extendedKeyCodesSet.add(0x01000000+0x0E03);
 105.527 +         extendedKeyCodesSet.add(0x01000000+0x0E04);
 105.528 +         extendedKeyCodesSet.add(0x01000000+0x0E05);
 105.529 +         extendedKeyCodesSet.add(0x01000000+0x0E07);
 105.530 +         extendedKeyCodesSet.add(0x01000000+0x0E08);
 105.531 +         extendedKeyCodesSet.add(0x01000000+0x0E0A);
 105.532 +         extendedKeyCodesSet.add(0x01000000+0x0E0C);
 105.533 +         extendedKeyCodesSet.add(0x01000000+0x0E14);
 105.534 +         extendedKeyCodesSet.add(0x01000000+0x0E15);
 105.535 +         extendedKeyCodesSet.add(0x01000000+0x0E16);
 105.536 +         extendedKeyCodesSet.add(0x01000000+0x0E17);
 105.537 +         extendedKeyCodesSet.add(0x01000000+0x0E19);
 105.538 +         extendedKeyCodesSet.add(0x01000000+0x0E1A);
 105.539 +         extendedKeyCodesSet.add(0x01000000+0x0E1B);
 105.540 +         extendedKeyCodesSet.add(0x01000000+0x0E1C);
 105.541 +         extendedKeyCodesSet.add(0x01000000+0x0E1D);
 105.542 +         extendedKeyCodesSet.add(0x01000000+0x0E1E);
 105.543 +         extendedKeyCodesSet.add(0x01000000+0x0E1F);
 105.544 +         extendedKeyCodesSet.add(0x01000000+0x0E20);
 105.545 +         extendedKeyCodesSet.add(0x01000000+0x0E21);
 105.546 +         extendedKeyCodesSet.add(0x01000000+0x0E22);
 105.547 +         extendedKeyCodesSet.add(0x01000000+0x0E23);
 105.548 +         extendedKeyCodesSet.add(0x01000000+0x0E25);
 105.549 +         extendedKeyCodesSet.add(0x01000000+0x0E27);
 105.550 +         extendedKeyCodesSet.add(0x01000000+0x0E2A);
 105.551 +         extendedKeyCodesSet.add(0x01000000+0x0E2B);
 105.552 +         extendedKeyCodesSet.add(0x01000000+0x0E2D);
 105.553 +         extendedKeyCodesSet.add(0x01000000+0x0E30);
 105.554 +         extendedKeyCodesSet.add(0x01000000+0x0E31);
 105.555 +         extendedKeyCodesSet.add(0x01000000+0x0E32);
 105.556 +         extendedKeyCodesSet.add(0x01000000+0x0E33);
 105.557 +         extendedKeyCodesSet.add(0x01000000+0x0E34);
 105.558 +         extendedKeyCodesSet.add(0x01000000+0x0E35);
 105.559 +         extendedKeyCodesSet.add(0x01000000+0x0E36);
 105.560 +         extendedKeyCodesSet.add(0x01000000+0x0E37);
 105.561 +         extendedKeyCodesSet.add(0x01000000+0x0E38);
 105.562 +         extendedKeyCodesSet.add(0x01000000+0x0E39);
 105.563 +         extendedKeyCodesSet.add(0x01000000+0x0E3F);
 105.564 +         extendedKeyCodesSet.add(0x01000000+0x0E40);
 105.565 +         extendedKeyCodesSet.add(0x01000000+0x0E41);
 105.566 +         extendedKeyCodesSet.add(0x01000000+0x0E43);
 105.567 +         extendedKeyCodesSet.add(0x01000000+0x0E44);
 105.568 +         extendedKeyCodesSet.add(0x01000000+0x0E45);
 105.569 +         extendedKeyCodesSet.add(0x01000000+0x0E46);
 105.570 +         extendedKeyCodesSet.add(0x01000000+0x0E47);
 105.571 +         extendedKeyCodesSet.add(0x01000000+0x0E48);
 105.572 +         extendedKeyCodesSet.add(0x01000000+0x0E49);
 105.573 +         extendedKeyCodesSet.add(0x01000000+0x0E50);
 105.574 +         extendedKeyCodesSet.add(0x01000000+0x0E51);
 105.575 +         extendedKeyCodesSet.add(0x01000000+0x0E52);
 105.576 +         extendedKeyCodesSet.add(0x01000000+0x0E53);
 105.577 +         extendedKeyCodesSet.add(0x01000000+0x0E54);
 105.578 +         extendedKeyCodesSet.add(0x01000000+0x0E55);
 105.579 +         extendedKeyCodesSet.add(0x01000000+0x0E56);
 105.580 +         extendedKeyCodesSet.add(0x01000000+0x0E57);
 105.581 +         extendedKeyCodesSet.add(0x01000000+0x0E58);
 105.582 +         extendedKeyCodesSet.add(0x01000000+0x0E59);
 105.583 +         extendedKeyCodesSet.add(0x01000000+0x0587);
 105.584 +         extendedKeyCodesSet.add(0x01000000+0x0589);
 105.585 +         extendedKeyCodesSet.add(0x01000000+0x0589);
 105.586 +         extendedKeyCodesSet.add(0x01000000+0x055D);
 105.587 +         extendedKeyCodesSet.add(0x01000000+0x055D);
 105.588 +         extendedKeyCodesSet.add(0x01000000+0x055B);
 105.589 +         extendedKeyCodesSet.add(0x01000000+0x055B);
 105.590 +         extendedKeyCodesSet.add(0x01000000+0x055E);
 105.591 +         extendedKeyCodesSet.add(0x01000000+0x055E);
 105.592 +         extendedKeyCodesSet.add(0x01000000+0x0561);
 105.593 +         extendedKeyCodesSet.add(0x01000000+0x0562);
 105.594 +         extendedKeyCodesSet.add(0x01000000+0x0563);
 105.595 +         extendedKeyCodesSet.add(0x01000000+0x0564);
 105.596 +         extendedKeyCodesSet.add(0x01000000+0x0565);
 105.597 +         extendedKeyCodesSet.add(0x01000000+0x0566);
 105.598 +         extendedKeyCodesSet.add(0x01000000+0x0567);
 105.599 +         extendedKeyCodesSet.add(0x01000000+0x0568);
 105.600 +         extendedKeyCodesSet.add(0x01000000+0x0569);
 105.601 +         extendedKeyCodesSet.add(0x01000000+0x056A);
 105.602 +         extendedKeyCodesSet.add(0x01000000+0x056B);
 105.603 +         extendedKeyCodesSet.add(0x01000000+0x056C);
 105.604 +         extendedKeyCodesSet.add(0x01000000+0x056D);
 105.605 +         extendedKeyCodesSet.add(0x01000000+0x056E);
 105.606 +         extendedKeyCodesSet.add(0x01000000+0x056F);
 105.607 +         extendedKeyCodesSet.add(0x01000000+0x0570);
 105.608 +         extendedKeyCodesSet.add(0x01000000+0x0571);
 105.609 +         extendedKeyCodesSet.add(0x01000000+0x0572);
 105.610 +         extendedKeyCodesSet.add(0x01000000+0x0573);
 105.611 +         extendedKeyCodesSet.add(0x01000000+0x0574);
 105.612 +         extendedKeyCodesSet.add(0x01000000+0x0575);
 105.613 +         extendedKeyCodesSet.add(0x01000000+0x0576);
 105.614 +         extendedKeyCodesSet.add(0x01000000+0x0577);
 105.615 +         extendedKeyCodesSet.add(0x01000000+0x0578);
 105.616 +         extendedKeyCodesSet.add(0x01000000+0x0579);
 105.617 +         extendedKeyCodesSet.add(0x01000000+0x057A);
 105.618 +         extendedKeyCodesSet.add(0x01000000+0x057B);
 105.619 +         extendedKeyCodesSet.add(0x01000000+0x057C);
 105.620 +         extendedKeyCodesSet.add(0x01000000+0x057D);
 105.621 +         extendedKeyCodesSet.add(0x01000000+0x057E);
 105.622 +         extendedKeyCodesSet.add(0x01000000+0x057F);
 105.623 +         extendedKeyCodesSet.add(0x01000000+0x0580);
 105.624 +         extendedKeyCodesSet.add(0x01000000+0x0581);
 105.625 +         extendedKeyCodesSet.add(0x01000000+0x0582);
 105.626 +         extendedKeyCodesSet.add(0x01000000+0x0583);
 105.627 +         extendedKeyCodesSet.add(0x01000000+0x0584);
 105.628 +         extendedKeyCodesSet.add(0x01000000+0x0585);
 105.629 +         extendedKeyCodesSet.add(0x01000000+0x0586);
 105.630 +         extendedKeyCodesSet.add(0x01000000+0x10D0);
 105.631 +         extendedKeyCodesSet.add(0x01000000+0x10D1);
 105.632 +         extendedKeyCodesSet.add(0x01000000+0x10D2);
 105.633 +         extendedKeyCodesSet.add(0x01000000+0x10D3);
 105.634 +         extendedKeyCodesSet.add(0x01000000+0x10D4);
 105.635 +         extendedKeyCodesSet.add(0x01000000+0x10D5);
 105.636 +         extendedKeyCodesSet.add(0x01000000+0x10D6);
 105.637 +         extendedKeyCodesSet.add(0x01000000+0x10D7);
 105.638 +         extendedKeyCodesSet.add(0x01000000+0x10D8);
 105.639 +         extendedKeyCodesSet.add(0x01000000+0x10D9);
 105.640 +         extendedKeyCodesSet.add(0x01000000+0x10DA);
 105.641 +         extendedKeyCodesSet.add(0x01000000+0x10DB);
 105.642 +         extendedKeyCodesSet.add(0x01000000+0x10DC);
 105.643 +         extendedKeyCodesSet.add(0x01000000+0x10DD);
 105.644 +         extendedKeyCodesSet.add(0x01000000+0x10DE);
 105.645 +         extendedKeyCodesSet.add(0x01000000+0x10DF);
 105.646 +         extendedKeyCodesSet.add(0x01000000+0x10E0);
 105.647 +         extendedKeyCodesSet.add(0x01000000+0x10E1);
 105.648 +         extendedKeyCodesSet.add(0x01000000+0x10E2);
 105.649 +         extendedKeyCodesSet.add(0x01000000+0x10E3);
 105.650 +         extendedKeyCodesSet.add(0x01000000+0x10E4);
 105.651 +         extendedKeyCodesSet.add(0x01000000+0x10E5);
 105.652 +         extendedKeyCodesSet.add(0x01000000+0x10E6);
 105.653 +         extendedKeyCodesSet.add(0x01000000+0x10E7);
 105.654 +         extendedKeyCodesSet.add(0x01000000+0x10E8);
 105.655 +         extendedKeyCodesSet.add(0x01000000+0x10E9);
 105.656 +         extendedKeyCodesSet.add(0x01000000+0x10EA);
 105.657 +         extendedKeyCodesSet.add(0x01000000+0x10EB);
 105.658 +         extendedKeyCodesSet.add(0x01000000+0x10EC);
 105.659 +         extendedKeyCodesSet.add(0x01000000+0x10ED);
 105.660 +         extendedKeyCodesSet.add(0x01000000+0x10EE);
 105.661 +         extendedKeyCodesSet.add(0x01000000+0x10EF);
 105.662 +         extendedKeyCodesSet.add(0x01000000+0x10F0);
 105.663 +         extendedKeyCodesSet.add(0x01000000+0x01E7);
 105.664 +         extendedKeyCodesSet.add(0x01000000+0x0259);
 105.665 +         extendedKeyCodesSet.add(0x01000000+0x1EB9);
 105.666 +         extendedKeyCodesSet.add(0x01000000+0x1ECB);
 105.667 +         extendedKeyCodesSet.add(0x01000000+0x1ECD);
 105.668 +         extendedKeyCodesSet.add(0x01000000+0x1EE5);
 105.669 +         extendedKeyCodesSet.add(0x01000000+0x01A1);
 105.670 +         extendedKeyCodesSet.add(0x01000000+0x01B0);
 105.671 +         extendedKeyCodesSet.add(0x01000000+0x20AB);
 105.672 +     }
 105.673 +}
   106.1 --- a/src/share/classes/sun/awt/HeadlessToolkit.java	Thu Apr 16 17:42:00 2009 +0100
   106.2 +++ b/src/share/classes/sun/awt/HeadlessToolkit.java	Thu Apr 16 19:10:32 2009 -0700
   106.3 @@ -179,9 +179,9 @@
   106.4          throw new HeadlessException();
   106.5      }
   106.6  
   106.7 -    public  KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) throws HeadlessException {
   106.8 -        KeyboardFocusManagerPeerImpl peer = new KeyboardFocusManagerPeerImpl(manager);
   106.9 -        return peer;
  106.10 +    public  KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager)
  106.11 +        throws HeadlessException {
  106.12 +        throw new HeadlessException();
  106.13      }
  106.14  
  106.15      public TrayIconPeer createTrayIcon(TrayIcon target)
   107.1 --- a/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java	Thu Apr 16 17:42:00 2009 +0100
   107.2 +++ b/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java	Thu Apr 16 19:10:32 2009 -0700
   107.3 @@ -1,5 +1,5 @@
   107.4  /*
   107.5 - * Copyright 2003-2007 Sun Microsystems, Inc.  All Rights Reserved.
   107.6 + * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
   107.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   107.8   *
   107.9   * This code is free software; you can redistribute it and/or modify it
  107.10 @@ -27,47 +27,150 @@
  107.11  import java.awt.Component;
  107.12  import java.awt.KeyboardFocusManager;
  107.13  import java.awt.Window;
  107.14 +import java.awt.Canvas;
  107.15 +import java.awt.Scrollbar;
  107.16 +import java.awt.Panel;
  107.17 +
  107.18 +import java.awt.event.FocusEvent;
  107.19  
  107.20  import java.awt.peer.KeyboardFocusManagerPeer;
  107.21 +import java.awt.peer.ComponentPeer;
  107.22  
  107.23  import java.lang.reflect.InvocationTargetException;
  107.24  import java.lang.reflect.Method;
  107.25  
  107.26 +import java.util.logging.Level;
  107.27 +import java.util.logging.Logger;
  107.28  
  107.29 -public class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
  107.30 -    static native Window getNativeFocusedWindow();
  107.31 -    static native Component getNativeFocusOwner();
  107.32 -    static native void clearNativeGlobalFocusOwner(Window activeWindow);
  107.33 +public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
  107.34  
  107.35 -    KeyboardFocusManagerPeerImpl(KeyboardFocusManager manager) {
  107.36 +    private static final Logger focusLog = Logger.getLogger("sun.awt.focus.KeyboardFocusManagerPeerImpl");
  107.37 +
  107.38 +    private static AWTAccessor.KeyboardFocusManagerAccessor kfmAccessor =
  107.39 +        AWTAccessor.getKeyboardFocusManagerAccessor();
  107.40 +
  107.41 +    // The constants are copied from java.awt.KeyboardFocusManager
  107.42 +    public static final int SNFH_FAILURE         = 0;
  107.43 +    public static final int SNFH_SUCCESS_HANDLED = 1;
  107.44 +    public static final int SNFH_SUCCESS_PROCEED = 2;
  107.45 +
  107.46 +    protected KeyboardFocusManager manager;
  107.47 +
  107.48 +    public KeyboardFocusManagerPeerImpl(KeyboardFocusManager manager) {
  107.49 +        this.manager = manager;
  107.50      }
  107.51  
  107.52 -    public Window getCurrentFocusedWindow() {
  107.53 -        return getNativeFocusedWindow();
  107.54 +    @Override
  107.55 +    public void clearGlobalFocusOwner(Window activeWindow) {
  107.56 +        if (activeWindow != null) {
  107.57 +            Component focusOwner = activeWindow.getFocusOwner();
  107.58 +            if (focusLog.isLoggable(Level.FINE)) focusLog.fine("Clearing global focus owner " + focusOwner);
  107.59 +            if (focusOwner != null) {
  107.60 +                FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null,
  107.61 +                                                     CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER);
  107.62 +                SunToolkit.postPriorityEvent(fl);
  107.63 +            }
  107.64 +        }
  107.65      }
  107.66  
  107.67 -    public void setCurrentFocusOwner(Component comp) {
  107.68 +    /*
  107.69 +     * WARNING: Don't call it on the Toolkit thread.
  107.70 +     *
  107.71 +     * Checks if the component:
  107.72 +     * 1) accepts focus on click (in general)
  107.73 +     * 2) may be a focus owner (in particular)
  107.74 +     */
  107.75 +    public static boolean shouldFocusOnClick(Component component) {
  107.76 +        boolean acceptFocusOnClick = false;
  107.77 +
  107.78 +        // A component is generally allowed to accept focus on click
  107.79 +        // if its peer is focusable. There're some exceptions though.
  107.80 +
  107.81 +
  107.82 +        // CANVAS & SCROLLBAR accept focus on click
  107.83 +        if (component instanceof Canvas ||
  107.84 +            component instanceof Scrollbar)
  107.85 +        {
  107.86 +            acceptFocusOnClick = true;
  107.87 +
  107.88 +        // PANEL, empty only, accepts focus on click
  107.89 +        } else if (component instanceof Panel) {
  107.90 +            acceptFocusOnClick = (((Panel)component).getComponentCount() == 0);
  107.91 +
  107.92 +
  107.93 +        // Other components
  107.94 +        } else {
  107.95 +            ComponentPeer peer = (component != null ? component.getPeer() : null);
  107.96 +            acceptFocusOnClick = (peer != null ? peer.isFocusable() : false);
  107.97 +        }
  107.98 +        return acceptFocusOnClick &&
  107.99 +               AWTAccessor.getComponentAccessor().canBeFocusOwner(component);
 107.100      }
 107.101  
 107.102 -    public Component getCurrentFocusOwner() {
 107.103 -        return getNativeFocusOwner();
 107.104 -    }
 107.105 -    public void clearGlobalFocusOwner(Window activeWindow) {
 107.106 -        clearNativeGlobalFocusOwner(activeWindow);
 107.107 +    /*
 107.108 +     * Posts proper lost/gain focus events to the event queue.
 107.109 +     */
 107.110 +    public static boolean deliverFocus(Component lightweightChild,
 107.111 +                                       Component target,
 107.112 +                                       boolean temporary,
 107.113 +                                       boolean focusedWindowChangeAllowed,
 107.114 +                                       long time,
 107.115 +                                       CausedFocusEvent.Cause cause,
 107.116 +                                       Component currentFocusOwner) // provided by the descendant peers
 107.117 +    {
 107.118 +        if (lightweightChild == null) {
 107.119 +            lightweightChild = (Component)target;
 107.120 +        }
 107.121 +
 107.122 +        Component currentOwner = currentFocusOwner;
 107.123 +        if (currentOwner != null && currentOwner.getPeer() == null) {
 107.124 +            currentOwner = null;
 107.125 +        }
 107.126 +        if (currentOwner != null) {
 107.127 +            FocusEvent fl = new CausedFocusEvent(currentOwner, FocusEvent.FOCUS_LOST,
 107.128 +                                                 false, lightweightChild, cause);
 107.129 +
 107.130 +            if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Posting focus event: " + fl);
 107.131 +            SunToolkit.postPriorityEvent(fl);
 107.132 +        }
 107.133 +
 107.134 +        FocusEvent fg = new CausedFocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED,
 107.135 +                                             false, currentOwner, cause);
 107.136 +
 107.137 +        if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Posting focus event: " + fg);
 107.138 +        SunToolkit.postPriorityEvent(fg);
 107.139 +        return true;
 107.140      }
 107.141  
 107.142 -    static Method m_removeLastFocusRequest = null;
 107.143 +    // WARNING: Don't call it on the Toolkit thread.
 107.144 +    public static boolean requestFocusFor(Component target, CausedFocusEvent.Cause cause) {
 107.145 +        return AWTAccessor.getComponentAccessor().requestFocus(target, cause);
 107.146 +    }
 107.147 +
 107.148 +    // WARNING: Don't call it on the Toolkit thread.
 107.149 +    public static int shouldNativelyFocusHeavyweight(Component heavyweight,
 107.150 +                                                     Component descendant,
 107.151 +                                                     boolean temporary,
 107.152 +                                                     boolean focusedWindowChangeAllowed,
 107.153 +                                                     long time,
 107.154 +                                                     CausedFocusEvent.Cause cause)
 107.155 +    {
 107.156 +        return kfmAccessor.shouldNativelyFocusHeavyweight(
 107.157 +            heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause);
 107.158 +    }
 107.159 +
 107.160      public static void removeLastFocusRequest(Component heavyweight) {
 107.161 -        try {
 107.162 -            if (m_removeLastFocusRequest == null) {
 107.163 -                m_removeLastFocusRequest = SunToolkit.getMethod(KeyboardFocusManager.class, "removeLastFocusRequest",
 107.164 -                                                              new Class[] {Component.class});
 107.165 -            }
 107.166 -            m_removeLastFocusRequest.invoke(null, new Object[]{heavyweight});
 107.167 -        } catch (InvocationTargetException ite) {
 107.168 -            ite.printStackTrace();
 107.169 -        } catch (IllegalAccessException ex) {
 107.170 -            ex.printStackTrace();
 107.171 -        }
 107.172 +        kfmAccessor.removeLastFocusRequest(heavyweight);
 107.173 +    }
 107.174 +
 107.175 +    // WARNING: Don't call it on the Toolkit thread.
 107.176 +    public static boolean processSynchronousLightweightTransfer(Component heavyweight,
 107.177 +                                                                Component descendant,
 107.178 +                                                                boolean temporary,
 107.179 +                                                                boolean focusedWindowChangeAllowed,
 107.180 +                                                                long time)
 107.181 +    {
 107.182 +        return kfmAccessor.processSynchronousLightweightTransfer(
 107.183 +            heavyweight, descendant, temporary, focusedWindowChangeAllowed, time);
 107.184      }
 107.185  }
   108.1 --- a/src/share/classes/sun/awt/NullComponentPeer.java	Thu Apr 16 17:42:00 2009 +0100
   108.2 +++ b/src/share/classes/sun/awt/NullComponentPeer.java	Thu Apr 16 19:10:32 2009 -0700
   108.3 @@ -278,19 +278,6 @@
   108.4          throw new UnsupportedOperationException();
   108.5      }
   108.6  
   108.7 -    /**
   108.8 -     * @see java.awt.peer.ContainerPeer#restack
   108.9 -     */
  108.10 -    public void restack() {
  108.11 -        throw new UnsupportedOperationException();
  108.12 -    }
  108.13 -
  108.14 -    /**
  108.15 -     * @see java.awt.peer.ContainerPeer#isRestackSupported
  108.16 -     */
  108.17 -    public boolean isRestackSupported() {
  108.18 -        return false;
  108.19 -    }
  108.20      public void layout() {
  108.21      }
  108.22  
  108.23 @@ -305,4 +292,19 @@
  108.24        */
  108.25      public void applyShape(Region shape) {
  108.26      }
  108.27 +
  108.28 +    /**
  108.29 +     * Lowers this component at the bottom of the above HW peer. If the above parameter
  108.30 +     * is null then the method places this component at the top of the Z-order.
  108.31 +     */
  108.32 +    public void setZOrder(ComponentPeer above) {
  108.33 +    }
  108.34 +
  108.35 +    public void updateGraphicsData(GraphicsConfiguration gc) {}
  108.36 +
  108.37 +    public GraphicsConfiguration getAppropriateGraphicsConfiguration(
  108.38 +                        GraphicsConfiguration gc)
  108.39 +    {
  108.40 +        return gc;
  108.41 +    }
  108.42  }
   109.1 --- a/src/share/classes/sun/awt/SunToolkit.java	Thu Apr 16 17:42:00 2009 +0100
   109.2 +++ b/src/share/classes/sun/awt/SunToolkit.java	Thu Apr 16 19:10:32 2009 -0700
   109.3 @@ -1,5 +1,5 @@
   109.4  /*
   109.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
   109.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
   109.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   109.8   *
   109.9   * This code is free software; you can redistribute it and/or modify it
  109.10 @@ -32,14 +32,10 @@
  109.11  import java.awt.peer.*;
  109.12  import java.awt.event.WindowEvent;
  109.13  import java.awt.event.KeyEvent;
  109.14 -import java.awt.im.spi.InputMethodDescriptor;
  109.15  import java.awt.image.*;
  109.16 -import java.awt.geom.AffineTransform;
  109.17  import java.awt.TrayIcon;
  109.18  import java.awt.SystemTray;
  109.19 -import java.io.*;
  109.20  import java.net.URL;
  109.21 -import java.net.JarURLConnection;
  109.22  import java.util.*;
  109.23  import java.util.concurrent.TimeUnit;
  109.24  import java.util.concurrent.locks.Condition;
  109.25 @@ -49,7 +45,6 @@
  109.26  import sun.misc.SoftCache;
  109.27  import sun.font.FontDesignMetrics;
  109.28  import sun.awt.im.InputContext;
  109.29 -import sun.awt.im.SimpleInputMethodWindow;
  109.30  import sun.awt.image.*;
  109.31  import sun.security.action.GetPropertyAction;
  109.32  import sun.security.action.GetBooleanAction;
  109.33 @@ -225,10 +220,8 @@
  109.34      public abstract RobotPeer createRobot(Robot target, GraphicsDevice screen)
  109.35          throws AWTException;
  109.36  
  109.37 -    public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) throws HeadlessException {
  109.38 -        KeyboardFocusManagerPeerImpl peer = new KeyboardFocusManagerPeerImpl(manager);
  109.39 -        return peer;
  109.40 -    }
  109.41 +    public abstract KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager)
  109.42 +        throws HeadlessException;
  109.43  
  109.44      /**
  109.45       * The AWT lock is typically only used on Unix platforms to synchronize
  109.46 @@ -824,16 +817,31 @@
  109.47      }
  109.48  
  109.49      /**
  109.50 -     * Disables erasing of background on the canvas before painting
  109.51 -     * if this is supported by the current toolkit.
  109.52 -     *
  109.53 -     * @throws IllegalStateException if the canvas is not displayable
  109.54 -     * @see java.awt.Component#isDisplayable
  109.55 +     * Disables erasing of background on the canvas before painting if
  109.56 +     * this is supported by the current toolkit. It is recommended to
  109.57 +     * call this method early, before the Canvas becomes displayable,
  109.58 +     * because some Toolkit implementations do not support changing
  109.59 +     * this property once the Canvas becomes displayable.
  109.60       */
  109.61      public void disableBackgroundErase(Canvas canvas) {
  109.62 -        if (!canvas.isDisplayable()) {
  109.63 -            throw new IllegalStateException("Canvas must have a valid peer");
  109.64 -        }
  109.65 +        disableBackgroundEraseImpl(canvas);
  109.66 +    }
  109.67 +
  109.68 +    /**
  109.69 +     * Disables the native erasing of the background on the given
  109.70 +     * component before painting if this is supported by the current
  109.71 +     * toolkit. This only has an effect for certain components such as
  109.72 +     * Canvas, Panel and Window. It is recommended to call this method
  109.73 +     * early, before the Component becomes displayable, because some
  109.74 +     * Toolkit implementations do not support changing this property
  109.75 +     * once the Component becomes displayable.
  109.76 +     */
  109.77 +    public void disableBackgroundErase(Component component) {
  109.78 +        disableBackgroundEraseImpl(component);
  109.79 +    }
  109.80 +
  109.81 +    private void disableBackgroundEraseImpl(Component component) {
  109.82 +        AWTAccessor.getComponentAccessor().setBackgroundEraseDisabled(component, true);
  109.83      }
  109.84  
  109.85      /**
  109.86 @@ -1972,6 +1980,18 @@
  109.87          AWTAutoShutdown.getInstance().dumpPeers(aLog);
  109.88      }
  109.89  
  109.90 +    /**
  109.91 +     * Returns the <code>Window</code> ancestor of the component <code>comp</code>.
  109.92 +     * @return Window ancestor of the component or component by itself if it is Window;
  109.93 +     *         null, if component is not a part of window hierarchy
  109.94 +     */
  109.95 +    public static Window getContainingWindow(Component comp) {
  109.96 +        while (comp != null && !(comp instanceof Window)) {
  109.97 +            comp = comp.getParent();
  109.98 +        }
  109.99 +        return (Window)comp;
 109.100 +    }
 109.101 +
 109.102      private static Boolean sunAwtDisableMixing = null;
 109.103  
 109.104      /**
 109.105 @@ -1995,6 +2015,73 @@
 109.106      public boolean isNativeGTKAvailable() {
 109.107          return false;
 109.108      }
 109.109 +
 109.110 +    // Cosntant alpha
 109.111 +    public boolean isWindowOpacitySupported() {
 109.112 +        return false;
 109.113 +    }
 109.114 +
 109.115 +    // Shaping
 109.116 +    public boolean isWindowShapingSupported() {
 109.117 +        return false;
 109.118 +    }
 109.119 +
 109.120 +    // Per-pixel alpha
 109.121 +    public boolean isWindowTranslucencySupported() {
 109.122 +        return false;
 109.123 +    }
 109.124 +
 109.125 +    public boolean isTranslucencyCapable(GraphicsConfiguration gc) {
 109.126 +        return false;
 109.127 +    }
 109.128 +
 109.129 +    /**
 109.130 +     * Returns whether or not a containing top level window for the passed
 109.131 +     * component is
 109.132 +     * {@link com.sun.awt.AWTUtilities.Translucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}.
 109.133 +     *
 109.134 +     * @param c a Component which toplevel's to check
 109.135 +     * @return {@code true}  if the passed component is not null and has a
 109.136 +     * containing toplevel window which is opaque (so per-pixel translucency
 109.137 +     * is not enabled), {@code false} otherwise
 109.138 +     * @see com.sun.awt.AWTUtilities.Translucency#PERPIXEL_TRANSLUCENT
 109.139 +     * @see com.sun.awt.AWTUtilities#isWindowOpaque(Window)
 109.140 +     */
 109.141 +    public static boolean isContainingTopLevelOpaque(Component c) {
 109.142 +        Window w = getContainingWindow(c);
 109.143 +        // return w != null && (w).isOpaque();
 109.144 +        return w != null && com.sun.awt.AWTUtilities.isWindowOpaque(w);
 109.145 +    }
 109.146 +
 109.147 +    /**
 109.148 +     * Returns whether or not a containing top level window for the passed
 109.149 +     * component is
 109.150 +     * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}.
 109.151 +     *
 109.152 +     * @param c a Component which toplevel's to check
 109.153 +     * @return {@code true} if the passed component is not null and has a
 109.154 +     * containing toplevel window which has opacity less than
 109.155 +     * 1.0f (which means that it is translucent), {@code false} otherwise
 109.156 +     * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT
 109.157 +     * @see com.sun.awt.AWTUtilities#getWindowOpacity(Window)
 109.158 +     */
 109.159 +    public static boolean isContainingTopLevelTranslucent(Component c) {
 109.160 +        Window w = getContainingWindow(c);
 109.161 +        // return w != null && (w).getOpacity() < 1.0f;
 109.162 +        return w != null && com.sun.awt.AWTUtilities.getWindowOpacity((Window)w) < 1.0f;
 109.163 +    }
 109.164 +
 109.165 +    /**
 109.166 +     * Returns whether the native system requires using the peer.updateWindow()
 109.167 +     * method to update the contents of a non-opaque window, or if usual
 109.168 +     * painting procedures are sufficient. The default return value covers
 109.169 +     * the X11 systems. On MS Windows this method is overriden in WToolkit
 109.170 +     * to return true.
 109.171 +     */
 109.172 +    public boolean needUpdateWindow() {
 109.173 +        return false;
 109.174 +    }
 109.175 +
 109.176  } // class SunToolkit
 109.177  
 109.178  
   110.1 --- a/src/share/classes/sun/awt/shell/ShellFolder.java	Thu Apr 16 17:42:00 2009 +0100
   110.2 +++ b/src/share/classes/sun/awt/shell/ShellFolder.java	Thu Apr 16 19:10:32 2009 -0700
   110.3 @@ -31,6 +31,7 @@
   110.4  import java.io.*;
   110.5  import java.io.FileNotFoundException;
   110.6  import java.util.*;
   110.7 +import java.util.concurrent.Callable;
   110.8  
   110.9  /**
  110.10   * @author Michael Martak
  110.11 @@ -461,6 +462,35 @@
  110.12          return null;
  110.13      }
  110.14  
  110.15 +    private static Invoker invoker;
  110.16 +
  110.17 +    /**
  110.18 +     * Provides the single access point to the {@link Invoker}. It is guaranteed that the value
  110.19 +     * returned by this method will be always the same.
  110.20 +     *
  110.21 +     * @return the singleton instance of {@link Invoker}
  110.22 +     */
  110.23 +    public static Invoker getInvoker() {
  110.24 +        if (invoker == null) {
  110.25 +            invoker = shellFolderManager.createInvoker();
  110.26 +        }
  110.27 +        return invoker;
  110.28 +    }
  110.29 +
  110.30 +    /**
  110.31 +     * Interface allowing to invoke tasks in different environments on different platforms.
  110.32 +     */
  110.33 +    public static interface Invoker {
  110.34 +        /**
  110.35 +         * Invokes a callable task. If the {@code task} throws a checked exception,
  110.36 +         * it will be wrapped into a {@link RuntimeException}
  110.37 +         *
  110.38 +         * @param task a task to invoke
  110.39 +         * @return the result of {@code task}'s invokation
  110.40 +         */
  110.41 +        <T> T invoke(Callable<T> task);
  110.42 +    }
  110.43 +
  110.44      /**
  110.45       * Provides a default comparator for the default column set
  110.46       */
   111.1 --- a/src/share/classes/sun/awt/shell/ShellFolderManager.java	Thu Apr 16 17:42:00 2009 +0100
   111.2 +++ b/src/share/classes/sun/awt/shell/ShellFolderManager.java	Thu Apr 16 19:10:32 2009 -0700
   111.3 @@ -27,6 +27,7 @@
   111.4  
   111.5  import java.io.File;
   111.6  import java.io.FileNotFoundException;
   111.7 +import java.util.concurrent.Callable;
   111.8  
   111.9  /**
  111.10   * @author Michael Martak
  111.11 @@ -96,9 +97,23 @@
  111.12      }
  111.13  
  111.14      public boolean isFileSystemRoot(File dir) {
  111.15 -        if (dir instanceof ShellFolder && !((ShellFolder)dir).isFileSystem()) {
  111.16 +        if (dir instanceof ShellFolder && !((ShellFolder) dir).isFileSystem()) {
  111.17              return false;
  111.18          }
  111.19          return (dir.getParentFile() == null);
  111.20      }
  111.21 +
  111.22 +    protected ShellFolder.Invoker createInvoker() {
  111.23 +        return new DirectInvoker();
  111.24 +    }
  111.25 +
  111.26 +    private static class DirectInvoker implements ShellFolder.Invoker {
  111.27 +        public <T> T invoke(Callable<T> task) {
  111.28 +            try {
  111.29 +                return task.call();
  111.30 +            } catch (Exception e) {
  111.31 +                throw new RuntimeException(e);
  111.32 +            }
  111.33 +        }
  111.34 +    }
  111.35  }
   112.1 --- a/src/share/classes/sun/beans/editors/ColorEditor.java	Thu Apr 16 17:42:00 2009 +0100
   112.2 +++ b/src/share/classes/sun/beans/editors/ColorEditor.java	Thu Apr 16 19:10:32 2009 -0700
   112.3 @@ -1,5 +1,5 @@
   112.4  /*
   112.5 - * Copyright 1996-2007 Sun Microsystems, Inc.  All Rights Reserved.
   112.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   112.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   112.8   *
   112.9   * This code is free software; you can redistribute it and/or modify it
  112.10 @@ -29,6 +29,8 @@
  112.11  import java.beans.*;
  112.12  
  112.13  public class ColorEditor extends Panel implements PropertyEditor {
  112.14 +    private static final long serialVersionUID = 1781257185164716054L;
  112.15 +
  112.16      public ColorEditor() {
  112.17          setLayout(null);
  112.18  
   113.1 --- a/src/share/classes/sun/beans/editors/FontEditor.java	Thu Apr 16 17:42:00 2009 +0100
   113.2 +++ b/src/share/classes/sun/beans/editors/FontEditor.java	Thu Apr 16 19:10:32 2009 -0700
   113.3 @@ -1,5 +1,5 @@
   113.4  /*
   113.5 - * Copyright 1996-2007 Sun Microsystems, Inc.  All Rights Reserved.
   113.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   113.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   113.8   *
   113.9   * This code is free software; you can redistribute it and/or modify it
  113.10 @@ -29,6 +29,7 @@
  113.11  import java.beans.*;
  113.12  
  113.13  public class FontEditor extends Panel implements java.beans.PropertyEditor {
  113.14 +    private static final long serialVersionUID = 6732704486002715933L;
  113.15  
  113.16      public FontEditor() {
  113.17          setLayout(null);
   114.1 --- a/src/share/classes/sun/misc/Launcher.java	Thu Apr 16 17:42:00 2009 +0100
   114.2 +++ b/src/share/classes/sun/misc/Launcher.java	Thu Apr 16 19:10:32 2009 -0700
   114.3 @@ -1,5 +1,5 @@
   114.4  /*
   114.5 - * Copyright 1998-2008 Sun Microsystems, Inc.  All Rights Reserved.
   114.6 + * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
   114.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   114.8   *
   114.9   * This code is free software; you can redistribute it and/or modify it
  114.10 @@ -120,7 +120,10 @@
  114.11       * The class loader used for loading installed extensions.
  114.12       */
  114.13      static class ExtClassLoader extends URLClassLoader {
  114.14 -        private File[] dirs;
  114.15 +
  114.16 +        static {
  114.17 +            ClassLoader.registerAsParallelCapable();
  114.18 +        }
  114.19  
  114.20          /**
  114.21           * create an ExtClassLoader. The ExtClassLoader is created
  114.22 @@ -146,12 +149,12 @@
  114.23                          }
  114.24                      });
  114.25              } catch (java.security.PrivilegedActionException e) {
  114.26 -                    throw (IOException) e.getException();
  114.27 +                throw (IOException) e.getException();
  114.28              }
  114.29          }
  114.30  
  114.31          void addExtURL(URL url) {
  114.32 -                super.addURL(url);
  114.33 +            super.addURL(url);
  114.34          }
  114.35  
  114.36          /*
  114.37 @@ -159,7 +162,6 @@
  114.38           */
  114.39          public ExtClassLoader(File[] dirs) throws IOException {
  114.40              super(getExtURLs(dirs), null, factory);
  114.41 -            this.dirs = dirs;
  114.42          }
  114.43  
  114.44          private static File[] getExtDirs() {
  114.45 @@ -206,20 +208,27 @@
  114.46           */
  114.47          public String findLibrary(String name) {
  114.48              name = System.mapLibraryName(name);
  114.49 -            for (int i = 0; i < dirs.length; i++) {
  114.50 -                // Look in architecture-specific subdirectory first
  114.51 -                String arch = System.getProperty("os.arch");
  114.52 -                if (arch != null) {
  114.53 -                    File file = new File(new File(dirs[i], arch), name);
  114.54 +            URL[] urls = super.getURLs();
  114.55 +            File prevDir = null;
  114.56 +            for (int i = 0; i < urls.length; i++) {
  114.57 +                // Get the ext directory from the URL
  114.58 +                File dir = new File(urls[i].getPath()).getParentFile();
  114.59 +                if (dir != null && !dir.equals(prevDir)) {
  114.60 +                    // Look in architecture-specific subdirectory first
  114.61 +                    String arch = System.getProperty("os.arch");
  114.62 +                    if (arch != null) {
  114.63 +                        File file = new File(new File(dir, arch), name);
  114.64 +                        if (file.exists()) {
  114.65 +                            return file.getAbsolutePath();
  114.66 +                        }
  114.67 +                    }
  114.68 +                    // Then check the extension directory
  114.69 +                    File file = new File(dir, name);
  114.70                      if (file.exists()) {
  114.71                          return file.getAbsolutePath();
  114.72                      }
  114.73                  }
  114.74 -                // Then check the extension directory
  114.75 -                File file = new File(dirs[i], name);
  114.76 -                if (file.exists()) {
  114.77 -                    return file.getAbsolutePath();
  114.78 -                }
  114.79 +                prevDir = dir;
  114.80              }
  114.81              return null;
  114.82          }
  114.83 @@ -248,6 +257,10 @@
  114.84       */
  114.85      static class AppClassLoader extends URLClassLoader {
  114.86  
  114.87 +        static {
  114.88 +            ClassLoader.registerAsParallelCapable();
  114.89 +        }
  114.90 +
  114.91          public static ClassLoader getAppClassLoader(final ClassLoader extcl)
  114.92              throws IOException
  114.93          {
  114.94 @@ -281,7 +294,7 @@
  114.95          /**
  114.96           * Override loadClass so we can checkPackageAccess.
  114.97           */
  114.98 -        public synchronized Class loadClass(String name, boolean resolve)
  114.99 +        public Class loadClass(String name, boolean resolve)
 114.100              throws ClassNotFoundException
 114.101          {
 114.102              int i = name.lastIndexOf('.');
   115.1 --- a/src/share/classes/sun/net/spi/DefaultProxySelector.java	Thu Apr 16 17:42:00 2009 +0100
   115.2 +++ b/src/share/classes/sun/net/spi/DefaultProxySelector.java	Thu Apr 16 19:10:32 2009 -0700
   115.3 @@ -78,7 +78,6 @@
   115.4      };
   115.5  
   115.6      private static boolean hasSystemProxies = false;
   115.7 -    private static Properties defprops = new Properties();
   115.8  
   115.9      static {
  115.10          final String key = "java.net.useSystemProxies";
  115.11 @@ -107,6 +106,9 @@
  115.12          RegexpPool hostsPool;
  115.13          String property;
  115.14  
  115.15 +        static NonProxyInfo ftpNonProxyInfo = new NonProxyInfo("ftp.nonProxyHosts", null, null);
  115.16 +        static NonProxyInfo httpNonProxyInfo = new NonProxyInfo("http.nonProxyHosts", null, null);
  115.17 +
  115.18          NonProxyInfo(String p, String s, RegexpPool pool) {
  115.19              property = p;
  115.20              hostsSource = s;
  115.21 @@ -114,8 +116,6 @@
  115.22          }
  115.23      }
  115.24  
  115.25 -    private static NonProxyInfo ftpNonProxyInfo = new NonProxyInfo("ftp.nonProxyHosts", null, null);
  115.26 -    private static NonProxyInfo httpNonProxyInfo = new NonProxyInfo("http.nonProxyHosts", null, null);
  115.27  
  115.28      /**
  115.29       * select() method. Where all the hard work is done.
  115.30 @@ -175,13 +175,13 @@
  115.31          NonProxyInfo pinfo = null;
  115.32  
  115.33          if ("http".equalsIgnoreCase(protocol)) {
  115.34 -            pinfo = httpNonProxyInfo;
  115.35 +            pinfo = NonProxyInfo.httpNonProxyInfo;
  115.36          } else if ("https".equalsIgnoreCase(protocol)) {
  115.37              // HTTPS uses the same property as HTTP, for backward
  115.38              // compatibility
  115.39 -            pinfo = httpNonProxyInfo;
  115.40 +            pinfo = NonProxyInfo.httpNonProxyInfo;
  115.41          } else if ("ftp".equalsIgnoreCase(protocol)) {
  115.42 -            pinfo = ftpNonProxyInfo;
  115.43 +            pinfo = NonProxyInfo.ftpNonProxyInfo;
  115.44          }
  115.45  
  115.46          /**
  115.47 @@ -334,7 +334,6 @@
  115.48          }
  115.49      }
  115.50  
  115.51 -    private static final Pattern p6 = Pattern.compile("::1|(0:){7}1|(0:){1,6}:1");
  115.52      private boolean isLoopback(String host) {
  115.53          if (host == null || host.length() == 0)
  115.54              return false;
  115.55 @@ -364,6 +363,7 @@
  115.56          }
  115.57  
  115.58          if (host.endsWith(":1")) {
  115.59 +            final Pattern p6 = Pattern.compile("::1|(0:){7}1|(0:){1,6}:1");
  115.60              return p6.matcher(host).matches();
  115.61          }
  115.62          return false;
   116.1 --- a/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java	Thu Apr 16 17:42:00 2009 +0100
   116.2 +++ b/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java	Thu Apr 16 19:10:32 2009 -0700
   116.3 @@ -37,6 +37,7 @@
   116.4  import java.util.Collections;
   116.5  import java.util.concurrent.locks.ReadWriteLock;
   116.6  import java.util.concurrent.locks.ReentrantReadWriteLock;
   116.7 +import sun.net.NetHooks;
   116.8  
   116.9  /**
  116.10   * Base implementation of AsynchronousServerSocketChannel.
  116.11 @@ -131,6 +132,7 @@
  116.12              synchronized (stateLock) {
  116.13                  if (localAddress != null)
  116.14                      throw new AlreadyBoundException();
  116.15 +                NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
  116.16                  Net.bind(fd, isa.getAddress(), isa.getPort());
  116.17                  Net.listen(fd, backlog < 1 ? 50 : backlog);
  116.18                  localAddress = Net.localAddress(fd);
   117.1 --- a/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java	Thu Apr 16 17:42:00 2009 +0100
   117.2 +++ b/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java	Thu Apr 16 19:10:32 2009 -0700
   117.3 @@ -38,6 +38,7 @@
   117.4  import java.util.Collections;
   117.5  import java.util.concurrent.*;
   117.6  import java.util.concurrent.locks.*;
   117.7 +import sun.net.NetHooks;
   117.8  
   117.9  /**
  117.10   * Base implementation of AsynchronousSocketChannel
  117.11 @@ -387,6 +388,7 @@
  117.12                      throw new AlreadyBoundException();
  117.13                  InetSocketAddress isa = (local == null) ?
  117.14                      new InetSocketAddress(0) : Net.checkAddress(local);
  117.15 +                NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
  117.16                  Net.bind(fd, isa.getAddress(), isa.getPort());
  117.17                  localAddress = Net.localAddress(fd);
  117.18              }
   118.1 --- a/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Thu Apr 16 17:42:00 2009 +0100
   118.2 +++ b/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Thu Apr 16 19:10:32 2009 -0700
   118.3 @@ -313,11 +313,9 @@
   118.4              throw new NullPointerException();
   118.5          synchronized (readLock) {
   118.6              ensureOpen();
   118.7 -            // If socket is not bound then behave as if nothing received
   118.8 -            // Will be fixed by 6621699
   118.9 -            if (localAddress() == null) {
  118.10 -                return null;
  118.11 -            }
  118.12 +            // Socket was not bound before attempting receive
  118.13 +            if (localAddress() == null)
  118.14 +                bind(null);
  118.15              int n = 0;
  118.16              ByteBuffer bb = null;
  118.17              try {
   119.1 --- a/src/share/classes/sun/nio/ch/FileChannelImpl.java	Thu Apr 16 17:42:00 2009 +0100
   119.2 +++ b/src/share/classes/sun/nio/ch/FileChannelImpl.java	Thu Apr 16 19:10:32 2009 -0700
   119.3 @@ -128,9 +128,10 @@
   119.4              throw new NonReadableChannelException();
   119.5          synchronized (positionLock) {
   119.6              int n = 0;
   119.7 -            int ti = threads.add();
   119.8 +            int ti = -1;
   119.9              try {
  119.10                  begin();
  119.11 +                ti = threads.add();
  119.12                  if (!isOpen())
  119.13                      return 0;
  119.14                  do {
  119.15 @@ -151,9 +152,10 @@
  119.16              throw new NonReadableChannelException();
  119.17          synchronized (positionLock) {
  119.18              long n = 0;
  119.19 -            int ti = threads.add();
  119.20 +            int ti = -1;
  119.21              try {
  119.22                  begin();
  119.23 +                ti = threads.add();
  119.24                  if (!isOpen())
  119.25                      return 0;
  119.26                  do {
  119.27 @@ -183,9 +185,10 @@
  119.28              throw new NonWritableChannelException();
  119.29          synchronized (positionLock) {
  119.30              int n = 0;
  119.31 -            int ti = threads.add();
  119.32 +            int ti = -1;
  119.33              try {
  119.34                  begin();
  119.35 +                ti = threads.add();
  119.36                  if (!isOpen())
  119.37                      return 0;
  119.38                  do {
  119.39 @@ -206,9 +209,10 @@
  119.40              throw new NonWritableChannelException();
  119.41          synchronized (positionLock) {
  119.42              long n = 0;
  119.43 -            int ti = threads.add();
  119.44 +            int ti = -1;
  119.45              try {
  119.46                  begin();
  119.47 +                ti = threads.add();
  119.48                  if (!isOpen())
  119.49                      return 0;
  119.50                  do {
  119.51 @@ -239,9 +243,10 @@
  119.52          ensureOpen();
  119.53          synchronized (positionLock) {
  119.54              long p = -1;
  119.55 -            int ti = threads.add();
  119.56 +            int ti = -1;
  119.57              try {
  119.58                  begin();
  119.59 +                ti = threads.add();
  119.60                  if (!isOpen())
  119.61                      return 0;
  119.62                  do {
  119.63 @@ -262,9 +267,10 @@
  119.64              throw new IllegalArgumentException();
  119.65          synchronized (positionLock) {
  119.66              long p = -1;
  119.67 -            int ti = threads.add();
  119.68 +            int ti = -1;
  119.69              try {
  119.70                  begin();
  119.71 +                ti = threads.add();
  119.72                  if (!isOpen())
  119.73                      return null;
  119.74                  do {
  119.75 @@ -283,9 +289,10 @@
  119.76          ensureOpen();
  119.77          synchronized (positionLock) {
  119.78              long s = -1;
  119.79 -            int ti = threads.add();
  119.80 +            int ti = -1;
  119.81              try {
  119.82                  begin();
  119.83 +                ti = threads.add();
  119.84                  if (!isOpen())
  119.85                      return -1;
  119.86                  do {
  119.87 @@ -311,9 +318,10 @@
  119.88          synchronized (positionLock) {
  119.89              int rv = -1;
  119.90              long p = -1;
  119.91 -            int ti = threads.add();
  119.92 +            int ti = -1;
  119.93              try {
  119.94                  begin();
  119.95 +                ti = threads.add();
  119.96                  if (!isOpen())
  119.97                      return null;
  119.98  
  119.99 @@ -350,9 +358,10 @@
 119.100      public void force(boolean metaData) throws IOException {
 119.101          ensureOpen();
 119.102          int rv = -1;
 119.103 -        int ti = threads.add();
 119.104 +        int ti = -1;
 119.105          try {
 119.106              begin();
 119.107 +            ti = threads.add();
 119.108              if (!isOpen())
 119.109                  return;
 119.110              do {
 119.111 @@ -406,9 +415,10 @@
 119.112              return IOStatus.UNSUPPORTED;
 119.113  
 119.114          long n = -1;
 119.115 -        int ti = threads.add();
 119.116 +        int ti = -1;
 119.117          try {
 119.118              begin();
 119.119 +            ti = threads.add();
 119.120              if (!isOpen())
 119.121                  return -1;
 119.122              do {
 119.123 @@ -612,9 +622,10 @@
 119.124              throw new NonReadableChannelException();
 119.125          ensureOpen();
 119.126          int n = 0;
 119.127 -        int ti = threads.add();
 119.128 +        int ti = -1;
 119.129          try {
 119.130              begin();
 119.131 +            ti = threads.add();
 119.132              if (!isOpen())
 119.133                  return -1;
 119.134              do {
 119.135 @@ -637,9 +648,10 @@
 119.136              throw new NonWritableChannelException();
 119.137          ensureOpen();
 119.138          int n = 0;
 119.139 -        int ti = threads.add();
 119.140 +        int ti = -1;
 119.141          try {
 119.142              begin();
 119.143 +            ti = threads.add();
 119.144              if (!isOpen())
 119.145                  return -1;
 119.146              do {
 119.147 @@ -731,9 +743,10 @@
 119.148              throw new NonReadableChannelException();
 119.149  
 119.150          long addr = -1;
 119.151 -        int ti = threads.add();
 119.152 +        int ti = -1;
 119.153          try {
 119.154              begin();
 119.155 +            ti = threads.add();
 119.156              if (!isOpen())
 119.157                  return null;
 119.158              if (size() < position + size) { // Extend file size
 119.159 @@ -900,9 +913,10 @@
 119.160          FileLockTable flt = fileLockTable();
 119.161          flt.add(fli);
 119.162          boolean i = true;
 119.163 -        int ti = threads.add();
 119.164 +        int ti = -1;
 119.165          try {
 119.166              begin();
 119.167 +            ti = threads.add();
 119.168              if (!isOpen())
 119.169                  return null;
 119.170              int result = nd.lock(fd, true, position, size, shared);
   120.1 --- a/src/share/classes/sun/nio/ch/SelChImpl.java	Thu Apr 16 17:42:00 2009 +0100
   120.2 +++ b/src/share/classes/sun/nio/ch/SelChImpl.java	Thu Apr 16 19:10:32 2009 -0700
   120.3 @@ -25,6 +25,7 @@
   120.4  
   120.5  package sun.nio.ch;
   120.6  
   120.7 +import java.nio.channels.Channel;
   120.8  import java.io.FileDescriptor;
   120.9  import java.io.IOException;
  120.10  
  120.11 @@ -35,7 +36,7 @@
  120.12   * @since 1.4
  120.13   */
  120.14  
  120.15 -interface SelChImpl {
  120.16 +interface SelChImpl extends Channel {
  120.17  
  120.18      FileDescriptor getFD();
  120.19  
   121.1 --- a/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java	Thu Apr 16 17:42:00 2009 +0100
   121.2 +++ b/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java	Thu Apr 16 19:10:32 2009 -0700
   121.3 @@ -31,6 +31,7 @@
   121.4  import java.nio.channels.*;
   121.5  import java.nio.channels.spi.*;
   121.6  import java.util.*;
   121.7 +import sun.net.NetHooks;
   121.8  
   121.9  
  121.10  /**
  121.11 @@ -191,6 +192,7 @@
  121.12              SecurityManager sm = System.getSecurityManager();
  121.13              if (sm != null)
  121.14                  sm.checkListen(isa.getPort());
  121.15 +            NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
  121.16              Net.bind(fd, isa.getAddress(), isa.getPort());
  121.17              Net.listen(fd, backlog < 1 ? 50 : backlog);
  121.18              synchronized (stateLock) {
   122.1 --- a/src/share/classes/sun/nio/ch/SocketChannelImpl.java	Thu Apr 16 17:42:00 2009 +0100
   122.2 +++ b/src/share/classes/sun/nio/ch/SocketChannelImpl.java	Thu Apr 16 19:10:32 2009 -0700
   122.3 @@ -32,6 +32,7 @@
   122.4  import java.nio.channels.*;
   122.5  import java.nio.channels.spi.*;
   122.6  import java.util.*;
   122.7 +import sun.net.NetHooks;
   122.8  
   122.9  
  122.10  /**
  122.11 @@ -526,6 +527,7 @@
  122.12                          throw new AlreadyBoundException();
  122.13                      InetSocketAddress isa = (local == null) ?
  122.14                          new InetSocketAddress(0) : Net.checkAddress(local);
  122.15 +                    NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
  122.16                      Net.bind(fd, isa.getAddress(), isa.getPort());
  122.17                      localAddress = Net.localAddress(fd);
  122.18                  }
  122.19 @@ -577,6 +579,12 @@
  122.20                                  if (!isOpen()) {
  122.21                                      return false;
  122.22                                  }
  122.23 +                                // notify hook only if unbound
  122.24 +                                if (localAddress == null) {
  122.25 +                                    NetHooks.beforeTcpConnect(fd,
  122.26 +                                                           isa.getAddress(),
  122.27 +                                                           isa.getPort());
  122.28 +                                }
  122.29                                  readerThread = NativeThread.current();
  122.30                              }
  122.31                              for (;;) {
   123.1 --- a/src/share/classes/sun/security/jca/ProviderConfig.java	Thu Apr 16 17:42:00 2009 +0100
   123.2 +++ b/src/share/classes/sun/security/jca/ProviderConfig.java	Thu Apr 16 19:10:32 2009 -0700
   123.3 @@ -1,5 +1,5 @@
   123.4  /*
   123.5 - * Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
   123.6 + * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
   123.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   123.8   *
   123.9   * This code is free software; you can redistribute it and/or modify it
  123.10 @@ -60,37 +60,6 @@
  123.11      // use by doLoadProvider()
  123.12      private final static Class[] CL_STRING = { String.class };
  123.13  
  123.14 -    // lock to use while loading a provider. it ensures that each provider
  123.15 -    // is loaded only once and that we can detect recursion.
  123.16 -    // NOTE that because of 4944382 we use the system classloader as lock.
  123.17 -    // By using the same lock to load classes as to load providers we avoid
  123.18 -    // deadlock due to lock ordering. However, this class may be initialized
  123.19 -    // early in the startup when the system classloader has not yet been set
  123.20 -    // up. Use a temporary lock object if that is the case.
  123.21 -    // Any of this may break if the class loading implementation is changed.
  123.22 -    private static volatile Object LOCK = new Object();
  123.23 -
  123.24 -    private static Object getLock() {
  123.25 -        Object o = LOCK;
  123.26 -        // check if lock is already set to the class loader
  123.27 -        if (o instanceof ClassLoader) {
  123.28 -            return o;
  123.29 -        }
  123.30 -        Object cl = AccessController.doPrivileged(
  123.31 -                                new PrivilegedAction<Object>() {
  123.32 -            public Object run() {
  123.33 -                return ClassLoader.getSystemClassLoader();
  123.34 -            }
  123.35 -        });
  123.36 -        // check if class loader initialized now (non-null)
  123.37 -        if (cl != null) {
  123.38 -            LOCK = cl;
  123.39 -            o = cl;
  123.40 -        }
  123.41 -        return o;
  123.42 -    }
  123.43 -
  123.44 -
  123.45      // name of the provider class
  123.46      private final String className;
  123.47  
  123.48 @@ -194,7 +163,7 @@
  123.49      /**
  123.50       * Get the provider object. Loads the provider if it is not already loaded.
  123.51       */
  123.52 -    Provider getProvider() {
  123.53 +    synchronized Provider getProvider() {
  123.54          // volatile variable load
  123.55          Provider p = provider;
  123.56          if (p != null) {
  123.57 @@ -203,30 +172,23 @@
  123.58          if (shouldLoad() == false) {
  123.59              return null;
  123.60          }
  123.61 -        synchronized (getLock()) {
  123.62 -            p = provider;
  123.63 -            if (p != null) {
  123.64 -                // loaded by another thread while we were blocked on lock
  123.65 -                return p;
  123.66 +        if (isLoading) {
  123.67 +            // because this method is synchronized, this can only
  123.68 +            // happen if there is recursion.
  123.69 +            if (debug != null) {
  123.70 +                debug.println("Recursion loading provider: " + this);
  123.71 +                new Exception("Call trace").printStackTrace();
  123.72              }
  123.73 -            if (isLoading) {
  123.74 -                // because this method is synchronized, this can only
  123.75 -                // happen if there is recursion.
  123.76 -                if (debug != null) {
  123.77 -                    debug.println("Recursion loading provider: " + this);
  123.78 -                    new Exception("Call trace").printStackTrace();
  123.79 -                }
  123.80 -                return null;
  123.81 -            }
  123.82 -            try {
  123.83 -                isLoading = true;
  123.84 -                tries++;
  123.85 -                p = doLoadProvider();
  123.86 -            } finally {
  123.87 -                isLoading = false;
  123.88 -            }
  123.89 -            provider = p;
  123.90 +            return null;
  123.91          }
  123.92 +        try {
  123.93 +            isLoading = true;
  123.94 +            tries++;
  123.95 +            p = doLoadProvider();
  123.96 +        } finally {
  123.97 +            isLoading = false;
  123.98 +        }
  123.99 +        provider = p;
 123.100          return p;
 123.101      }
 123.102  
   124.1 --- a/src/share/classes/sun/security/tools/JarSigner.java	Thu Apr 16 17:42:00 2009 +0100
   124.2 +++ b/src/share/classes/sun/security/tools/JarSigner.java	Thu Apr 16 19:10:32 2009 -0700
   124.3 @@ -1,5 +1,5 @@
   124.4  /*
   124.5 - * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
   124.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
   124.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   124.8   *
   124.9   * This code is free software; you can redistribute it and/or modify it
  124.10 @@ -32,28 +32,44 @@
  124.11  import java.math.BigInteger;
  124.12  import java.net.URI;
  124.13  import java.net.URISyntaxException;
  124.14 -import java.net.URL;
  124.15 -import java.net.URLClassLoader;
  124.16 -import java.net.SocketTimeoutException;
  124.17  import java.text.Collator;
  124.18  import java.text.MessageFormat;
  124.19  import java.security.cert.Certificate;
  124.20  import java.security.cert.X509Certificate;
  124.21  import java.security.cert.CertificateException;
  124.22 -import java.security.cert.CertificateExpiredException;
  124.23 -import java.security.cert.CertificateNotYetValidException;
  124.24  import java.security.*;
  124.25  import java.lang.reflect.Constructor;
  124.26  
  124.27  import com.sun.jarsigner.ContentSigner;
  124.28  import com.sun.jarsigner.ContentSignerParameters;
  124.29 +import java.net.SocketTimeoutException;
  124.30 +import java.net.URL;
  124.31 +import java.net.URLClassLoader;
  124.32 +import java.security.cert.CertPath;
  124.33 +import java.security.cert.CertPathValidator;
  124.34 +import java.security.cert.CertificateExpiredException;
  124.35 +import java.security.cert.CertificateFactory;
  124.36 +import java.security.cert.CertificateNotYetValidException;
  124.37 +import java.security.cert.PKIXParameters;
  124.38 +import java.security.cert.TrustAnchor;
  124.39 +import java.util.Map.Entry;
  124.40  import sun.security.x509.*;
  124.41  import sun.security.util.*;
  124.42  import sun.misc.BASE64Encoder;
  124.43  
  124.44 +
  124.45  /**
  124.46   * <p>The jarsigner utility.
  124.47   *
  124.48 + * The exit codes for the main method are:
  124.49 + *
  124.50 + * 0: success
  124.51 + * 1: any error that the jar cannot be signed or verified, including:
  124.52 + *      keystore loading error
  124.53 + *      TSP communciation error
  124.54 + *      jarsigner command line error...
  124.55 + * otherwise: error codes from -strict
  124.56 + *
  124.57   * @author Roland Schemers
  124.58   * @author Jan Luehe
  124.59   */
  124.60 @@ -84,8 +100,6 @@
  124.61  
  124.62      // Attention:
  124.63      // This is the entry that get launched by the security tool jarsigner.
  124.64 -    // It's marked as exported private per AppServer Team's request.
  124.65 -    // See http://ccc.sfbay/6428446
  124.66      public static void main(String args[]) throws Exception {
  124.67          JarSigner js = new JarSigner();
  124.68          js.run(args);
  124.69 @@ -93,31 +107,32 @@
  124.70  
  124.71      static final String VERSION = "1.0";
  124.72  
  124.73 -    static final int IN_KEYSTORE = 0x01;
  124.74 +    static final int IN_KEYSTORE = 0x01;        // signer is in keystore
  124.75      static final int IN_SCOPE = 0x02;
  124.76 +    static final int NOT_ALIAS = 0x04;          // alias list is NOT empty and
  124.77 +                                                // signer is not in alias list
  124.78 +    static final int SIGNED_BY_ALIAS = 0x08;    // signer is in alias list
  124.79  
  124.80 -    // signer's certificate chain (when composing)
  124.81 -    X509Certificate[] certChain;
  124.82 -
  124.83 -    /*
  124.84 -     * private key
  124.85 -     */
  124.86 -    PrivateKey privateKey;
  124.87 -    KeyStore store;
  124.88 +    X509Certificate[] certChain;    // signer's cert chain (when composing)
  124.89 +    PrivateKey privateKey;          // private key
  124.90 +    KeyStore store;                 // the keystore specified by -keystore
  124.91 +                                    // or the default keystore, never null
  124.92  
  124.93      IdentityScope scope;
  124.94  
  124.95      String keystore; // key store file
  124.96      boolean nullStream = false; // null keystore input stream (NONE)
  124.97      boolean token = false; // token-based keystore
  124.98 -    String jarfile;  // jar file to sign
  124.99 +    String jarfile;  // jar file to sign or verify
 124.100      String alias;    // alias to sign jar with
 124.101 +    List<String> ckaliases = new ArrayList<String>(); // aliases in -verify
 124.102      char[] storepass; // keystore password
 124.103      boolean protectedPath; // protected authentication path
 124.104      String storetype; // keystore type
 124.105      String providerName; // provider name
 124.106      Vector<String> providers = null; // list of providers
 124.107 -    HashMap<String,String> providerArgs = new HashMap<String, String>(); // arguments for provider constructors
 124.108 +    // arguments for provider constructors
 124.109 +    HashMap<String,String> providerArgs = new HashMap<String, String>();
 124.110      char[] keypass; // private key password
 124.111      String sigfile; // name of .SF file
 124.112      String sigalg; // name of signature algorithm
 124.113 @@ -125,12 +140,14 @@
 124.114      String signedjar; // output filename
 124.115      String tsaUrl; // location of the Timestamping Authority
 124.116      String tsaAlias; // alias for the Timestamping Authority's certificate
 124.117 +    String altCertChain; // file to read alternative cert chain from
 124.118      boolean verify = false; // verify the jar
 124.119 -    boolean verbose = false; // verbose output when signing/verifying
 124.120 +    String verbose = null; // verbose output when signing/verifying
 124.121      boolean showcerts = false; // show certs when verifying
 124.122      boolean debug = false; // debug
 124.123      boolean signManifest = true; // "sign" the whole manifest
 124.124      boolean externalSF = true; // leave the .SF out of the PKCS7 block
 124.125 +    boolean strict = false;  // treat warnings as error
 124.126  
 124.127      // read zip entry raw bytes
 124.128      private ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
 124.129 @@ -139,14 +156,22 @@
 124.130      private String altSignerClass = null;
 124.131      private String altSignerClasspath = null;
 124.132      private ZipFile zipFile = null;
 124.133 +
 124.134      private boolean hasExpiredCert = false;
 124.135      private boolean hasExpiringCert = false;
 124.136      private boolean notYetValidCert = false;
 124.137 -
 124.138 +    private boolean chainNotValidated = false;
 124.139 +    private boolean notSignedByAlias = false;
 124.140 +    private boolean aliasNotInStore = false;
 124.141 +    private boolean hasUnsignedEntry = false;
 124.142      private boolean badKeyUsage = false;
 124.143      private boolean badExtendedKeyUsage = false;
 124.144      private boolean badNetscapeCertType = false;
 124.145  
 124.146 +    CertificateFactory certificateFactory;
 124.147 +    CertPathValidator validator;
 124.148 +    PKIXParameters pkixParameters;
 124.149 +
 124.150      public void run(String args[]) {
 124.151          try {
 124.152              parseArgs(args);
 124.153 @@ -184,14 +209,6 @@
 124.154                  }
 124.155              }
 124.156  
 124.157 -            hasExpiredCert = false;
 124.158 -            hasExpiringCert = false;
 124.159 -            notYetValidCert = false;
 124.160 -
 124.161 -            badKeyUsage = false;
 124.162 -            badExtendedKeyUsage = false;
 124.163 -            badNetscapeCertType = false;
 124.164 -
 124.165              if (verify) {
 124.166                  try {
 124.167                      loadKeyStore(keystore, false);
 124.168 @@ -238,6 +255,29 @@
 124.169                  storepass = null;
 124.170              }
 124.171          }
 124.172 +
 124.173 +        if (strict) {
 124.174 +            int exitCode = 0;
 124.175 +            if (hasExpiringCert) {
 124.176 +                exitCode |= 2;
 124.177 +            }
 124.178 +            if (chainNotValidated) {
 124.179 +                // hasExpiredCert and notYetValidCert included in this case
 124.180 +                exitCode |= 4;
 124.181 +            }
 124.182 +            if (badKeyUsage || badExtendedKeyUsage || badNetscapeCertType) {
 124.183 +                exitCode |= 8;
 124.184 +            }
 124.185 +            if (hasUnsignedEntry) {
 124.186 +                exitCode |= 16;
 124.187 +            }
 124.188 +            if (notSignedByAlias || aliasNotInStore) {
 124.189 +                exitCode |= 32;
 124.190 +            }
 124.191 +            if (exitCode != 0) {
 124.192 +                System.exit(exitCode);
 124.193 +            }
 124.194 +        }
 124.195      }
 124.196  
 124.197      /*
 124.198 @@ -247,25 +287,26 @@
 124.199          /* parse flags */
 124.200          int n = 0;
 124.201  
 124.202 -        for (n=0; (n < args.length) && args[n].startsWith("-"); n++) {
 124.203 +        if (args.length == 0) fullusage();
 124.204 +        for (n=0; n < args.length; n++) {
 124.205  
 124.206              String flags = args[n];
 124.207  
 124.208              if (collator.compare(flags, "-keystore") == 0) {
 124.209 -                if (++n == args.length) usage();
 124.210 +                if (++n == args.length) usageNoArg();
 124.211                  keystore = args[n];
 124.212              } else if (collator.compare(flags, "-storepass") ==0) {
 124.213 -                if (++n == args.length) usage();
 124.214 +                if (++n == args.length) usageNoArg();
 124.215                  storepass = args[n].toCharArray();
 124.216              } else if (collator.compare(flags, "-storetype") ==0) {
 124.217 -                if (++n == args.length) usage();
 124.218 +                if (++n == args.length) usageNoArg();
 124.219                  storetype = args[n];
 124.220              } else if (collator.compare(flags, "-providerName") ==0) {
 124.221 -                if (++n == args.length) usage();
 124.222 +                if (++n == args.length) usageNoArg();
 124.223                  providerName = args[n];
 124.224              } else if ((collator.compare(flags, "-provider") == 0) ||
 124.225                          (collator.compare(flags, "-providerClass") == 0)) {
 124.226 -                if (++n == args.length) usage();
 124.227 +                if (++n == args.length) usageNoArg();
 124.228                  if (providers == null) {
 124.229                      providers = new Vector<String>(3);
 124.230                  }
 124.231 @@ -274,35 +315,38 @@
 124.232                  if (args.length > (n+1)) {
 124.233                      flags = args[n+1];
 124.234                      if (collator.compare(flags, "-providerArg") == 0) {
 124.235 -                        if (args.length == (n+2)) usage();
 124.236 +                        if (args.length == (n+2)) usageNoArg();
 124.237                          providerArgs.put(args[n], args[n+2]);
 124.238                          n += 2;
 124.239                      }
 124.240                  }
 124.241              } else if (collator.compare(flags, "-protected") ==0) {
 124.242                  protectedPath = true;
 124.243 +            } else if (collator.compare(flags, "-certchain") ==0) {
 124.244 +                if (++n == args.length) usageNoArg();
 124.245 +                altCertChain = args[n];
 124.246              } else if (collator.compare(flags, "-debug") ==0) {
 124.247                  debug = true;
 124.248              } else if (collator.compare(flags, "-keypass") ==0) {
 124.249 -                if (++n == args.length) usage();
 124.250 +                if (++n == args.length) usageNoArg();
 124.251                  keypass = args[n].toCharArray();
 124.252              } else if (collator.compare(flags, "-sigfile") ==0) {
 124.253 -                if (++n == args.length) usage();
 124.254 +                if (++n == args.length) usageNoArg();
 124.255                  sigfile = args[n];
 124.256              } else if (collator.compare(flags, "-signedjar") ==0) {
 124.257 -                if (++n == args.length) usage();
 124.258 +                if (++n == args.length) usageNoArg();
 124.259                  signedjar = args[n];
 124.260              } else if (collator.compare(flags, "-tsa") ==0) {
 124.261 -                if (++n == args.length) usage();
 124.262 +                if (++n == args.length) usageNoArg();
 124.263                  tsaUrl = args[n];
 124.264              } else if (collator.compare(flags, "-tsacert") ==0) {
 124.265 -                if (++n == args.length) usage();
 124.266 +                if (++n == args.length) usageNoArg();
 124.267                  tsaAlias = args[n];
 124.268              } else if (collator.compare(flags, "-altsigner") ==0) {
 124.269 -                if (++n == args.length) usage();
 124.270 +                if (++n == args.length) usageNoArg();
 124.271                  altSignerClass = args[n];
 124.272              } else if (collator.compare(flags, "-altsignerpath") ==0) {
 124.273 -                if (++n == args.length) usage();
 124.274 +                if (++n == args.length) usageNoArg();
 124.275                  altSignerClasspath = args[n];
 124.276              } else if (collator.compare(flags, "-sectionsonly") ==0) {
 124.277                  signManifest = false;
 124.278 @@ -311,30 +355,56 @@
 124.279              } else if (collator.compare(flags, "-verify") ==0) {
 124.280                  verify = true;
 124.281              } else if (collator.compare(flags, "-verbose") ==0) {
 124.282 -                verbose = true;
 124.283 +                verbose = "all";
 124.284 +            } else if (collator.compare(flags, "-verbose:all") ==0) {
 124.285 +                verbose = "all";
 124.286 +            } else if (collator.compare(flags, "-verbose:summary") ==0) {
 124.287 +                verbose = "summary";
 124.288 +            } else if (collator.compare(flags, "-verbose:grouped") ==0) {
 124.289 +                verbose = "grouped";
 124.290              } else if (collator.compare(flags, "-sigalg") ==0) {
 124.291 -                if (++n == args.length) usage();
 124.292 +                if (++n == args.length) usageNoArg();
 124.293                  sigalg = args[n];
 124.294              } else if (collator.compare(flags, "-digestalg") ==0) {
 124.295 -                if (++n == args.length) usage();
 124.296 +                if (++n == args.length) usageNoArg();
 124.297                  digestalg = args[n];
 124.298              } else if (collator.compare(flags, "-certs") ==0) {
 124.299                  showcerts = true;
 124.300 +            } else if (collator.compare(flags, "-strict") ==0) {
 124.301 +                strict = true;
 124.302              } else if (collator.compare(flags, "-h") == 0 ||
 124.303                          collator.compare(flags, "-help") == 0) {
 124.304 -                usage();
 124.305 +                fullusage();
 124.306              } else {
 124.307 -                System.err.println(rb.getString("Illegal option: ") + flags);
 124.308 -                usage();
 124.309 +                if (!flags.startsWith("-")) {
 124.310 +                    if (jarfile == null) {
 124.311 +                        jarfile = flags;
 124.312 +                    } else {
 124.313 +                        alias = flags;
 124.314 +                        ckaliases.add(alias);
 124.315 +                    }
 124.316 +                } else {
 124.317 +                    System.err.println(
 124.318 +                            rb.getString("Illegal option: ") + flags);
 124.319 +                    usage();
 124.320 +                }
 124.321              }
 124.322          }
 124.323  
 124.324 -        if (n == args.length) usage();
 124.325 -        jarfile = args[n++];
 124.326 +        // -certs must always be specified with -verbose
 124.327 +        if (verbose == null) showcerts = false;
 124.328  
 124.329 -        if (!verify) {
 124.330 -            if (n == args.length) usage();
 124.331 -            alias = args[n++];
 124.332 +        if (jarfile == null) {
 124.333 +            System.err.println(rb.getString("Please specify jarfile name"));
 124.334 +            usage();
 124.335 +        }
 124.336 +        if (!verify && alias == null) {
 124.337 +            System.err.println(rb.getString("Please specify alias name"));
 124.338 +            usage();
 124.339 +        }
 124.340 +        if (!verify && ckaliases.size() > 1) {
 124.341 +            System.err.println(rb.getString("Only one alias can be specified"));
 124.342 +            usage();
 124.343          }
 124.344  
 124.345          if (storetype == null) {
 124.346 @@ -357,7 +427,6 @@
 124.347          if (token && !nullStream) {
 124.348              System.err.println(MessageFormat.format(rb.getString
 124.349                  ("-keystore must be NONE if -storetype is {0}"), storetype));
 124.350 -            System.err.println();
 124.351              usage();
 124.352          }
 124.353  
 124.354 @@ -365,7 +434,6 @@
 124.355              System.err.println(MessageFormat.format(rb.getString
 124.356                  ("-keypass can not be specified " +
 124.357                  "if -storetype is {0}"), storetype));
 124.358 -            System.err.println();
 124.359              usage();
 124.360          }
 124.361  
 124.362 @@ -374,7 +442,6 @@
 124.363                  System.err.println(rb.getString
 124.364                          ("If -protected is specified, " +
 124.365                          "then -storepass and -keypass must not be specified"));
 124.366 -                System.err.println();
 124.367                  usage();
 124.368              }
 124.369          }
 124.370 @@ -383,17 +450,27 @@
 124.371                  System.err.println(rb.getString
 124.372                          ("If keystore is not password protected, " +
 124.373                          "then -storepass and -keypass must not be specified"));
 124.374 -                System.err.println();
 124.375                  usage();
 124.376              }
 124.377          }
 124.378      }
 124.379  
 124.380 +    void usageNoArg() {
 124.381 +        System.out.println(rb.getString("Option lacks argument"));
 124.382 +        usage();
 124.383 +    }
 124.384 +
 124.385      void usage() {
 124.386 +        System.out.println();
 124.387 +        System.out.println(rb.getString("Please type jarsigner -help for usage"));
 124.388 +        System.exit(1);
 124.389 +    }
 124.390 +
 124.391 +    void fullusage() {
 124.392          System.out.println(rb.getString
 124.393                  ("Usage: jarsigner [options] jar-file alias"));
 124.394          System.out.println(rb.getString
 124.395 -                ("       jarsigner -verify [options] jar-file"));
 124.396 +                ("       jarsigner -verify [options] jar-file [alias...]"));
 124.397          System.out.println();
 124.398          System.out.println(rb.getString
 124.399                  ("[-keystore <url>]           keystore location"));
 124.400 @@ -408,6 +485,9 @@
 124.401                  ("[-keypass <password>]       password for private key (if different)"));
 124.402          System.out.println();
 124.403          System.out.println(rb.getString
 124.404 +                ("[-certchain <file>]         name of alternative certchain file"));
 124.405 +        System.out.println();
 124.406 +        System.out.println(rb.getString
 124.407                  ("[-sigfile <file>]           name of .SF/.DSA file"));
 124.408          System.out.println();
 124.409          System.out.println(rb.getString
 124.410 @@ -423,7 +503,9 @@
 124.411                  ("[-verify]                   verify a signed JAR file"));
 124.412          System.out.println();
 124.413          System.out.println(rb.getString
 124.414 -                ("[-verbose]                  verbose output when signing/verifying"));
 124.415 +                ("[-verbose[:suboptions]]     verbose output when signing/verifying."));
 124.416 +        System.out.println(rb.getString
 124.417 +                ("                            suboptions can be all, grouped or summary"));
 124.418          System.out.println();
 124.419          System.out.println(rb.getString
 124.420                  ("[-certs]                    display certificates when verbose and verifying"));
 124.421 @@ -457,15 +539,17 @@
 124.422          System.out.println(rb.getString
 124.423                  ("  [-providerArg <arg>]] ... master class file and constructor argument"));
 124.424          System.out.println();
 124.425 +        System.out.println(rb.getString
 124.426 +                ("[-strict]                   treat warnings as errors"));
 124.427 +        System.out.println();
 124.428  
 124.429 -        System.exit(1);
 124.430 +        System.exit(0);
 124.431      }
 124.432  
 124.433      void verifyJar(String jarName)
 124.434          throws Exception
 124.435      {
 124.436 -        boolean anySigned = false;
 124.437 -        boolean hasUnsignedEntry = false;
 124.438 +        boolean anySigned = false;  // if there exists entry inside jar signed
 124.439          JarFile jf = null;
 124.440  
 124.441          try {
 124.442 @@ -494,11 +578,18 @@
 124.443  
 124.444              Manifest man = jf.getManifest();
 124.445  
 124.446 +            // The map to record display info, only used when -verbose provided
 124.447 +            //      key: signer info string
 124.448 +            //      value: the list of files with common key
 124.449 +            Map<String,List<String>> output =
 124.450 +                    new LinkedHashMap<String,List<String>>();
 124.451 +
 124.452              if (man != null) {
 124.453 -                if (verbose) System.out.println();
 124.454 +                if (verbose != null) System.out.println();
 124.455                  Enumeration<JarEntry> e = entriesVec.elements();
 124.456  
 124.457                  long now = System.currentTimeMillis();
 124.458 +                String tab = rb.getString("      ");
 124.459  
 124.460                  while (e.hasMoreElements()) {
 124.461                      JarEntry je = e.nextElement();
 124.462 @@ -509,77 +600,118 @@
 124.463                      hasUnsignedEntry |= !je.isDirectory() && !isSigned
 124.464                                          && !signatureRelated(name);
 124.465  
 124.466 -                    if (verbose) {
 124.467 -                        int inStoreOrScope = inKeyStore(signers);
 124.468 -                        boolean inStore = (inStoreOrScope & IN_KEYSTORE) != 0;
 124.469 -                        boolean inScope = (inStoreOrScope & IN_SCOPE) != 0;
 124.470 +                    int inStoreOrScope = inKeyStore(signers);
 124.471 +
 124.472 +                    boolean inStore = (inStoreOrScope & IN_KEYSTORE) != 0;
 124.473 +                    boolean inScope = (inStoreOrScope & IN_SCOPE) != 0;
 124.474 +
 124.475 +                    notSignedByAlias |= (inStoreOrScope & NOT_ALIAS) != 0;
 124.476 +                    aliasNotInStore |= isSigned && (!inStore && !inScope);
 124.477 +
 124.478 +                    // Only used when -verbose provided
 124.479 +                    StringBuffer sb = null;
 124.480 +                    if (verbose != null) {
 124.481 +                        sb = new StringBuffer();
 124.482                          boolean inManifest =
 124.483                              ((man.getAttributes(name) != null) ||
 124.484                               (man.getAttributes("./"+name) != null) ||
 124.485                               (man.getAttributes("/"+name) != null));
 124.486 -                        System.out.print(
 124.487 +                        sb.append(
 124.488                            (isSigned ? rb.getString("s") : rb.getString(" ")) +
 124.489                            (inManifest ? rb.getString("m") : rb.getString(" ")) +
 124.490                            (inStore ? rb.getString("k") : rb.getString(" ")) +
 124.491                            (inScope ? rb.getString("i") : rb.getString(" ")) +
 124.492 -                          rb.getString("  "));
 124.493 -                        StringBuffer sb = new StringBuffer();
 124.494 -                        String s = Long.toString(je.getSize());
 124.495 -                        for (int i = 6 - s.length(); i > 0; --i) {
 124.496 -                            sb.append(' ');
 124.497 +                          ((inStoreOrScope & NOT_ALIAS) != 0 ?"X":" ") +
 124.498 +                          rb.getString(" "));
 124.499 +                        sb.append("|");
 124.500 +                    }
 124.501 +
 124.502 +                    // When -certs provided, display info has extra empty
 124.503 +                    // lines at the beginning and end.
 124.504 +                    if (isSigned) {
 124.505 +                        if (showcerts) sb.append('\n');
 124.506 +                        for (CodeSigner signer: signers) {
 124.507 +                            // signerInfo() must be called even if -verbose
 124.508 +                            // not provided. The method updates various
 124.509 +                            // warning flags.
 124.510 +                            String si = signerInfo(signer, tab, now);
 124.511 +                            if (showcerts) {
 124.512 +                                sb.append(si);
 124.513 +                                sb.append('\n');
 124.514 +                            }
 124.515                          }
 124.516 -                        sb.append(s).append(' ').
 124.517 -                                    append(new Date(je.getTime()).toString());
 124.518 -                        sb.append(' ').append(je.getName());
 124.519 -                        System.out.println(sb.toString());
 124.520 -
 124.521 -                        if (signers != null && showcerts) {
 124.522 -                            String tab = rb.getString("      ");
 124.523 -                            for (int i = 0; i < signers.length; i++) {
 124.524 -                                System.out.println();
 124.525 -                                List<? extends Certificate> certs =
 124.526 -                                    signers[i].getSignerCertPath()
 124.527 -                                        .getCertificates();
 124.528 -                                // display the signature timestamp, if present
 124.529 -                                Timestamp timestamp = signers[i].getTimestamp();
 124.530 -                                if (timestamp != null) {
 124.531 -                                    System.out.println(
 124.532 -                                        printTimestamp(tab, timestamp));
 124.533 -                                }
 124.534 -                                // display the certificate(s)
 124.535 -                                for (Certificate c : certs) {
 124.536 -                                    System.out.println(
 124.537 -                                        printCert(tab, c, true, now));
 124.538 -                                }
 124.539 -                            }
 124.540 -                            System.out.println();
 124.541 -                        }
 124.542 -
 124.543 -                    }
 124.544 -                    if (isSigned) {
 124.545 -                        for (int i = 0; i < signers.length; i++) {
 124.546 -                            Certificate cert =
 124.547 -                                signers[i].getSignerCertPath()
 124.548 -                                    .getCertificates().get(0);
 124.549 -                            if (cert instanceof X509Certificate) {
 124.550 -                                checkCertUsage((X509Certificate)cert, null);
 124.551 -                                if (!showcerts) {
 124.552 -                                    long notAfter = ((X509Certificate)cert)
 124.553 -                                        .getNotAfter().getTime();
 124.554 -
 124.555 -                                    if (notAfter < now) {
 124.556 -                                        hasExpiredCert = true;
 124.557 -                                    } else if (notAfter < now + SIX_MONTHS) {
 124.558 -                                        hasExpiringCert = true;
 124.559 -                                    }
 124.560 -                                }
 124.561 -                            }
 124.562 +                    } else if (showcerts && !verbose.equals("all")) {
 124.563 +                        // Print no info for unsigned entries when -verbose:all,
 124.564 +                        // to be consistent with old behavior.
 124.565 +                        if (signatureRelated(name)) {
 124.566 +                            sb.append("\n" + tab + rb.getString(
 124.567 +                                    "(Signature related entries)") + "\n\n");
 124.568 +                        } else {
 124.569 +                            sb.append("\n" + tab + rb.getString(
 124.570 +                                    "(Unsigned entries)") + "\n\n");
 124.571                          }
 124.572                      }
 124.573  
 124.574 +                    if (verbose != null) {
 124.575 +                        String label = sb.toString();
 124.576 +                        if (signatureRelated(name)) {
 124.577 +                            // Entries inside META-INF and other unsigned
 124.578 +                            // entries are grouped separately.
 124.579 +                            label = "-" + label.substring(1);
 124.580 +                        }
 124.581 +
 124.582 +                        // The label finally contains 2 parts separated by '|':
 124.583 +                        // The legend displayed before the entry names, and
 124.584 +                        // the cert info (if -certs specfied).
 124.585 +
 124.586 +                        if (!output.containsKey(label)) {
 124.587 +                            output.put(label, new ArrayList<String>());
 124.588 +                        }
 124.589 +
 124.590 +                        StringBuffer fb = new StringBuffer();
 124.591 +                        String s = Long.toString(je.getSize());
 124.592 +                        for (int i = 6 - s.length(); i > 0; --i) {
 124.593 +                            fb.append(' ');
 124.594 +                        }
 124.595 +                        fb.append(s).append(' ').
 124.596 +                                append(new Date(je.getTime()).toString());
 124.597 +                        fb.append(' ').append(name);
 124.598 +
 124.599 +                        output.get(label).add(fb.toString());
 124.600 +                    }
 124.601                  }
 124.602              }
 124.603 -            if (verbose) {
 124.604 +            if (verbose != null) {
 124.605 +                for (Entry<String,List<String>> s: output.entrySet()) {
 124.606 +                    List<String> files = s.getValue();
 124.607 +                    String key = s.getKey();
 124.608 +                    if (key.charAt(0) == '-') { // the signature-related group
 124.609 +                        key = ' ' + key.substring(1);
 124.610 +                    }
 124.611 +                    int pipe = key.indexOf('|');
 124.612 +                    if (verbose.equals("all")) {
 124.613 +                        for (String f: files) {
 124.614 +                            System.out.println(key.substring(0, pipe) + f);
 124.615 +                            System.out.printf(key.substring(pipe+1));
 124.616 +                        }
 124.617 +                    } else {
 124.618 +                        if (verbose.equals("grouped")) {
 124.619 +                            for (String f: files) {
 124.620 +                                System.out.println(key.substring(0, pipe) + f);
 124.621 +                            }
 124.622 +                        } else if (verbose.equals("summary")) {
 124.623 +                            System.out.print(key.substring(0, pipe));
 124.624 +                            if (files.size() > 1) {
 124.625 +                                System.out.println(files.get(0) + " " +
 124.626 +                                        String.format(rb.getString(
 124.627 +                                        "(and %d more)"), files.size()-1));
 124.628 +                            } else {
 124.629 +                                System.out.println(files.get(0));
 124.630 +                            }
 124.631 +                        }
 124.632 +                        System.out.printf(key.substring(pipe+1));
 124.633 +                    }
 124.634 +                }
 124.635                  System.out.println();
 124.636                  System.out.println(rb.getString(
 124.637                      "  s = signature was verified "));
 124.638 @@ -589,9 +721,12 @@
 124.639                      "  k = at least one certificate was found in keystore"));
 124.640                  System.out.println(rb.getString(
 124.641                      "  i = at least one certificate was found in identity scope"));
 124.642 +                if (ckaliases.size() > 0) {
 124.643 +                    System.out.println((
 124.644 +                        "  X = not signed by specified alias(es)"));
 124.645 +                }
 124.646                  System.out.println();
 124.647              }
 124.648 -
 124.649              if (man == null)
 124.650                  System.out.println(rb.getString("no manifest."));
 124.651  
 124.652 @@ -602,7 +737,8 @@
 124.653                  System.out.println(rb.getString("jar verified."));
 124.654                  if (hasUnsignedEntry || hasExpiredCert || hasExpiringCert ||
 124.655                      badKeyUsage || badExtendedKeyUsage || badNetscapeCertType ||
 124.656 -                    notYetValidCert) {
 124.657 +                    notYetValidCert || chainNotValidated ||
 124.658 +                    aliasNotInStore || notSignedByAlias) {
 124.659  
 124.660                      System.out.println();
 124.661                      System.out.println(rb.getString("Warning: "));
 124.662 @@ -638,14 +774,27 @@
 124.663                              "This jar contains entries whose signer certificate is not yet valid. "));
 124.664                      }
 124.665  
 124.666 -                    if (! (verbose && showcerts)) {
 124.667 +                    if (chainNotValidated) {
 124.668 +                        System.out.println(
 124.669 +                                rb.getString("This jar contains entries whose certificate chain is not validated."));
 124.670 +                    }
 124.671 +
 124.672 +                    if (notSignedByAlias) {
 124.673 +                        System.out.println(
 124.674 +                                rb.getString("This jar contains signed entries which is not signed by the specified alias(es)."));
 124.675 +                    }
 124.676 +
 124.677 +                    if (aliasNotInStore) {
 124.678 +                        System.out.println(rb.getString("This jar contains signed entries that's not signed by alias in this keystore."));
 124.679 +                    }
 124.680 +                    if (! (verbose != null && showcerts)) {
 124.681                          System.out.println();
 124.682                          System.out.println(rb.getString(
 124.683                              "Re-run with the -verbose and -certs options for more details."));
 124.684                      }
 124.685                  }
 124.686              }
 124.687 -            System.exit(0);
 124.688 +            return;
 124.689          } catch (Exception e) {
 124.690              System.out.println(rb.getString("jarsigner: ") + e);
 124.691              if (debug) {
 124.692 @@ -660,15 +809,6 @@
 124.693          System.exit(1);
 124.694      }
 124.695  
 124.696 -    /*
 124.697 -     * Display some details about a certificate:
 124.698 -     *
 124.699 -     * <cert-type> [", " <subject-DN>] [" (" <keystore-entry-alias> ")"]
 124.700 -     */
 124.701 -    String printCert(Certificate c) {
 124.702 -        return printCert("", c, false, 0);
 124.703 -    }
 124.704 -
 124.705      private static MessageFormat validityTimeForm = null;
 124.706      private static MessageFormat notYetTimeForm = null;
 124.707      private static MessageFormat expiredTimeForm = null;
 124.708 @@ -679,6 +819,8 @@
 124.709       *
 124.710       * [<tab>] <cert-type> [", " <subject-DN>] [" (" <keystore-entry-alias> ")"]
 124.711       * [<validity-period> | <expiry-warning>]
 124.712 +     *
 124.713 +     * Note: no newline character at the end
 124.714       */
 124.715      String printCert(String tab, Certificate c, boolean checkValidityPeriod,
 124.716          long now) {
 124.717 @@ -788,54 +930,75 @@
 124.718              .append(signTimeForm.format(source)).append("]").toString();
 124.719      }
 124.720  
 124.721 +    private Map<CodeSigner,Integer> cacheForInKS =
 124.722 +            new IdentityHashMap<CodeSigner,Integer>();
 124.723 +
 124.724 +    private int inKeyStoreForOneSigner(CodeSigner signer) {
 124.725 +        if (cacheForInKS.containsKey(signer)) {
 124.726 +            return cacheForInKS.get(signer);
 124.727 +        }
 124.728 +
 124.729 +        boolean found = false;
 124.730 +        int result = 0;
 124.731 +        List<? extends Certificate> certs = signer.getSignerCertPath().getCertificates();
 124.732 +        for (Certificate c : certs) {
 124.733 +            String alias = storeHash.get(c);
 124.734 +            if (alias != null) {
 124.735 +                if (alias.startsWith("(")) {
 124.736 +                    result |= IN_KEYSTORE;
 124.737 +                } else if (alias.startsWith("[")) {
 124.738 +                    result |= IN_SCOPE;
 124.739 +                }
 124.740 +                if (ckaliases.contains(alias.substring(1, alias.length() - 1))) {
 124.741 +                    result |= SIGNED_BY_ALIAS;
 124.742 +                }
 124.743 +            } else {
 124.744 +                if (store != null) {
 124.745 +                    try {
 124.746 +                        alias = store.getCertificateAlias(c);
 124.747 +                    } catch (KeyStoreException kse) {
 124.748 +                        // never happens, because keystore has been loaded
 124.749 +                    }
 124.750 +                    if (alias != null) {
 124.751 +                        storeHash.put(c, "(" + alias + ")");
 124.752 +                        found = true;
 124.753 +                        result |= IN_KEYSTORE;
 124.754 +                    }
 124.755 +                }
 124.756 +                if (!found && (scope != null)) {
 124.757 +                    Identity id = scope.getIdentity(c.getPublicKey());
 124.758 +                    if (id != null) {
 124.759 +                        result |= IN_SCOPE;
 124.760 +                        storeHash.put(c, "[" + id.getName() + "]");
 124.761 +                    }
 124.762 +                }
 124.763 +                if (ckaliases.contains(alias)) {
 124.764 +                    result |= SIGNED_BY_ALIAS;
 124.765 +                }
 124.766 +            }
 124.767 +        }
 124.768 +        cacheForInKS.put(signer, result);
 124.769 +        return result;
 124.770 +    }
 124.771 +
 124.772      Hashtable<Certificate, String> storeHash =
 124.773                                  new Hashtable<Certificate, String>();
 124.774  
 124.775      int inKeyStore(CodeSigner[] signers) {
 124.776 -        int result = 0;
 124.777  
 124.778          if (signers == null)
 124.779              return 0;
 124.780  
 124.781 -        boolean found = false;
 124.782 +        int output = 0;
 124.783  
 124.784 -        for (int i = 0; i < signers.length; i++) {
 124.785 -            found = false;
 124.786 -            List<? extends Certificate> certs =
 124.787 -                signers[i].getSignerCertPath().getCertificates();
 124.788 -
 124.789 -            for (Certificate c : certs) {
 124.790 -                String alias = storeHash.get(c);
 124.791 -
 124.792 -                if (alias != null) {
 124.793 -                    if (alias.startsWith("("))
 124.794 -                            result |= IN_KEYSTORE;
 124.795 -                    else if (alias.startsWith("["))
 124.796 -                            result |= IN_SCOPE;
 124.797 -                } else {
 124.798 -                    if (store != null) {
 124.799 -                        try {
 124.800 -                            alias = store.getCertificateAlias(c);
 124.801 -                        } catch (KeyStoreException kse) {
 124.802 -                            // never happens, because keystore has been loaded
 124.803 -                        }
 124.804 -                        if (alias != null) {
 124.805 -                            storeHash.put(c, "("+alias+")");
 124.806 -                            found = true;
 124.807 -                            result |= IN_KEYSTORE;
 124.808 -                        }
 124.809 -                    }
 124.810 -                    if (!found && (scope != null)) {
 124.811 -                        Identity id = scope.getIdentity(c.getPublicKey());
 124.812 -                        if (id != null) {
 124.813 -                            result |= IN_SCOPE;
 124.814 -                            storeHash.put(c, "["+id.getName()+"]");
 124.815 -                        }
 124.816 -                    }
 124.817 -                }
 124.818 -            }
 124.819 +        for (CodeSigner signer: signers) {
 124.820 +            int result = inKeyStoreForOneSigner(signer);
 124.821 +            output |= result;
 124.822          }
 124.823 -        return result;
 124.824 +        if (ckaliases.size() > 0 && (output & SIGNED_BY_ALIAS) == 0) {
 124.825 +            output |= NOT_ALIAS;
 124.826 +        }
 124.827 +        return output;
 124.828      }
 124.829  
 124.830      void signJar(String jarName, String alias, String[] args)
 124.831 @@ -1025,7 +1188,7 @@
 124.832                  // manifest file has new length
 124.833                  mfFile = new ZipEntry(JarFile.MANIFEST_NAME);
 124.834              }
 124.835 -            if (verbose) {
 124.836 +            if (verbose != null) {
 124.837                  if (mfCreated) {
 124.838                      System.out.println(rb.getString("   adding: ") +
 124.839                                          mfFile.getName());
 124.840 @@ -1076,7 +1239,7 @@
 124.841              // signature file
 124.842              zos.putNextEntry(sfFile);
 124.843              sf.write(zos);
 124.844 -            if (verbose) {
 124.845 +            if (verbose != null) {
 124.846                  if (zipFile.getEntry(sfFilename) != null) {
 124.847                      System.out.println(rb.getString(" updating: ") +
 124.848                                  sfFilename);
 124.849 @@ -1086,7 +1249,7 @@
 124.850                  }
 124.851              }
 124.852  
 124.853 -            if (verbose) {
 124.854 +            if (verbose != null) {
 124.855                  if (tsaUrl != null || tsaCert != null) {
 124.856                      System.out.println(
 124.857                          rb.getString("requesting a signature timestamp"));
 124.858 @@ -1101,8 +1264,8 @@
 124.859                          System.out.println(rb.getString("TSA location: ") +
 124.860                              certUrl);
 124.861                      }
 124.862 -                    System.out.println(
 124.863 -                        rb.getString("TSA certificate: ") + printCert(tsaCert));
 124.864 +                    System.out.println(rb.getString("TSA certificate: ") +
 124.865 +                        printCert("", tsaCert, false, 0));
 124.866                  }
 124.867                  if (signingMechanism != null) {
 124.868                      System.out.println(
 124.869 @@ -1113,7 +1276,7 @@
 124.870              // signature block file
 124.871              zos.putNextEntry(bkFile);
 124.872              block.write(zos);
 124.873 -            if (verbose) {
 124.874 +            if (verbose != null) {
 124.875                  if (zipFile.getEntry(bkFilename) != null) {
 124.876                      System.out.println(rb.getString(" updating: ") +
 124.877                          bkFilename);
 124.878 @@ -1140,7 +1303,7 @@
 124.879                  ZipEntry ze = enum_.nextElement();
 124.880  
 124.881                  if (!ze.getName().startsWith(META_INF)) {
 124.882 -                    if (verbose) {
 124.883 +                    if (verbose != null) {
 124.884                          if (manifest.getAttributes(ze.getName()) != null)
 124.885                            System.out.println(rb.getString("  signing: ") +
 124.886                                  ze.getName());
 124.887 @@ -1194,7 +1357,8 @@
 124.888              }
 124.889  
 124.890              if (hasExpiredCert || hasExpiringCert || notYetValidCert
 124.891 -                    || badKeyUsage || badExtendedKeyUsage || badNetscapeCertType) {
 124.892 +                    || badKeyUsage || badExtendedKeyUsage
 124.893 +                    || badNetscapeCertType || chainNotValidated) {
 124.894                  System.out.println();
 124.895  
 124.896                  System.out.println(rb.getString("Warning: "));
 124.897 @@ -1223,6 +1387,11 @@
 124.898                      System.out.println(
 124.899                          rb.getString("The signer certificate is not yet valid."));
 124.900                  }
 124.901 +
 124.902 +                if (chainNotValidated) {
 124.903 +                    System.out.println(
 124.904 +                            rb.getString("The signer's certificate chain is not validated."));
 124.905 +                }
 124.906              }
 124.907  
 124.908          // no IOException thrown in the above try clause, so disable
 124.909 @@ -1274,6 +1443,40 @@
 124.910          return false;
 124.911      }
 124.912  
 124.913 +    Map<CodeSigner,String> cacheForSignerInfo = new IdentityHashMap<CodeSigner,String>();
 124.914 +
 124.915 +    /**
 124.916 +     * Returns a string of singer info, with a newline at the end
 124.917 +     */
 124.918 +    private String signerInfo(CodeSigner signer, String tab, long now) {
 124.919 +        if (cacheForSignerInfo.containsKey(signer)) {
 124.920 +            return cacheForSignerInfo.get(signer);
 124.921 +        }
 124.922 +        StringBuffer s = new StringBuffer();
 124.923 +        List<? extends Certificate> certs = signer.getSignerCertPath().getCertificates();
 124.924 +        // display the signature timestamp, if present
 124.925 +        Timestamp timestamp = signer.getTimestamp();
 124.926 +        if (timestamp != null) {
 124.927 +            s.append(printTimestamp(tab, timestamp));
 124.928 +        }
 124.929 +        // display the certificate(s)
 124.930 +        for (Certificate c : certs) {
 124.931 +            s.append(printCert(tab, c, true, now));
 124.932 +            s.append('\n');
 124.933 +        }
 124.934 +        try {
 124.935 +            CertPath cp = certificateFactory.generateCertPath(certs);
 124.936 +            validator.validate(cp, pkixParameters);
 124.937 +        } catch (Exception e) {
 124.938 +            chainNotValidated = true;
 124.939 +            s.append(tab + rb.getString("[CertPath not validated: ") +
 124.940 +                    e.getLocalizedMessage() + "]\n");   // TODO
 124.941 +        }
 124.942 +        String result = s.toString();
 124.943 +        cacheForSignerInfo.put(signer, result);
 124.944 +        return result;
 124.945 +    }
 124.946 +
 124.947      private void writeEntry(ZipFile zf, ZipOutputStream os, ZipEntry ze)
 124.948      throws IOException
 124.949      {
 124.950 @@ -1360,6 +1563,48 @@
 124.951                      }
 124.952                  }
 124.953              }
 124.954 +            Set<TrustAnchor> tas = new HashSet<TrustAnchor>();
 124.955 +            try {
 124.956 +                KeyStore caks = KeyTool.getCacertsKeyStore();
 124.957 +                if (caks != null) {
 124.958 +                    Enumeration<String> aliases = caks.aliases();
 124.959 +                    while (aliases.hasMoreElements()) {
 124.960 +                        String a = aliases.nextElement();
 124.961 +                        try {
 124.962 +                            tas.add(new TrustAnchor((X509Certificate)caks.getCertificate(a), null));
 124.963 +                        } catch (Exception e2) {
 124.964 +                            // ignore, when a SecretkeyEntry does not include a cert
 124.965 +                        }
 124.966 +                    }
 124.967 +                }
 124.968 +            } catch (Exception e) {
 124.969 +                // Ignore, if cacerts cannot be loaded
 124.970 +            }
 124.971 +            if (store != null) {
 124.972 +                Enumeration<String> aliases = store.aliases();
 124.973 +                while (aliases.hasMoreElements()) {
 124.974 +                    String a = aliases.nextElement();
 124.975 +                    try {
 124.976 +                        X509Certificate c = (X509Certificate)store.getCertificate(a);
 124.977 +                        // Only add TrustedCertificateEntry and self-signed
 124.978 +                        // PrivateKeyEntry
 124.979 +                        if (store.isCertificateEntry(a) ||
 124.980 +                                c.getSubjectDN().equals(c.getIssuerDN())) {
 124.981 +                            tas.add(new TrustAnchor(c, null));
 124.982 +                        }
 124.983 +                    } catch (Exception e2) {
 124.984 +                        // ignore, when a SecretkeyEntry does not include a cert
 124.985 +                    }
 124.986 +                }
 124.987 +            }
 124.988 +            certificateFactory = CertificateFactory.getInstance("X.509");
 124.989 +            validator = CertPathValidator.getInstance("PKIX");
 124.990 +            try {
 124.991 +                pkixParameters = new PKIXParameters(tas);
 124.992 +                pkixParameters.setRevocationEnabled(false);
 124.993 +            } catch (InvalidAlgorithmParameterException ex) {
 124.994 +                // Only if tas is empty
 124.995 +            }
 124.996          } catch (IOException ioe) {
 124.997              throw new RuntimeException(rb.getString("keystore load: ") +
 124.998                                          ioe.getMessage());
 124.999 @@ -1408,7 +1653,8 @@
124.1000      void checkCertUsage(X509Certificate userCert, boolean[] bad) {
124.1001  
124.1002          // Can act as a signer?
124.1003 -        // 1. if KeyUsage, then [0] should be true
124.1004 +        // 1. if KeyUsage, then [0:digitalSignature] or
124.1005 +        //    [1:nonRepudiation] should be true
124.1006          // 2. if ExtendedKeyUsage, then should contains ANY or CODE_SIGNING
124.1007          // 3. if NetscapeCertType, then should contains OBJECT_SIGNING
124.1008          // 1,2,3 must be true
124.1009 @@ -1419,10 +1665,10 @@
124.1010  
124.1011          boolean[] keyUsage = userCert.getKeyUsage();
124.1012          if (keyUsage != null) {
124.1013 -            if (keyUsage.length < 1 || !keyUsage[0]) {
124.1014 +            keyUsage = Arrays.copyOf(keyUsage, 9);
124.1015 +            if (!keyUsage[0] && !keyUsage[1]) {
124.1016                  if (bad != null) {
124.1017                      bad[0] = true;
124.1018 -                } else {
124.1019                      badKeyUsage = true;
124.1020                  }
124.1021              }
124.1022 @@ -1435,7 +1681,6 @@
124.1023                          && !xKeyUsage.contains("1.3.6.1.5.5.7.3.3")) {  // codeSigning
124.1024                      if (bad != null) {
124.1025                          bad[1] = true;
124.1026 -                    } else {
124.1027                          badExtendedKeyUsage = true;
124.1028                      }
124.1029                  }
124.1030 @@ -1462,7 +1707,6 @@
124.1031                  if (!val) {
124.1032                      if (bad != null) {
124.1033                          bad[2] = true;
124.1034 -                    } else {
124.1035                          badNetscapeCertType = true;
124.1036                      }
124.1037                  }
124.1038 @@ -1477,19 +1721,36 @@
124.1039          Key key = null;
124.1040  
124.1041          try {
124.1042 -
124.1043              java.security.cert.Certificate[] cs = null;
124.1044 -
124.1045 -            try {
124.1046 -                cs = store.getCertificateChain(alias);
124.1047 -            } catch (KeyStoreException kse) {
124.1048 -                // this never happens, because keystore has been loaded
124.1049 +            if (altCertChain != null) {
124.1050 +                try {
124.1051 +                    cs = CertificateFactory.getInstance("X.509").
124.1052 +                            generateCertificates(new FileInputStream(altCertChain)).
124.1053 +                            toArray(new Certificate[0]);
124.1054 +                } catch (CertificateException ex) {
124.1055 +                    error(rb.getString("Cannot restore certchain from file specified"));
124.1056 +                } catch (FileNotFoundException ex) {
124.1057 +                    error(rb.getString("File specified by -certchain does not exist"));
124.1058 +                }
124.1059 +            } else {
124.1060 +                try {
124.1061 +                    cs = store.getCertificateChain(alias);
124.1062 +                } catch (KeyStoreException kse) {
124.1063 +                    // this never happens, because keystore has been loaded
124.1064 +                }
124.1065              }
124.1066 -            if (cs == null) {
124.1067 -                MessageFormat form = new MessageFormat(rb.getString
124.1068 -                    ("Certificate chain not found for: alias.  alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain."));
124.1069 -                Object[] source = {alias, alias};
124.1070 -                error(form.format(source));
124.1071 +            if (cs == null || cs.length == 0) {
124.1072 +                if (altCertChain != null) {
124.1073 +                    error(rb.getString
124.1074 +                            ("Certificate chain not found in the file specified."));
124.1075 +                } else {
124.1076 +                    MessageFormat form = new MessageFormat(rb.getString
124.1077 +                        ("Certificate chain not found for: alias.  alias must" +
124.1078 +                        " reference a valid KeyStore key entry containing a" +
124.1079 +                        " private key and corresponding public key certificate chain."));
124.1080 +                    Object[] source = {alias, alias};
124.1081 +                    error(form.format(source));
124.1082 +                }
124.1083              }
124.1084  
124.1085              certChain = new X509Certificate[cs.length];
124.1086 @@ -1501,56 +1762,15 @@
124.1087                  certChain[i] = (X509Certificate)cs[i];
124.1088              }
124.1089  
124.1090 -            // order the cert chain if necessary (put user cert first,
124.1091 -            // root-cert last in the chain)
124.1092 -            X509Certificate userCert
124.1093 -                = (X509Certificate)store.getCertificate(alias);
124.1094 +            // We don't meant to print anything, the next call
124.1095 +            // checks validity and keyUsage etc
124.1096 +            printCert("", certChain[0], true, 0);
124.1097  
124.1098 -            // check validity of signer certificate
124.1099              try {
124.1100 -                userCert.checkValidity();
124.1101 -
124.1102 -                if (userCert.getNotAfter().getTime() <
124.1103 -                    System.currentTimeMillis() + SIX_MONTHS) {
124.1104 -
124.1105 -                    hasExpiringCert = true;
124.1106 -                }
124.1107 -            } catch (CertificateExpiredException cee) {
124.1108 -                hasExpiredCert = true;
124.1109 -
124.1110 -            } catch (CertificateNotYetValidException cnyve) {
124.1111 -                notYetValidCert = true;
124.1112 -            }
124.1113 -
124.1114 -            checkCertUsage(userCert, null);
124.1115 -
124.1116 -            if (!userCert.equals(certChain[0])) {
124.1117 -                // need to order ...
124.1118 -                X509Certificate[] certChainTmp
124.1119 -                    = new X509Certificate[certChain.length];
124.1120 -                certChainTmp[0] = userCert;
124.1121 -                Principal issuer = userCert.getIssuerDN();
124.1122 -                for (int i=1; i<certChain.length; i++) {
124.1123 -                    int j;
124.1124 -                    // look for the cert whose subject corresponds to the
124.1125 -                    // given issuer
124.1126 -                    for (j=0; j<certChainTmp.length; j++) {
124.1127 -                        if (certChainTmp[j] == null)
124.1128 -                            continue;
124.1129 -                        Principal subject = certChainTmp[j].getSubjectDN();
124.1130 -                        if (issuer.equals(subject)) {
124.1131 -                            certChain[i] = certChainTmp[j];
124.1132 -                            issuer = certChainTmp[j].getIssuerDN();
124.1133 -                            certChainTmp[j] = null;
124.1134 -                            break;
124.1135 -                        }
124.1136 -                    }
124.1137 -                    if (j == certChainTmp.length) {
124.1138 -                        error(rb.getString("incomplete certificate chain"));
124.1139 -                    }
124.1140 -
124.1141 -                }
124.1142 -                certChain = certChainTmp; // ordered
124.1143 +                CertPath cp = certificateFactory.generateCertPath(Arrays.asList(certChain));
124.1144 +                validator.validate(cp, pkixParameters);
124.1145 +            } catch (Exception e) {
124.1146 +                chainNotValidated = true;
124.1147              }
124.1148  
124.1149              try {
   125.1 --- a/src/share/classes/sun/security/tools/JarSignerResources.java	Thu Apr 16 17:42:00 2009 +0100
   125.2 +++ b/src/share/classes/sun/security/tools/JarSignerResources.java	Thu Apr 16 19:10:32 2009 -0700
   125.3 @@ -1,5 +1,5 @@
   125.4  /*
   125.5 - * Copyright 2000-2005 Sun Microsystems, Inc.  All Rights Reserved.
   125.6 + * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
   125.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   125.8   *
   125.9   * This code is free software; you can redistribute it and/or modify it
  125.10 @@ -54,8 +54,8 @@
  125.11                   "If keystore is not password protected, then -storepass and -keypass must not be specified"},
  125.12          {"Usage: jarsigner [options] jar-file alias",
  125.13                  "Usage: jarsigner [options] jar-file alias"},
  125.14 -        {"       jarsigner -verify [options] jar-file",
  125.15 -                "       jarsigner -verify [options] jar-file"},
  125.16 +        {"       jarsigner -verify [options] jar-file [alias...]",
  125.17 +                "       jarsigner -verify [options] jar-file [alias...]"},
  125.18          {"[-keystore <url>]           keystore location",
  125.19                  "[-keystore <url>]           keystore location"},
  125.20          {"[-storepass <password>]     password for keystore integrity",
  125.21 @@ -64,6 +64,8 @@
  125.22                  "[-storetype <type>]         keystore type"},
  125.23          {"[-keypass <password>]       password for private key (if different)",
  125.24                  "[-keypass <password>]       password for private key (if different)"},
  125.25 +        {"[-certchain <file>]         name of alternative certchain file",
  125.26 +                "[-certchain <file>]         name of alternative certchain file"},
  125.27          {"[-sigfile <file>]           name of .SF/.DSA file",
  125.28                  "[-sigfile <file>]           name of .SF/.DSA file"},
  125.29          {"[-signedjar <file>]         name of signed JAR file",
  125.30 @@ -74,8 +76,10 @@
  125.31                  "[-sigalg <algorithm>]       name of signature algorithm"},
  125.32          {"[-verify]                   verify a signed JAR file",
  125.33                  "[-verify]                   verify a signed JAR file"},
  125.34 -        {"[-verbose]                  verbose output when signing/verifying",
  125.35 -                "[-verbose]                  verbose output when signing/verifying"},
  125.36 +        {"[-verbose[:suboptions]]     verbose output when signing/verifying.",
  125.37 +                "[-verbose[:suboptions]]     verbose output when signing/verifying."},
  125.38 +        {"                            suboptions can be all, grouped or summary",
  125.39 +                "                            suboptions can be all, grouped or summary"},
  125.40          {"[-certs]                    display certificates when verbose and verifying",
  125.41                  "[-certs]                    display certificates when verbose and verifying"},
  125.42          {"[-tsa <url>]                location of the Timestamping Authority",
  125.43 @@ -98,10 +102,22 @@
  125.44                  "[-providerClass <class>     name of cryptographic service provider's"},
  125.45          {"  [-providerArg <arg>]] ... master class file and constructor argument",
  125.46                  "  [-providerArg <arg>]] ... master class file and constructor argument"},
  125.47 +        {"[-strict]                   treat warnings as errors",
  125.48 +                "[-strict]                   treat warnings as errors"},
  125.49 +        {"Option lacks argument", "Option lacks argument"},
  125.50 +        {"Please type jarsigner -help for usage", "Please type jarsigner -help for usage"},
  125.51 +        {"Please specify jarfile name", "Please specify jarfile name"},
  125.52 +        {"Please specify alias name", "Please specify alias name"},
  125.53 +        {"Only one alias can be specified", "Only one alias can be specified"},
  125.54 +        {"This jar contains signed entries which is not signed by the specified alias(es).",
  125.55 +                 "This jar contains signed entries which is not signed by the specified alias(es)."},
  125.56 +        {"This jar contains signed entries that's not signed by alias in this keystore.",
  125.57 +                  "This jar contains signed entries that's not signed by alias in this keystore."},
  125.58          {"s", "s"},
  125.59          {"m", "m"},
  125.60          {"k", "k"},
  125.61          {"i", "i"},
  125.62 +        {"(and %d more)", "(and %d more)"},
  125.63          {"  s = signature was verified ",
  125.64                  "  s = signature was verified "},
  125.65          {"  m = entry is listed in manifest",
  125.66 @@ -110,7 +126,11 @@
  125.67                  "  k = at least one certificate was found in keystore"},
  125.68          {"  i = at least one certificate was found in identity scope",
  125.69                  "  i = at least one certificate was found in identity scope"},
  125.70 +        {"  X = not signed by specified alias(es)",
  125.71 +                "  X = not signed by specified alias(es)"},
  125.72          {"no manifest.", "no manifest."},
  125.73 +        {"(Signature related entries)","(Signature related entries)"},
  125.74 +        {"(Unsigned entries)", "(Unsigned entries)"},
  125.75          {"jar is unsigned. (signatures missing or not parsable)",
  125.76                  "jar is unsigned. (signatures missing or not parsable)"},
  125.77          {"jar verified.", "jar verified."},
  125.78 @@ -134,6 +154,12 @@
  125.79                  "unable to instantiate keystore class: "},
  125.80          {"Certificate chain not found for: alias.  alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.",
  125.81                  "Certificate chain not found for: {0}.  {1} must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain."},
  125.82 +        {"File specified by -certchain does not exist",
  125.83 +                "File specified by -certchain does not exist"},
  125.84 +        {"Cannot restore certchain from file specified",
  125.85 +                "Cannot restore certchain from file specified"},
  125.86 +        {"Certificate chain not found in the file specified.",
  125.87 +                "Certificate chain not found in the file specified."},
  125.88          {"found non-X.509 certificate in signer's chain",
  125.89                  "found non-X.509 certificate in signer's chain"},
  125.90          {"incomplete certificate chain", "incomplete certificate chain"},
  125.91 @@ -149,6 +175,7 @@
  125.92          {"certificate is not valid until",
  125.93                  "certificate is not valid until {0}"},
  125.94          {"certificate will expire on", "certificate will expire on {0}"},
  125.95 +        {"[CertPath not validated: ", "[CertPath not validated: "},
  125.96          {"requesting a signature timestamp",
  125.97                  "requesting a signature timestamp"},
  125.98          {"TSA location: ", "TSA location: "},
  125.99 @@ -189,14 +216,18 @@
 125.100                   "The signer certificate's ExtendedKeyUsage extension doesn't allow code signing."},
 125.101          {"The signer certificate's NetscapeCertType extension doesn't allow code signing.",
 125.102                   "The signer certificate's NetscapeCertType extension doesn't allow code signing."},
 125.103 -         {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.",
 125.104 -                  "This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing."},
 125.105 -         {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.",
 125.106 -                  "This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing."},
 125.107 -         {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.",
 125.108 -                  "This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing."},
 125.109 +        {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.",
 125.110 +                 "This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing."},
 125.111 +        {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.",
 125.112 +                 "This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing."},
 125.113 +        {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.",
 125.114 +                 "This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing."},
 125.115          {"[{0} extension does not support code signing]",
 125.116                   "[{0} extension does not support code signing]"},
 125.117 +        {"The signer's certificate chain is not validated.",
 125.118 +                "The signer's certificate chain is not validated."},
 125.119 +        {"This jar contains entries whose certificate chain is not validated.",
 125.120 +                 "This jar contains entries whose certificate chain is not validated."},
 125.121      };
 125.122  
 125.123      /**
   126.1 --- a/src/share/classes/sun/security/tools/KeyTool.java	Thu Apr 16 17:42:00 2009 +0100
   126.2 +++ b/src/share/classes/sun/security/tools/KeyTool.java	Thu Apr 16 19:10:32 2009 -0700
   126.3 @@ -2545,7 +2545,19 @@
   126.4       * Returns true if the certificate is self-signed, false otherwise.
   126.5       */
   126.6      private boolean isSelfSigned(X509Certificate cert) {
   126.7 -        return cert.getSubjectDN().equals(cert.getIssuerDN());
   126.8 +        return signedBy(cert, cert);
   126.9 +    }
  126.10 +
  126.11 +    private boolean signedBy(X509Certificate end, X509Certificate ca) {
  126.12 +        if (!ca.getSubjectDN().equals(end.getIssuerDN())) {
  126.13 +            return false;
  126.14 +        }
  126.15 +        try {
  126.16 +            end.verify(ca.getPublicKey());
  126.17 +            return true;
  126.18 +        } catch (Exception e) {
  126.19 +            return false;
  126.20 +        }
  126.21      }
  126.22  
  126.23      /**
  126.24 @@ -2869,20 +2881,18 @@
  126.25          Certificate tmpCert = replyCerts[0];
  126.26          replyCerts[0] = replyCerts[i];
  126.27          replyCerts[i] = tmpCert;
  126.28 -        Principal issuer = ((X509Certificate)replyCerts[0]).getIssuerDN();
  126.29 +
  126.30 +        X509Certificate thisCert = (X509Certificate)replyCerts[0];
  126.31  
  126.32          for (i=1; i < replyCerts.length-1; i++) {
  126.33 -            // find a cert in the reply whose "subject" is the same as the
  126.34 -            // given "issuer"
  126.35 +            // find a cert in the reply who signs thisCert
  126.36              int j;
  126.37              for (j=i; j<replyCerts.length; j++) {
  126.38 -                Principal subject;
  126.39 -                subject = ((X509Certificate)replyCerts[j]).getSubjectDN();
  126.40 -                if (subject.equals(issuer)) {
  126.41 +                if (signedBy(thisCert, (X509Certificate)replyCerts[j])) {
  126.42                      tmpCert = replyCerts[i];
  126.43                      replyCerts[i] = replyCerts[j];
  126.44                      replyCerts[j] = tmpCert;
  126.45 -                    issuer = ((X509Certificate)replyCerts[i]).getIssuerDN();
  126.46 +                    thisCert = (X509Certificate)replyCerts[i];
  126.47                      break;
  126.48                  }
  126.49              }
  126.50 @@ -2892,18 +2902,6 @@
  126.51              }
  126.52          }
  126.53  
  126.54 -        // now verify each cert in the ordered chain
  126.55 -        for (i=0; i<replyCerts.length-1; i++) {
  126.56 -            PublicKey pubKey = replyCerts[i+1].getPublicKey();
  126.57 -            try {
  126.58 -                replyCerts[i].verify(pubKey);
  126.59 -            } catch (Exception e) {
  126.60 -                throw new Exception(rb.getString
  126.61 -                        ("Certificate chain in reply does not verify: ") +
  126.62 -                        e.getMessage());
  126.63 -            }
  126.64 -        }
  126.65 -
  126.66          if (noprompt) {
  126.67              return replyCerts;
  126.68          }
  126.69 @@ -3035,9 +3033,8 @@
  126.70      private boolean buildChain(X509Certificate certToVerify,
  126.71                          Vector<Certificate> chain,
  126.72                          Hashtable<Principal, Vector<Certificate>> certs) {
  126.73 -        Principal subject = certToVerify.getSubjectDN();
  126.74          Principal issuer = certToVerify.getIssuerDN();
  126.75 -        if (subject.equals(issuer)) {
  126.76 +        if (isSelfSigned(certToVerify)) {
  126.77              // reached self-signed root cert;
  126.78              // no verification needed because it's trusted.
  126.79              chain.addElement(certToVerify);
  126.80 @@ -3108,7 +3105,7 @@
  126.81      /**
  126.82       * Returns the keystore with the configured CA certificates.
  126.83       */
  126.84 -    private KeyStore getCacertsKeyStore()
  126.85 +    public static KeyStore getCacertsKeyStore()
  126.86          throws Exception
  126.87      {
  126.88          String sep = File.separator;
   127.1 --- a/src/share/classes/sun/security/util/ManifestEntryVerifier.java	Thu Apr 16 17:42:00 2009 +0100
   127.2 +++ b/src/share/classes/sun/security/util/ManifestEntryVerifier.java	Thu Apr 16 19:10:32 2009 -0700
   127.3 @@ -44,8 +44,6 @@
   127.4  
   127.5      private static final Debug debug = Debug.getInstance("jar");
   127.6  
   127.7 -    private static final Provider digestProvider = Providers.getSunProvider();
   127.8 -
   127.9      /** the created digest objects */
  127.10      HashMap<String, MessageDigest> createdDigests;
  127.11  
  127.12 @@ -127,7 +125,7 @@
  127.13                      try {
  127.14  
  127.15                          digest = MessageDigest.getInstance
  127.16 -                                        (algorithm, digestProvider);
  127.17 +                                        (algorithm, Providers.getSunProvider());
  127.18                          createdDigests.put(algorithm, digest);
  127.19                      } catch (NoSuchAlgorithmException nsae) {
  127.20                          // ignore
   128.1 --- a/src/share/classes/sun/swing/FilePane.java	Thu Apr 16 17:42:00 2009 +0100
   128.2 +++ b/src/share/classes/sun/swing/FilePane.java	Thu Apr 16 19:10:32 2009 -0700
   128.3 @@ -34,6 +34,7 @@
   128.4  import java.text.MessageFormat;
   128.5  import java.util.*;
   128.6  import java.util.List;
   128.7 +import java.util.concurrent.Callable;
   128.8  
   128.9  import javax.swing.*;
  128.10  import javax.swing.border.*;
  128.11 @@ -900,6 +901,16 @@
  128.12              }
  128.13          }
  128.14  
  128.15 +        @Override
  128.16 +        public void sort() {
  128.17 +            ShellFolder.getInvoker().invoke(new Callable<Void>() {
  128.18 +                public Void call() throws Exception {
  128.19 +                    DetailsTableRowSorter.super.sort();
  128.20 +                    return null;
  128.21 +                }
  128.22 +            });
  128.23 +        }
  128.24 +
  128.25          public void modelStructureChanged() {
  128.26              super.modelStructureChanged();
  128.27              updateComparators(detailsTableModel.getColumns());
   129.1 --- a/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java	Thu Apr 16 17:42:00 2009 +0100
   129.2 +++ b/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java	Thu Apr 16 19:10:32 2009 -0700
   129.3 @@ -29,6 +29,8 @@
   129.4  import java.beans.*;
   129.5  import java.io.*;
   129.6  import java.util.*;
   129.7 +import java.security.AccessController;
   129.8 +import java.security.PrivilegedAction;
   129.9  
  129.10  import javax.swing.*;
  129.11  import javax.swing.event.*;
  129.12 @@ -749,7 +751,11 @@
  129.13  
  129.14              File[] baseFolders;
  129.15              if (useShellFolder) {
  129.16 -                baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");
  129.17 +                baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
  129.18 +                    public File[] run() {
  129.19 +                        return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
  129.20 +                    }
  129.21 +                });
  129.22              } else {
  129.23                  baseFolders = fsv.getRoots();
  129.24              }
   130.1 --- a/src/share/classes/sun/text/normalizer/CharTrie.java	Thu Apr 16 17:42:00 2009 +0100
   130.2 +++ b/src/share/classes/sun/text/normalizer/CharTrie.java	Thu Apr 16 19:10:32 2009 -0700
   130.3 @@ -1,5 +1,5 @@
   130.4  /*
   130.5 - * Portions Copyright 2003-2005 Sun Microsystems, Inc.  All Rights Reserved.
   130.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   130.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   130.8   *
   130.9   * This code is free software; you can redistribute it and/or modify it
  130.10 @@ -22,10 +22,9 @@
  130.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  130.12   * have any questions.
  130.13   */
  130.14 -
  130.15  /*
  130.16   *******************************************************************************
  130.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  130.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  130.19   *                                                                             *
  130.20   * The original version of this source code and documentation is copyrighted   *
  130.21   * and owned by IBM, These materials are provided under terms of a License     *
  130.22 @@ -78,6 +77,66 @@
  130.23      }
  130.24  
  130.25      /**
  130.26 +     * Make a dummy CharTrie.
  130.27 +     * A dummy trie is an empty runtime trie, used when a real data trie cannot
  130.28 +     * be loaded.
  130.29 +     *
  130.30 +     * The trie always returns the initialValue,
  130.31 +     * or the leadUnitValue for lead surrogate code points.
  130.32 +     * The Latin-1 part is always set up to be linear.
  130.33 +     *
  130.34 +     * @param initialValue the initial value that is set for all code points
  130.35 +     * @param leadUnitValue the value for lead surrogate code _units_ that do not
  130.36 +     *                      have associated supplementary data
  130.37 +     * @param dataManipulate object which provides methods to parse the char data
  130.38 +     */
  130.39 +    public CharTrie(int initialValue, int leadUnitValue, DataManipulate dataManipulate) {
  130.40 +        super(new char[BMP_INDEX_LENGTH+SURROGATE_BLOCK_COUNT], HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_, dataManipulate);
  130.41 +
  130.42 +        int dataLength, latin1Length, i, limit;
  130.43 +        char block;
  130.44 +
  130.45 +        /* calculate the actual size of the dummy trie data */
  130.46 +
  130.47 +        /* max(Latin-1, block 0) */
  130.48 +        dataLength=latin1Length= INDEX_STAGE_1_SHIFT_<=8 ? 256 : DATA_BLOCK_LENGTH;
  130.49 +        if(leadUnitValue!=initialValue) {
  130.50 +            dataLength+=DATA_BLOCK_LENGTH;
  130.51 +        }
  130.52 +        m_data_=new char[dataLength];
  130.53 +        m_dataLength_=dataLength;
  130.54 +
  130.55 +        m_initialValue_=(char)initialValue;
  130.56 +
  130.57 +        /* fill the index and data arrays */
  130.58 +
  130.59 +        /* indexes are preset to 0 (block 0) */
  130.60 +
  130.61 +        /* Latin-1 data */
  130.62 +        for(i=0; i<latin1Length; ++i) {
  130.63 +            m_data_[i]=(char)initialValue;
  130.64 +        }
  130.65 +
  130.66 +        if(leadUnitValue!=initialValue) {
  130.67 +            /* indexes for lead surrogate code units to the block after Latin-1 */
  130.68 +            block=(char)(latin1Length>>INDEX_STAGE_2_SHIFT_);
  130.69 +            i=0xd800>>INDEX_STAGE_1_SHIFT_;
  130.70 +            limit=0xdc00>>INDEX_STAGE_1_SHIFT_;
  130.71 +            for(; i<limit; ++i) {
  130.72 +                m_index_[i]=block;
  130.73 +            }
  130.74 +
  130.75 +            /* data for lead surrogate code units */
  130.76 +            limit=latin1Length+DATA_BLOCK_LENGTH;
  130.77 +            for(i=latin1Length; i<limit; ++i) {
  130.78 +                m_data_[i]=(char)leadUnitValue;
  130.79 +            }
  130.80 +        }
  130.81 +
  130.82 +        m_friendAgent_ = new FriendAgent();
  130.83 +    }
  130.84 +
  130.85 +    /**
  130.86       * Java friend implementation
  130.87       */
  130.88      public class FriendAgent
  130.89 @@ -130,7 +189,18 @@
  130.90      */
  130.91      public final char getCodePointValue(int ch)
  130.92      {
  130.93 -        int offset = getCodePointOffset(ch);
  130.94 +        int offset;
  130.95 +
  130.96 +        // fastpath for U+0000..U+D7FF
  130.97 +        if(0 <= ch && ch < UTF16.LEAD_SURROGATE_MIN_VALUE) {
  130.98 +            // copy of getRawOffset()
  130.99 +            offset = (m_index_[ch >> INDEX_STAGE_1_SHIFT_] << INDEX_STAGE_2_SHIFT_)
 130.100 +                    + (ch & INDEX_STAGE_3_MASK_);
 130.101 +            return m_data_[offset];
 130.102 +        }
 130.103 +
 130.104 +        // handle U+D800..U+10FFFF
 130.105 +        offset = getCodePointOffset(ch);
 130.106  
 130.107          // return -1 if there is an error, in this case we return the default
 130.108          // value: m_initialValue_
   131.1 --- a/src/share/classes/sun/text/normalizer/NormalizerBase.java	Thu Apr 16 17:42:00 2009 +0100
   131.2 +++ b/src/share/classes/sun/text/normalizer/NormalizerBase.java	Thu Apr 16 19:10:32 2009 -0700
   131.3 @@ -1,5 +1,5 @@
   131.4  /*
   131.5 - * Portions Copyright 2001-2006 Sun Microsystems, Inc.  All Rights Reserved.
   131.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   131.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   131.8   *
   131.9   * This code is free software; you can redistribute it and/or modify it
  131.10 @@ -22,10 +22,9 @@
  131.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  131.12   * have any questions.
  131.13   */
  131.14 -
  131.15  /*
  131.16   *******************************************************************************
  131.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  131.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  131.19   *                                                                             *
  131.20   * The original version of this source code and documentation is copyrighted   *
  131.21   * and owned by IBM, These materials are provided under terms of a License     *
  131.22 @@ -127,7 +126,7 @@
  131.23   * normalize(FCD) may be implemented with NFD.
  131.24   *
  131.25   * For more details on FCD see the collation design document:
  131.26 - * http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm
  131.27 + * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
  131.28   *
  131.29   * ICU collation performs either NFD or FCD normalization automatically if
  131.30   * normalization is turned on for the collator object. Beyond collation and
   132.1 --- a/src/share/classes/sun/text/normalizer/NormalizerDataReader.java	Thu Apr 16 17:42:00 2009 +0100
   132.2 +++ b/src/share/classes/sun/text/normalizer/NormalizerDataReader.java	Thu Apr 16 19:10:32 2009 -0700
   132.3 @@ -1,5 +1,5 @@
   132.4  /*
   132.5 - * Portions Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
   132.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   132.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   132.8   *
   132.9   * This code is free software; you can redistribute it and/or modify it
  132.10 @@ -22,10 +22,9 @@
  132.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  132.12   * have any questions.
  132.13   */
  132.14 -
  132.15  /*
  132.16   *******************************************************************************
  132.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  132.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  132.19   *                                                                             *
  132.20   * The original version of this source code and documentation is copyrighted   *
  132.21   * and owned by IBM, These materials are provided under terms of a License     *
  132.22 @@ -331,7 +330,7 @@
  132.23                          throws IOException{
  132.24  
  132.25           //Read the bytes that make up the normTrie
  132.26 -         dataInputStream.read(normBytes);
  132.27 +         dataInputStream.readFully(normBytes);
  132.28  
  132.29           //normTrieStream= new ByteArrayInputStream(normBytes);
  132.30  
  132.31 @@ -346,11 +345,11 @@
  132.32           }
  132.33  
  132.34           //Read the fcdTrie
  132.35 -         dataInputStream.read(fcdBytes);
  132.36 +         dataInputStream.readFully(fcdBytes);
  132.37  
  132.38  
  132.39           //Read the AuxTrie
  132.40 -        dataInputStream.read(auxBytes);
  132.41 +        dataInputStream.readFully(auxBytes);
  132.42      }
  132.43  
  132.44      public byte[] getDataFormatVersion(){
   133.1 --- a/src/share/classes/sun/text/normalizer/NormalizerImpl.java	Thu Apr 16 17:42:00 2009 +0100
   133.2 +++ b/src/share/classes/sun/text/normalizer/NormalizerImpl.java	Thu Apr 16 19:10:32 2009 -0700
   133.3 @@ -1,5 +1,5 @@
   133.4  /*
   133.5 - * Portions Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
   133.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   133.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   133.8   *
   133.9   * This code is free software; you can redistribute it and/or modify it
  133.10 @@ -22,10 +22,9 @@
  133.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  133.12   * have any questions.
  133.13   */
  133.14 -
  133.15  /*
  133.16   *******************************************************************************
  133.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  133.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  133.19   *                                                                             *
  133.20   * The original version of this source code and documentation is copyrighted   *
  133.21   * and owned by IBM, These materials are provided under terms of a License     *
  133.22 @@ -102,7 +101,7 @@
  133.23      private static final long  MIN_SPECIAL    =  (long)(0xfc000000 & UNSIGNED_INT_MASK);
  133.24      private static final long  SURROGATES_TOP =  (long)(0xfff00000 & UNSIGNED_INT_MASK);
  133.25      private static final long  MIN_HANGUL     =  (long)(0xfff00000 & UNSIGNED_INT_MASK);
  133.26 -    private static final long  MIN_JAMO_V     =  (long)(0xfff20000 & UNSIGNED_INT_MASK);
  133.27 +//  private static final long  MIN_JAMO_V     =  (long)(0xfff20000 & UNSIGNED_INT_MASK);
  133.28      private static final long  JAMO_V_TOP     =  (long)(0xfff30000 & UNSIGNED_INT_MASK);
  133.29  
  133.30  
  133.31 @@ -908,7 +907,7 @@
  133.32                      buffer = composePart(args,prevStarter,src,srcStart,srcLimit,options,nx);
  133.33  
  133.34                      // compare the normalized version with the original
  133.35 -                    if(0!=strCompare(buffer,0,args.length,src,prevStarter,(srcStart-prevStarter), false)) {
  133.36 +                    if(0!=strCompare(buffer,0,args.length,src,prevStarter,srcStart, false)) {
  133.37                          result=NormalizerBase.NO; // normalization differs
  133.38                          break;
  133.39                      }
  133.40 @@ -2291,7 +2290,7 @@
  133.41      private static final int OPTIONS_NX_MASK=0x1f;
  133.42      private static final int OPTIONS_UNICODE_MASK=0xe0;
  133.43      public  static final int OPTIONS_SETS_MASK=0xff;
  133.44 -    private static final int OPTIONS_UNICODE_SHIFT=5;
  133.45 +//  private static final int OPTIONS_UNICODE_SHIFT=5;
  133.46      private static final UnicodeSet[] nxCache = new UnicodeSet[OPTIONS_SETS_MASK+1];
  133.47  
  133.48      /* Constants for options flags for normalization.*/
   134.1 --- a/src/share/classes/sun/text/normalizer/Trie.java	Thu Apr 16 17:42:00 2009 +0100
   134.2 +++ b/src/share/classes/sun/text/normalizer/Trie.java	Thu Apr 16 19:10:32 2009 -0700
   134.3 @@ -1,5 +1,5 @@
   134.4  /*
   134.5 - * Portions Copyright 2003-2005 Sun Microsystems, Inc.  All Rights Reserved.
   134.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   134.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   134.8   *
   134.9   * This code is free software; you can redistribute it and/or modify it
  134.10 @@ -22,10 +22,9 @@
  134.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  134.12   * have any questions.
  134.13   */
  134.14 -
  134.15  /*
  134.16   *******************************************************************************
  134.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  134.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  134.19   *                                                                             *
  134.20   * The original version of this source code and documentation is copyrighted   *
  134.21   * and owned by IBM, These materials are provided under terms of a License     *
  134.22 @@ -37,10 +36,9 @@
  134.23  
  134.24  package sun.text.normalizer;
  134.25  
  134.26 +import java.io.DataInputStream;
  134.27  import java.io.InputStream;
  134.28 -import java.io.DataInputStream;
  134.29  import java.io.IOException;
  134.30 -import java.util.Arrays;
  134.31  
  134.32  /**
  134.33   * <p>A trie is a kind of compressed, serializable table of values
  134.34 @@ -81,7 +79,6 @@
  134.35      * This interface specifies methods to be implemented in order for
  134.36      * com.ibm.impl.Trie, to surrogate offset information encapsulated within
  134.37      * the data.
  134.38 -    * @draft 2.1
  134.39      */
  134.40      public static interface DataManipulate
  134.41      {
  134.42 @@ -92,11 +89,17 @@
  134.43          * @param value data value for a surrogate from the trie, including the
  134.44          *        folding offset
  134.45          * @return data offset or 0 if there is no data for the lead surrogate
  134.46 -        * @draft 2.1
  134.47          */
  134.48          public int getFoldingOffset(int value);
  134.49      }
  134.50  
  134.51 +    // default implementation
  134.52 +    private static class DefaultGetFoldingOffset implements DataManipulate {
  134.53 +        public int getFoldingOffset(int value) {
  134.54 +            return value;
  134.55 +        }
  134.56 +    }
  134.57 +
  134.58      // protected constructor -------------------------------------------
  134.59  
  134.60      /**
  134.61 @@ -107,7 +110,6 @@
  134.62      *                       trie data
  134.63      * @throws IOException thrown when input stream does not have the
  134.64      *                        right header.
  134.65 -    * @draft 2.1
  134.66      */
  134.67      protected Trie(InputStream inputStream,
  134.68                     DataManipulate  dataManipulate) throws IOException
  134.69 @@ -121,7 +123,11 @@
  134.70              throw new IllegalArgumentException("ICU data file error: Trie header authentication failed, please check if you have the most updated ICU data file");
  134.71          }
  134.72  
  134.73 -        m_dataManipulate_ = dataManipulate;
  134.74 +        if(dataManipulate != null) {
  134.75 +            m_dataManipulate_ = dataManipulate;
  134.76 +        } else {
  134.77 +            m_dataManipulate_ = new DefaultGetFoldingOffset();
  134.78 +        }
  134.79          m_isLatin1Linear_ = (m_options_ &
  134.80                               HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_) != 0;
  134.81          m_dataOffset_     = input.readInt();
  134.82 @@ -135,19 +141,21 @@
  134.83      * @param options used by the trie
  134.84      * @param dataManipulate object containing the information to parse the
  134.85      *                       trie data
  134.86 -    * @draft 2.2
  134.87      */
  134.88      protected Trie(char index[], int options, DataManipulate dataManipulate)
  134.89      {
  134.90          m_options_ = options;
  134.91 -        m_dataManipulate_ = dataManipulate;
  134.92 +        if(dataManipulate != null) {
  134.93 +            m_dataManipulate_ = dataManipulate;
  134.94 +        } else {
  134.95 +            m_dataManipulate_ = new DefaultGetFoldingOffset();
  134.96 +        }
  134.97          m_isLatin1Linear_ = (m_options_ &
  134.98                               HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_) != 0;
  134.99          m_index_ = index;
 134.100          m_dataOffset_ = m_index_.length;
 134.101      }
 134.102  
 134.103 -
 134.104      // protected data members ------------------------------------------
 134.105  
 134.106      /**
 134.107 @@ -158,7 +166,6 @@
 134.108      protected static final int LEAD_INDEX_OFFSET_ = 0x2800 >> 5;
 134.109      /**
 134.110      * Shift size for shifting right the input index. 1..9
 134.111 -    * @draft 2.1
 134.112      */
 134.113      protected static final int INDEX_STAGE_1_SHIFT_ = 5;
 134.114      /**
 134.115 @@ -168,31 +175,39 @@
 134.116      * This requires blocks of stage 2 data to be aligned by
 134.117      * DATA_GRANULARITY.
 134.118      * 0..INDEX_STAGE_1_SHIFT
 134.119 -    * @draft 2.1
 134.120      */
 134.121      protected static final int INDEX_STAGE_2_SHIFT_ = 2;
 134.122      /**
 134.123 +     * Number of data values in a stage 2 (data array) block.
 134.124 +     */
 134.125 +    protected static final int DATA_BLOCK_LENGTH=1<<INDEX_STAGE_1_SHIFT_;
 134.126 +    /**
 134.127      * Mask for getting the lower bits from the input index.
 134.128 -    * DATA_BLOCK_LENGTH_ - 1.
 134.129 -    * @draft 2.1
 134.130 +    * DATA_BLOCK_LENGTH - 1.
 134.131      */
 134.132 -    protected static final int INDEX_STAGE_3_MASK_ =
 134.133 -                                              (1 << INDEX_STAGE_1_SHIFT_) - 1;
 134.134 +    protected static final int INDEX_STAGE_3_MASK_ = DATA_BLOCK_LENGTH - 1;
 134.135 +    /** Number of bits of a trail surrogate that are used in index table lookups. */
 134.136 +    protected static final int SURROGATE_BLOCK_BITS=10-INDEX_STAGE_1_SHIFT_;
 134.137 +    /**
 134.138 +     * Number of index (stage 1) entries per lead surrogate.
 134.139 +     * Same as number of index entries for 1024 trail surrogates,
 134.140 +     * ==0x400>>INDEX_STAGE_1_SHIFT_
 134.141 +     */
 134.142 +    protected static final int SURROGATE_BLOCK_COUNT=(1<<SURROGATE_BLOCK_BITS);
 134.143 +    /** Length of the BMP portion of the index (stage 1) array. */
 134.144 +    protected static final int BMP_INDEX_LENGTH=0x10000>>INDEX_STAGE_1_SHIFT_;
 134.145      /**
 134.146      * Surrogate mask to use when shifting offset to retrieve supplementary
 134.147      * values
 134.148 -    * @draft 2.1
 134.149      */
 134.150      protected static final int SURROGATE_MASK_ = 0x3FF;
 134.151      /**
 134.152      * Index or UTF16 characters
 134.153 -    * @draft 2.1
 134.154      */
 134.155      protected char m_index_[];
 134.156      /**
 134.157      * Internal TrieValue which handles the parsing of the data value.
 134.158      * This class is to be implemented by the user
 134.159 -    * @draft 2.1
 134.160      */
 134.161      protected DataManipulate m_dataManipulate_;
 134.162      /**
 134.163 @@ -200,7 +215,6 @@
 134.164      * index and data into a char array, so this is used to indicate the
 134.165      * initial offset to the data portion.
 134.166      * Note this index always points to the initial value.
 134.167 -    * @draft 2.1
 134.168      */
 134.169      protected int m_dataOffset_;
 134.170      /**
 134.171 @@ -215,7 +229,6 @@
 134.172      * @param lead lead surrogate
 134.173      * @param trail trailing surrogate
 134.174      * @return offset to data
 134.175 -    * @draft 2.1
 134.176      */
 134.177      protected abstract int getSurrogateOffset(char lead, char trail);
 134.178  
 134.179 @@ -223,14 +236,12 @@
 134.180      * Gets the value at the argument index
 134.181      * @param index value at index will be retrieved
 134.182      * @return 32 bit value
 134.183 -    * @draft 2.1
 134.184      */
 134.185      protected abstract int getValue(int index);
 134.186  
 134.187      /**
 134.188      * Gets the default initial value
 134.189      * @return 32 bit value
 134.190 -    * @draft 2.1
 134.191      */
 134.192      protected abstract int getInitialValue();
 134.193  
 134.194 @@ -247,7 +258,6 @@
 134.195      * @param offset index offset which ch is to start from
 134.196      * @param ch index to be used after offset
 134.197      * @return offset to the data
 134.198 -    * @draft 2.1
 134.199      */
 134.200      protected final int getRawOffset(int offset, char ch)
 134.201      {
 134.202 @@ -261,7 +271,6 @@
 134.203      * Treats a lead surrogate as a normal code point.
 134.204      * @param ch BMP character
 134.205      * @return offset to data
 134.206 -    * @draft 2.1
 134.207      */
 134.208      protected final int getBMPOffset(char ch)
 134.209      {
 134.210 @@ -279,7 +288,6 @@
 134.211      * the next trailing surrogate character.
 134.212      * @param ch lead surrogate character
 134.213      * @return offset to data
 134.214 -    * @draft 2.1
 134.215      */
 134.216      protected final int getLeadOffset(char ch)
 134.217      {
 134.218 @@ -293,26 +301,27 @@
 134.219      * Gets the offset to data which the codepoint points to
 134.220      * @param ch codepoint
 134.221      * @return offset to data
 134.222 -    * @draft 2.1
 134.223      */
 134.224      protected final int getCodePointOffset(int ch)
 134.225      {
 134.226          // if ((ch >> 16) == 0) slower
 134.227 -        if (ch >= UTF16.CODEPOINT_MIN_VALUE
 134.228 -            && ch < UTF16.SUPPLEMENTARY_MIN_VALUE) {
 134.229 +        if (ch < 0) {
 134.230 +            return -1;
 134.231 +        } else if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE) {
 134.232 +            // fastpath for the part of the BMP below surrogates (D800) where getRawOffset() works
 134.233 +            return getRawOffset(0, (char)ch);
 134.234 +        } else if (ch < UTF16.SUPPLEMENTARY_MIN_VALUE) {
 134.235              // BMP codepoint
 134.236              return getBMPOffset((char)ch);
 134.237 -        }
 134.238 -        // for optimization
 134.239 -        if (ch >= UTF16.CODEPOINT_MIN_VALUE
 134.240 -            && ch <= UCharacter.MAX_VALUE) {
 134.241 +        } else if (ch <= UCharacter.MAX_VALUE) {
 134.242              // look at the construction of supplementary characters
 134.243              // trail forms the ends of it.
 134.244              return getSurrogateOffset(UTF16.getLeadSurrogate(ch),
 134.245                                        (char)(ch & SURROGATE_MASK_));
 134.246 +        } else {
 134.247 +            // return -1 // if there is an error, in this case we return
 134.248 +            return -1;
 134.249          }
 134.250 -        // return -1 if there is an error, in this case we return
 134.251 -        return -1;
 134.252      }
 134.253  
 134.254      /**
 134.255 @@ -320,7 +329,6 @@
 134.256      * <p>This is overwritten by the child classes.
 134.257      * @param inputStream input stream containing the trie information
 134.258      * @exception IOException thrown when data reading fails.
 134.259 -    * @draft 2.1
 134.260      */
 134.261      protected void unserialize(InputStream inputStream) throws IOException
 134.262      {
 134.263 @@ -335,7 +343,6 @@
 134.264      /**
 134.265      * Determines if this is a 32 bit trie
 134.266      * @return true if options specifies this is a 32 bit trie
 134.267 -    * @draft 2.1
 134.268      */
 134.269      protected final boolean isIntTrie()
 134.270      {
 134.271 @@ -345,7 +352,6 @@
 134.272      /**
 134.273      * Determines if this is a 16 bit trie
 134.274      * @return true if this is a 16 bit trie
 134.275 -    * @draft 2.1
 134.276      */
 134.277      protected final boolean isCharTrie()
 134.278      {
 134.279 @@ -355,39 +361,19 @@
 134.280      // private data members --------------------------------------------
 134.281  
 134.282      /**
 134.283 -    * Signature index
 134.284 -    */
 134.285 -    private static final int HEADER_SIGNATURE_INDEX_ = 0;
 134.286 -    /**
 134.287 -    * Options index
 134.288 -    */
 134.289 -    private static final int HEADER_OPTIONS_INDEX_ = 1 << 1;
 134.290 -    /**
 134.291 -    * Index length index
 134.292 -    */
 134.293 -    private static final int HEADER_INDEX_LENGTH_INDEX_ = 2 << 1;
 134.294 -    /**
 134.295 -    * Data length index
 134.296 -    */
 134.297 -    private static final int HEADER_DATA_LENGTH_INDEX_ = 3 << 1;
 134.298 -    /**
 134.299 -    * Size of header
 134.300 -    */
 134.301 -    private static final int HEADER_LENGTH_ = 4 << 1;
 134.302 -    /**
 134.303      * Latin 1 option mask
 134.304      */
 134.305 -    private static final int HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_ = 0x200;
 134.306 +    protected static final int HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_ = 0x200;
 134.307      /**
 134.308      * Constant number to authenticate the byte block
 134.309      */
 134.310 -    private static final int HEADER_SIGNATURE_ = 0x54726965;
 134.311 +    protected static final int HEADER_SIGNATURE_ = 0x54726965;
 134.312      /**
 134.313      * Header option formatting
 134.314      */
 134.315      private static final int HEADER_OPTIONS_SHIFT_MASK_ = 0xF;
 134.316 -    private static final int HEADER_OPTIONS_INDEX_SHIFT_ = 4;
 134.317 -    private static final int HEADER_OPTIONS_DATA_IS_32_BIT_ = 0x100;
 134.318 +    protected static final int HEADER_OPTIONS_INDEX_SHIFT_ = 4;
 134.319 +    protected static final int HEADER_OPTIONS_DATA_IS_32_BIT_ = 0x100;
 134.320  
 134.321      /**
 134.322      * Flag indicator for Latin quick access data block
 134.323 @@ -409,9 +395,8 @@
 134.324      /**
 134.325      * Authenticates raw data header.
 134.326      * Checking the header information, signature and options.
 134.327 -    * @param rawdata array of char data to be checked
 134.328 +    * @param signature This contains the options and type of a Trie
 134.329      * @return true if the header is authenticated valid
 134.330 -    * @draft 2.1
 134.331      */
 134.332      private final boolean checkHeader(int signature)
 134.333      {
   135.1 --- a/src/share/classes/sun/text/normalizer/TrieIterator.java	Thu Apr 16 17:42:00 2009 +0100
   135.2 +++ b/src/share/classes/sun/text/normalizer/TrieIterator.java	Thu Apr 16 19:10:32 2009 -0700
   135.3 @@ -1,5 +1,5 @@
   135.4  /*
   135.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
   135.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   135.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   135.8   *
   135.9   * This code is free software; you can redistribute it and/or modify it
  135.10 @@ -22,10 +22,9 @@
  135.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  135.12   * have any questions.
  135.13   */
  135.14 -
  135.15  /*
  135.16   *******************************************************************************
  135.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  135.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  135.19   *                                                                             *
  135.20   * The original version of this source code and documentation is copyrighted   *
  135.21   * and owned by IBM, These materials are provided under terms of a License     *
  135.22 @@ -108,15 +107,14 @@
  135.23   * @since release 2.1, Jan 17 2002
  135.24   */
  135.25  public class TrieIterator implements RangeValueIterator
  135.26 +{
  135.27  
  135.28 -{
  135.29      // public constructor ---------------------------------------------
  135.30  
  135.31      /**
  135.32      * TrieEnumeration constructor
  135.33      * @param trie to be used
  135.34      * @exception IllegalArgumentException throw when argument is null.
  135.35 -    * @draft 2.1
  135.36      */
  135.37      public TrieIterator(Trie trie)
  135.38      {
  135.39 @@ -141,7 +139,6 @@
  135.40      * @return true if we are not at the end of the iteration, false otherwise.
  135.41      * @exception NoSuchElementException - if no more elements exist.
  135.42      * @see com.ibm.icu.util.RangeValueIterator.Element
  135.43 -    * @draft 2.1
  135.44      */
  135.45      public final boolean next(Element element)
  135.46      {
  135.47 @@ -158,7 +155,6 @@
  135.48  
  135.49      /**
  135.50      * Resets the iterator to the beginning of the iteration
  135.51 -    * @draft 2.1
  135.52      */
  135.53      public final void reset()
  135.54      {
  135.55 @@ -186,7 +182,6 @@
  135.56      * The default function is to return the value as it is.
  135.57      * @param value a value from the trie
  135.58      * @return extracted value
  135.59 -    * @draft 2.1
  135.60      */
  135.61      protected int extract(int value)
  135.62      {
  135.63 @@ -278,7 +273,6 @@
  135.64      * Note, if there are no more iterations, it will never get to here.
  135.65      * Blocked out by next().
  135.66      * @param element return result object
  135.67 -    * @draft 2.1
  135.68      */
  135.69      private final void calculateNextSupplementaryElement(Element element)
  135.70      {
  135.71 @@ -516,10 +510,6 @@
  135.72      */
  135.73      private static final int TRAIL_SURROGATE_MIN_VALUE_ = 0xDC00;
  135.74      /**
  135.75 -    * Trail surrogate maximum value
  135.76 -    */
  135.77 -    private static final int TRAIL_SURROGATE_MAX_VALUE_ = 0xDFFF;
  135.78 -    /**
  135.79      * Number of trail surrogate
  135.80      */
  135.81      private static final int TRAIL_SURROGATE_COUNT_ = 0x400;
  135.82 @@ -538,11 +528,6 @@
  135.83      private static final int DATA_BLOCK_LENGTH_ =
  135.84                                                1 << Trie.INDEX_STAGE_1_SHIFT_;
  135.85      /**
  135.86 -    * Number of codepoints in a stage 2 block
  135.87 -    */
  135.88 -    private static final int DATA_BLOCK_SUPPLEMENTARY_LENGTH_ =
  135.89 -                                                     DATA_BLOCK_LENGTH_ << 10;
  135.90 -    /**
  135.91      * Trie instance
  135.92      */
  135.93      private Trie m_trie_;
  135.94 @@ -560,10 +545,4 @@
  135.95      private int m_nextBlock_;
  135.96      private int m_nextBlockIndex_;
  135.97      private int m_nextTrailIndexOffset_;
  135.98 -    /**
  135.99 -    * This is the return result element
 135.100 -    */
 135.101 -    private int m_start_;
 135.102 -    private int m_limit_;
 135.103 -    private int m_value_;
 135.104  }
   136.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   136.2 +++ b/src/share/classes/sun/text/normalizer/UBiDiProps.java	Thu Apr 16 19:10:32 2009 -0700
   136.3 @@ -0,0 +1,179 @@
   136.4 +/*
   136.5 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   136.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   136.7 + *
   136.8 + * This code is free software; you can redistribute it and/or modify it
   136.9 + * under the terms of the GNU General Public License version 2 only, as
  136.10 + * published by the Free Software Foundation.  Sun designates this
  136.11 + * particular file as subject to the "Classpath" exception as provided
  136.12 + * by Sun in the LICENSE file that accompanied this code.
  136.13 + *
  136.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  136.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  136.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  136.17 + * version 2 for more details (a copy is included in the LICENSE file that
  136.18 + * accompanied this code).
  136.19 + *
  136.20 + * You should have received a copy of the GNU General Public License version
  136.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  136.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  136.23 + *
  136.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  136.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  136.26 + * have any questions.
  136.27 + */
  136.28 +/*
  136.29 + *******************************************************************************
  136.30 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  136.31 + *                                                                             *
  136.32 + * The original version of this source code and documentation is copyrighted   *
  136.33 + * and owned by IBM, These materials are provided under terms of a License     *
  136.34 + * Agreement between IBM and Sun. This technology is protected by multiple     *
  136.35 + * US and International patents. This notice and attribution to IBM may not    *
  136.36 + * to removed.                                                                 *
  136.37 + *******************************************************************************
  136.38 +*   file name:  UBiDiProps.java
  136.39 +*   encoding:   US-ASCII
  136.40 +*   tab size:   8 (not used)
  136.41 +*   indentation:4
  136.42 +*
  136.43 +*   created on: 2005jan16
  136.44 +*   created by: Markus W. Scherer
  136.45 +*
  136.46 +*   Low-level Unicode bidi/shaping properties access.
  136.47 +*   Java port of ubidi_props.h/.c.
  136.48 +*/
  136.49 +
  136.50 +package sun.text.normalizer;
  136.51 +
  136.52 +import java.io.BufferedInputStream;
  136.53 +import java.io.DataInputStream;
  136.54 +import java.io.InputStream;
  136.55 +import java.io.IOException;
  136.56 +
  136.57 +public final class UBiDiProps {
  136.58 +    // constructors etc. --------------------------------------------------- ***
  136.59 +
  136.60 +    // port of ubidi_openProps()
  136.61 +    public UBiDiProps() throws IOException{
  136.62 +        InputStream is=ICUData.getStream(DATA_FILE_NAME);
  136.63 +        BufferedInputStream b=new BufferedInputStream(is, 4096 /* data buffer size */);
  136.64 +        readData(b);
  136.65 +        b.close();
  136.66 +        is.close();
  136.67 +
  136.68 +    }
  136.69 +
  136.70 +    private void readData(InputStream is) throws IOException {
  136.71 +        DataInputStream inputStream=new DataInputStream(is);
  136.72 +
  136.73 +        // read the header
  136.74 +        ICUBinary.readHeader(inputStream, FMT, new IsAcceptable());
  136.75 +
  136.76 +        // read indexes[]
  136.77 +        int i, count;
  136.78 +        count=inputStream.readInt();
  136.79 +        if(count<IX_INDEX_TOP) {
  136.80 +            throw new IOException("indexes[0] too small in "+DATA_FILE_NAME);
  136.81 +        }
  136.82 +        indexes=new int[count];
  136.83 +
  136.84 +        indexes[0]=count;
  136.85 +        for(i=1; i<count; ++i) {
  136.86 +            indexes[i]=inputStream.readInt();
  136.87 +        }
  136.88 +
  136.89 +        // read the trie
  136.90 +        trie=new CharTrie(inputStream, null);
  136.91 +
  136.92 +        // read mirrors[]
  136.93 +        count=indexes[IX_MIRROR_LENGTH];
  136.94 +        if(count>0) {
  136.95 +            mirrors=new int[count];
  136.96 +            for(i=0; i<count; ++i) {
  136.97 +                mirrors[i]=inputStream.readInt();
  136.98 +            }
  136.99 +        }
 136.100 +
 136.101 +        // read jgArray[]
 136.102 +        count=indexes[IX_JG_LIMIT]-indexes[IX_JG_START];
 136.103 +        jgArray=new byte[count];
 136.104 +        for(i=0; i<count; ++i) {
 136.105 +            jgArray[i]=inputStream.readByte();
 136.106 +        }
 136.107 +    }
 136.108 +
 136.109 +    // implement ICUBinary.Authenticate
 136.110 +    private final class IsAcceptable implements ICUBinary.Authenticate {
 136.111 +        public boolean isDataVersionAcceptable(byte version[]) {
 136.112 +            return version[0]==1 &&
 136.113 +                   version[2]==Trie.INDEX_STAGE_1_SHIFT_ && version[3]==Trie.INDEX_STAGE_2_SHIFT_;
 136.114 +        }
 136.115 +    }
 136.116 +
 136.117 +    // UBiDiProps singleton
 136.118 +    private static UBiDiProps gBdp=null;
 136.119 +
 136.120 +    // port of ubidi_getSingleton()
 136.121 +    public static final synchronized UBiDiProps getSingleton() throws IOException {
 136.122 +        if(gBdp==null) {
 136.123 +            gBdp=new UBiDiProps();
 136.124 +        }
 136.125 +        return gBdp;
 136.126 +    }
 136.127 +
 136.128 +    // UBiDiProps dummy singleton
 136.129 +    private static UBiDiProps gBdpDummy=null;
 136.130 +
 136.131 +    private UBiDiProps(boolean makeDummy) { // ignore makeDummy, only creates a unique signature
 136.132 +        indexes=new int[IX_TOP];
 136.133 +        indexes[0]=IX_TOP;
 136.134 +        trie=new CharTrie(0, 0, null); // dummy trie, always returns 0
 136.135 +    }
 136.136 +
 136.137 +    /**
 136.138 +     * Get a singleton dummy object, one that works with no real data.
 136.139 +     * This can be used when the real data is not available.
 136.140 +     * Using the dummy can reduce checks for available data after an initial failure.
 136.141 +     * Port of ucase_getDummy().
 136.142 +     */
 136.143 +    public static final synchronized UBiDiProps getDummy() {
 136.144 +        if(gBdpDummy==null) {
 136.145 +            gBdpDummy=new UBiDiProps(true);
 136.146 +        }
 136.147 +        return gBdpDummy;
 136.148 +    }
 136.149 +
 136.150 +    public final int getClass(int c) {
 136.151 +        return getClassFromProps(trie.getCodePointValue(c));
 136.152 +    }
 136.153 +
 136.154 +    // data members -------------------------------------------------------- ***
 136.155 +    private int indexes[];
 136.156 +    private int mirrors[];
 136.157 +    private byte jgArray[];
 136.158 +
 136.159 +    private CharTrie trie;
 136.160 +
 136.161 +    // data format constants ----------------------------------------------- ***
 136.162 +    private static final String DATA_FILE_NAME = "/sun/text/resources/ubidi.icu";
 136.163 +
 136.164 +    /* format "BiDi" */
 136.165 +    private static final byte FMT[]={ 0x42, 0x69, 0x44, 0x69 };
 136.166 +
 136.167 +    /* indexes into indexes[] */
 136.168 +    private static final int IX_INDEX_TOP=0;
 136.169 +    private static final int IX_MIRROR_LENGTH=3;
 136.170 +
 136.171 +    private static final int IX_JG_START=4;
 136.172 +    private static final int IX_JG_LIMIT=5;
 136.173 +
 136.174 +    private static final int IX_TOP=16;
 136.175 +
 136.176 +    private static final int CLASS_MASK=    0x0000001f;
 136.177 +
 136.178 +    private static final int getClassFromProps(int props) {
 136.179 +        return props&CLASS_MASK;
 136.180 +    }
 136.181 +
 136.182 +}
   137.1 --- a/src/share/classes/sun/text/normalizer/UCharacter.java	Thu Apr 16 17:42:00 2009 +0100
   137.2 +++ b/src/share/classes/sun/text/normalizer/UCharacter.java	Thu Apr 16 19:10:32 2009 -0700
   137.3 @@ -1,5 +1,5 @@
   137.4  /*
   137.5 - * Portions Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
   137.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   137.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   137.8   *
   137.9   * This code is free software; you can redistribute it and/or modify it
  137.10 @@ -24,7 +24,7 @@
  137.11   */
  137.12  /*
  137.13   *******************************************************************************
  137.14 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  137.15 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  137.16   *                                                                             *
  137.17   * The original version of this source code and documentation is copyrighted   *
  137.18   * and owned by IBM, These materials are provided under terms of a License     *
  137.19 @@ -36,19 +36,18 @@
  137.20  
  137.21  package sun.text.normalizer;
  137.22  
  137.23 -import java.lang.ref.SoftReference;
  137.24 -import java.util.HashMap;
  137.25 -import java.util.Locale;
  137.26 -import java.util.Map;
  137.27 +import java.io.IOException;
  137.28 +import java.util.MissingResourceException;
  137.29  
  137.30  /**
  137.31   * <p>
  137.32   * The UCharacter class provides extensions to the
  137.33 - * <a href=http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.html>
  137.34 + * <a href="http://java.sun.com/j2se/1.5/docs/api/java/lang/Character.html">
  137.35   * java.lang.Character</a> class. These extensions provide support for
  137.36 - * Unicode 3.2 properties and together with the <a href=../text/UTF16.html>UTF16</a>
  137.37 + * more Unicode properties and together with the <a href=../text/UTF16.html>UTF16</a>
  137.38   * class, provide support for supplementary characters (those with code
  137.39   * points above U+FFFF).
  137.40 + * Each ICU release supports the latest version of Unicode available at that time.
  137.41   * </p>
  137.42   * <p>
  137.43   * Code points are represented in these API using ints. While it would be
  137.44 @@ -67,7 +66,7 @@
  137.45   * <i>$ICU4J_CLASS/com.ibm.icu.impl.data</i>.
  137.46   * </p>
  137.47   * <p>
  137.48 - * Aside from the additions for UTF-16 support, and the updated Unicode 3.1
  137.49 + * Aside from the additions for UTF-16 support, and the updated Unicode
  137.50   * properties, the main differences between UCharacter and Character are:
  137.51   * <ul>
  137.52   * <li> UCharacter is not designed to be a char wrapper and does not have
  137.53 @@ -77,7 +76,7 @@
  137.54   *        <li> char charValue(),
  137.55   *        <li> int compareTo(java.lang.Character, java.lang.Character), etc.
  137.56   *      </ul>
  137.57 - * <li> UCharacter does not include Character APIs that are deprecated, not
  137.58 + * <li> UCharacter does not include Character APIs that are deprecated, nor
  137.59   *      does it include the Java-specific character information, such as
  137.60   *      boolean isJavaIdentifierPart(char ch).
  137.61   * <li> Character maps characters 'A' - 'Z' and 'a' - 'z' to the numeric
  137.62 @@ -89,10 +88,75 @@
  137.63   * </ul>
  137.64   * <p>
  137.65   * Further detail differences can be determined from the program
  137.66 - *        <a href = http://oss.software.ibm.com/developerworks/opensource/cvs/icu4j/~checkout~/icu4j/src/com/ibm/icu/dev/test/lang/UCharacterCompare.java>
  137.67 + *        <a href="http://source.icu-project.org/repos/icu/icu4j/trunk/src/com/ibm/icu/dev/test/lang/UCharacterCompare.java">
  137.68   *        com.ibm.icu.dev.test.lang.UCharacterCompare</a>
  137.69   * </p>
  137.70   * <p>
  137.71 + * In addition to Java compatibility functions, which calculate derived properties,
  137.72 + * this API provides low-level access to the Unicode Character Database.
  137.73 + * </p>
  137.74 + * <p>
  137.75 + * Unicode assigns each code point (not just assigned character) values for
  137.76 + * many properties.
  137.77 + * Most of them are simple boolean flags, or constants from a small enumerated list.
  137.78 + * For some properties, values are strings or other relatively more complex types.
  137.79 + * </p>
  137.80 + * <p>
  137.81 + * For more information see
  137.82 + * "About the Unicode Character Database" (http://www.unicode.org/ucd/)
  137.83 + * and the ICU User Guide chapter on Properties (http://www.icu-project.org/userguide/properties.html).
  137.84 + * </p>
  137.85 + * <p>
  137.86 + * There are also functions that provide easy migration from C/POSIX functions
  137.87 + * like isblank(). Their use is generally discouraged because the C/POSIX
  137.88 + * standards do not define their semantics beyond the ASCII range, which means
  137.89 + * that different implementations exhibit very different behavior.
  137.90 + * Instead, Unicode properties should be used directly.
  137.91 + * </p>
  137.92 + * <p>
  137.93 + * There are also only a few, broad C/POSIX character classes, and they tend
  137.94 + * to be used for conflicting purposes. For example, the "isalpha()" class
  137.95 + * is sometimes used to determine word boundaries, while a more sophisticated
  137.96 + * approach would at least distinguish initial letters from continuation
  137.97 + * characters (the latter including combining marks).
  137.98 + * (In ICU, BreakIterator is the most sophisticated API for word boundaries.)
  137.99 + * Another example: There is no "istitle()" class for titlecase characters.
 137.100 + * </p>
 137.101 + * <p>
 137.102 + * ICU 3.4 and later provides API access for all twelve C/POSIX character classes.
 137.103 + * ICU implements them according to the Standard Recommendations in
 137.104 + * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions
 137.105 + * (http://www.unicode.org/reports/tr18/#Compatibility_Properties).
 137.106 + * </p>
 137.107 + * <p>
 137.108 + * API access for C/POSIX character classes is as follows:
 137.109 + * - alpha:     isUAlphabetic(c) or hasBinaryProperty(c, UProperty.ALPHABETIC)
 137.110 + * - lower:     isULowercase(c) or hasBinaryProperty(c, UProperty.LOWERCASE)
 137.111 + * - upper:     isUUppercase(c) or hasBinaryProperty(c, UProperty.UPPERCASE)
 137.112 + * - punct:     ((1<<getType(c)) & ((1<<DASH_PUNCTUATION)|(1<<START_PUNCTUATION)|(1<<END_PUNCTUATION)|(1<<CONNECTOR_PUNCTUATION)|(1<<OTHER_PUNCTUATION)|(1<<INITIAL_PUNCTUATION)|(1<<FINAL_PUNCTUATION)))!=0
 137.113 + * - digit:     isDigit(c) or getType(c)==DECIMAL_DIGIT_NUMBER
 137.114 + * - xdigit:    hasBinaryProperty(c, UProperty.POSIX_XDIGIT)
 137.115 + * - alnum:     hasBinaryProperty(c, UProperty.POSIX_ALNUM)
 137.116 + * - space:     isUWhiteSpace(c) or hasBinaryProperty(c, UProperty.WHITE_SPACE)
 137.117 + * - blank:     hasBinaryProperty(c, UProperty.POSIX_BLANK)
 137.118 + * - cntrl:     getType(c)==CONTROL
 137.119 + * - graph:     hasBinaryProperty(c, UProperty.POSIX_GRAPH)
 137.120 + * - print:     hasBinaryProperty(c, UProperty.POSIX_PRINT)
 137.121 + * </p>
 137.122 + * <p>
 137.123 + * The C/POSIX character classes are also available in UnicodeSet patterns,
 137.124 + * using patterns like [:graph:] or \p{graph}.
 137.125 + * </p>
 137.126 + * <p>
 137.127 + * Note: There are several ICU (and Java) whitespace functions.
 137.128 + * Comparison:
 137.129 + * - isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property;
 137.130 + *       most of general categories "Z" (separators) + most whitespace ISO controls
 137.131 + *       (including no-break spaces, but excluding IS1..IS4 and ZWSP)
 137.132 + * - isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces
 137.133 + * - isSpaceChar: just Z (including no-break spaces)
 137.134 + * </p>
 137.135 + * <p>
 137.136   * This class is not subclassable
 137.137   * </p>
 137.138   * @author Syn Wee Quek
 137.139 @@ -113,92 +177,7 @@
 137.140          /**
 137.141           * @stable ICU 2.4
 137.142           */
 137.143 -        public static final int NONE = 0;
 137.144 -        /**
 137.145 -         * @stable ICU 2.4
 137.146 -         */
 137.147          public static final int DECIMAL = 1;
 137.148 -        /**
 137.149 -         * @stable ICU 2.4
 137.150 -         */
 137.151 -        public static final int DIGIT = 2;
 137.152 -        /**
 137.153 -         * @stable ICU 2.4
 137.154 -         */
 137.155 -        public static final int NUMERIC = 3;
 137.156 -        /**
 137.157 -         * @stable ICU 2.4
 137.158 -         */
 137.159 -        public static final int COUNT = 4;
 137.160 -    }
 137.161 -
 137.162 -    /**
 137.163 -     * Hangul Syllable Type constants.
 137.164 -     *
 137.165 -     * @see UProperty#HANGUL_SYLLABLE_TYPE
 137.166 -     * @stable ICU 2.6
 137.167 -     */
 137.168 -    public static interface HangulSyllableType
 137.169 -    {
 137.170 -        /**
 137.171 -         * @stable ICU 2.6
 137.172 -         */
 137.173 -        public static final int NOT_APPLICABLE      = 0;   /*[NA]*/ /*See note !!*/
 137.174 -        /**
 137.175 -         * @stable ICU 2.6
 137.176 -         */
 137.177 -        public static final int LEADING_JAMO        = 1;   /*[L]*/
 137.178 -        /**
 137.179 -         * @stable ICU 2.6
 137.180 -         */
 137.181 -        public static final int VOWEL_JAMO          = 2;   /*[V]*/
 137.182 -        /**
 137.183 -         * @stable ICU 2.6
 137.184 -         */
 137.185 -        public static final int TRAILING_JAMO       = 3;   /*[T]*/
 137.186 -        /**
 137.187 -         * @stable ICU 2.6
 137.188 -         */
 137.189 -        public static final int LV_SYLLABLE         = 4;   /*[LV]*/
 137.190 -        /**
 137.191 -         * @stable ICU 2.6
 137.192 -         */
 137.193 -        public static final int LVT_SYLLABLE        = 5;   /*[LVT]*/
 137.194 -        /**
 137.195 -         * @stable ICU 2.6
 137.196 -         */
 137.197 -        public static final int COUNT               = 6;
 137.198 -    }
 137.199 -
 137.200 -    /**
 137.201 -     * [Sun] This interface moved from UCharacterEnums.java.
 137.202 -     *
 137.203 -     * 'Enum' for the CharacterCategory constants.  These constants are
 137.204 -     * compatible in name <b>but not in value</b> with those defined in
 137.205 -     * <code>java.lang.Character</code>.
 137.206 -     * @see UCharacterCategory
 137.207 -     * @draft ICU 3.0
 137.208 -     * @deprecated This is a draft API and might change in a future release of ICU.
 137.209 -     */
 137.210 -    public static interface ECharacterCategory
 137.211 -    {
 137.212 -        /**
 137.213 -         * Character type Lu
 137.214 -         * @stable ICU 2.1
 137.215 -         */
 137.216 -        public static final int UPPERCASE_LETTER        = 1;
 137.217 -
 137.218 -        /**
 137.219 -         * Character type Lt
 137.220 -         * @stable ICU 2.1
 137.221 -         */
 137.222 -        public static final int TITLECASE_LETTER        = 3;
 137.223 -
 137.224 -        /**
 137.225 -         * Character type Lo
 137.226 -         * @stable ICU 2.1
 137.227 -         */
 137.228 -        public static final int OTHER_LETTER            = 5;
 137.229      }
 137.230  
 137.231      // public data members -----------------------------------------------
 137.232 @@ -225,14 +204,6 @@
 137.233      public static final int SUPPLEMENTARY_MIN_VALUE =
 137.234          UTF16.SUPPLEMENTARY_MIN_VALUE;
 137.235  
 137.236 -    /**
 137.237 -     * Special value that is returned by getUnicodeNumericValue(int) when no
 137.238 -     * numeric value is defined for a code point.
 137.239 -     * @stable ICU 2.4
 137.240 -     * @see #getUnicodeNumericValue
 137.241 -     */
 137.242 -    public static final double NO_NUMERIC_VALUE = -123456789;
 137.243 -
 137.244      // public methods ----------------------------------------------------
 137.245  
 137.246      /**
 137.247 @@ -262,161 +233,16 @@
 137.248      {
 137.249          // when ch is out of bounds getProperty == 0
 137.250          int props = getProperty(ch);
 137.251 -        if (getNumericType(props) != NumericType.DECIMAL) {
 137.252 -            return (radix <= 10) ? -1 : getEuropeanDigit(ch);
 137.253 +        int value;
 137.254 +        if (getNumericType(props) == NumericType.DECIMAL) {
 137.255 +            value = UCharacterProperty.getUnsignedValue(props);
 137.256 +        } else {
 137.257 +            value = getEuropeanDigit(ch);
 137.258          }
 137.259 -        // if props == 0, it will just fall through and return -1
 137.260 -        if (isNotExceptionIndicator(props)) {
 137.261 -        // not contained in exception data
 137.262 -            // getSignedValue is just shifting so we can check for the sign
 137.263 -            // first
 137.264 -            // Optimization
 137.265 -            // int result = UCharacterProperty.getSignedValue(props);
 137.266 -            // if (result >= 0) {
 137.267 -            //    return result;
 137.268 -            // }
 137.269 -            if (props >= 0) {
 137.270 -                return UCharacterProperty.getSignedValue(props);
 137.271 -            }
 137.272 -        }
 137.273 -        else {
 137.274 -            int index = UCharacterProperty.getExceptionIndex(props);
 137.275 -        if (PROPERTY_.hasExceptionValue(index,
 137.276 -                        UCharacterProperty.EXC_NUMERIC_VALUE_)) {
 137.277 -                int result = PROPERTY_.getException(index,
 137.278 -                            UCharacterProperty.EXC_NUMERIC_VALUE_);
 137.279 -                if (result >= 0) {
 137.280 -                    return result;
 137.281 -                }
 137.282 -            }
 137.283 -        }
 137.284 -
 137.285 -        if (radix > 10) {
 137.286 -            int result = getEuropeanDigit(ch);
 137.287 -            if (result >= 0 && result < radix) {
 137.288 -                return result;
 137.289 -            }
 137.290 -        }
 137.291 -        return -1;
 137.292 +        return (0 <= value && value < radix) ? value : -1;
 137.293      }
 137.294  
 137.295      /**
 137.296 -     * <p>Get the numeric value for a Unicode code point as defined in the
 137.297 -     * Unicode Character Database.</p>
 137.298 -     * <p>A "double" return type is necessary because some numeric values are
 137.299 -     * fractions, negative, or too large for int.</p>
 137.300 -     * <p>For characters without any numeric values in the Unicode Character
 137.301 -     * Database, this function will return NO_NUMERIC_VALUE.</p>
 137.302 -     * <p><em>API Change:</em> In release 2.2 and prior, this API has a
 137.303 -     * return type int and returns -1 when the argument ch does not have a
 137.304 -     * corresponding numeric value. This has been changed to synch with ICU4C
 137.305 -     * </p>
 137.306 -     * This corresponds to the ICU4C function u_getNumericValue.
 137.307 -     * @param ch Code point to get the numeric value for.
 137.308 -     * @return numeric value of ch, or NO_NUMERIC_VALUE if none is defined.
 137.309 -     * @stable ICU 2.4
 137.310 -     */
 137.311 -    public static double getUnicodeNumericValue(int ch)
 137.312 -    {
 137.313 -        // equivalent to c version double u_getNumericValue(UChar32 c)
 137.314 -        int props = PROPERTY_.getProperty(ch);
 137.315 -        int numericType = getNumericType(props);
 137.316 -        if (numericType > NumericType.NONE && numericType < NumericType.COUNT) {
 137.317 -            if (isNotExceptionIndicator(props)) {
 137.318 -                return UCharacterProperty.getSignedValue(props);
 137.319 -            }
 137.320 -            else {
 137.321 -                int index = UCharacterProperty.getExceptionIndex(props);
 137.322 -                boolean nex = false;
 137.323 -                boolean dex = false;
 137.324 -                double numerator = 0;
 137.325 -                if (PROPERTY_.hasExceptionValue(index,
 137.326 -                        UCharacterProperty.EXC_NUMERIC_VALUE_)) {
 137.327 -                    int num = PROPERTY_.getException(index,
 137.328 -                             UCharacterProperty.EXC_NUMERIC_VALUE_);
 137.329 -                    // There are special values for huge numbers that are
 137.330 -                    // powers of ten. genprops/store.c documents:
 137.331 -                    // if numericValue = 0x7fffff00 + x then
 137.332 -                    // numericValue = 10 ^ x
 137.333 -                    if (num >= NUMERATOR_POWER_LIMIT_) {
 137.334 -                        num &= 0xff;
 137.335 -                        // 10^x without math.h
 137.336 -                        numerator = Math.pow(10, num);
 137.337 -                    }
 137.338 -                    else {
 137.339 -                        numerator = num;
 137.340 -                    }
 137.341 -                    nex = true;
 137.342 -                }
 137.343 -                double denominator = 0;
 137.344 -                if (PROPERTY_.hasExceptionValue(index,
 137.345 -                        UCharacterProperty.EXC_DENOMINATOR_VALUE_)) {
 137.346 -                    denominator = PROPERTY_.getException(index,
 137.347 -                             UCharacterProperty.EXC_DENOMINATOR_VALUE_);
 137.348 -                    // faster path not in c
 137.349 -                    if (numerator != 0) {
 137.350 -                        return numerator / denominator;
 137.351 -                    }
 137.352 -                    dex = true;
 137.353 -                }
 137.354 -
 137.355 -                if (nex) {
 137.356 -                    if (dex) {
 137.357 -                        return numerator / denominator;
 137.358 -                    }
 137.359 -                    return numerator;
 137.360 -                }
 137.361 -                if (dex) {
 137.362 -                    return 1 / denominator;
 137.363 -                }
 137.364 -            }
 137.365 -        }
 137.366 -        return NO_NUMERIC_VALUE;
 137.367 -    }
 137.368 -
 137.369 -    /**
 137.370 -     * Returns a value indicating a code point's Unicode category.
 137.371 -     * Up-to-date Unicode implementation of java.lang.Character.getType()
 137.372 -     * except for the above mentioned code points that had their category
 137.373 -     * changed.<br>
 137.374 -     * Return results are constants from the interface
 137.375 -     * <a href=UCharacterCategory.html>UCharacterCategory</a><br>
 137.376 -     * <em>NOTE:</em> the UCharacterCategory values are <em>not</em> compatible with
 137.377 -     * those returned by java.lang.Character.getType.  UCharacterCategory values
 137.378 -     * match the ones used in ICU4C, while java.lang.Character type
 137.379 -     * values, though similar, skip the value 17.</p>
 137.380 -     * @param ch code point whose type is to be determined
 137.381 -     * @return category which is a value of UCharacterCategory
 137.382 -     * @stable ICU 2.1
 137.383 -     */
 137.384 -    public static int getType(int ch)
 137.385 -    {
 137.386 -        return getProperty(ch) & UCharacterProperty.TYPE_MASK;
 137.387 -    }
 137.388 -
 137.389 -    //// for StringPrep
 137.390 -    /**
 137.391 -     * Returns a code point corresponding to the two UTF16 characters.
 137.392 -     * @param lead the lead char
 137.393 -     * @param trail the trail char
 137.394 -     * @return code point if surrogate characters are valid.
 137.395 -     * @exception IllegalArgumentException thrown when argument characters do
 137.396 -     *            not form a valid codepoint
 137.397 -     * @stable ICU 2.1
 137.398 -     */
 137.399 -    public static int getCodePoint(char lead, char trail)
 137.400 -    {
 137.401 -        if (lead >= UTF16.LEAD_SURROGATE_MIN_VALUE &&
 137.402 -        lead <= UTF16.LEAD_SURROGATE_MAX_VALUE &&
 137.403 -            trail >= UTF16.TRAIL_SURROGATE_MIN_VALUE &&
 137.404 -        trail <= UTF16.TRAIL_SURROGATE_MAX_VALUE) {
 137.405 -            return UCharacterProperty.getRawSupplementary(lead, trail);
 137.406 -        }
 137.407 -        throw new IllegalArgumentException("Illegal surrogate characters");
 137.408 -    }
 137.409 -
 137.410 -    //// for StringPrep
 137.411 -    /**
 137.412       * Returns the Bidirection property of a code point.
 137.413       * For example, 0x0041 (letter A) has the LEFT_TO_RIGHT directional
 137.414       * property.<br>
 137.415 @@ -428,111 +254,24 @@
 137.416       */
 137.417      public static int getDirection(int ch)
 137.418      {
 137.419 -        // when ch is out of bounds getProperty == 0
 137.420 -        return (getProperty(ch) >> BIDI_SHIFT_) & BIDI_MASK_AFTER_SHIFT_;
 137.421 +        return gBdp.getClass(ch);
 137.422      }
 137.423  
 137.424      /**
 137.425 -     * The given string is mapped to its case folding equivalent according to
 137.426 -     * UnicodeData.txt and CaseFolding.txt; if any character has no case
 137.427 -     * folding equivalent, the character itself is returned.
 137.428 -     * "Full", multiple-code point case folding mappings are returned here.
 137.429 -     * For "simple" single-code point mappings use the API
 137.430 -     * foldCase(int ch, boolean defaultmapping).
 137.431 -     * @param str            the String to be converted
 137.432 -     * @param defaultmapping Indicates if all mappings defined in
 137.433 -     *                       CaseFolding.txt is to be used, otherwise the
 137.434 -     *                       mappings for dotted I and dotless i marked with
 137.435 -     *                       'I' in CaseFolding.txt will be skipped.
 137.436 -     * @return               the case folding equivalent of the character, if
 137.437 -     *                       any; otherwise the character itself.
 137.438 -     * @see                  #foldCase(int, boolean)
 137.439 +     * Returns a code point corresponding to the two UTF16 characters.
 137.440 +     * @param lead the lead char
 137.441 +     * @param trail the trail char
 137.442 +     * @return code point if surrogate characters are valid.
 137.443 +     * @exception IllegalArgumentException thrown when argument characters do
 137.444 +     *            not form a valid codepoint
 137.445       * @stable ICU 2.1
 137.446       */
 137.447 -    public static String foldCase(String str, boolean defaultmapping)
 137.448 +    public static int getCodePoint(char lead, char trail)
 137.449      {
 137.450 -        int          size   = str.length();
 137.451 -        StringBuffer result = new StringBuffer(size);
 137.452 -        int          offset  = 0;
 137.453 -        int          ch;
 137.454 -
 137.455 -        // case mapping loop
 137.456 -        while (offset < size) {
 137.457 -            ch = UTF16.charAt(str, offset);
 137.458 -            offset += UTF16.getCharCount(ch);
 137.459 -            int props = PROPERTY_.getProperty(ch);
 137.460 -            if (isNotExceptionIndicator(props)) {
 137.461 -                int type = UCharacterProperty.TYPE_MASK & props;
 137.462 -                if (type == ECharacterCategory.UPPERCASE_LETTER ||
 137.463 -                    type == ECharacterCategory.TITLECASE_LETTER) {
 137.464 -                    ch += UCharacterProperty.getSignedValue(props);
 137.465 -                }
 137.466 -            }
 137.467 -            else {
 137.468 -                int index = UCharacterProperty.getExceptionIndex(props);
 137.469 -                if (PROPERTY_.hasExceptionValue(index,
 137.470 -                        UCharacterProperty.EXC_CASE_FOLDING_)) {
 137.471 -                    int exception = PROPERTY_.getException(index,
 137.472 -                               UCharacterProperty.EXC_CASE_FOLDING_);
 137.473 -                    if (exception != 0) {
 137.474 -                        PROPERTY_.getFoldCase(exception & LAST_CHAR_MASK_,
 137.475 -                          exception >> SHIFT_24_, result);
 137.476 -                    }
 137.477 -                    else {
 137.478 -                        // special case folding mappings, hardcoded
 137.479 -                        if (ch != 0x49 && ch != 0x130) {
 137.480 -                            // return ch itself because there is no special
 137.481 -                            // mapping for it
 137.482 -                            UTF16.append(result, ch);
 137.483 -                            continue;
 137.484 -                        }
 137.485 -                        if (defaultmapping) {
 137.486 -                            // default mappings
 137.487 -                            if (ch == 0x49) {
 137.488 -                                // 0049; C; 0069; # LATIN CAPITAL LETTER I
 137.489 -                                result.append(
 137.490 -                          UCharacterProperty.LATIN_SMALL_LETTER_I_);
 137.491 -                            }
 137.492 -                            else if (ch == 0x130) {
 137.493 -                                // 0130; F; 0069 0307;
 137.494 -                                // # LATIN CAPITAL LETTER I WITH DOT ABOVE
 137.495 -                                result.append(
 137.496 -                          UCharacterProperty.LATIN_SMALL_LETTER_I_);
 137.497 -                                result.append((char)0x307);
 137.498 -                            }
 137.499 -                        }
 137.500 -                        else {
 137.501 -                            // Turkic mappings
 137.502 -                            if (ch == 0x49) {
 137.503 -                                // 0049; T; 0131; # LATIN CAPITAL LETTER I
 137.504 -                                result.append((char)0x131);
 137.505 -                            }
 137.506 -                            else if (ch == 0x130) {
 137.507 -                                // 0130; T; 0069;
 137.508 -                                // # LATIN CAPITAL LETTER I WITH DOT ABOVE
 137.509 -                                result.append(
 137.510 -                          UCharacterProperty.LATIN_SMALL_LETTER_I_);
 137.511 -                            }
 137.512 -                        }
 137.513 -                    }
 137.514 -                    // do not fall through to the output of c
 137.515 -                    continue;
 137.516 -                }
 137.517 -                else {
 137.518 -                    if (PROPERTY_.hasExceptionValue(index,
 137.519 -                            UCharacterProperty.EXC_LOWERCASE_)) {
 137.520 -                        ch = PROPERTY_.getException(index,
 137.521 -                            UCharacterProperty.EXC_LOWERCASE_);
 137.522 -                    }
 137.523 -                }
 137.524 -
 137.525 -            }
 137.526 -
 137.527 -            // handle 1:1 code point mappings from UnicodeData.txt
 137.528 -            UTF16.append(result, ch);
 137.529 +        if (UTF16.isLeadSurrogate(lead) && UTF16.isTrailSurrogate(trail)) {
 137.530 +            return UCharacterProperty.getRawSupplementary(lead, trail);
 137.531          }
 137.532 -
 137.533 -        return result.toString();
 137.534 +        throw new IllegalArgumentException("Illegal surrogate characters");
 137.535      }
 137.536  
 137.537      /**
 137.538 @@ -555,83 +294,6 @@
 137.539          return PROPERTY_.getAge(ch);
 137.540      }
 137.541  
 137.542 -    /**
 137.543 -     * <p>Gets the property value for an Unicode property type of a code point.
 137.544 -     * Also returns binary and mask property values.</p>
 137.545 -     * <p>Unicode, especially in version 3.2, defines many more properties than
 137.546 -     * the original set in UnicodeData.txt.</p>
 137.547 -     * <p>The properties APIs are intended to reflect Unicode properties as
 137.548 -     * defined in the Unicode Character Database (UCD) and Unicode Technical
 137.549 -     * Reports (UTR). For details about the properties see
 137.550 -     * http://www.unicode.org/.</p>
 137.551 -     * <p>For names of Unicode properties see the UCD file PropertyAliases.txt.
 137.552 -     * </p>
 137.553 -     * <pre>
 137.554 -     * Sample usage:
 137.555 -     * int ea = UCharacter.getIntPropertyValue(c, UProperty.EAST_ASIAN_WIDTH);
 137.556 -     * int ideo = UCharacter.getIntPropertyValue(c, UProperty.IDEOGRAPHIC);
 137.557 -     * boolean b = (ideo == 1) ? true : false;
 137.558 -     * </pre>
 137.559 -     * @param ch code point to test.
 137.560 -     * @param type UProperty selector constant, identifies which binary
 137.561 -     *        property to check. Must be
 137.562 -     *        UProperty.BINARY_START &lt;= type &lt; UProperty.BINARY_LIMIT or
 137.563 -     *        UProperty.INT_START &lt;= type &lt; UProperty.INT_LIMIT or
 137.564 -     *        UProperty.MASK_START &lt;= type &lt; UProperty.MASK_LIMIT.
 137.565 -     * @return numeric value that is directly the property value or,
 137.566 -     *         for enumerated properties, corresponds to the numeric value of
 137.567 -     *         the enumerated constant of the respective property value
 137.568 -     *         enumeration type (cast to enum type if necessary).
 137.569 -     *         Returns 0 or 1 (for false / true) for binary Unicode properties.
 137.570 -     *         Returns a bit-mask for mask properties.
 137.571 -     *         Returns 0 if 'type' is out of bounds or if the Unicode version
 137.572 -     *         does not have data for the property at all, or not for this code
 137.573 -     *         point.
 137.574 -     * @see UProperty
 137.575 -     * @see #hasBinaryProperty
 137.576 -     * @see #getIntPropertyMinValue
 137.577 -     * @see #getIntPropertyMaxValue
 137.578 -     * @see #getUnicodeVersion
 137.579 -     * @stable ICU 2.4
 137.580 -     */
 137.581 -    public static int getIntPropertyValue(int ch, int type)
 137.582 -    {
 137.583 -        /*
 137.584 -         * For Normalizer with Unicode 3.2, this method is called only for
 137.585 -         * HANGUL_SYLLABLE_TYPE in UnicodeSet.addPropertyStarts().
 137.586 -         */
 137.587 -        if (type == UProperty.HANGUL_SYLLABLE_TYPE) {
 137.588 -        /* purely algorithmic; hardcode known characters, check for assigned new ones */
 137.589 -        if(ch<NormalizerImpl.JAMO_L_BASE) {
 137.590 -            /* NA */
 137.591 -        } else if(ch<=0x11ff) {
 137.592 -            /* Jamo range */
 137.593 -            if(ch<=0x115f) {
 137.594 -            /* Jamo L range, HANGUL CHOSEONG ... */
 137.595 -            if(ch==0x115f || ch<=0x1159 || getType(ch)==ECharacterCategory.OTHER_LETTER) {
 137.596 -                return HangulSyllableType.LEADING_JAMO;
 137.597 -            }
 137.598 -            } else if(ch<=0x11a7) {
 137.599 -            /* Jamo V range, HANGUL JUNGSEONG ... */
 137.600 -            if(ch<=0x11a2 || getType(ch)==ECharacterCategory.OTHER_LETTER) {
 137.601 -                return HangulSyllableType.VOWEL_JAMO;
 137.602 -            }
 137.603 -            } else {
 137.604 -            /* Jamo T range */
 137.605 -            if(ch<=0x11f9 || getType(ch)==ECharacterCategory.OTHER_LETTER) {
 137.606 -                return HangulSyllableType.TRAILING_JAMO;
 137.607 -            }
 137.608 -            }
 137.609 -        } else if((ch-=NormalizerImpl.HANGUL_BASE)<0) {
 137.610 -            /* NA */
 137.611 -        } else if(ch<NormalizerImpl.HANGUL_COUNT) {
 137.612 -            /* Hangul syllable */
 137.613 -            return ch%NormalizerImpl.JAMO_T_COUNT==0 ? HangulSyllableType.LV_SYLLABLE : HangulSyllableType.LVT_SYLLABLE;
 137.614 -        }
 137.615 -        }
 137.616 -        return 0; /* NA */
 137.617 -    }
 137.618 -
 137.619      // private variables -------------------------------------------------
 137.620  
 137.621      /**
 137.622 @@ -643,143 +305,43 @@
 137.623       */
 137.624      private static final char[] PROPERTY_TRIE_INDEX_;
 137.625      private static final char[] PROPERTY_TRIE_DATA_;
 137.626 -    private static final int[] PROPERTY_DATA_;
 137.627      private static final int PROPERTY_INITIAL_VALUE_;
 137.628  
 137.629 +    private static final UBiDiProps gBdp;
 137.630 +
 137.631      // block to initialise character property database
 137.632      static
 137.633      {
 137.634          try
 137.635          {
 137.636 -        PROPERTY_ = UCharacterProperty.getInstance();
 137.637 -        PROPERTY_TRIE_INDEX_ = PROPERTY_.m_trieIndex_;
 137.638 -        PROPERTY_TRIE_DATA_ = PROPERTY_.m_trieData_;
 137.639 -        PROPERTY_DATA_ = PROPERTY_.m_property_;
 137.640 -        PROPERTY_INITIAL_VALUE_
 137.641 -            = PROPERTY_DATA_[PROPERTY_.m_trieInitialValue_];
 137.642 +            PROPERTY_ = UCharacterProperty.getInstance();
 137.643 +            PROPERTY_TRIE_INDEX_ = PROPERTY_.m_trieIndex_;
 137.644 +            PROPERTY_TRIE_DATA_ = PROPERTY_.m_trieData_;
 137.645 +            PROPERTY_INITIAL_VALUE_ = PROPERTY_.m_trieInitialValue_;
 137.646          }
 137.647          catch (Exception e)
 137.648          {
 137.649 -        throw new RuntimeException(e.getMessage());
 137.650 +            throw new MissingResourceException(e.getMessage(),"","");
 137.651          }
 137.652 +
 137.653 +        UBiDiProps bdp;
 137.654 +        try {
 137.655 +            bdp=UBiDiProps.getSingleton();
 137.656 +        } catch(IOException e) {
 137.657 +            bdp=UBiDiProps.getDummy();
 137.658 +        }
 137.659 +        gBdp=bdp;
 137.660      }
 137.661  
 137.662      /**
 137.663 -     * To get the last character out from a data type
 137.664 -     */
 137.665 -    private static final int LAST_CHAR_MASK_ = 0xFFFF;
 137.666 -
 137.667 -    /**
 137.668 -     * To get the last byte out from a data type
 137.669 -     */
 137.670 -//    private static final int LAST_BYTE_MASK_ = 0xFF;
 137.671 -
 137.672 -    /**
 137.673 -     * Shift 16 bits
 137.674 -     */
 137.675 -//    private static final int SHIFT_16_ = 16;
 137.676 -
 137.677 -    /**
 137.678 -     * Shift 24 bits
 137.679 -     */
 137.680 -    private static final int SHIFT_24_ = 24;
 137.681 -
 137.682 -    /**
 137.683       * Shift to get numeric type
 137.684       */
 137.685 -    private static final int NUMERIC_TYPE_SHIFT_ = 12;
 137.686 +    private static final int NUMERIC_TYPE_SHIFT_ = 5;
 137.687      /**
 137.688       * Mask to get numeric type
 137.689       */
 137.690      private static final int NUMERIC_TYPE_MASK_ = 0x7 << NUMERIC_TYPE_SHIFT_;
 137.691 -    /**
 137.692 -     * Shift to get bidi bits
 137.693 -     */
 137.694 -    private static final int BIDI_SHIFT_ = 6;
 137.695  
 137.696 -    /**
 137.697 -     * Mask to be applied after shifting to get bidi bits
 137.698 -     */
 137.699 -    private static final int BIDI_MASK_AFTER_SHIFT_ = 0x1F;
 137.700 -
 137.701 -    /**
 137.702 -     * <p>Numerator power limit.
 137.703 -     * There are special values for huge numbers that are powers of ten.</p>
 137.704 -     * <p>c version genprops/store.c documents:
 137.705 -     * if numericValue = 0x7fffff00 + x then numericValue = 10 ^ x</p>
 137.706 -     */
 137.707 -    private static final int NUMERATOR_POWER_LIMIT_ = 0x7fffff00;
 137.708 -    /**
 137.709 -     * Integer properties mask and shift values for joining type.
 137.710 -     * Equivalent to icu4c UPROPS_JT_MASK.
 137.711 -     */
 137.712 -    private static final int JOINING_TYPE_MASK_ = 0x00003800;
 137.713 -    /**
 137.714 -     * Integer properties mask and shift values for joining type.
 137.715 -     * Equivalent to icu4c UPROPS_JT_SHIFT.
 137.716 -     */
 137.717 -    private static final int JOINING_TYPE_SHIFT_ = 11;
 137.718 -    /**
 137.719 -     * Integer properties mask and shift values for joining group.
 137.720 -     * Equivalent to icu4c UPROPS_JG_MASK.
 137.721 -     */
 137.722 -    private static final int JOINING_GROUP_MASK_ = 0x000007e0;
 137.723 -    /**
 137.724 -     * Integer properties mask and shift values for joining group.
 137.725 -     * Equivalent to icu4c UPROPS_JG_SHIFT.
 137.726 -     */
 137.727 -    private static final int JOINING_GROUP_SHIFT_ = 5;
 137.728 -    /**
 137.729 -     * Integer properties mask for decomposition type.
 137.730 -     * Equivalent to icu4c UPROPS_DT_MASK.
 137.731 -     */
 137.732 -    private static final int DECOMPOSITION_TYPE_MASK_ = 0x0000001f;
 137.733 -    /**
 137.734 -     * Integer properties mask and shift values for East Asian cell width.
 137.735 -     * Equivalent to icu4c UPROPS_EA_MASK
 137.736 -     */
 137.737 -    private static final int EAST_ASIAN_MASK_ = 0x00038000;
 137.738 -    /**
 137.739 -     * Integer properties mask and shift values for East Asian cell width.
 137.740 -     * Equivalent to icu4c UPROPS_EA_SHIFT
 137.741 -     */
 137.742 -    private static final int EAST_ASIAN_SHIFT_ = 15;
 137.743 -
 137.744 -    /**
 137.745 -     * Integer properties mask and shift values for line breaks.
 137.746 -     * Equivalent to icu4c UPROPS_LB_MASK
 137.747 -     */
 137.748 -    private static final int LINE_BREAK_MASK_ = 0x007C0000;
 137.749 -    /**
 137.750 -     * Integer properties mask and shift values for line breaks.
 137.751 -     * Equivalent to icu4c UPROPS_LB_SHIFT
 137.752 -     */
 137.753 -    private static final int LINE_BREAK_SHIFT_ = 18;
 137.754 -    /**
 137.755 -     * Integer properties mask and shift values for blocks.
 137.756 -     * Equivalent to icu4c UPROPS_BLOCK_MASK
 137.757 -     */
 137.758 -    private static final int BLOCK_MASK_ = 0x00007f80;
 137.759 -    /**
 137.760 -     * Integer properties mask and shift values for blocks.
 137.761 -     * Equivalent to icu4c UPROPS_BLOCK_SHIFT
 137.762 -     */
 137.763 -    private static final int BLOCK_SHIFT_ = 7;
 137.764 -    /**
 137.765 -     * Integer properties mask and shift values for scripts.
 137.766 -     * Equivalent to icu4c UPROPS_SHIFT_MASK
 137.767 -     */
 137.768 -    private static final int SCRIPT_MASK_ = 0x0000007f;
 137.769 -
 137.770 -    // private constructor -----------------------------------------------
 137.771 -    ///CLOVER:OFF
 137.772 -    /**
 137.773 -     * Private constructor to prevent instantiation
 137.774 -     */
 137.775 -    private UCharacter()
 137.776 -    {
 137.777 -    }
 137.778 -    ///CLOVER:ON
 137.779      // private methods ---------------------------------------------------
 137.780  
 137.781      /**
 137.782 @@ -819,17 +381,6 @@
 137.783      }
 137.784  
 137.785      /**
 137.786 -     * Checks if the property value has a exception indicator
 137.787 -     * @param props 32 bit property value
 137.788 -     * @return true if property does not have a exception indicator, false
 137.789 -     *          otherwise
 137.790 -     */
 137.791 -    private static boolean isNotExceptionIndicator(int props)
 137.792 -    {
 137.793 -    return (props & UCharacterProperty.EXCEPTION_MASK) == 0;
 137.794 -    }
 137.795 -
 137.796 -    /**
 137.797       * Gets the property value at the index.
 137.798       * This is optimized.
 137.799       * Note this is alittle different from CharTrie the index m_trieData_
 137.800 @@ -841,35 +392,34 @@
 137.801       * @return property value of code point
 137.802       * @stable ICU 2.6
 137.803       */
 137.804 -    private static int getProperty(int ch)
 137.805 +    private static final int getProperty(int ch)
 137.806      {
 137.807          if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE
 137.808              || (ch > UTF16.LEAD_SURROGATE_MAX_VALUE
 137.809                  && ch < UTF16.SUPPLEMENTARY_MIN_VALUE)) {
 137.810 -            // BMP codepoint
 137.811 -            try { // using try for < 0 ch is faster than using an if statement
 137.812 -                return PROPERTY_DATA_[
 137.813 -                      PROPERTY_TRIE_DATA_[
 137.814 +            // BMP codepoint 0000..D7FF or DC00..FFFF
 137.815 +            try { // using try for ch < 0 is faster than using an if statement
 137.816 +                return PROPERTY_TRIE_DATA_[
 137.817                                (PROPERTY_TRIE_INDEX_[ch >> 5] << 2)
 137.818 -                              + (ch & 0x1f)]];
 137.819 +                              + (ch & 0x1f)];
 137.820              } catch (ArrayIndexOutOfBoundsException e) {
 137.821                  return PROPERTY_INITIAL_VALUE_;
 137.822              }
 137.823          }
 137.824          if (ch <= UTF16.LEAD_SURROGATE_MAX_VALUE) {
 137.825 -            // surrogate
 137.826 -            return PROPERTY_DATA_[
 137.827 -                  PROPERTY_TRIE_DATA_[
 137.828 +            // lead surrogate D800..DBFF
 137.829 +            return PROPERTY_TRIE_DATA_[
 137.830                                (PROPERTY_TRIE_INDEX_[(0x2800 >> 5) + (ch >> 5)] << 2)
 137.831 -                              + (ch & 0x1f)]];
 137.832 +                              + (ch & 0x1f)];
 137.833          }
 137.834          // for optimization
 137.835          if (ch <= UTF16.CODEPOINT_MAX_VALUE) {
 137.836 +            // supplementary code point 10000..10FFFF
 137.837              // look at the construction of supplementary characters
 137.838              // trail forms the ends of it.
 137.839 -            return PROPERTY_DATA_[PROPERTY_.m_trie_.getSurrogateValue(
 137.840 +            return PROPERTY_.m_trie_.getSurrogateValue(
 137.841                                        UTF16.getLeadSurrogate(ch),
 137.842 -                                      (char)(ch & 0x3ff))];
 137.843 +                                      (char)(ch & 0x3ff));
 137.844          }
 137.845          // return m_dataOffset_ if there is an error, in this case we return
 137.846          // the default value: m_initialValue_
 137.847 @@ -877,4 +427,5 @@
 137.848          // this is for optimization.
 137.849          return PROPERTY_INITIAL_VALUE_;
 137.850      }
 137.851 +
 137.852  }
   138.1 --- a/src/share/classes/sun/text/normalizer/UCharacterProperty.java	Thu Apr 16 17:42:00 2009 +0100
   138.2 +++ b/src/share/classes/sun/text/normalizer/UCharacterProperty.java	Thu Apr 16 19:10:32 2009 -0700
   138.3 @@ -1,5 +1,5 @@
   138.4  /*
   138.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
   138.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   138.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   138.8   *
   138.9   * This code is free software; you can redistribute it and/or modify it
  138.10 @@ -22,10 +22,9 @@
  138.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  138.12   * have any questions.
  138.13   */
  138.14 -
  138.15  /*
  138.16   *******************************************************************************
  138.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  138.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  138.19   *                                                                             *
  138.20   * The original version of this source code and documentation is copyrighted   *
  138.21   * and owned by IBM, These materials are provided under terms of a License     *
  138.22 @@ -40,8 +39,7 @@
  138.23  import java.io.BufferedInputStream;
  138.24  import java.io.InputStream;
  138.25  import java.io.IOException;
  138.26 -import java.text.BreakIterator;
  138.27 -import java.util.Locale;
  138.28 +import java.util.MissingResourceException;
  138.29  
  138.30  /**
  138.31  * <p>Internal class used for Unicode character property database.</p>
  138.32 @@ -56,10 +54,9 @@
  138.33  * <a href=UCharacter.html>UCharacter</a>.</p>
  138.34  * @author Syn Wee Quek
  138.35  * @since release 2.1, february 1st 2002
  138.36 -* @draft 2.1
  138.37  */
  138.38  
  138.39 -public final class UCharacterProperty implements Trie.DataManipulate
  138.40 +public final class UCharacterProperty
  138.41  {
  138.42      // public data members -----------------------------------------------
  138.43  
  138.44 @@ -83,68 +80,16 @@
  138.45       */
  138.46      public int m_trieInitialValue_;
  138.47      /**
  138.48 -    * Character property table
  138.49 -    */
  138.50 -    public int m_property_[];
  138.51 -    /**
  138.52      * Unicode version
  138.53      */
  138.54      public VersionInfo m_unicodeVersion_;
  138.55 -    /**
  138.56 -     * Exception indicator for uppercase type
  138.57 -     */
  138.58 -    public static final int EXC_UPPERCASE_ = 0;
  138.59 -    /**
  138.60 -     * Exception indicator for lowercase type
  138.61 -     */
  138.62 -    public static final int EXC_LOWERCASE_ = 1;
  138.63 -    /**
  138.64 -     * Exception indicator for titlecase type
  138.65 -     */
  138.66 -    public static final int EXC_TITLECASE_ = 2;
  138.67 -    /**
  138.68 -     * Exception indicator for digit type
  138.69 -     */
  138.70 -    public static final int EXC_UNUSED_ = 3;
  138.71 -    /**
  138.72 -     * Exception indicator for numeric type
  138.73 -     */
  138.74 -    public static final int EXC_NUMERIC_VALUE_ = 4;
  138.75 -    /**
  138.76 -     * Exception indicator for denominator type
  138.77 -     */
  138.78 -    public static final int EXC_DENOMINATOR_VALUE_ = 5;
  138.79 -    /**
  138.80 -     * Exception indicator for mirror type
  138.81 -     */
  138.82 -    public static final int EXC_MIRROR_MAPPING_ = 6;
  138.83 -    /**
  138.84 -     * Exception indicator for special casing type
  138.85 -     */
  138.86 -    public static final int EXC_SPECIAL_CASING_ = 7;
  138.87 -    /**
  138.88 -     * Exception indicator for case folding type
  138.89 -     */
  138.90 -    public static final int EXC_CASE_FOLDING_ = 8;
  138.91 -    /**
  138.92 -     * EXC_COMBINING_CLASS_ is not found in ICU.
  138.93 -     * Used to retrieve the combining class of the character in the exception
  138.94 -     * value
  138.95 -     */
  138.96 -    public static final int EXC_COMBINING_CLASS_ = 9;
  138.97  
  138.98 -    /**
  138.99 -    * Latin lowercase i
 138.100 -    */
 138.101 -    public static final char LATIN_SMALL_LETTER_I_ = 0x69;
 138.102 -    /**
 138.103 -    * Character type mask
 138.104 -    */
 138.105 -    public static final int TYPE_MASK = 0x1F;
 138.106 -    /**
 138.107 -    * Exception test mask
 138.108 -    */
 138.109 -    public static final int EXCEPTION_MASK = 0x20;
 138.110 +    // uprops.h enum UPropertySource --------------------------------------- ***
 138.111 +
 138.112 +    /** From uchar.c/uprops.icu properties vectors trie */
 138.113 +    public static final int SRC_PROPSVEC=2;
 138.114 +    /** One more than the highest UPropertySource (SRC_) constant. */
 138.115 +    public static final int SRC_COUNT=9;
 138.116  
 138.117      // public methods ----------------------------------------------------
 138.118  
 138.119 @@ -159,23 +104,6 @@
 138.120      }
 138.121  
 138.122      /**
 138.123 -    * Called by com.ibm.icu.util.Trie to extract from a lead surrogate's
 138.124 -    * data the index array offset of the indexes for that lead surrogate.
 138.125 -    * @param value data value for a surrogate from the trie, including the
 138.126 -    *        folding offset
 138.127 -    * @return data offset or 0 if there is no data for the lead surrogate
 138.128 -    */
 138.129 -    public int getFoldingOffset(int value)
 138.130 -    {
 138.131 -        if ((value & SUPPLEMENTARY_FOLD_INDICATOR_MASK_) != 0) {
 138.132 -            return (value & SUPPLEMENTARY_FOLD_OFFSET_MASK_);
 138.133 -        }
 138.134 -        else {
 138.135 -            return 0;
 138.136 -        }
 138.137 -    }
 138.138 -
 138.139 -    /**
 138.140      * Gets the property value at the index.
 138.141      * This is optimized.
 138.142      * Note this is alittle different from CharTrie the index m_trieData_
 138.143 @@ -183,129 +111,79 @@
 138.144      * @param ch code point whose property value is to be retrieved
 138.145      * @return property value of code point
 138.146      */
 138.147 -    public int getProperty(int ch)
 138.148 +    public final int getProperty(int ch)
 138.149      {
 138.150          if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE
 138.151              || (ch > UTF16.LEAD_SURROGATE_MAX_VALUE
 138.152                  && ch < UTF16.SUPPLEMENTARY_MIN_VALUE)) {
 138.153 -            // BMP codepoint
 138.154 +            // BMP codepoint 0000..D7FF or DC00..FFFF
 138.155              // optimized
 138.156 -            try {
 138.157 -                return m_property_[
 138.158 -                    m_trieData_[
 138.159 +            try { // using try for ch < 0 is faster than using an if statement
 138.160 +                return m_trieData_[
 138.161                      (m_trieIndex_[ch >> Trie.INDEX_STAGE_1_SHIFT_]
 138.162                            << Trie.INDEX_STAGE_2_SHIFT_)
 138.163 -                    + (ch & Trie.INDEX_STAGE_3_MASK_)]];
 138.164 +                    + (ch & Trie.INDEX_STAGE_3_MASK_)];
 138.165              } catch (ArrayIndexOutOfBoundsException e) {
 138.166 -                return m_property_[m_trieInitialValue_];
 138.167 +                return m_trieInitialValue_;
 138.168              }
 138.169          }
 138.170          if (ch <= UTF16.LEAD_SURROGATE_MAX_VALUE) {
 138.171 -            return m_property_[
 138.172 -                    m_trieData_[
 138.173 +            // lead surrogate D800..DBFF
 138.174 +            return m_trieData_[
 138.175                      (m_trieIndex_[Trie.LEAD_INDEX_OFFSET_
 138.176                                    + (ch >> Trie.INDEX_STAGE_1_SHIFT_)]
 138.177                            << Trie.INDEX_STAGE_2_SHIFT_)
 138.178 -                    + (ch & Trie.INDEX_STAGE_3_MASK_)]];
 138.179 +                    + (ch & Trie.INDEX_STAGE_3_MASK_)];
 138.180          }
 138.181 -        // for optimization
 138.182          if (ch <= UTF16.CODEPOINT_MAX_VALUE) {
 138.183 +            // supplementary code point 10000..10FFFF
 138.184              // look at the construction of supplementary characters
 138.185              // trail forms the ends of it.
 138.186 -            return m_property_[m_trie_.getSurrogateValue(
 138.187 +            return m_trie_.getSurrogateValue(
 138.188                                            UTF16.getLeadSurrogate(ch),
 138.189 -                                          (char)(ch & Trie.SURROGATE_MASK_))];
 138.190 +                                          (char)(ch & Trie.SURROGATE_MASK_));
 138.191          }
 138.192 +        // ch is out of bounds
 138.193          // return m_dataOffset_ if there is an error, in this case we return
 138.194          // the default value: m_initialValue_
 138.195          // we cannot assume that m_initialValue_ is at offset 0
 138.196          // this is for optimization.
 138.197 -        return m_property_[m_trieInitialValue_];
 138.198 -        // return m_property_[m_trie_.getCodePointValue(ch)];
 138.199 +        return m_trieInitialValue_;
 138.200 +
 138.201 +        // this all is an inlined form of return m_trie_.getCodePointValue(ch);
 138.202      }
 138.203  
 138.204      /**
 138.205 -    * Getting the signed numeric value of a character embedded in the property
 138.206 +    * Getting the unsigned numeric value of a character embedded in the property
 138.207      * argument
 138.208      * @param prop the character
 138.209 -    * @return signed numberic value
 138.210 +    * @return unsigned numberic value
 138.211      */
 138.212 -    public static int getSignedValue(int prop)
 138.213 -    {
 138.214 -        return (prop >> VALUE_SHIFT_);
 138.215 -    }
 138.216 -
 138.217 -    /**
 138.218 -    * Getting the exception index for argument property
 138.219 -    * @param prop character property
 138.220 -    * @return exception index
 138.221 -    */
 138.222 -    public static int getExceptionIndex(int prop)
 138.223 +    public static int getUnsignedValue(int prop)
 138.224      {
 138.225          return (prop >> VALUE_SHIFT_) & UNSIGNED_VALUE_MASK_AFTER_SHIFT_;
 138.226      }
 138.227  
 138.228      /**
 138.229 -    * Determines if the exception value passed in has the kind of information
 138.230 -    * which the indicator wants, e.g if the exception value contains the digit
 138.231 -    * value of the character
 138.232 -    * @param index exception index
 138.233 -    * @param indicator type indicator
 138.234 -    * @return true if type value exist
 138.235 -    */
 138.236 -    public boolean hasExceptionValue(int index, int indicator)
 138.237 -    {
 138.238 -        return (m_exception_[index] & (1 << indicator)) != 0;
 138.239 -    }
 138.240 -
 138.241 -    /**
 138.242 -    * Gets the exception value at the index, assuming that data type is
 138.243 -    * available. Result is undefined if data is not available. Use
 138.244 -    * hasExceptionValue() to determine data's availability.
 138.245 -    * @param index
 138.246 -    * @param etype exception data type
 138.247 -    * @return exception data type value at index
 138.248 -    */
 138.249 -    public int getException(int index, int etype)
 138.250 -    {
 138.251 -        // contained in exception data
 138.252 -        if (etype == EXC_COMBINING_CLASS_) {
 138.253 -            return m_exception_[index];
 138.254 -        }
 138.255 -        // contained in the exception digit address
 138.256 -        index = addExceptionOffset(m_exception_[index], etype, ++ index);
 138.257 -        return m_exception_[index];
 138.258 -    }
 138.259 -
 138.260 -    /**
 138.261 -    * Gets the folded case value at the index
 138.262 -    * @param index of the case value to be retrieved
 138.263 -    * @param count number of characters to retrieve
 138.264 -    * @param str string buffer to which to append the result
 138.265 -    */
 138.266 -    public void getFoldCase(int index, int count, StringBuffer str)
 138.267 -    {
 138.268 -        // first 2 chars are for the simple mappings
 138.269 -        index += 2;
 138.270 -        while (count > 0) {
 138.271 -            str.append(m_case_[index]);
 138.272 -            index ++;
 138.273 -            count --;
 138.274 -        }
 138.275 -    }
 138.276 -
 138.277 -    /**
 138.278       * Gets the unicode additional properties.
 138.279       * C version getUnicodeProperties.
 138.280       * @param codepoint codepoint whose additional properties is to be
 138.281       *                  retrieved
 138.282 +     * @param column
 138.283       * @return unicode properties
 138.284       */
 138.285 -       public int getAdditional(int codepoint) {
 138.286 -           return m_additionalVectors_[m_additionalTrie_.getCodePointValue(codepoint)];
 138.287 +       public int getAdditional(int codepoint, int column) {
 138.288 +        if (column == -1) {
 138.289 +            return getProperty(codepoint);
 138.290 +        }
 138.291 +           if (column < 0 || column >= m_additionalColumnsCount_) {
 138.292 +           return 0;
 138.293 +       }
 138.294 +       return m_additionalVectors_[
 138.295 +                     m_additionalTrie_.getCodePointValue(codepoint) + column];
 138.296         }
 138.297  
 138.298 -    /**
 138.299 +       /**
 138.300       * <p>Get the "age" of the code point.</p>
 138.301       * <p>The "age" is the Unicode version when the code point was first
 138.302       * designated (as a non-character or for Private Use) or assigned a
 138.303 @@ -316,11 +194,10 @@
 138.304       * <p>This API does not check the validity of the codepoint.</p>
 138.305       * @param codepoint The code point.
 138.306       * @return the Unicode version number
 138.307 -     * @draft ICU 2.1
 138.308       */
 138.309      public VersionInfo getAge(int codepoint)
 138.310      {
 138.311 -        int version = getAdditional(codepoint) >> AGE_SHIFT_;
 138.312 +        int version = getAdditional(codepoint, 0) >> AGE_SHIFT_;
 138.313          return VersionInfo.getInstance(
 138.314                             (version >> FIRST_NIBBLE_SHIFT_) & LAST_NIBBLE_MASK_,
 138.315                             version & LAST_NIBBLE_MASK_, 0, 0);
 138.316 @@ -341,16 +218,16 @@
 138.317  
 138.318      /**
 138.319      * Loads the property data and initialize the UCharacterProperty instance.
 138.320 -    * @throws RuntimeException when data is missing or data has been corrupted
 138.321 +    * @throws MissingResourceException when data is missing or data has been corrupted
 138.322      */
 138.323 -    public static UCharacterProperty getInstance() throws RuntimeException
 138.324 +    public static UCharacterProperty getInstance()
 138.325      {
 138.326 -        if (INSTANCE_ == null) {
 138.327 +        if(INSTANCE_ == null) {
 138.328              try {
 138.329                  INSTANCE_ = new UCharacterProperty();
 138.330              }
 138.331              catch (Exception e) {
 138.332 -                throw new RuntimeException(e.getMessage());
 138.333 +                throw new MissingResourceException(e.getMessage(),"","");
 138.334              }
 138.335          }
 138.336          return INSTANCE_;
 138.337 @@ -359,6 +236,9 @@
 138.338      /**
 138.339       * Checks if the argument c is to be treated as a white space in ICU
 138.340       * rules. Usually ICU rule white spaces are ignored unless quoted.
 138.341 +     * Equivalent to test for Pattern_White_Space Unicode property.
 138.342 +     * Stable set of characters, won't change.
 138.343 +     * See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/
 138.344       * @param c codepoint to check
 138.345       * @return true if c is a ICU white space
 138.346       */
 138.347 @@ -366,8 +246,9 @@
 138.348      {
 138.349          /* "white space" in the sense of ICU rule parsers
 138.350             This is a FIXED LIST that is NOT DEPENDENT ON UNICODE PROPERTIES.
 138.351 -           See UTR #31: http://www.unicode.org/reports/tr31/.
 138.352 +           See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/
 138.353             U+0009..U+000D, U+0020, U+0085, U+200E..U+200F, and U+2028..U+2029
 138.354 +           Equivalent to test for Pattern_White_Space Unicode property.
 138.355          */
 138.356          return (c >= 0x0009 && c <= 0x2029 &&
 138.357                  (c <= 0x000D || c == 0x0020 || c == 0x0085 ||
 138.358 @@ -377,15 +258,6 @@
 138.359      // protected variables -----------------------------------------------
 138.360  
 138.361      /**
 138.362 -    * Case table
 138.363 -    */
 138.364 -    char m_case_[];
 138.365 -
 138.366 -    /**
 138.367 -    * Exception property table
 138.368 -    */
 138.369 -    int m_exception_[];
 138.370 -    /**
 138.371       * Extra property trie
 138.372       */
 138.373      CharTrie m_additionalTrie_;
 138.374 @@ -427,77 +299,19 @@
 138.375      private static final int DATA_BUFFER_SIZE_ = 25000;
 138.376  
 138.377      /**
 138.378 -    * This, from what i infer is the max size of the indicators used for the
 138.379 -    * exception values.
 138.380 -    * Number of bits in an 8-bit integer value
 138.381 -    */
 138.382 -    private static final int EXC_GROUP_ = 8;
 138.383 -
 138.384 -    /**
 138.385 -    * Mask to get the group
 138.386 -    */
 138.387 -    private static final int EXC_GROUP_MASK_ = 255;
 138.388 -
 138.389 -    /**
 138.390 -    * Mask to get the digit value in the exception result
 138.391 -    */
 138.392 -    private static final int EXC_DIGIT_MASK_ = 0xFFFF;
 138.393 -
 138.394 -    /**
 138.395 -    * Offset table for data in exception block.<br>
 138.396 -    * Table formed by the number of bits used for the index, e.g. 0 = 0 bits,
 138.397 -    * 1 = 1 bits.
 138.398 -    */
 138.399 -    private static final byte FLAGS_OFFSET_[] =
 138.400 -    {
 138.401 -        0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
 138.402 -        1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 138.403 -        1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 138.404 -        2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 138.405 -        1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 138.406 -        2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 138.407 -        2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 138.408 -        3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 138.409 -        1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 138.410 -        2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 138.411 -        2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 138.412 -        3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 138.413 -        2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 138.414 -        3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 138.415 -        3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 138.416 -        4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
 138.417 -    };
 138.418 -
 138.419 -    /**
 138.420      * Numeric value shift
 138.421      */
 138.422 -    private static final int VALUE_SHIFT_ = 20;
 138.423 +    private static final int VALUE_SHIFT_ = 8;
 138.424  
 138.425      /**
 138.426      * Mask to be applied after shifting to obtain an unsigned numeric value
 138.427      */
 138.428 -    private static final int UNSIGNED_VALUE_MASK_AFTER_SHIFT_ = 0x7FF;
 138.429 -
 138.430 -    /**
 138.431 -     *
 138.432 -     */
 138.433 -    private static final int NUMERIC_TYPE_SHIFT = 12;
 138.434 -
 138.435 -    /**
 138.436 -    * Folding indicator mask
 138.437 -    */
 138.438 -    private static final int SUPPLEMENTARY_FOLD_INDICATOR_MASK_ = 0x8000;
 138.439 -
 138.440 -    /**
 138.441 -    * Folding offset mask
 138.442 -    */
 138.443 -    private static final int SUPPLEMENTARY_FOLD_OFFSET_MASK_ = 0x7FFF;
 138.444 +    private static final int UNSIGNED_VALUE_MASK_AFTER_SHIFT_ = 0xFF;
 138.445  
 138.446      /**
 138.447      * Shift value for lead surrogate to form a supplementary character.
 138.448      */
 138.449      private static final int LEAD_SURROGATE_SHIFT_ = 10;
 138.450 -
 138.451      /**
 138.452      * Offset to add to combined surrogate pair to avoid msking.
 138.453      */
 138.454 @@ -507,16 +321,12 @@
 138.455                             LEAD_SURROGATE_SHIFT_) -
 138.456                             UTF16.TRAIL_SURROGATE_MIN_VALUE;
 138.457  
 138.458 -    /**
 138.459 -    * To get the last character out from a data type
 138.460 -    */
 138.461 -    private static final int LAST_CHAR_MASK_ = 0xFFFF;
 138.462 +    // additional properties ----------------------------------------------
 138.463  
 138.464      /**
 138.465       * First nibble shift
 138.466       */
 138.467      private static final int FIRST_NIBBLE_SHIFT_ = 0x4;
 138.468 -
 138.469      /**
 138.470       * Second nibble mask
 138.471       */
 138.472 @@ -530,7 +340,7 @@
 138.473  
 138.474      /**
 138.475      * Constructor
 138.476 -    * @exception thrown when data reading fails or data corrupted
 138.477 +    * @exception IOException thrown when data reading fails or data corrupted
 138.478      */
 138.479      private UCharacterProperty() throws IOException
 138.480      {
 138.481 @@ -544,275 +354,16 @@
 138.482          m_trie_.putIndexData(this);
 138.483      }
 138.484  
 138.485 -    /* Is followed by {case-ignorable}* cased  ? */
 138.486 -    /**
 138.487 -    * Getting the correct address for data in the exception value
 138.488 -    * @param evalue exception value
 138.489 -    * @param indicator type of data to retrieve
 138.490 -    * @param address current address to move from
 138.491 -    * @return the correct address
 138.492 -    */
 138.493 -    private int addExceptionOffset(int evalue, int indicator, int address)
 138.494 -    {
 138.495 -        int result = address;
 138.496 -        if (indicator >= EXC_GROUP_) {
 138.497 -        result += FLAGS_OFFSET_[evalue & EXC_GROUP_MASK_];
 138.498 -        evalue >>= EXC_GROUP_;
 138.499 -        indicator -= EXC_GROUP_;
 138.500 -        }
 138.501 -        int mask = (1 << indicator) - 1;
 138.502 -        result += FLAGS_OFFSET_[evalue & mask];
 138.503 -        return result;
 138.504 -    }
 138.505 -
 138.506 -    private static final int TAB     = 0x0009;
 138.507 -    private static final int LF      = 0x000a;
 138.508 -    private static final int FF      = 0x000c;
 138.509 -    private static final int CR      = 0x000d;
 138.510 -    private static final int U_A     = 0x0041;
 138.511 -    private static final int U_Z     = 0x005a;
 138.512 -    private static final int U_a     = 0x0061;
 138.513 -    private static final int U_z     = 0x007a;
 138.514 -    private static final int DEL     = 0x007f;
 138.515 -    private static final int NL      = 0x0085;
 138.516 -    private static final int NBSP    = 0x00a0;
 138.517 -    private static final int CGJ     = 0x034f;
 138.518 -    private static final int FIGURESP= 0x2007;
 138.519 -    private static final int HAIRSP  = 0x200a;
 138.520 -    private static final int ZWNJ    = 0x200c;
 138.521 -    private static final int ZWJ     = 0x200d;
 138.522 -    private static final int RLM     = 0x200f;
 138.523 -    private static final int NNBSP   = 0x202f;
 138.524 -    private static final int WJ      = 0x2060;
 138.525 -    private static final int INHSWAP = 0x206a;
 138.526 -    private static final int NOMDIG  = 0x206f;
 138.527 -    private static final int ZWNBSP  = 0xfeff;
 138.528 -
 138.529 -    public UnicodeSet addPropertyStarts(UnicodeSet set) {
 138.530 -        int c;
 138.531 -
 138.532 -        /* add the start code point of each same-value range of each trie */
 138.533 -        //utrie_enum(&normTrie, NULL, _enumPropertyStartsRange, set);
 138.534 -        TrieIterator propsIter = new TrieIterator(m_trie_);
 138.535 -        RangeValueIterator.Element propsResult = new RangeValueIterator.Element();
 138.536 -          while(propsIter.next(propsResult)){
 138.537 -            set.add(propsResult.start);
 138.538 -        }
 138.539 -        //utrie_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, set);
 138.540 -        TrieIterator propsVectorsIter = new TrieIterator(m_additionalTrie_);
 138.541 -        RangeValueIterator.Element propsVectorsResult = new RangeValueIterator.Element();
 138.542 -        while(propsVectorsIter.next(propsVectorsResult)){
 138.543 -            set.add(propsVectorsResult.start);
 138.544 -        }
 138.545 -
 138.546 -
 138.547 -        /* add code points with hardcoded properties, plus the ones following them */
 138.548 -
 138.549 -        /* add for IS_THAT_CONTROL_SPACE() */
 138.550 -        set.add(TAB); /* range TAB..CR */
 138.551 -        set.add(CR+1);
 138.552 -        set.add(0x1c);
 138.553 -        set.add(0x1f+1);
 138.554 -        set.add(NL);
 138.555 -        set.add(NL+1);
 138.556 -
 138.557 -        /* add for u_isIDIgnorable() what was not added above */
 138.558 -        set.add(DEL); /* range DEL..NBSP-1, NBSP added below */
 138.559 -        set.add(HAIRSP);
 138.560 -        set.add(RLM+1);
 138.561 -        set.add(INHSWAP);
 138.562 -        set.add(NOMDIG+1);
 138.563 -        set.add(ZWNBSP);
 138.564 -        set.add(ZWNBSP+1);
 138.565 -
 138.566 -        /* add no-break spaces for u_isWhitespace() what was not added above */
 138.567 -        set.add(NBSP);
 138.568 -        set.add(NBSP+1);
 138.569 -        set.add(FIGURESP);
 138.570 -        set.add(FIGURESP+1);
 138.571 -        set.add(NNBSP);
 138.572 -        set.add(NNBSP+1);
 138.573 -
 138.574 -        /* add for u_charDigitValue() */
 138.575 -        set.add(0x3007);
 138.576 -        set.add(0x3008);
 138.577 -        set.add(0x4e00);
 138.578 -        set.add(0x4e01);
 138.579 -        set.add(0x4e8c);
 138.580 -        set.add(0x4e8d);
 138.581 -        set.add(0x4e09);
 138.582 -        set.add(0x4e0a);
 138.583 -        set.add(0x56db);
 138.584 -        set.add(0x56dc);
 138.585 -        set.add(0x4e94);
 138.586 -        set.add(0x4e95);
 138.587 -        set.add(0x516d);
 138.588 -        set.add(0x516e);
 138.589 -        set.add(0x4e03);
 138.590 -        set.add(0x4e04);
 138.591 -        set.add(0x516b);
 138.592 -        set.add(0x516c);
 138.593 -        set.add(0x4e5d);
 138.594 -        set.add(0x4e5e);
 138.595 -
 138.596 -        /* add for u_digit() */
 138.597 -        set.add(U_a);
 138.598 -        set.add(U_z+1);
 138.599 -        set.add(U_A);
 138.600 -        set.add(U_Z+1);
 138.601 -
 138.602 -        /* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */
 138.603 -        set.add(WJ); /* range WJ..NOMDIG */
 138.604 -        set.add(0xfff0);
 138.605 -        set.add(0xfffb+1);
 138.606 -        set.add(0xe0000);
 138.607 -        set.add(0xe0fff+1);
 138.608 -
 138.609 -        /* add for UCHAR_GRAPHEME_BASE and others */
 138.610 -        set.add(CGJ);
 138.611 -        set.add(CGJ+1);
 138.612 -
 138.613 -        /* add for UCHAR_JOINING_TYPE */
 138.614 -        set.add(ZWNJ); /* range ZWNJ..ZWJ */
 138.615 -        set.add(ZWJ+1);
 138.616 -
 138.617 -        /* add Jamo type boundaries for UCHAR_HANGUL_SYLLABLE_TYPE */
 138.618 -        set.add(0x1100);
 138.619 -        int value= UCharacter.HangulSyllableType.LEADING_JAMO;
 138.620 -        int value2;
 138.621 -        for(c=0x115a; c<=0x115f; ++c) {
 138.622 -            value2= UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE);
 138.623 -            if(value!=value2) {
 138.624 -                value=value2;
 138.625 -                set.add(c);
 138.626 +    public void upropsvec_addPropertyStarts(UnicodeSet set) {
 138.627 +        /* add the start code point of each same-value range of the properties vectors trie */
 138.628 +        if(m_additionalColumnsCount_>0) {
 138.629 +            /* if m_additionalColumnsCount_==0 then the properties vectors trie may not be there at all */
 138.630 +            TrieIterator propsVectorsIter = new TrieIterator(m_additionalTrie_);
 138.631 +            RangeValueIterator.Element propsVectorsResult = new RangeValueIterator.Element();
 138.632 +            while(propsVectorsIter.next(propsVectorsResult)){
 138.633 +                set.add(propsVectorsResult.start);
 138.634              }
 138.635          }
 138.636 -
 138.637 -        set.add(0x1160);
 138.638 -        value=UCharacter.HangulSyllableType.VOWEL_JAMO;
 138.639 -        for(c=0x11a3; c<=0x11a7; ++c) {
 138.640 -            value2=UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE);
 138.641 -            if(value!=value2) {
 138.642 -                value=value2;
 138.643 -                set.add(c);
 138.644 -            }
 138.645 -        }
 138.646 -
 138.647 -        set.add(0x11a8);
 138.648 -        value=UCharacter.HangulSyllableType.TRAILING_JAMO;
 138.649 -        for(c=0x11fa; c<=0x11ff; ++c) {
 138.650 -            value2=UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE);
 138.651 -            if(value!=value2) {
 138.652 -                value=value2;
 138.653 -                set.add(c);
 138.654 -            }
 138.655 -        }
 138.656 -
 138.657 -
 138.658 -        /*
 138.659 -         * Omit code points for u_charCellWidth() because
 138.660 -         * - it is deprecated and not a real Unicode property
 138.661 -         * - they are probably already set from the trie enumeration
 138.662 -         */
 138.663 -
 138.664 -        /*
 138.665 -         * Omit code points with hardcoded specialcasing properties
 138.666 -         * because we do not build property UnicodeSets for them right now.
 138.667 -         */
 138.668 -        return set; // for chaining
 138.669 -    }
 138.670 -/*----------------------------------------------------------------
 138.671 - * Inclusions list
 138.672 - *----------------------------------------------------------------*/
 138.673 -
 138.674 -    /*
 138.675 -     * Return a set of characters for property enumeration.
 138.676 -     * The set implicitly contains 0x110000 as well, which is one more than the highest
 138.677 -     * Unicode code point.
 138.678 -     *
 138.679 -     * This set is used as an ordered list - its code points are ordered, and
 138.680 -     * consecutive code points (in Unicode code point order) in the set define a range.
 138.681 -     * For each two consecutive characters (start, limit) in the set,
 138.682 -     * all of the UCD/normalization and related properties for
 138.683 -     * all code points start..limit-1 are all the same,
 138.684 -     * except for character names and ISO comments.
 138.685 -     *
 138.686 -     * All Unicode code points U+0000..U+10ffff are covered by these ranges.
 138.687 -     * The ranges define a partition of the Unicode code space.
 138.688 -     * ICU uses the inclusions set to enumerate properties for generating
 138.689 -     * UnicodeSets containing all code points that have a certain property value.
 138.690 -     *
 138.691 -     * The Inclusion List is generated from the UCD. It is generated
 138.692 -     * by enumerating the data tries, and code points for hardcoded properties
 138.693 -     * are added as well.
 138.694 -     *
 138.695 -     * --------------------------------------------------------------------------
 138.696 -     *
 138.697 -     * The following are ideas for getting properties-unique code point ranges,
 138.698 -     * with possible optimizations beyond the current implementation.
 138.699 -     * These optimizations would require more code and be more fragile.
 138.700 -     * The current implementation generates one single list (set) for all properties.
 138.701 -     *
 138.702 -     * To enumerate properties efficiently, one needs to know ranges of
 138.703 -     * repetitive values, so that the value of only each start code point
 138.704 -     * can be applied to the whole range.
 138.705 -     * This information is in principle available in the uprops.icu/unorm.icu data.
 138.706 -     *
 138.707 -     * There are two obstacles:
 138.708 -     *
 138.709 -     * 1. Some properties are computed from multiple data structures,
 138.710 -     *    making it necessary to get repetitive ranges by intersecting
 138.711 -     *    ranges from multiple tries.
 138.712 -     *
 138.713 -     * 2. It is not economical to write code for getting repetitive ranges
 138.714 -     *    that are precise for each of some 50 properties.
 138.715 -     *
 138.716 -     * Compromise ideas:
 138.717 -     *
 138.718 -     * - Get ranges per trie, not per individual property.
 138.719 -     *   Each range contains the same values for a whole group of properties.
 138.720 -     *   This would generate currently five range sets, two for uprops.icu tries
 138.721 -     *   and three for unorm.icu tries.
 138.722 -     *
 138.723 -     * - Combine sets of ranges for multiple tries to get sufficient sets
 138.724 -     *   for properties, e.g., the uprops.icu main and auxiliary tries
 138.725 -     *   for all non-normalization properties.
 138.726 -     *
 138.727 -     * Ideas for representing ranges and combining them:
 138.728 -     *
 138.729 -     * - A UnicodeSet could hold just the start code points of ranges.
 138.730 -     *   Multiple sets are easily combined by or-ing them together.
 138.731 -     *
 138.732 -     * - Alternatively, a UnicodeSet could hold each even-numbered range.
 138.733 -     *   All ranges could be enumerated by using each start code point
 138.734 -     *   (for the even-numbered ranges) as well as each limit (end+1) code point
 138.735 -     *   (for the odd-numbered ranges).
 138.736 -     *   It should be possible to combine two such sets by xor-ing them,
 138.737 -     *   but no more than two.
 138.738 -     *
 138.739 -     * The second way to represent ranges may(?!) yield smaller UnicodeSet arrays,
 138.740 -     * but the first one is certainly simpler and applicable for combining more than
 138.741 -     * two range sets.
 138.742 -     *
 138.743 -     * It is possible to combine all range sets for all uprops/unorm tries into one
 138.744 -     * set that can be used for all properties.
 138.745 -     * As an optimization, there could be less-combined range sets for certain
 138.746 -     * groups of properties.
 138.747 -     * The relationship of which less-combined range set to use for which property
 138.748 -     * depends on the implementation of the properties and must be hardcoded
 138.749 -     * - somewhat error-prone and higher maintenance but can be tested easily
 138.750 -     * by building property sets "the simple way" in test code.
 138.751 -     *
 138.752 -     * ---
 138.753 -     *
 138.754 -     * Do not use a UnicodeSet pattern because that causes infinite recursion;
 138.755 -     * UnicodeSet depends on the inclusions set.
 138.756 -     */
 138.757 -    public UnicodeSet getInclusions() {
 138.758 -        UnicodeSet set = new UnicodeSet();
 138.759 -        NormalizerImpl.addPropertyStarts(set);
 138.760 -        addPropertyStarts(set);
 138.761 -        return set;
 138.762      }
 138.763  
 138.764  }
   139.1 --- a/src/share/classes/sun/text/normalizer/UCharacterPropertyReader.java	Thu Apr 16 17:42:00 2009 +0100
   139.2 +++ b/src/share/classes/sun/text/normalizer/UCharacterPropertyReader.java	Thu Apr 16 19:10:32 2009 -0700
   139.3 @@ -1,5 +1,5 @@
   139.4  /*
   139.5 - * Portions Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
   139.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   139.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   139.8   *
   139.9   * This code is free software; you can redistribute it and/or modify it
  139.10 @@ -22,10 +22,9 @@
  139.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  139.12   * have any questions.
  139.13   */
  139.14 -
  139.15  /*
  139.16   *******************************************************************************
  139.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  139.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  139.19   *                                                                             *
  139.20   * The original version of this source code and documentation is copyrighted   *
  139.21   * and owned by IBM, These materials are provided under terms of a License     *
  139.22 @@ -37,8 +36,8 @@
  139.23  
  139.24  package sun.text.normalizer;
  139.25  
  139.26 +import java.io.DataInputStream;
  139.27  import java.io.InputStream;
  139.28 -import java.io.DataInputStream;
  139.29  import java.io.IOException;
  139.30  
  139.31  /**
  139.32 @@ -50,254 +49,13 @@
  139.33  * </p>
  139.34  * <p>uprops.icu which is in big-endian format is jared together with this
  139.35  * package.</p>
  139.36 +*
  139.37 +* Unicode character properties file format see
  139.38 +* (ICU4C)/source/tools/genprops/store.c
  139.39 +*
  139.40  * @author Syn Wee Quek
  139.41  * @since release 2.1, February 1st 2002
  139.42 -* @draft 2.1
  139.43  */
  139.44 -/* Unicode character properties file format ------------------------------------
  139.45 -
  139.46 -The file format prepared and written here contains several data
  139.47 -structures that store indexes or data.
  139.48 -
  139.49 -
  139.50 -
  139.51 -The following is a description of format version 3 .
  139.52 -
  139.53 -Data contents:
  139.54 -
  139.55 -The contents is a parsed, binary form of several Unicode character
  139.56 -database files, most prominently UnicodeData.txt.
  139.57 -
  139.58 -Any Unicode code point from 0 to 0x10ffff can be looked up to get
  139.59 -the properties, if any, for that code point. This means that the input
  139.60 -to the lookup are 21-bit unsigned integers, with not all of the
  139.61 -21-bit range used.
  139.62 -
  139.63 -It is assumed that client code keeps a uint32_t pointer
  139.64 -to the beginning of the data:
  139.65 -
  139.66 -    const uint32_t *p32;
  139.67 -
  139.68 -Formally, the file contains the following structures:
  139.69 -
  139.70 -    const int32_t indexes[16] with values i0..i15:
  139.71 -
  139.72 -    i0 propsIndex; -- 32-bit unit index to the table of 32-bit properties words
  139.73 -    i1 exceptionsIndex;  -- 32-bit unit index to the table of 32-bit exception words
  139.74 -    i2 exceptionsTopIndex; -- 32-bit unit index to the array of UChars for special mappings
  139.75 -
  139.76 -    i3 additionalTrieIndex; -- 32-bit unit index to the additional trie for more properties
  139.77 -    i4 additionalVectorsIndex; -- 32-bit unit index to the table of properties vectors
  139.78 -    i5 additionalVectorsColumns; -- number of 32-bit words per properties vector
  139.79 -
  139.80 -    i6 reservedItemIndex; -- 32-bit unit index to the top of the properties vectors table
  139.81 -    i7..i9 reservedIndexes; -- reserved values; 0 for now
  139.82 -
  139.83 -    i10 maxValues; -- maximum code values for vector word 0, see uprops.h (format version 3.1+)
  139.84 -    i11 maxValues2; -- maximum code values for vector word 2, see uprops.h (format version 3.2)
  139.85 -    i12..i15 reservedIndexes; -- reserved values; 0 for now
  139.86 -
  139.87 -    PT serialized properties trie, see utrie.h (byte size: 4*(i0-16))
  139.88 -
  139.89 -    P  const uint32_t props32[i1-i0];
  139.90 -    E  const uint32_t exceptions[i2-i1];
  139.91 -    U  const UChar uchars[2*(i3-i2)];
  139.92 -
  139.93 -    AT serialized trie for additional properties (byte size: 4*(i4-i3))
  139.94 -    PV const uint32_t propsVectors[(i6-i4)/i5][i5]==uint32_t propsVectors[i6-i4];
  139.95 -
  139.96 -Trie lookup and properties:
  139.97 -
  139.98 -In order to condense the data for the 21-bit code space, several properties of
  139.99 -the Unicode code assignment are exploited:
 139.100 -- The code space is sparse.
 139.101 -- There are several 10k of consecutive codes with the same properties.
 139.102 -- Characters and scripts are allocated in groups of 16 code points.
 139.103 -- Inside blocks for scripts the properties are often repetitive.
 139.104 -- The 21-bit space is not fully used for Unicode.
 139.105 -
 139.106 -The lookup of properties for a given code point is done with a trie lookup,
 139.107 -using the UTrie implementation.
 139.108 -The trie lookup result is a 16-bit index in the props32[] table where the
 139.109 -actual 32-bit properties word is stored. This is done to save space.
 139.110 -
 139.111 -(There are thousands of 16-bit entries in the trie data table, but
 139.112 -only a few hundred unique 32-bit properties words.
 139.113 -If the trie data table contained 32-bit words directly, then that would be
 139.114 -larger because the length of the table would be the same as now but the
 139.115 -width would be 32 bits instead of 16. This saves more than 10kB.)
 139.116 -
 139.117 -With a given Unicode code point
 139.118 -
 139.119 -    UChar32 c;
 139.120 -
 139.121 -and 0<=c<0x110000, the lookup is done like this:
 139.122 -
 139.123 -    uint16_t i;
 139.124 -    UTRIE_GET16(c, i);
 139.125 -    uint32_t props=p32[i];
 139.126 -
 139.127 -For some characters, not all of the properties can be efficiently encoded
 139.128 -using 32 bits. For them, the 32-bit word contains an index into the exceptions[]
 139.129 -array:
 139.130 -
 139.131 -    if(props&EXCEPTION_BIT)) {
 139.132 -        uint16_t e=(uint16_t)(props>>VALUE_SHIFT);
 139.133 -        ...
 139.134 -    }
 139.135 -
 139.136 -The exception values are a variable number of uint32_t starting at
 139.137 -
 139.138 -    const uint32_t *pe=p32+exceptionsIndex+e;
 139.139 -
 139.140 -The first uint32_t there contains flags about what values actually follow it.
 139.141 -Some of the exception values are UChar32 code points for the case mappings,
 139.142 -others are numeric values etc.
 139.143 -
 139.144 -32-bit properties sets:
 139.145 -
 139.146 -Each 32-bit properties word contains:
 139.147 -
 139.148 - 0.. 4  general category
 139.149 - 5      has exception values
 139.150 - 6..10  BiDi category
 139.151 -11      is mirrored
 139.152 -12..14  numericType:
 139.153 -            0 no numeric value
 139.154 -            1 decimal digit value
 139.155 -            2 digit value
 139.156 -            3 numeric value
 139.157 -            ### TODO: type 4 for Han digits & numbers?!
 139.158 -15..19  reserved
 139.159 -20..31  value according to bits 0..5:
 139.160 -        if(has exception) {
 139.161 -            exception index;
 139.162 -        } else switch(general category) {
 139.163 -        case Ll: delta to uppercase; -- same as titlecase
 139.164 -        case Lu: -delta to lowercase; -- titlecase is same as c
 139.165 -        case Lt: -delta to lowercase; -- uppercase is same as c
 139.166 -        default:
 139.167 -            if(is mirrored) {
 139.168 -                delta to mirror;
 139.169 -            } else if(numericType!=0) {
 139.170 -                numericValue;
 139.171 -            } else {
 139.172 -                0;
 139.173 -            };
 139.174 -        }
 139.175 -
 139.176 -Exception values:
 139.177 -
 139.178 -In the first uint32_t exception word for a code point,
 139.179 -bits
 139.180 -31..16  reserved
 139.181 -15..0   flags that indicate which values follow:
 139.182 -
 139.183 -bit
 139.184 - 0      has uppercase mapping
 139.185 - 1      has lowercase mapping
 139.186 - 2      has titlecase mapping
 139.187 - 3      unused
 139.188 - 4      has numeric value (numerator)
 139.189 -            if numericValue=0x7fffff00+x then numericValue=10^x
 139.190 - 5      has denominator value
 139.191 - 6      has a mirror-image Unicode code point
 139.192 - 7      has SpecialCasing.txt entries
 139.193 - 8      has CaseFolding.txt entries
 139.194 -
 139.195 -According to the flags in this word, one or more uint32_t words follow it
 139.196 -in the sequence of the bit flags in the flags word; if a flag is not set,
 139.197 -then the value is missing or 0:
 139.198 -
 139.199 -For the case mappings and the mirror-image Unicode code point,
 139.200 -one uint32_t or UChar32 each is the code point.
 139.201 -If the titlecase mapping is missing, then it is the same as the uppercase mapping.
 139.202 -
 139.203 -For the digit values, bits 31..16 contain the decimal digit value, and
 139.204 -bits 15..0 contain the digit value. A value of -1 indicates that
 139.205 -this value is missing.
 139.206 -
 139.207 -For the numeric/numerator value, an int32_t word contains the value directly,
 139.208 -except for when there is no numerator but a denominator, then the numerator
 139.209 -is implicitly 1. This means:
 139.210 -    numerator denominator result
 139.211 -    none      none        none
 139.212 -    x         none        x
 139.213 -    none      y           1/y
 139.214 -    x         y           x/y
 139.215 -
 139.216 -If the numerator value is 0x7fffff00+x then it is replaced with 10^x.
 139.217 -
 139.218 -For the denominator value, a uint32_t word contains the value directly.
 139.219 -
 139.220 -For special casing mappings, the 32-bit exception word contains:
 139.221 -31      if set, this character has complex, conditional mappings
 139.222 -        that are not stored;
 139.223 -        otherwise, the mappings are stored according to the following bits
 139.224 -30..24  number of UChars used for mappings
 139.225 -23..16  reserved
 139.226 -15.. 0  UChar offset from the beginning of the UChars array where the
 139.227 -        UChars for the special case mappings are stored in the following format:
 139.228 -
 139.229 -Format of special casing UChars:
 139.230 -One UChar value with lengths as follows:
 139.231 -14..10  number of UChars for titlecase mapping
 139.232 - 9.. 5  number of UChars for uppercase mapping
 139.233 - 4.. 0  number of UChars for lowercase mapping
 139.234 -
 139.235 -Followed by the UChars for lowercase, uppercase, titlecase mappings in this order.
 139.236 -
 139.237 -For case folding mappings, the 32-bit exception word contains:
 139.238 -31..24  number of UChars used for the full mapping
 139.239 -23..16  reserved
 139.240 -15.. 0  UChar offset from the beginning of the UChars array where the
 139.241 -        UChars for the special case mappings are stored in the following format:
 139.242 -
 139.243 -Format of case folding UChars:
 139.244 -Two UChars contain the simple mapping as follows:
 139.245 -    0,  0   no simple mapping
 139.246 -    BMP,0   a simple mapping to a BMP code point
 139.247 -    s1, s2  a simple mapping to a supplementary code point stored as two surrogates
 139.248 -This is followed by the UChars for the full case folding mappings.
 139.249 -
 139.250 -Example:
 139.251 -U+2160, ROMAN NUMERAL ONE, needs an exception because it has a lowercase
 139.252 -mapping and a numeric value.
 139.253 -Its exception values would be stored as 3 uint32_t words:
 139.254 -
 139.255 -- flags=0x0a (see above) with combining class 0
 139.256 -- lowercase mapping 0x2170
 139.257 -- numeric value=1
 139.258 -
 139.259 ---- Additional properties (new in format version 2.1) ---
 139.260 -
 139.261 -The second trie for additional properties (AT) is also a UTrie with 16-bit data.
 139.262 -The data words consist of 32-bit unit indexes (not row indexes!) into the
 139.263 -table of unique properties vectors (PV).
 139.264 -Each vector contains a set of properties.
 139.265 -The width of a vector (number of uint32_t per row) may change
 139.266 -with the formatVersion, it is stored in i5.
 139.267 -
 139.268 -Current properties: see icu/source/common/uprops.h
 139.269 -
 139.270 ---- Changes in format version 3.1 ---
 139.271 -
 139.272 -See i10 maxValues above, contains only UBLOCK_COUNT and USCRIPT_CODE_LIMIT.
 139.273 -
 139.274 ---- Changes in format version 3.2 ---
 139.275 -
 139.276 -- The tries use linear Latin-1 ranges.
 139.277 -- The additional properties bits store full properties XYZ instead
 139.278 -  of partial Other_XYZ, so that changes in the derivation formulas
 139.279 -  need not be tracked in runtime library code.
 139.280 -- Joining Type and Line Break are also stored completely, so that uprops.c
 139.281 -  needs no runtime formulas for enumerated properties either.
 139.282 -- Store the case-sensitive flag in the main properties word.
 139.283 -- i10 also contains U_LB_COUNT and U_EA_COUNT.
 139.284 -- i11 contains maxValues2 for vector word 2.
 139.285 -
 139.286 ------------------------------------------------------------------------------ */
 139.287 -
 139.288  final class UCharacterPropertyReader implements ICUBinary.Authenticate
 139.289  {
 139.290      // public methods ----------------------------------------------------
 139.291 @@ -315,7 +73,6 @@
 139.292      * <p>Protected constructor.</p>
 139.293      * @param inputStream ICU uprop.dat file input stream
 139.294      * @exception IOException throw if data file fails authentication
 139.295 -    * @draft 2.1
 139.296      */
 139.297      protected UCharacterPropertyReader(InputStream inputStream)
 139.298                                                          throws IOException
 139.299 @@ -331,8 +88,7 @@
 139.300      * <p>Reads uprops.icu, parse it into blocks of data to be stored in
 139.301      * UCharacterProperty.</P
 139.302      * @param ucharppty UCharacterProperty instance
 139.303 -    * @exception thrown when data reading fails
 139.304 -    * @draft 2.1
 139.305 +    * @exception IOException thrown when data reading fails
 139.306      */
 139.307      protected void read(UCharacterProperty ucharppty) throws IOException
 139.308      {
 139.309 @@ -362,38 +118,30 @@
 139.310  
 139.311          // read the trie index block
 139.312          // m_props_index_ in terms of ints
 139.313 -        ucharppty.m_trie_ = new CharTrie(m_dataInputStream_, ucharppty);
 139.314 +        ucharppty.m_trie_ = new CharTrie(m_dataInputStream_, null);
 139.315  
 139.316 -        // reads the 32 bit properties block
 139.317 +        // skip the 32 bit properties block
 139.318          int size = m_exceptionOffset_ - m_propertyOffset_;
 139.319 -        ucharppty.m_property_ = new int[size];
 139.320 -        for (int i = 0; i < size; i ++) {
 139.321 -            ucharppty.m_property_[i] = m_dataInputStream_.readInt();
 139.322 -        }
 139.323 +        m_dataInputStream_.skipBytes(size * 4);
 139.324  
 139.325          // reads the 32 bit exceptions block
 139.326          size = m_caseOffset_ - m_exceptionOffset_;
 139.327 -        ucharppty.m_exception_ = new int[size];
 139.328 -        for (int i = 0; i < size; i ++) {
 139.329 -            ucharppty.m_exception_[i] = m_dataInputStream_.readInt();
 139.330 -        }
 139.331 +        m_dataInputStream_.skipBytes(size * 4);
 139.332  
 139.333          // reads the 32 bit case block
 139.334          size = (m_additionalOffset_ - m_caseOffset_) << 1;
 139.335 -        ucharppty.m_case_ = new char[size];
 139.336 -        for (int i = 0; i < size; i ++) {
 139.337 -            ucharppty.m_case_[i] = m_dataInputStream_.readChar();
 139.338 -        }
 139.339 +        m_dataInputStream_.skipBytes(size * 2);
 139.340  
 139.341 -        // reads the additional property block
 139.342 -        ucharppty.m_additionalTrie_ = new CharTrie(m_dataInputStream_,
 139.343 -                                                   ucharppty);
 139.344 +        if(m_additionalColumnsCount_ > 0) {
 139.345 +            // reads the additional property block
 139.346 +            ucharppty.m_additionalTrie_ = new CharTrie(m_dataInputStream_, null);
 139.347  
 139.348 -        // additional properties
 139.349 -        size = m_reservedOffset_ - m_additionalVectorsOffset_;
 139.350 -        ucharppty.m_additionalVectors_ = new int[size];
 139.351 -        for (int i = 0; i < size; i ++) {
 139.352 -            ucharppty.m_additionalVectors_[i] = m_dataInputStream_.readInt();
 139.353 +            // additional properties
 139.354 +            size = m_reservedOffset_ - m_additionalVectorsOffset_;
 139.355 +            ucharppty.m_additionalVectors_ = new int[size];
 139.356 +            for (int i = 0; i < size; i ++) {
 139.357 +                ucharppty.m_additionalVectors_[i] = m_dataInputStream_.readInt();
 139.358 +            }
 139.359          }
 139.360  
 139.361          m_dataInputStream_.close();
 139.362 @@ -428,12 +176,15 @@
 139.363      private byte m_unicodeVersion_[];
 139.364  
 139.365      /**
 139.366 -    * File format version that this class understands.
 139.367 -    * No guarantees are made if a older version is used
 139.368 +    * Data format "UPro".
 139.369      */
 139.370      private static final byte DATA_FORMAT_ID_[] = {(byte)0x55, (byte)0x50,
 139.371                                                      (byte)0x72, (byte)0x6F};
 139.372 -    private static final byte DATA_FORMAT_VERSION_[] = {(byte)0x3, (byte)0x1,
 139.373 +    /**
 139.374 +     * Format version; this code works with all versions with the same major
 139.375 +     * version number and the same Trie bit distribution.
 139.376 +     */
 139.377 +    private static final byte DATA_FORMAT_VERSION_[] = {(byte)0x5, (byte)0,
 139.378                                               (byte)Trie.INDEX_STAGE_1_SHIFT_,
 139.379                                               (byte)Trie.INDEX_STAGE_2_SHIFT_};
 139.380  }
   140.1 --- a/src/share/classes/sun/text/normalizer/UProperty.java	Thu Apr 16 17:42:00 2009 +0100
   140.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   140.3 @@ -1,80 +0,0 @@
   140.4 -/*
   140.5 - * Portions Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
   140.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   140.7 - *
   140.8 - * This code is free software; you can redistribute it and/or modify it
   140.9 - * under the terms of the GNU General Public License version 2 only, as
  140.10 - * published by the Free Software Foundation.  Sun designates this
  140.11 - * particular file as subject to the "Classpath" exception as provided
  140.12 - * by Sun in the LICENSE file that accompanied this code.
  140.13 - *
  140.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
  140.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  140.16 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  140.17 - * version 2 for more details (a copy is included in the LICENSE file that
  140.18 - * accompanied this code).
  140.19 - *
  140.20 - * You should have received a copy of the GNU General Public License version
  140.21 - * 2 along with this work; if not, write to the Free Software Foundation,
  140.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  140.23 - *
  140.24 - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  140.25 - * CA 95054 USA or visit www.sun.com if you need additional information or
  140.26 - * have any questions.
  140.27 - */
  140.28 -
  140.29 -/*
  140.30 - *******************************************************************************
  140.31 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  140.32 - *                                                                             *
  140.33 - * The original version of this source code and documentation is copyrighted   *
  140.34 - * and owned by IBM, These materials are provided under terms of a License     *
  140.35 - * Agreement between IBM and Sun. This technology is protected by multiple     *
  140.36 - * US and International patents. This notice and attribution to IBM may not    *
  140.37 - * to removed.                                                                 *
  140.38 - *******************************************************************************
  140.39 - */
  140.40 -
  140.41 -package sun.text.normalizer;
  140.42 -
  140.43 -/**
  140.44 - * <p>Selection constants for Unicode properties. </p>
  140.45 - * <p>These constants are used in functions like
  140.46 - * UCharacter.hasBinaryProperty(int) to select one of the Unicode properties.
  140.47 - * </p>
  140.48 - * <p>The properties APIs are intended to reflect Unicode properties as
  140.49 - * defined in the Unicode Character Database (UCD) and Unicode Technical
  140.50 - * Reports (UTR).</p>
  140.51 - * <p>For details about the properties see <a href=http://www.unicode.org>
  140.52 - * http://www.unicode.org</a>.</p>
  140.53 - * <p>For names of Unicode properties see the UCD file PropertyAliases.txt.
  140.54 - * </p>
  140.55 - * <p>Important: If ICU is built with UCD files from Unicode versions below
  140.56 - * 3.2, then properties marked with "new" are not or not fully
  140.57 - * available. Check UCharacter.getUnicodeVersion() to be sure.</p>
  140.58 - * @author Syn Wee Quek
  140.59 - * @stable ICU 2.6
  140.60 - * @see com.ibm.icu.lang.UCharacter
  140.61 - */
  140.62 -public interface UProperty
  140.63 -{
  140.64 -    // public data member --------------------------------------------------
  140.65 -
  140.66 -    /**
  140.67 -     * Enumerated property Hangul_Syllable_Type, new in Unicode 4.
  140.68 -     * Returns HangulSyllableType values.
  140.69 -     * @stable ICU 2.6
  140.70 -     */
  140.71 -    public static final int HANGUL_SYLLABLE_TYPE = 0x100B;
  140.72 -
  140.73 -    /**
  140.74 -     * Bitmask property General_Category_Mask.
  140.75 -     * This is the General_Category property returned as a bit mask.
  140.76 -     * When used in UCharacter.getIntPropertyValue(c),
  140.77 -     * returns bit masks for UCharacterCategory values where exactly one bit is set.
  140.78 -     * When used with UCharacter.getPropertyValueName() and UCharacter.getPropertyValueEnum(),
  140.79 -     * a multi-bit mask is used for sets of categories like "Letters".
  140.80 -     * @stable ICU 2.4
  140.81 -     */
  140.82 -    public static final int GENERAL_CATEGORY_MASK = 0x2000;
  140.83 -}
   141.1 --- a/src/share/classes/sun/text/normalizer/UTF16.java	Thu Apr 16 17:42:00 2009 +0100
   141.2 +++ b/src/share/classes/sun/text/normalizer/UTF16.java	Thu Apr 16 19:10:32 2009 -0700
   141.3 @@ -1,5 +1,5 @@
   141.4  /*
   141.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
   141.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   141.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   141.8   *
   141.9   * This code is free software; you can redistribute it and/or modify it
  141.10 @@ -22,10 +22,9 @@
  141.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  141.12   * have any questions.
  141.13   */
  141.14 -
  141.15  /*
  141.16   *******************************************************************************
  141.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  141.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  141.19   *                                                                             *
  141.20   * The original version of this source code and documentation is copyrighted   *
  141.21   * and owned by IBM, These materials are provided under terms of a License     *
  141.22 @@ -184,15 +183,16 @@
  141.23       *            bounds.
  141.24       * @stable ICU 2.1
  141.25       */
  141.26 -    public static int charAt(String source, int offset16)
  141.27 -    {
  141.28 -        if (offset16 < 0 || offset16 >= source.length()) {
  141.29 -            throw new StringIndexOutOfBoundsException(offset16);
  141.30 +    public static int charAt(String source, int offset16) {
  141.31 +        char single = source.charAt(offset16);
  141.32 +        if (single < LEAD_SURROGATE_MIN_VALUE) {
  141.33 +            return single;
  141.34          }
  141.35 +        return _charAt(source, offset16, single);
  141.36 +    }
  141.37  
  141.38 -        char single = source.charAt(offset16);
  141.39 -        if (single < LEAD_SURROGATE_MIN_VALUE ||
  141.40 -            single > TRAIL_SURROGATE_MAX_VALUE) {
  141.41 +    private static int _charAt(String source, int offset16, char single) {
  141.42 +        if (single > TRAIL_SURROGATE_MAX_VALUE) {
  141.43              return single;
  141.44          }
  141.45  
  141.46 @@ -201,29 +201,23 @@
  141.47          // low, look both directions.
  141.48  
  141.49          if (single <= LEAD_SURROGATE_MAX_VALUE) {
  141.50 -            ++ offset16;
  141.51 +            ++offset16;
  141.52              if (source.length() != offset16) {
  141.53                  char trail = source.charAt(offset16);
  141.54 -                if (trail >= TRAIL_SURROGATE_MIN_VALUE &&
  141.55 -                    trail <= TRAIL_SURROGATE_MAX_VALUE) {
  141.56 -                    return UCharacterProperty.getRawSupplementary(single,
  141.57 -                                                                  trail);
  141.58 +                if (trail >= TRAIL_SURROGATE_MIN_VALUE && trail <= TRAIL_SURROGATE_MAX_VALUE) {
  141.59 +                    return UCharacterProperty.getRawSupplementary(single, trail);
  141.60 +                }
  141.61 +            }
  141.62 +        } else {
  141.63 +            --offset16;
  141.64 +            if (offset16 >= 0) {
  141.65 +                // single is a trail surrogate so
  141.66 +                char lead = source.charAt(offset16);
  141.67 +                if (lead >= LEAD_SURROGATE_MIN_VALUE && lead <= LEAD_SURROGATE_MAX_VALUE) {
  141.68 +                    return UCharacterProperty.getRawSupplementary(lead, single);
  141.69                  }
  141.70              }
  141.71          }
  141.72 -        else
  141.73 -            {
  141.74 -                -- offset16;
  141.75 -                if (offset16 >= 0) {
  141.76 -                    // single is a trail surrogate so
  141.77 -                    char lead = source.charAt(offset16);
  141.78 -                    if (lead >= LEAD_SURROGATE_MIN_VALUE &&
  141.79 -                        lead <= LEAD_SURROGATE_MAX_VALUE) {
  141.80 -                        return UCharacterProperty.getRawSupplementary(lead,
  141.81 -                                                                      single);
  141.82 -                    }
  141.83 -                }
  141.84 -            }
  141.85          return single; // return unmatched surrogate
  141.86      }
  141.87  
   142.1 --- a/src/share/classes/sun/text/normalizer/UnicodeSet.java	Thu Apr 16 17:42:00 2009 +0100
   142.2 +++ b/src/share/classes/sun/text/normalizer/UnicodeSet.java	Thu Apr 16 19:10:32 2009 -0700
   142.3 @@ -1,5 +1,5 @@
   142.4  /*
   142.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
   142.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   142.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   142.8   *
   142.9   * This code is free software; you can redistribute it and/or modify it
  142.10 @@ -22,10 +22,9 @@
  142.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  142.12   * have any questions.
  142.13   */
  142.14 -
  142.15  /*
  142.16   *******************************************************************************
  142.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  142.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  142.19   *                                                                             *
  142.20   * The original version of this source code and documentation is copyrighted   *
  142.21   * and owned by IBM, These materials are provided under terms of a License     *
  142.22 @@ -38,11 +37,8 @@
  142.23  package sun.text.normalizer;
  142.24  
  142.25  import java.text.ParsePosition;
  142.26 -import java.util.Map;
  142.27 -import java.util.HashMap;
  142.28 +import java.util.Iterator;
  142.29  import java.util.TreeSet;
  142.30 -import java.util.Iterator;
  142.31 -import java.util.Collection;
  142.32  
  142.33  /**
  142.34   * A mutable set of Unicode characters and multicharacter strings.  Objects of this class
  142.35 @@ -130,8 +126,8 @@
  142.36   * "[:Lu:]" and the Perl-like syntax "\p{Lu}" are recognized.  For a
  142.37   * complete list of supported property patterns, see the User's Guide
  142.38   * for UnicodeSet at
  142.39 - * <a href="http://oss.software.ibm.com/icu/userguide/unicodeSet.html">
  142.40 - * http://oss.software.ibm.com/icu/userguide/unicodeSet.html</a>.
  142.41 + * <a href="http://www.icu-project.org/userguide/unicodeSet.html">
  142.42 + * http://www.icu-project.org/userguide/unicodeSet.html</a>.
  142.43   * Actual determination of property data is defined by the underlying
  142.44   * Unicode database as implemented by UCharacter.
  142.45   *
  142.46 @@ -271,9 +267,11 @@
  142.47   *     </tr>
  142.48   *   </table>
  142.49   * </blockquote>
  142.50 + * <p>To iterate over contents of UnicodeSet, use UnicodeSetIterator class.
  142.51   *
  142.52   * @author Alan Liu
  142.53   * @stable ICU 2.0
  142.54 + * @see UnicodeSetIterator
  142.55   */
  142.56  public class UnicodeSet implements UnicodeMatcher {
  142.57  
  142.58 @@ -322,7 +320,7 @@
  142.59       * properties are all exactly alike, e.g. CJK Ideographs from
  142.60       * U+4E00 to U+9FA5.
  142.61       */
  142.62 -    private static UnicodeSet INCLUSIONS = null;
  142.63 +    private static UnicodeSet INCLUSIONS[] = null;
  142.64  
  142.65      //----------------------------------------------------------------
  142.66      // Public API
  142.67 @@ -471,17 +469,18 @@
  142.68              return result;
  142.69          }
  142.70  
  142.71 -        return _generatePattern(result, escapeUnprintable);
  142.72 +        return _generatePattern(result, escapeUnprintable, true);
  142.73      }
  142.74  
  142.75      /**
  142.76       * Generate and append a string representation of this set to result.
  142.77       * This does not use this.pat, the cleaned up copy of the string
  142.78       * passed to applyPattern().
  142.79 -     * @stable ICU 2.0
  142.80 +     * @param includeStrings if false, doesn't include the strings.
  142.81 +     * @stable ICU 3.8
  142.82       */
  142.83      public StringBuffer _generatePattern(StringBuffer result,
  142.84 -                                         boolean escapeUnprintable) {
  142.85 +                                         boolean escapeUnprintable, boolean includeStrings) {
  142.86          result.append('[');
  142.87  
  142.88          int count = getRangeCount();
  142.89 @@ -524,7 +523,7 @@
  142.90              }
  142.91          }
  142.92  
  142.93 -        if (strings.size() > 0) {
  142.94 +        if (includeStrings && strings.size() > 0) {
  142.95              Iterator it = strings.iterator();
  142.96              while (it.hasNext()) {
  142.97                  result.append('{');
  142.98 @@ -535,19 +534,8 @@
  142.99          return result.append(']');
 142.100      }
 142.101  
 142.102 -    /**
 142.103 -     * Adds the specified range to this set if it is not already
 142.104 -     * present.  If this set already contains the specified range,
 142.105 -     * the call leaves this set unchanged.  If <code>end > start</code>
 142.106 -     * then an empty range is added, leaving the set unchanged.
 142.107 -     *
 142.108 -     * @param start first character, inclusive, of range to be added
 142.109 -     * to this set.
 142.110 -     * @param end last character, inclusive, of range to be added
 142.111 -     * to this set.
 142.112 -     * @stable ICU 2.0
 142.113 -     */
 142.114 -    public UnicodeSet add(int start, int end) {
 142.115 +    // for internal use, after checkFrozen has been called
 142.116 +    private UnicodeSet add_unchecked(int start, int end) {
 142.117          if (start < MIN_VALUE || start > MAX_VALUE) {
 142.118              throw new IllegalArgumentException("Invalid code point U+" + Utility.hex(start, 6));
 142.119          }
 142.120 @@ -569,6 +557,11 @@
 142.121       * @stable ICU 2.0
 142.122       */
 142.123      public final UnicodeSet add(int c) {
 142.124 +        return add_unchecked(c);
 142.125 +    }
 142.126 +
 142.127 +    // for internal use only, after checkFrozen has been called
 142.128 +    private final UnicodeSet add_unchecked(int c) {
 142.129          if (c < MIN_VALUE || c > MAX_VALUE) {
 142.130              throw new IllegalArgumentException("Invalid code point U+" + Utility.hex(c, 6));
 142.131          }
 142.132 @@ -663,13 +656,12 @@
 142.133       * @stable ICU 2.0
 142.134       */
 142.135      public final UnicodeSet add(String s) {
 142.136 -
 142.137          int cp = getSingleCP(s);
 142.138          if (cp < 0) {
 142.139              strings.add(s);
 142.140              pat = null;
 142.141          } else {
 142.142 -            add(cp, cp);
 142.143 +            add_unchecked(cp, cp);
 142.144          }
 142.145          return this;
 142.146      }
 142.147 @@ -981,7 +973,6 @@
 142.148       */
 142.149      void applyPattern(RuleCharacterIterator chars, SymbolTable symbols,
 142.150                        StringBuffer rebuiltPat, int options) {
 142.151 -
 142.152          // Syntax characters: [ ] ^ - & { }
 142.153  
 142.154          // Recognized special forms for chars, sets: c-c s-s s&s
 142.155 @@ -992,7 +983,7 @@
 142.156              opts |= RuleCharacterIterator.SKIP_WHITESPACE;
 142.157          }
 142.158  
 142.159 -        StringBuffer pat = new StringBuffer(), buf = null;
 142.160 +        StringBuffer patBuf = new StringBuffer(), buf = null;
 142.161          boolean usePat = false;
 142.162          UnicodeSet scratch = null;
 142.163          Object backup = null;
 142.164 @@ -1049,13 +1040,13 @@
 142.165                      } else {
 142.166                          // Handle opening '[' delimiter
 142.167                          mode = 1;
 142.168 -                        pat.append('[');
 142.169 +                        patBuf.append('[');
 142.170                          backup = chars.getPos(backup); // prepare to backup
 142.171                          c = chars.next(opts);
 142.172                          literal = chars.isEscaped();
 142.173                          if (c == '^' && !literal) {
 142.174                              invert = true;
 142.175 -                            pat.append('^');
 142.176 +                            patBuf.append('^');
 142.177                              backup = chars.getPos(backup); // prepare to backup
 142.178                              c = chars.next(opts);
 142.179                              literal = chars.isEscaped();
 142.180 @@ -1093,13 +1084,13 @@
 142.181                      if (op != 0) {
 142.182                          syntaxError(chars, "Char expected after operator");
 142.183                      }
 142.184 -                    add(lastChar, lastChar);
 142.185 -                    _appendToPat(pat, lastChar, false);
 142.186 +                    add_unchecked(lastChar, lastChar);
 142.187 +                    _appendToPat(patBuf, lastChar, false);
 142.188                      lastItem = op = 0;
 142.189                  }
 142.190  
 142.191                  if (op == '-' || op == '&') {
 142.192 -                    pat.append(op);
 142.193 +                    patBuf.append(op);
 142.194                  }
 142.195  
 142.196                  if (nested == null) {
 142.197 @@ -1108,14 +1099,14 @@
 142.198                  }
 142.199                  switch (setMode) {
 142.200                  case 1:
 142.201 -                    nested.applyPattern(chars, symbols, pat, options);
 142.202 +                    nested.applyPattern(chars, symbols, patBuf, options);
 142.203                      break;
 142.204                  case 2:
 142.205                      chars.skipIgnored(opts);
 142.206 -                    nested.applyPropertyPattern(chars, pat, symbols);
 142.207 +                    nested.applyPropertyPattern(chars, patBuf, symbols);
 142.208                      break;
 142.209                  case 3: // `nested' already parsed
 142.210 -                    nested._toPattern(pat, false);
 142.211 +                    nested._toPattern(patBuf, false);
 142.212                      break;
 142.213                  }
 142.214  
 142.215 @@ -1158,17 +1149,17 @@
 142.216                  switch (c) {
 142.217                  case ']':
 142.218                      if (lastItem == 1) {
 142.219 -                        add(lastChar, lastChar);
 142.220 -                        _appendToPat(pat, lastChar, false);
 142.221 +                        add_unchecked(lastChar, lastChar);
 142.222 +                        _appendToPat(patBuf, lastChar, false);
 142.223                      }
 142.224                      // Treat final trailing '-' as a literal
 142.225                      if (op == '-') {
 142.226 -                        add(op, op);
 142.227 -                        pat.append(op);
 142.228 +                        add_unchecked(op, op);
 142.229 +                        patBuf.append(op);
 142.230                      } else if (op == '&') {
 142.231                          syntaxError(chars, "Trailing '&'");
 142.232                      }
 142.233 -                    pat.append(']');
 142.234 +                    patBuf.append(']');
 142.235                      mode = 2;
 142.236                      continue;
 142.237                  case '-':
 142.238 @@ -1178,11 +1169,11 @@
 142.239                              continue;
 142.240                          } else {
 142.241                              // Treat final trailing '-' as a literal
 142.242 -                            add(c, c);
 142.243 +                            add_unchecked(c, c);
 142.244                              c = chars.next(opts);
 142.245                              literal = chars.isEscaped();
 142.246                              if (c == ']' && !literal) {
 142.247 -                                pat.append("-]");
 142.248 +                                patBuf.append("-]");
 142.249                                  mode = 2;
 142.250                                  continue;
 142.251                              }
 142.252 @@ -1202,8 +1193,8 @@
 142.253                          syntaxError(chars, "Missing operand after operator");
 142.254                      }
 142.255                      if (lastItem == 1) {
 142.256 -                        add(lastChar, lastChar);
 142.257 -                        _appendToPat(pat, lastChar, false);
 142.258 +                        add_unchecked(lastChar, lastChar);
 142.259 +                        _appendToPat(patBuf, lastChar, false);
 142.260                      }
 142.261                      lastItem = 0;
 142.262                      if (buf == null) {
 142.263 @@ -1228,9 +1219,9 @@
 142.264                      // we don't need to drop through to the further
 142.265                      // processing
 142.266                      add(buf.toString());
 142.267 -                    pat.append('{');
 142.268 -                    _appendToPat(pat, buf.toString(), false);
 142.269 -                    pat.append('}');
 142.270 +                    patBuf.append('{');
 142.271 +                    _appendToPat(patBuf, buf.toString(), false);
 142.272 +                    patBuf.append('}');
 142.273                      continue;
 142.274                  case SymbolTable.SYMBOL_REF:
 142.275                      //         symbols  nosymbols
 142.276 @@ -1250,12 +1241,12 @@
 142.277                      }
 142.278                      if (anchor && op == 0) {
 142.279                          if (lastItem == 1) {
 142.280 -                            add(lastChar, lastChar);
 142.281 -                            _appendToPat(pat, lastChar, false);
 142.282 +                            add_unchecked(lastChar, lastChar);
 142.283 +                            _appendToPat(patBuf, lastChar, false);
 142.284                          }
 142.285 -                        add(UnicodeMatcher.ETHER);
 142.286 +                        add_unchecked(UnicodeMatcher.ETHER);
 142.287                          usePat = true;
 142.288 -                        pat.append(SymbolTable.SYMBOL_REF).append(']');
 142.289 +                        patBuf.append(SymbolTable.SYMBOL_REF).append(']');
 142.290                          mode = 2;
 142.291                          continue;
 142.292                      }
 142.293 @@ -1281,14 +1272,14 @@
 142.294                          // these are most likely typos.
 142.295                          syntaxError(chars, "Invalid range");
 142.296                      }
 142.297 -                    add(lastChar, c);
 142.298 -                    _appendToPat(pat, lastChar, false);
 142.299 -                    pat.append(op);
 142.300 -                    _appendToPat(pat, c, false);
 142.301 +                    add_unchecked(lastChar, c);
 142.302 +                    _appendToPat(patBuf, lastChar, false);
 142.303 +                    patBuf.append(op);
 142.304 +                    _appendToPat(patBuf, c, false);
 142.305                      lastItem = op = 0;
 142.306                  } else {
 142.307 -                    add(lastChar, lastChar);
 142.308 -                    _appendToPat(pat, lastChar, false);
 142.309 +                    add_unchecked(lastChar, lastChar);
 142.310 +                    _appendToPat(patBuf, lastChar, false);
 142.311                      lastChar = c;
 142.312                  }
 142.313                  break;
 142.314 @@ -1315,9 +1306,9 @@
 142.315          // Use the rebuilt pattern (pat) only if necessary.  Prefer the
 142.316          // generated pattern.
 142.317          if (usePat) {
 142.318 -            rebuiltPat.append(pat.toString());
 142.319 +            rebuiltPat.append(patBuf.toString());
 142.320          } else {
 142.321 -            _generatePattern(rebuiltPat, false);
 142.322 +            _generatePattern(rebuiltPat, false, true);
 142.323          }
 142.324      }
 142.325  
 142.326 @@ -1590,7 +1581,9 @@
 142.327  
 142.328      private static class VersionFilter implements Filter {
 142.329          VersionInfo version;
 142.330 +
 142.331          VersionFilter(VersionInfo version) { this.version = version; }
 142.332 +
 142.333          public boolean contains(int ch) {
 142.334              VersionInfo v = UCharacter.getAge(ch);
 142.335              // Reference comparison ok; VersionInfo caches and reuses
 142.336 @@ -1600,18 +1593,28 @@
 142.337          }
 142.338      }
 142.339  
 142.340 -    private static synchronized UnicodeSet getInclusions() {
 142.341 +    private static synchronized UnicodeSet getInclusions(int src) {
 142.342          if (INCLUSIONS == null) {
 142.343 -            UCharacterProperty property = UCharacterProperty.getInstance();
 142.344 -            INCLUSIONS = property.getInclusions();
 142.345 +            INCLUSIONS = new UnicodeSet[UCharacterProperty.SRC_COUNT];
 142.346          }
 142.347 -        return INCLUSIONS;
 142.348 +        if(INCLUSIONS[src] == null) {
 142.349 +            UnicodeSet incl = new UnicodeSet();
 142.350 +            switch(src) {
 142.351 +            case UCharacterProperty.SRC_PROPSVEC:
 142.352 +                UCharacterProperty.getInstance().upropsvec_addPropertyStarts(incl);
 142.353 +                break;
 142.354 +            default:
 142.355 +                throw new IllegalStateException("UnicodeSet.getInclusions(unknown src "+src+")");
 142.356 +            }
 142.357 +            INCLUSIONS[src] = incl;
 142.358 +        }
 142.359 +        return INCLUSIONS[src];
 142.360      }
 142.361  
 142.362      /**
 142.363       * Generic filter-based scanning code for UCD property UnicodeSets.
 142.364       */
 142.365 -    private UnicodeSet applyFilter(Filter filter) {
 142.366 +    private UnicodeSet applyFilter(Filter filter, int src) {
 142.367          // Walk through all Unicode characters, noting the start
 142.368          // and end of each range for which filter.contain(c) is
 142.369          // true.  Add each range to a set.
 142.370 @@ -1629,7 +1632,7 @@
 142.371          clear();
 142.372  
 142.373          int startHasProperty = -1;
 142.374 -        UnicodeSet inclusions = getInclusions();
 142.375 +        UnicodeSet inclusions = getInclusions(src);
 142.376          int limitRange = inclusions.getRangeCount();
 142.377  
 142.378          for (int j=0; j<limitRange; ++j) {
 142.379 @@ -1646,19 +1649,18 @@
 142.380                          startHasProperty = ch;
 142.381                      }
 142.382                  } else if (startHasProperty >= 0) {
 142.383 -                    add(startHasProperty, ch-1);
 142.384 +                    add_unchecked(startHasProperty, ch-1);
 142.385                      startHasProperty = -1;
 142.386                  }
 142.387              }
 142.388          }
 142.389          if (startHasProperty >= 0) {
 142.390 -            add(startHasProperty, 0x10FFFF);
 142.391 +            add_unchecked(startHasProperty, 0x10FFFF);
 142.392          }
 142.393  
 142.394          return this;
 142.395      }
 142.396  
 142.397 -
 142.398      /**
 142.399       * Remove leading and trailing rule white space and compress
 142.400       * internal rule white space to a single space character.
 142.401 @@ -1686,10 +1688,6 @@
 142.402          return buf.toString();
 142.403      }
 142.404  
 142.405 -    //----------------------------------------------------------------
 142.406 -    // Property set API
 142.407 -    //----------------------------------------------------------------
 142.408 -
 142.409      /**
 142.410       * Modifies this set to contain those code points which have the
 142.411       * given value for the given property.  Prior contents of this
 142.412 @@ -1699,22 +1697,21 @@
 142.413       * @param symbols if not null, then symbols are first called to see if a property
 142.414       * is available. If true, then everything else is skipped.
 142.415       * @return this set
 142.416 -     * @draft ICU 3.2
 142.417 -     * @deprecated This is a draft API and might change in a future release of ICU.
 142.418 +     * @stable ICU 3.2
 142.419       */
 142.420      public UnicodeSet applyPropertyAlias(String propertyAlias,
 142.421                                           String valueAlias, SymbolTable symbols) {
 142.422 -                if (propertyAlias.equals("Age"))
 142.423 -                    {
 142.424 -                        // Must munge name, since
 142.425 -                        // VersionInfo.getInstance() does not do
 142.426 -                        // 'loose' matching.
 142.427 -                        VersionInfo version = VersionInfo.getInstance(mungeCharName(valueAlias));
 142.428 -                        applyFilter(new VersionFilter(version));
 142.429 -                        return this;
 142.430 -                    }
 142.431 -                else
 142.432 -                    throw new IllegalArgumentException("Unsupported property");
 142.433 +        if (valueAlias.length() > 0) {
 142.434 +            if (propertyAlias.equals("Age")) {
 142.435 +                // Must munge name, since
 142.436 +                // VersionInfo.getInstance() does not do
 142.437 +                // 'loose' matching.
 142.438 +                VersionInfo version = VersionInfo.getInstance(mungeCharName(valueAlias));
 142.439 +                applyFilter(new VersionFilter(version), UCharacterProperty.SRC_PROPSVEC);
 142.440 +                return this;
 142.441 +            }
 142.442 +        }
 142.443 +        throw new IllegalArgumentException("Unsupported property: " + propertyAlias);
 142.444      }
 142.445  
 142.446      /**
 142.447 @@ -1840,14 +1837,14 @@
 142.448       */
 142.449      private void applyPropertyPattern(RuleCharacterIterator chars,
 142.450                                        StringBuffer rebuiltPat, SymbolTable symbols) {
 142.451 -        String pat = chars.lookahead();
 142.452 +        String patStr = chars.lookahead();
 142.453          ParsePosition pos = new ParsePosition(0);
 142.454 -        applyPropertyPattern(pat, pos, symbols);
 142.455 +        applyPropertyPattern(patStr, pos, symbols);
 142.456          if (pos.getIndex() == 0) {
 142.457              syntaxError(chars, "Invalid property pattern");
 142.458          }
 142.459          chars.jumpahead(pos.getIndex());
 142.460 -        rebuiltPat.append(pat.substring(0, pos.getIndex()));
 142.461 +        rebuiltPat.append(patStr.substring(0, pos.getIndex()));
 142.462      }
 142.463  
 142.464      //----------------------------------------------------------------
 142.465 @@ -1860,8 +1857,9 @@
 142.466       * which UCharacterProperty.isRuleWhiteSpace() returns true,
 142.467       * unless they are quoted or escaped.  This may be ORed together
 142.468       * with other selectors.
 142.469 -     * @internal
 142.470 +     * @stable ICU 3.8
 142.471       */
 142.472      public static final int IGNORE_SPACE = 1;
 142.473  
 142.474  }
 142.475 +
   143.1 --- a/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java	Thu Apr 16 17:42:00 2009 +0100
   143.2 +++ b/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java	Thu Apr 16 19:10:32 2009 -0700
   143.3 @@ -1,5 +1,5 @@
   143.4  /*
   143.5 - * Portions Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
   143.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   143.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   143.8   *
   143.9   * This code is free software; you can redistribute it and/or modify it
  143.10 @@ -22,10 +22,9 @@
  143.11   * CA 95054 USA or visit www.sun.com if you need additional information or
  143.12   * have any questions.
  143.13   */
  143.14 -
  143.15  /*
  143.16   *******************************************************************************
  143.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  143.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  143.19   *                                                                             *
  143.20   * The original version of this source code and documentation is copyrighted   *
  143.21   * and owned by IBM, These materials are provided under terms of a License     *
  143.22 @@ -167,8 +166,8 @@
  143.23       * @param set the set to iterate over.
  143.24       * @stable ICU 2.0
  143.25       */
  143.26 -    public void reset(UnicodeSet set) {
  143.27 -        this.set = set;
  143.28 +    public void reset(UnicodeSet uset) {
  143.29 +        set = uset;
  143.30          reset();
  143.31      }
  143.32  
  143.33 @@ -213,8 +212,8 @@
  143.34      /**
  143.35       * @internal
  143.36       */
  143.37 -    protected void loadRange(int range) {
  143.38 -        nextElement = set.getRangeStart(range);
  143.39 -        endElement = set.getRangeEnd(range);
  143.40 +    protected void loadRange(int aRange) {
  143.41 +        nextElement = set.getRangeStart(aRange);
  143.42 +        endElement = set.getRangeEnd(aRange);
  143.43      }
  143.44  }
   144.1 --- a/src/share/classes/sun/text/normalizer/Utility.java	Thu Apr 16 17:42:00 2009 +0100
   144.2 +++ b/src/share/classes/sun/text/normalizer/Utility.java	Thu Apr 16 19:10:32 2009 -0700
   144.3 @@ -1,5 +1,5 @@
   144.4  /*
   144.5 - * Portions Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
   144.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   144.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   144.8   *
   144.9   * This code is free software; you can redistribute it and/or modify it
  144.10 @@ -24,7 +24,7 @@
  144.11   */
  144.12  /*
  144.13   *******************************************************************************
  144.14 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  144.15 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  144.16   *                                                                             *
  144.17   * The original version of this source code and documentation is copyrighted   *
  144.18   * and owned by IBM, These materials are provided under terms of a License     *
  144.19 @@ -36,11 +36,28 @@
  144.20  
  144.21  package sun.text.normalizer;
  144.22  
  144.23 -// This class contains utility functions so testing not needed
  144.24 -///CLOVER:OFF
  144.25  public final class Utility {
  144.26  
  144.27      /**
  144.28 +     * Convenience utility to compare two Object[]s
  144.29 +     * Ought to be in System.
  144.30 +     * @param len the length to compare.
  144.31 +     * The start indices and start+len must be valid.
  144.32 +     */
  144.33 +    public final static boolean arrayRegionMatches(char[] source, int sourceStart,
  144.34 +                                            char[] target, int targetStart,
  144.35 +                                            int len)
  144.36 +    {
  144.37 +        int sourceEnd = sourceStart + len;
  144.38 +        int delta = targetStart - sourceStart;
  144.39 +        for (int i = sourceStart; i < sourceEnd; i++) {
  144.40 +            if (source[i]!=target[i + delta])
  144.41 +            return false;
  144.42 +        }
  144.43 +        return true;
  144.44 +    }
  144.45 +
  144.46 +    /**
  144.47       * Convert characters outside the range U+0020 to U+007F to
  144.48       * Unicode escapes, and convert backslash to a double backslash.
  144.49       */
  144.50 @@ -344,7 +361,6 @@
  144.51          return false;
  144.52      }
  144.53  
  144.54 -    //// for StringPrep
  144.55      /**
  144.56      * Similar to StringBuffer.getChars, version 1.3.
  144.57      * Since JDK 1.2 implements StringBuffer.getChars differently, this method
  144.58 @@ -356,7 +372,6 @@
  144.59      * @param dst char array to store the retrieved chars
  144.60      * @param dstBegin offset to the start of the destination char array to
  144.61      *                 store the retrieved chars
  144.62 -    * @draft since ICU4J 2.0
  144.63      */
  144.64      public static void getChars(StringBuffer src, int srcBegin, int srcEnd,
  144.65                                  char dst[], int dstBegin)
  144.66 @@ -367,23 +382,4 @@
  144.67          src.getChars(srcBegin, srcEnd, dst, dstBegin);
  144.68      }
  144.69  
  144.70 -    /**
  144.71 -     * Convenience utility to compare two char[]s.
  144.72 -     * @param len the length to compare.
  144.73 -     * The start indices and start+len must be valid.
  144.74 -     */
  144.75 -    public final static boolean arrayRegionMatches(char[] source, int sourceStart,
  144.76 -                                            char[] target, int targetStart,
  144.77 -                                            int len)
  144.78 -    {
  144.79 -        int sourceEnd = sourceStart + len;
  144.80 -        int delta = targetStart - sourceStart;
  144.81 -        for (int i = sourceStart; i < sourceEnd; i++) {
  144.82 -            if (source[i] != target[i + delta])
  144.83 -            return false;
  144.84 -        }
  144.85 -        return true;
  144.86 -    }
  144.87 -
  144.88  }
  144.89 -///CLOVER:ON
   145.1 --- a/src/share/classes/sun/text/normalizer/VersionInfo.java	Thu Apr 16 17:42:00 2009 +0100
   145.2 +++ b/src/share/classes/sun/text/normalizer/VersionInfo.java	Thu Apr 16 19:10:32 2009 -0700
   145.3 @@ -1,5 +1,5 @@
   145.4  /*
   145.5 - * Portions Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
   145.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   145.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   145.8   *
   145.9   * This code is free software; you can redistribute it and/or modify it
  145.10 @@ -24,7 +24,7 @@
  145.11   */
  145.12  /*
  145.13   *******************************************************************************
  145.14 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved                     *
  145.15 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved         *
  145.16   *                                                                             *
  145.17   * The original version of this source code and documentation is copyrighted   *
  145.18   * and owned by IBM, These materials are provided under terms of a License     *
   146.1 Binary file src/share/classes/sun/text/resources/ubidi.icu has changed
   147.1 Binary file src/share/classes/sun/text/resources/unorm.icu has changed
   148.1 Binary file src/share/classes/sun/text/resources/uprops.icu has changed
   149.1 --- a/src/share/native/java/lang/ClassLoader.c	Thu Apr 16 17:42:00 2009 +0100
   149.2 +++ b/src/share/native/java/lang/ClassLoader.c	Thu Apr 16 19:10:32 2009 -0700
   149.3 @@ -1,5 +1,5 @@
   149.4  /*
   149.5 - * Copyright 1996-2005 Sun Microsystems, Inc.  All Rights Reserved.
   149.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   149.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   149.8   *
   149.9   * This code is free software; you can redistribute it and/or modify it
  149.10 @@ -437,3 +437,21 @@
  149.11      (*env)->ReleaseStringUTFChars(env, name, cname);
  149.12      return res;
  149.13  }
  149.14 +
  149.15 +JNIEXPORT jobject JNICALL
  149.16 +Java_java_lang_ClassLoader_getCaller(JNIEnv *env, jclass cls, jint index)
  149.17 +{
  149.18 +    jobjectArray jcallerStack;
  149.19 +    int len;
  149.20 +
  149.21 +    jcallerStack = JVM_GetClassContext(env);
  149.22 +    if ((*env)->ExceptionCheck(env)) {
  149.23 +        return NULL;
  149.24 +    }
  149.25 +    len = (*env)->GetArrayLength(env, jcallerStack);
  149.26 +    if (index < len) {
  149.27 +        return (*env)->GetObjectArrayElement(env, jcallerStack, index);
  149.28 +    }
  149.29 +    return NULL;
  149.30 +}
  149.31 +
   150.1 --- a/src/share/native/java/util/zip/zip_util.c	Thu Apr 16 17:42:00 2009 +0100
   150.2 +++ b/src/share/native/java/util/zip/zip_util.c	Thu Apr 16 19:10:32 2009 -0700
   150.3 @@ -313,6 +313,38 @@
   150.4  }
   150.5  
   150.6  /*
   150.7 + * Searches for the ZIP64 end of central directory (END) header. The
   150.8 + * contents of the ZIP64 END header will be read and placed in end64buf.
   150.9 + * Returns the file position of the ZIP64 END header, otherwise returns
  150.10 + * -1 if the END header was not found or an error occurred.
  150.11 + *
  150.12 + * The ZIP format specifies the "position" of each related record as
  150.13 + *   ...
  150.14 + *   [central directory]
  150.15 + *   [zip64 end of central directory record]
  150.16 + *   [zip64 end of central directory locator]
  150.17 + *   [end of central directory record]
  150.18 + *
  150.19 + * The offset of zip64 end locator can be calculated from endpos as
  150.20 + * "endpos - ZIP64_LOCHDR".
  150.21 + * The "offset" of zip64 end record is stored in zip64 end locator.
  150.22 + */
  150.23 +static jlong
  150.24 +findEND64(jzfile *zip, void *end64buf, jlong endpos)
  150.25 +{
  150.26 +    char loc64[ZIP64_LOCHDR];
  150.27 +    jlong end64pos;
  150.28 +    if (readFullyAt(zip->zfd, loc64, ZIP64_LOCHDR, endpos - ZIP64_LOCHDR) == -1) {
  150.29 +        return -1;    // end64 locator not found
  150.30 +    }
  150.31 +    end64pos = ZIP64_LOCOFF(loc64);
  150.32 +    if (readFullyAt(zip->zfd, end64buf, ZIP64_ENDHDR, end64pos) == -1) {
  150.33 +        return -1;    // end64 record not found
  150.34 +    }
  150.35 +    return end64pos;
  150.36 +}
  150.37 +
  150.38 +/*
  150.39   * Returns a hash code value for a C-style NUL-terminated string.
  150.40   */
  150.41  static unsigned int
  150.42 @@ -463,7 +495,7 @@
  150.43  readCEN(jzfile *zip, jint knownTotal)
  150.44  {
  150.45      /* Following are unsigned 32-bit */
  150.46 -    jlong endpos, cenpos, cenlen;
  150.47 +    jlong endpos, end64pos, cenpos, cenlen, cenoff;
  150.48      /* Following are unsigned 16-bit */
  150.49      jint total, tablelen, i, j;
  150.50      unsigned char *cenbuf = NULL;
  150.51 @@ -474,6 +506,7 @@
  150.52      jlong offset;
  150.53  #endif
  150.54      unsigned char endbuf[ENDHDR];
  150.55 +    jint endhdrlen = ENDHDR;
  150.56      jzcell *entries;
  150.57      jint *table;
  150.58  
  150.59 @@ -490,13 +523,27 @@
  150.60  
  150.61     /* Get position and length of central directory */
  150.62      cenlen = ENDSIZ(endbuf);
  150.63 +    cenoff = ENDOFF(endbuf);
  150.64 +    total  = ENDTOT(endbuf);
  150.65 +    if (cenlen == ZIP64_MAGICVAL || cenoff == ZIP64_MAGICVAL ||
  150.66 +        total == ZIP64_MAGICCOUNT) {
  150.67 +        unsigned char end64buf[ZIP64_ENDHDR];
  150.68 +        if ((end64pos = findEND64(zip, end64buf, endpos)) != -1) {
  150.69 +            cenlen = ZIP64_ENDSIZ(end64buf);
  150.70 +            cenoff = ZIP64_ENDOFF(end64buf);
  150.71 +            total = (jint)ZIP64_ENDTOT(end64buf);
  150.72 +            endpos = end64pos;
  150.73 +            endhdrlen = ZIP64_ENDHDR;
  150.74 +        }
  150.75 +    }
  150.76 +
  150.77      if (cenlen > endpos)
  150.78          ZIP_FORMAT_ERROR("invalid END header (bad central directory size)");
  150.79      cenpos = endpos - cenlen;
  150.80  
  150.81      /* Get position of first local file (LOC) header, taking into
  150.82       * account that there may be a stub prefixed to the zip file. */
  150.83 -    zip->locpos = cenpos - ENDOFF(endbuf);
  150.84 +    zip->locpos = cenpos - cenoff;
  150.85      if (zip->locpos < 0)
  150.86          ZIP_FORMAT_ERROR("invalid END header (bad central directory offset)");
  150.87  
  150.88 @@ -527,7 +574,7 @@
  150.89             out the page size in order to make offset to be multiples of
  150.90             page size.
  150.91          */
  150.92 -        zip->mlen = cenpos - offset + cenlen + ENDHDR;
  150.93 +        zip->mlen = cenpos - offset + cenlen + endhdrlen;
  150.94          zip->offset = offset;
  150.95          mappedAddr = mmap64(0, zip->mlen, PROT_READ, MAP_SHARED, zip->zfd, (off64_t) offset);
  150.96          zip->maddr = (mappedAddr == (void*) MAP_FAILED) ? NULL :
  150.97 @@ -551,8 +598,13 @@
  150.98       * is a 2-byte field, but we (and other zip implementations)
  150.99       * support approx. 2**31 entries, we do not trust ENDTOT, but
 150.100       * treat it only as a strong hint.  When we call ourselves
 150.101 -     * recursively, knownTotal will have the "true" value. */
 150.102 -    total = (knownTotal != -1) ? knownTotal : ENDTOT(endbuf);
 150.103 +     * recursively, knownTotal will have the "true" value.
 150.104 +     *
 150.105 +     * Keep this path alive even with the Zip64 END support added, just
 150.106 +     * for zip files that have more than 0xffff entries but don't have
 150.107 +     * the Zip64 enabled.
 150.108 +     */
 150.109 +    total = (knownTotal != -1) ? knownTotal : total;
 150.110      entries  = zip->entries  = calloc(total, sizeof(entries[0]));
 150.111      tablelen = zip->tablelen = ((total/2) | 1); // Odd -> fewer collisions
 150.112      table    = zip->table    = malloc(tablelen * sizeof(table[0]));
 150.113 @@ -854,6 +906,7 @@
 150.114  static jzentry *
 150.115  newEntry(jzfile *zip, jzcell *zc, AccessHint accessHint)
 150.116  {
 150.117 +    jlong locoff;
 150.118      jint nlen, elen, clen;
 150.119      jzentry *ze;
 150.120      char *cen;
 150.121 @@ -880,18 +933,55 @@
 150.122      ze->size  = CENLEN(cen);
 150.123      ze->csize = (CENHOW(cen) == STORED) ? 0 : CENSIZ(cen);
 150.124      ze->crc   = CENCRC(cen);
 150.125 -    ze->pos   = -(zip->locpos + CENOFF(cen));
 150.126 +    locoff    = CENOFF(cen);
 150.127 +    ze->pos   = -(zip->locpos + locoff);
 150.128  
 150.129      if ((ze->name = malloc(nlen + 1)) == NULL) goto Catch;
 150.130      memcpy(ze->name, cen + CENHDR, nlen);
 150.131      ze->name[nlen] = '\0';
 150.132  
 150.133      if (elen > 0) {
 150.134 +        char *extra = cen + CENHDR + nlen;
 150.135 +
 150.136          /* This entry has "extra" data */
 150.137          if ((ze->extra = malloc(elen + 2)) == NULL) goto Catch;
 150.138          ze->extra[0] = (unsigned char) elen;
 150.139          ze->extra[1] = (unsigned char) (elen >> 8);
 150.140 -        memcpy(ze->extra+2, cen + CENHDR + nlen, elen);
 150.141 +        memcpy(ze->extra+2, extra, elen);
 150.142 +        if (ze->csize == ZIP64_MAGICVAL || ze->size == ZIP64_MAGICVAL ||
 150.143 +            locoff == ZIP64_MAGICVAL) {
 150.144 +            jint off = 0;
 150.145 +            while ((off + 4) < elen) {    // spec: HeaderID+DataSize+Data
 150.146 +                jint sz = SH(extra, off + 2);
 150.147 +                if (SH(extra, off) == ZIP64_EXTID) {
 150.148 +                    off += 4;
 150.149 +                    if (ze->size == ZIP64_MAGICVAL) {
 150.150 +                        // if invalid zip64 extra fields, just skip
 150.151 +                        if (sz < 8 || (off + 8) > elen)
 150.152 +                            break;
 150.153 +                        ze->size = LL(extra, off);
 150.154 +                        sz -= 8;
 150.155 +                        off += 8;
 150.156 +                    }
 150.157 +                    if (ze->csize == ZIP64_MAGICVAL) {
 150.158 +                        if (sz < 8 || (off + 8) > elen)
 150.159 +                            break;
 150.160 +                        ze->csize = LL(extra, off);
 150.161 +                        sz -= 8;
 150.162 +                        off += 8;
 150.163 +                    }
 150.164 +                    if (locoff == ZIP64_MAGICVAL) {
 150.165 +                        if (sz < 8 || (off + 8) > elen)
 150.166 +                            break;
 150.167 +                        ze->pos = -(zip->locpos +  LL(extra, off));
 150.168 +                        sz -= 8;
 150.169 +                        off += 8;
 150.170 +                    }
 150.171 +                    break;
 150.172 +                }
 150.173 +                off += (sz + 4);
 150.174 +            }
 150.175 +        }
 150.176      }
 150.177  
 150.178      if (clen > 0) {
   151.1 --- a/src/share/native/java/util/zip/zip_util.h	Thu Apr 16 17:42:00 2009 +0100
   151.2 +++ b/src/share/native/java/util/zip/zip_util.h	Thu Apr 16 19:10:32 2009 -0700
   151.3 @@ -38,9 +38,13 @@
   151.4  #define CENSIG 0x02014b50L          /* "PK\001\002" */
   151.5  #define ENDSIG 0x06054b50L          /* "PK\005\006" */
   151.6  
   151.7 +#define ZIP64_ENDSIG 0x06064b50L    /* "PK\006\006" */
   151.8 +#define ZIP64_LOCSIG 0x07064b50L    /* "PK\006\007" */
   151.9 +
  151.10  /*
  151.11   * Header sizes including signatures
  151.12   */
  151.13 +
  151.14  #ifdef USE_MMAP
  151.15  #define SIGSIZ  4
  151.16  #endif
  151.17 @@ -49,12 +53,22 @@
  151.18  #define CENHDR 46
  151.19  #define ENDHDR 22
  151.20  
  151.21 +#define ZIP64_ENDHDR 56       // ZIP64 end header size
  151.22 +#define ZIP64_LOCHDR 20       // ZIP64 end loc header size
  151.23 +#define ZIP64_EXTHDR 24       // EXT header size
  151.24 +#define ZIP64_EXTID   1       // Extra field Zip64 header ID
  151.25 +
  151.26 +#define ZIP64_MAGICVAL 0xffffffffLL
  151.27 +#define ZIP64_MAGICCOUNT 0xffff
  151.28 +
  151.29 +
  151.30  /*
  151.31   * Header field access macros
  151.32   */
  151.33  #define CH(b, n) (((unsigned char *)(b))[n])
  151.34  #define SH(b, n) (CH(b, n) | (CH(b, n+1) << 8))
  151.35 -#define LG(b, n) (SH(b, n) | (SH(b, n+2) << 16))
  151.36 +#define LG(b, n) ((SH(b, n) | (SH(b, n+2) << 16)) &0xffffffffUL)
  151.37 +#define LL(b, n) (((jlong)LG(b, n)) | (((jlong)LG(b, n+4)) << 32))
  151.38  #define GETSIG(b) LG(b, 0)
  151.39  
  151.40  /*
  151.41 @@ -106,6 +120,26 @@
  151.42  #define ENDCOM(b) SH(b, 20)         /* size of zip file comment */
  151.43  
  151.44  /*
  151.45 + * Macros for getting Zip64 end of central directory header fields
  151.46 + */
  151.47 +#define ZIP64_ENDLEN(b) LL(b, 4)      /* size of zip64 end of central dir */
  151.48 +#define ZIP64_ENDVEM(b) SH(b, 12)     /* version made by */
  151.49 +#define ZIP64_ENDVER(b) SH(b, 14)     /* version needed to extract */
  151.50 +#define ZIP64_ENDNMD(b) LG(b, 16)     /* number of this disk */
  151.51 +#define ZIP64_ENDDSK(b) LG(b, 20)     /* disk number of start */
  151.52 +#define ZIP64_ENDTOD(b) LL(b, 24)     /* total number of entries on this disk */
  151.53 +#define ZIP64_ENDTOT(b) LL(b, 32)     /* total number of entries */
  151.54 +#define ZIP64_ENDSIZ(b) LL(b, 40)     /* central directory size in bytes */
  151.55 +#define ZIP64_ENDOFF(b) LL(b, 48)     /* offset of first CEN header */
  151.56 +
  151.57 +/*
  151.58 + * Macros for getting Zip64 end of central directory locator fields
  151.59 + */
  151.60 +#define ZIP64_LOCDSK(b) LG(b, 4)      /* disk number start */
  151.61 +#define ZIP64_LOCOFF(b) LL(b, 8)      /* offset of zip64 end */
  151.62 +#define ZIP64_LOCTOT(b) LG(b, 16)     /* total number of disks */
  151.63 +
  151.64 +/*
  151.65   * Supported compression methods
  151.66   */
  151.67  #define STORED      0
  151.68 @@ -145,7 +179,7 @@
  151.69   */
  151.70  typedef struct jzcell {
  151.71      unsigned int hash;    /* 32 bit hashcode on name */
  151.72 -    unsigned int cenpos;  /* Offset of central directory file header */
  151.73 +    jlong cenpos;         /* Offset of central directory file header */
  151.74      unsigned int next;    /* hash chain: index into jzfile->entries */
  151.75  } jzcell;
  151.76  
   152.1 --- a/src/share/native/java/util/zip/zlib-1.1.3/zlib.h	Thu Apr 16 17:42:00 2009 +0100
   152.2 +++ b/src/share/native/java/util/zip/zlib-1.1.3/zlib.h	Thu Apr 16 19:10:32 2009 -0700
   152.3 @@ -106,11 +106,11 @@
   152.4  typedef struct z_stream_s {
   152.5      Bytef    *next_in;  /* next input byte */
   152.6      uInt     avail_in;  /* number of bytes available at next_in */
   152.7 -    uLong    total_in;  /* total nb of input bytes read so far */
   152.8 +    long long total_in;  /* total nb of input bytes read so far */
   152.9  
  152.10      Bytef    *next_out; /* next output byte should be put there */
  152.11      uInt     avail_out; /* remaining free space at next_out */
  152.12 -    uLong    total_out; /* total nb of bytes output so far */
  152.13 +    long long total_out; /* total nb of bytes output so far */
  152.14  
  152.15      char     *msg;      /* last error message, NULL if no error */
  152.16      struct internal_state FAR *state; /* not visible by applications */
   153.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   153.2 +++ b/src/share/native/sun/awt/utility/rect.c	Thu Apr 16 19:10:32 2009 -0700
   153.3 @@ -0,0 +1,102 @@
   153.4 +/*
   153.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   153.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   153.7 + *
   153.8 + * This code is free software; you can redistribute it and/or modify it
   153.9 + * under the terms of the GNU General Public License version 2 only, as
  153.10 + * published by the Free Software Foundation.  Sun designates this
  153.11 + * particular file as subject to the "Classpath" exception as provided
  153.12 + * by Sun in the LICENSE file that accompanied this code.
  153.13 + *
  153.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  153.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  153.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  153.17 + * version 2 for more details (a copy is included in the LICENSE file that
  153.18 + * accompanied this code).
  153.19 + *
  153.20 + * You should have received a copy of the GNU General Public License version
  153.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  153.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  153.23 + *
  153.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  153.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  153.26 + * have any questions.
  153.27 + */
  153.28 +
  153.29 +#include "utility/rect.h"
  153.30 +
  153.31 +#if defined(__cplusplus)
  153.32 +extern "C" {
  153.33 +#endif
  153.34 +
  153.35 +/**
  153.36 + * bitsPerPixel must be 32 for now.
  153.37 + * outBuf must be large enough to conatin all the rectangles.
  153.38 + */
  153.39 +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height, unsigned char * buf, RECT_T * outBuf)
  153.40 +{
  153.41 +    //XXX: we might want to reuse the code in the splashscreen library,
  153.42 +    // though we'd have to deal with the ALPHA_THRESHOLD and different
  153.43 +    // image formats in this case.
  153.44 +    int widthBytes = width * bitsPerPixel / 8;
  153.45 +    int alignedWidth = (((widthBytes - 1) / 4) + 1) * 4;
  153.46 +
  153.47 +    RECT_T * out = outBuf;
  153.48 +
  153.49 +    RECT_T *pPrevLine = NULL, *pFirst = out, *pThis = pFirst;
  153.50 +    int i, j, i0;
  153.51 +    int length;
  153.52 +
  153.53 +    for (j = 0; j < height; j++) {
  153.54 +        /* generate data for a scanline */
  153.55 +
  153.56 +        unsigned char *pSrc = (unsigned char *) buf + j * alignedWidth;
  153.57 +        RECT_T *pLine = pThis;
  153.58 +
  153.59 +        i = 0;
  153.60 +
  153.61 +        do {
  153.62 +            // pSrc[0,1,2] == B,G,R; pSrc[3] == Alpha
  153.63 +            while (i < width && !pSrc[3]) {
  153.64 +                pSrc += 4;
  153.65 +                ++i;
  153.66 +            }
  153.67 +            if (i >= width)
  153.68 +                break;
  153.69 +            i0 = i;
  153.70 +            while (i < width && pSrc[3]) {
  153.71 +                pSrc += 4;
  153.72 +                ++i;
  153.73 +            }
  153.74 +            RECT_SET(*pThis, i0, j, i - i0, 1);
  153.75 +            ++pThis;
  153.76 +        } while (i < width);
  153.77 +
  153.78 +        /*  check if the previous scanline is exactly the same, merge if so
  153.79 +            (this is the only optimization we can use for YXBanded rectangles,
  153.80 +            and win32 supports YXBanded only */
  153.81 +
  153.82 +        length = pThis - pLine;
  153.83 +        if (pPrevLine && pLine - pPrevLine == length) {
  153.84 +            for (i = 0; i < length && RECT_EQ_X(pPrevLine[i], pLine[i]); ++i) {
  153.85 +            }
  153.86 +            if (i == pLine - pPrevLine) {
  153.87 +                // do merge
  153.88 +                for (i = 0; i < length; i++) {
  153.89 +                    RECT_INC_HEIGHT(pPrevLine[i]);
  153.90 +                }
  153.91 +                pThis = pLine;
  153.92 +                continue;
  153.93 +            }
  153.94 +        }
  153.95 +        /* or else use the generated scanline */
  153.96 +
  153.97 +        pPrevLine = pLine;
  153.98 +    }
  153.99 +
 153.100 +    return pThis - pFirst;
 153.101 +}
 153.102 +
 153.103 +#if defined(__cplusplus)
 153.104 +}
 153.105 +#endif
   154.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   154.2 +++ b/src/solaris/classes/sun/awt/X11/InfoWindow.java	Thu Apr 16 19:10:32 2009 -0700
   154.3 @@ -0,0 +1,495 @@
   154.4 +/*
   154.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   154.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   154.7 + *
   154.8 + * This code is free software; you can redistribute it and/or modify it
   154.9 + * under the terms of the GNU General Public License version 2 only, as
  154.10 + * published by the Free Software Foundation.  Sun designates this
  154.11 + * particular file as subject to the "Classpath" exception as provided
  154.12 + * by Sun in the LICENSE file that accompanied this code.
  154.13 + *
  154.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  154.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  154.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  154.17 + * version 2 for more details (a copy is included in the LICENSE file that
  154.18 + * accompanied this code).
  154.19 + *
  154.20 + * You should have received a copy of the GNU General Public License version
  154.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  154.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  154.23 + *
  154.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  154.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  154.26 + * have any questions.
  154.27 + */
  154.28 +
  154.29 +package sun.awt.X11;
  154.30 +
  154.31 +import java.awt.*;
  154.32 +import java.awt.event.*;
  154.33 +import java.awt.peer.TrayIconPeer;
  154.34 +import sun.awt.*;
  154.35 +import java.awt.image.*;
  154.36 +import java.text.BreakIterator;
  154.37 +import java.util.logging.Logger;
  154.38 +import java.util.logging.Level;
  154.39 +import java.util.concurrent.ArrayBlockingQueue;
  154.40 +import java.security.AccessController;
  154.41 +import java.security.PrivilegedAction;
  154.42 +import java.lang.reflect.InvocationTargetException;
  154.43 +
  154.44 +/**
  154.45 + * An utility window class. This is a base class for Tooltip and Balloon.
  154.46 + */
  154.47 +public abstract class InfoWindow extends Window {
  154.48 +    private Container container;
  154.49 +    private Closer closer;
  154.50 +
  154.51 +    protected InfoWindow(Frame parent, Color borderColor) {
  154.52 +        super(parent);
  154.53 +        container = new Container() {
  154.54 +            @Override
  154.55 +            public Insets getInsets() {
  154.56 +                return new Insets(1, 1, 1, 1);
  154.57 +            }
  154.58 +        };
  154.59 +        setLayout(new BorderLayout());
  154.60 +        setBackground(borderColor);
  154.61 +        add(container, BorderLayout.CENTER);
  154.62 +        container.setLayout(new BorderLayout());
  154.63 +
  154.64 +        closer = new Closer();
  154.65 +    }
  154.66 +
  154.67 +    public Component add(Component c) {
  154.68 +        container.add(c, BorderLayout.CENTER);
  154.69 +        return c;
  154.70 +    }
  154.71 +
  154.72 +    protected void setCloser(Runnable action, int time) {
  154.73 +        closer.set(action, time);
  154.74 +    }
  154.75 +
  154.76 +    // Must be executed on EDT.
  154.77 +    protected void show(Point corner, int indent) {
  154.78 +        assert SunToolkit.isDispatchThreadForAppContext(this);
  154.79 +
  154.80 +        pack();
  154.81 +
  154.82 +        Dimension size = getSize();
  154.83 +        // TODO: When 6356322 is fixed we should get screen bounds in
  154.84 +        // this way: eframe.getGraphicsConfiguration().getBounds().
  154.85 +        Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
  154.86 +
  154.87 +        if (corner.x < scrSize.width/2 && corner.y < scrSize.height/2) { // 1st square
  154.88 +            setLocation(corner.x + indent, corner.y + indent);
  154.89 +
  154.90 +        } else if (corner.x >= scrSize.width/2 && corner.y < scrSize.height/2) { // 2nd square
  154.91 +            setLocation(corner.x - indent - size.width, corner.y + indent);
  154.92 +
  154.93 +        } else if (corner.x < scrSize.width/2 && corner.y >= scrSize.height/2) { // 3rd square
  154.94 +            setLocation(corner.x + indent, corner.y - indent - size.height);
  154.95 +
  154.96 +        } else if (corner.x >= scrSize.width/2 && corner.y >= scrSize.height/2) { // 4th square
  154.97 +            setLocation(corner.x - indent - size.width, corner.y - indent - size.height);
  154.98 +        }
  154.99 +
 154.100 +        super.show();
 154.101 +        closer.schedule();
 154.102 +    }
 154.103 +
 154.104 +    public void hide() {
 154.105 +        closer.close();
 154.106 +    }
 154.107 +
 154.108 +    private class Closer implements Runnable {
 154.109 +        Runnable action;
 154.110 +        int time;
 154.111 +
 154.112 +        public void run() {
 154.113 +            doClose();
 154.114 +        }
 154.115 +
 154.116 +        void set(Runnable action, int time) {
 154.117 +            this.action = action;
 154.118 +            this.time = time;
 154.119 +        }
 154.120 +
 154.121 +        void schedule() {
 154.122 +            XToolkit.schedule(this, time);
 154.123 +        }
 154.124 +
 154.125 +        void close() {
 154.126 +            XToolkit.remove(this);
 154.127 +            doClose();
 154.128 +        }
 154.129 +
 154.130 +        // WARNING: this method may be executed on Toolkit thread.
 154.131 +        private void doClose() {
 154.132 +            SunToolkit.executeOnEventHandlerThread(InfoWindow.this, new Runnable() {
 154.133 +                public void run() {
 154.134 +                    InfoWindow.super.hide();
 154.135 +                    invalidate();
 154.136 +                    if (action != null) {
 154.137 +                        action.run();
 154.138 +                    }
 154.139 +                }
 154.140 +            });
 154.141 +        }
 154.142 +    }
 154.143 +
 154.144 +
 154.145 +    private interface LiveArguments {
 154.146 +        /** Whether the target of the InfoWindow is disposed. */
 154.147 +        boolean isDisposed();
 154.148 +
 154.149 +        /** The bounds of the target of the InfoWindow. */
 154.150 +        Rectangle getBounds();
 154.151 +    }
 154.152 +
 154.153 +    public static class Tooltip extends InfoWindow {
 154.154 +
 154.155 +        public interface LiveArguments extends InfoWindow.LiveArguments {
 154.156 +            /** The tooltip to be displayed. */
 154.157 +            String getTooltipString();
 154.158 +        }
 154.159 +
 154.160 +        private final Object target;
 154.161 +        private final LiveArguments liveArguments;
 154.162 +
 154.163 +        private final Label textLabel = new Label("");
 154.164 +        private final Runnable starter = new Runnable() {
 154.165 +                public void run() {
 154.166 +                    display();
 154.167 +                }};
 154.168 +
 154.169 +        private final static int TOOLTIP_SHOW_TIME = 10000;
 154.170 +        private final static int TOOLTIP_START_DELAY_TIME = 1000;
 154.171 +        private final static int TOOLTIP_MAX_LENGTH = 64;
 154.172 +        private final static int TOOLTIP_MOUSE_CURSOR_INDENT = 5;
 154.173 +        private final static Color TOOLTIP_BACKGROUND_COLOR = new Color(255, 255, 220);
 154.174 +        private final static Font TOOLTIP_TEXT_FONT = XWindow.getDefaultFont();
 154.175 +
 154.176 +        public Tooltip(Frame parent, Object target,
 154.177 +                LiveArguments liveArguments)
 154.178 +        {
 154.179 +            super(parent, Color.black);
 154.180 +
 154.181 +            this.target = target;
 154.182 +            this.liveArguments = liveArguments;
 154.183 +
 154.184 +            XTrayIconPeer.suppressWarningString(this);
 154.185 +
 154.186 +            setCloser(null, TOOLTIP_SHOW_TIME);
 154.187 +            textLabel.setBackground(TOOLTIP_BACKGROUND_COLOR);
 154.188 +            textLabel.setFont(TOOLTIP_TEXT_FONT);
 154.189 +            add(textLabel);
 154.190 +        }
 154.191 +
 154.192 +        /*
 154.193 +         * WARNING: this method is executed on Toolkit thread!
 154.194 +         */
 154.195 +        private void display() {
 154.196 +            String tooltipString = liveArguments.getTooltipString();
 154.197 +            if (tooltipString == null) {
 154.198 +                return;
 154.199 +            } else if (tooltipString.length() >  TOOLTIP_MAX_LENGTH) {
 154.200 +                textLabel.setText(tooltipString.substring(0, TOOLTIP_MAX_LENGTH));
 154.201 +            } else {
 154.202 +                textLabel.setText(tooltipString);
 154.203 +            }
 154.204 +
 154.205 +            // Execute on EDT to avoid deadlock (see 6280857).
 154.206 +            SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
 154.207 +                    public void run() {
 154.208 +                        if (liveArguments.isDisposed()) {
 154.209 +                            return;
 154.210 +                        }
 154.211 +                        Point pointer = (Point)AccessController.doPrivileged(new PrivilegedAction() {
 154.212 +                                public Object run() {
 154.213 +                                    if (!isPointerOverTrayIcon(liveArguments.getBounds())) {
 154.214 +                                        return null;
 154.215 +                                    }
 154.216 +                                    return MouseInfo.getPointerInfo().getLocation();
 154.217 +                                }
 154.218 +                            });
 154.219 +                        if (pointer == null) {
 154.220 +                            return;
 154.221 +                        }
 154.222 +                        show(new Point(pointer.x, pointer.y), TOOLTIP_MOUSE_CURSOR_INDENT);
 154.223 +                    }
 154.224 +                });
 154.225 +        }
 154.226 +
 154.227 +        public void enter() {
 154.228 +            XToolkit.schedule(starter, TOOLTIP_START_DELAY_TIME);
 154.229 +        }
 154.230 +
 154.231 +        public void exit() {
 154.232 +            XToolkit.remove(starter);
 154.233 +            if (isVisible()) {
 154.234 +                hide();
 154.235 +            }
 154.236 +        }
 154.237 +
 154.238 +        private boolean isPointerOverTrayIcon(Rectangle trayRect) {
 154.239 +            Point p = MouseInfo.getPointerInfo().getLocation();
 154.240 +            return !(p.x < trayRect.x || p.x > (trayRect.x + trayRect.width) ||
 154.241 +                     p.y < trayRect.y || p.y > (trayRect.y + trayRect.height));
 154.242 +        }
 154.243 +    }
 154.244 +
 154.245 +    public static class Balloon extends InfoWindow {
 154.246 +
 154.247 +        public interface LiveArguments extends InfoWindow.LiveArguments {
 154.248 +            /** The action to be performed upon clicking the baloon. */
 154.249 +            String getActionCommand();
 154.250 +        }
 154.251 +
 154.252 +        private final LiveArguments liveArguments;
 154.253 +        private final Object target;
 154.254 +
 154.255 +        private final static int BALLOON_SHOW_TIME = 10000;
 154.256 +        private final static int BALLOON_TEXT_MAX_LENGTH = 256;
 154.257 +        private final static int BALLOON_WORD_LINE_MAX_LENGTH = 16;
 154.258 +        private final static int BALLOON_WORD_LINE_MAX_COUNT = 4;
 154.259 +        private final static int BALLOON_ICON_WIDTH = 32;
 154.260 +        private final static int BALLOON_ICON_HEIGHT = 32;
 154.261 +        private final static int BALLOON_TRAY_ICON_INDENT = 0;
 154.262 +        private final static Color BALLOON_CAPTION_BACKGROUND_COLOR = new Color(200, 200 ,255);
 154.263 +        private final static Font BALLOON_CAPTION_FONT = new Font(Font.DIALOG, Font.BOLD, 12);
 154.264 +
 154.265 +        private Panel mainPanel = new Panel();
 154.266 +        private Panel captionPanel = new Panel();
 154.267 +        private Label captionLabel = new Label("");
 154.268 +        private Button closeButton = new Button("X");
 154.269 +        private Panel textPanel = new Panel();
 154.270 +        private XTrayIconPeer.IconCanvas iconCanvas = new XTrayIconPeer.IconCanvas(BALLOON_ICON_WIDTH, BALLOON_ICON_HEIGHT);
 154.271 +        private Label[] lineLabels = new Label[BALLOON_WORD_LINE_MAX_COUNT];
 154.272 +        private ActionPerformer ap = new ActionPerformer();
 154.273 +
 154.274 +        private Image iconImage;
 154.275 +        private Image errorImage;
 154.276 +        private Image warnImage;
 154.277 +        private Image infoImage;
 154.278 +        private boolean gtkImagesLoaded;
 154.279 +
 154.280 +        private Displayer displayer = new Displayer();
 154.281 +
 154.282 +        public Balloon(Frame parent, Object target, LiveArguments liveArguments) {
 154.283 +            super(parent, new Color(90, 80 ,190));
 154.284 +            this.liveArguments = liveArguments;
 154.285 +            this.target = target;
 154.286 +
 154.287 +            XTrayIconPeer.suppressWarningString(this);
 154.288 +
 154.289 +            setCloser(new Runnable() {
 154.290 +                    public void run() {
 154.291 +                        if (textPanel != null) {
 154.292 +                            textPanel.removeAll();
 154.293 +                            textPanel.setSize(0, 0);
 154.294 +                            iconCanvas.setSize(0, 0);
 154.295 +                            XToolkit.awtLock();
 154.296 +                            try {
 154.297 +                                displayer.isDisplayed = false;
 154.298 +                                XToolkit.awtLockNotifyAll();
 154.299 +                            } finally {
 154.300 +                                XToolkit.awtUnlock();
 154.301 +                            }
 154.302 +                        }
 154.303 +                    }
 154.304 +                }, BALLOON_SHOW_TIME);
 154.305 +
 154.306 +            add(mainPanel);
 154.307 +
 154.308 +            captionLabel.setFont(BALLOON_CAPTION_FONT);
 154.309 +            captionLabel.addMouseListener(ap);
 154.310 +
 154.311 +            captionPanel.setLayout(new BorderLayout());
 154.312 +            captionPanel.add(captionLabel, BorderLayout.WEST);
 154.313 +            captionPanel.add(closeButton, BorderLayout.EAST);
 154.314 +            captionPanel.setBackground(BALLOON_CAPTION_BACKGROUND_COLOR);
 154.315 +            captionPanel.addMouseListener(ap);
 154.316 +
 154.317 +            closeButton.addActionListener(new ActionListener() {
 154.318 +                    public void actionPerformed(ActionEvent e) {
 154.319 +                        hide();
 154.320 +                    }
 154.321 +                });
 154.322 +
 154.323 +            mainPanel.setLayout(new BorderLayout());
 154.324 +            mainPanel.setBackground(Color.white);
 154.325 +            mainPanel.add(captionPanel, BorderLayout.NORTH);
 154.326 +            mainPanel.add(iconCanvas, BorderLayout.WEST);
 154.327 +            mainPanel.add(textPanel, BorderLayout.CENTER);
 154.328 +
 154.329 +            iconCanvas.addMouseListener(ap);
 154.330 +
 154.331 +            for (int i = 0; i < BALLOON_WORD_LINE_MAX_COUNT; i++) {
 154.332 +                lineLabels[i] = new Label();
 154.333 +                lineLabels[i].addMouseListener(ap);
 154.334 +                lineLabels[i].setBackground(Color.white);
 154.335 +            }
 154.336 +
 154.337 +            displayer.start();
 154.338 +        }
 154.339 +
 154.340 +        public void display(String caption, String text, String messageType) {
 154.341 +            if (!gtkImagesLoaded) {
 154.342 +                loadGtkImages();
 154.343 +            }
 154.344 +            displayer.display(caption, text, messageType);
 154.345 +        }
 154.346 +
 154.347 +        private void _display(String caption, String text, String messageType) {
 154.348 +            captionLabel.setText(caption);
 154.349 +
 154.350 +            BreakIterator iter = BreakIterator.getWordInstance();
 154.351 +            if (text != null) {
 154.352 +                iter.setText(text);
 154.353 +                int start = iter.first(), end;
 154.354 +                int nLines = 0;
 154.355 +
 154.356 +                do {
 154.357 +                    end = iter.next();
 154.358 +
 154.359 +                    if (end == BreakIterator.DONE ||
 154.360 +                        text.substring(start, end).length() >= 50)
 154.361 +                    {
 154.362 +                        lineLabels[nLines].setText(text.substring(start, end == BreakIterator.DONE ?
 154.363 +                                                                  iter.last() : end));
 154.364 +                        textPanel.add(lineLabels[nLines++]);
 154.365 +                        start = end;
 154.366 +                    }
 154.367 +                    if (nLines == BALLOON_WORD_LINE_MAX_COUNT) {
 154.368 +                        if (end != BreakIterator.DONE) {
 154.369 +                            lineLabels[nLines - 1].setText(
 154.370 +                                new String(lineLabels[nLines - 1].getText() + " ..."));
 154.371 +                        }
 154.372 +                        break;
 154.373 +                    }
 154.374 +                } while (end != BreakIterator.DONE);
 154.375 +
 154.376 +
 154.377 +                textPanel.setLayout(new GridLayout(nLines, 1));
 154.378 +            }
 154.379 +
 154.380 +            if ("ERROR".equals(messageType)) {
 154.381 +                iconImage = errorImage;
 154.382 +            } else if ("WARNING".equals(messageType)) {
 154.383 +                iconImage = warnImage;
 154.384 +            } else if ("INFO".equals(messageType)) {
 154.385 +                iconImage = infoImage;
 154.386 +            } else {
 154.387 +                iconImage = null;
 154.388 +            }
 154.389 +
 154.390 +            if (iconImage != null) {
 154.391 +                Dimension tpSize = textPanel.getSize();
 154.392 +                iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ?
 154.393 +                                                        BALLOON_ICON_HEIGHT : tpSize.height));
 154.394 +                iconCanvas.validate();
 154.395 +            }
 154.396 +
 154.397 +            SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
 154.398 +                    public void run() {
 154.399 +                        if (liveArguments.isDisposed()) {
 154.400 +                            return;
 154.401 +                        }
 154.402 +                        Point parLoc = getParent().getLocationOnScreen();
 154.403 +                        Dimension parSize = getParent().getSize();
 154.404 +                        show(new Point(parLoc.x + parSize.width/2, parLoc.y + parSize.height/2),
 154.405 +                             BALLOON_TRAY_ICON_INDENT);
 154.406 +                        if (iconImage != null) {
 154.407 +                            iconCanvas.updateImage(iconImage); // call it after the show(..) above
 154.408 +                        }
 154.409 +                    }
 154.410 +                });
 154.411 +        }
 154.412 +
 154.413 +        public void dispose() {
 154.414 +            displayer.interrupt();
 154.415 +            super.dispose();
 154.416 +        }
 154.417 +
 154.418 +        private void loadGtkImages() {
 154.419 +            if (!gtkImagesLoaded) {
 154.420 +                errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
 154.421 +                    "gtk.icon.gtk-dialog-error.6.rtl");
 154.422 +                warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
 154.423 +                    "gtk.icon.gtk-dialog-warning.6.rtl");
 154.424 +                infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
 154.425 +                    "gtk.icon.gtk-dialog-info.6.rtl");
 154.426 +                gtkImagesLoaded = true;
 154.427 +            }
 154.428 +        }
 154.429 +
 154.430 +        private class ActionPerformer extends MouseAdapter {
 154.431 +            public void mouseClicked(MouseEvent e) {
 154.432 +                // hide the balloon by any click
 154.433 +                hide();
 154.434 +                if (e.getButton() == MouseEvent.BUTTON1) {
 154.435 +                    ActionEvent aev = new ActionEvent(target, ActionEvent.ACTION_PERFORMED,
 154.436 +                                                      liveArguments.getActionCommand(),
 154.437 +                                                      e.getWhen(), e.getModifiers());
 154.438 +                    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(aev);
 154.439 +                }
 154.440 +            }
 154.441 +        }
 154.442 +
 154.443 +        private class Displayer extends Thread {
 154.444 +            final int MAX_CONCURRENT_MSGS = 10;
 154.445 +
 154.446 +            ArrayBlockingQueue<Message> messageQueue = new ArrayBlockingQueue<Message>(MAX_CONCURRENT_MSGS);
 154.447 +            boolean isDisplayed;
 154.448 +
 154.449 +            Displayer() {
 154.450 +                setDaemon(true);
 154.451 +            }
 154.452 +
 154.453 +            public void run() {
 154.454 +                while (true) {
 154.455 +                    Message msg = null;
 154.456 +                    try {
 154.457 +                        msg = (Message)messageQueue.take();
 154.458 +                    } catch (InterruptedException e) {
 154.459 +                        return;
 154.460 +                    }
 154.461 +
 154.462 +                    /*
 154.463 +                     * Wait till the previous message is displayed if any
 154.464 +                     */
 154.465 +                    XToolkit.awtLock();
 154.466 +                    try {
 154.467 +                        while (isDisplayed) {
 154.468 +                            try {
 154.469 +                                XToolkit.awtLockWait();
 154.470 +                            } catch (InterruptedException e) {
 154.471 +                                return;
 154.472 +                            }
 154.473 +                        }
 154.474 +                        isDisplayed = true;
 154.475 +                    } finally {
 154.476 +                        XToolkit.awtUnlock();
 154.477 +                    }
 154.478 +                    _display(msg.caption, msg.text, msg.messageType);
 154.479 +                }
 154.480 +            }
 154.481 +
 154.482 +            void display(String caption, String text, String messageType) {
 154.483 +                messageQueue.offer(new Message(caption, text, messageType));
 154.484 +            }
 154.485 +        }
 154.486 +
 154.487 +        private static class Message {
 154.488 +            String caption, text, messageType;
 154.489 +
 154.490 +            Message(String caption, String text, String messageType) {
 154.491 +                this.caption = caption;
 154.492 +                this.text = text;
 154.493 +                this.messageType = messageType;
 154.494 +            }
 154.495 +        }
 154.496 +    }
 154.497 +}
 154.498 +
   155.1 --- a/src/solaris/classes/sun/awt/X11/XBaseWindow.java	Thu Apr 16 17:42:00 2009 +0100
   155.2 +++ b/src/solaris/classes/sun/awt/X11/XBaseWindow.java	Thu Apr 16 19:10:32 2009 -0700
   155.3 @@ -842,27 +842,35 @@
   155.4                  | XConstants.ButtonMotionMask);
   155.5              final int ownerEvents = 1;
   155.6  
   155.7 -            int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
   155.8 -                getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
   155.9 -                XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
  155.10 -                XConstants.CurrentTime);
  155.11 -            // Check grab results to be consistent with X server grab
  155.12 -            if (ptrGrab != XConstants.GrabSuccess) {
  155.13 -                XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.14 -                XAwtState.setGrabWindow(null);
  155.15 -                grabLog.fine("    Grab Failure - mouse");
  155.16 -                return false;
  155.17 -            }
  155.18  
  155.19 -            int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(),
  155.20 -                getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync,
  155.21 -                XConstants.CurrentTime);
  155.22 -            if (keyGrab != XConstants.GrabSuccess) {
  155.23 -                XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.24 -                XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.25 -                XAwtState.setGrabWindow(null);
  155.26 -                grabLog.fine("    Grab Failure - keyboard");
  155.27 -                return false;
  155.28 +            //6714678: IDE (Netbeans, Eclipse, JDeveloper) Debugger hangs
  155.29 +            //process on Linux
  155.30 +            //The user must pass the sun.awt.disablegrab property to disable
  155.31 +            //taking grabs. This prevents hanging of the GUI when a breakpoint
  155.32 +            //is hit while a popup window taking the grab is open.
  155.33 +            if (!XToolkit.getSunAwtDisableGrab()) {
  155.34 +                int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
  155.35 +                        getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
  155.36 +                        XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
  155.37 +                        XConstants.CurrentTime);
  155.38 +                // Check grab results to be consistent with X server grab
  155.39 +                if (ptrGrab != XConstants.GrabSuccess) {
  155.40 +                    XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.41 +                    XAwtState.setGrabWindow(null);
  155.42 +                    grabLog.fine("    Grab Failure - mouse");
  155.43 +                    return false;
  155.44 +                }
  155.45 +
  155.46 +                int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(),
  155.47 +                        getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync,
  155.48 +                        XConstants.CurrentTime);
  155.49 +                if (keyGrab != XConstants.GrabSuccess) {
  155.50 +                    XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.51 +                    XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.52 +                    XAwtState.setGrabWindow(null);
  155.53 +                    grabLog.fine("    Grab Failure - keyboard");
  155.54 +                    return false;
  155.55 +                }
  155.56              }
  155.57              if (prevGrabWindow != null) {
  155.58                  prevGrabWindow.ungrabInputImpl();
  155.59 @@ -882,8 +890,10 @@
  155.60              grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow});
  155.61              if (grabWindow != null) {
  155.62                  grabWindow.ungrabInputImpl();
  155.63 -                XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.64 -                XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.65 +                if (!XToolkit.getSunAwtDisableGrab()) {
  155.66 +                    XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.67 +                    XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
  155.68 +                }
  155.69                  XAwtState.setGrabWindow(null);
  155.70                  // we need to call XFlush() here to force ungrab
  155.71                  // see 6384219 for details
   156.1 --- a/src/solaris/classes/sun/awt/X11/XCanvasPeer.java	Thu Apr 16 17:42:00 2009 +0100
   156.2 +++ b/src/solaris/classes/sun/awt/X11/XCanvasPeer.java	Thu Apr 16 19:10:32 2009 -0700
   156.3 @@ -27,7 +27,6 @@
   156.4  import java.awt.*;
   156.5  import java.awt.peer.*;
   156.6  
   156.7 -import sun.awt.ComponentAccessor;
   156.8  import sun.awt.SunToolkit;
   156.9  
  156.10  import sun.awt.X11GraphicsConfig;
  156.11 @@ -54,60 +53,45 @@
  156.12          }
  156.13      }
  156.14  
  156.15 -    void resetTargetGC(Component target) {
  156.16 -        ComponentAccessor.resetGC(target);
  156.17 +    /* Get a GraphicsConfig with the same visual on the new
  156.18 +     * screen, which should be easy in Xinerama mode.
  156.19 +     */
  156.20 +    public GraphicsConfiguration getAppropriateGraphicsConfiguration(
  156.21 +                                    GraphicsConfiguration gc)
  156.22 +    {
  156.23 +        if (graphicsConfig == null || gc == null) {
  156.24 +            return gc;
  156.25 +        }
  156.26 +        // Opt: Only need to do if we're not using the default GC
  156.27 +
  156.28 +        int screenNum = ((X11GraphicsDevice)gc.getDevice()).getScreen();
  156.29 +
  156.30 +        X11GraphicsConfig parentgc;
  156.31 +        // save vis id of current gc
  156.32 +        int visual = graphicsConfig.getVisual();
  156.33 +
  156.34 +        X11GraphicsDevice newDev = (X11GraphicsDevice) GraphicsEnvironment.
  156.35 +            getLocalGraphicsEnvironment().
  156.36 +            getScreenDevices()[screenNum];
  156.37 +
  156.38 +        for (int i = 0; i < newDev.getNumConfigs(screenNum); i++) {
  156.39 +            if (visual == newDev.getConfigVisualId(i, screenNum)) {
  156.40 +                // use that
  156.41 +                graphicsConfig = (X11GraphicsConfig)newDev.getConfigurations()[i];
  156.42 +                break;
  156.43 +            }
  156.44 +        }
  156.45 +        // just in case...
  156.46 +        if (graphicsConfig == null) {
  156.47 +            graphicsConfig = (X11GraphicsConfig) GraphicsEnvironment.
  156.48 +                getLocalGraphicsEnvironment().
  156.49 +                getScreenDevices()[screenNum].
  156.50 +                getDefaultConfiguration();
  156.51 +        }
  156.52 +
  156.53 +        return graphicsConfig;
  156.54      }
  156.55  
  156.56 -    /*
  156.57 -     * Called when the Window this
  156.58 -     * Canvas is on is moved onto another Xinerama screen.
  156.59 -     *
  156.60 -     * Canvases can be created with a non-defulat GraphicsConfiguration.  The
  156.61 -     * GraphicsConfiguration needs to be changed to one on the new screen,
  156.62 -     * preferably with the same visual ID.
  156.63 -     *
  156.64 -     * Up-called for other windows peer instances (XPanelPeer, XWindowPeer).
  156.65 -     *
  156.66 -     * Should only be called from the event thread.
  156.67 -     */
  156.68 -    public void displayChanged(int screenNum) {
  156.69 -        resetLocalGC(screenNum);
  156.70 -        resetTargetGC(target);
  156.71 -    }
  156.72 -
  156.73 -    /* Set graphicsConfig to a GraphicsConfig with the same visual on the new
  156.74 -     * screen, which should be easy in Xinerama mode.
  156.75 -     *
  156.76 -     * Should only be called from displayChanged(), and therefore only from
  156.77 -     * the event thread.
  156.78 -     */
  156.79 -    void resetLocalGC(int screenNum) {
  156.80 -        // Opt: Only need to do if we're not using the default GC
  156.81 -        if (graphicsConfig != null) {
  156.82 -            X11GraphicsConfig parentgc;
  156.83 -            // save vis id of current gc
  156.84 -            int visual = graphicsConfig.getVisual();
  156.85 -
  156.86 -            X11GraphicsDevice newDev = (X11GraphicsDevice) GraphicsEnvironment.
  156.87 -                getLocalGraphicsEnvironment().
  156.88 -                getScreenDevices()[screenNum];
  156.89 -
  156.90 -            for (int i = 0; i < newDev.getNumConfigs(screenNum); i++) {
  156.91 -                if (visual == newDev.getConfigVisualId(i, screenNum)) {
  156.92 -                    // use that
  156.93 -                    graphicsConfig = (X11GraphicsConfig)newDev.getConfigurations()[i];
  156.94 -                    break;
  156.95 -                }
  156.96 -            }
  156.97 -            // just in case...
  156.98 -            if (graphicsConfig == null) {
  156.99 -                graphicsConfig = (X11GraphicsConfig) GraphicsEnvironment.
 156.100 -                    getLocalGraphicsEnvironment().
 156.101 -                    getScreenDevices()[screenNum].
 156.102 -                    getDefaultConfiguration();
 156.103 -            }
 156.104 -        }
 156.105 -    }
 156.106      protected boolean shouldFocusOnClick() {
 156.107          // Canvas should always be able to be focused by mouse clicks.
 156.108          return true;
   157.1 --- a/src/solaris/classes/sun/awt/X11/XComponentPeer.java	Thu Apr 16 17:42:00 2009 +0100
   157.2 +++ b/src/solaris/classes/sun/awt/X11/XComponentPeer.java	Thu Apr 16 19:10:32 2009 -0700
   157.3 @@ -35,6 +35,7 @@
   157.4  import java.awt.Font;
   157.5  import java.awt.FontMetrics;
   157.6  import java.awt.Graphics;
   157.7 +import java.awt.GraphicsConfiguration;
   157.8  import java.awt.Image;
   157.9  import java.awt.Insets;
  157.10  import java.awt.KeyboardFocusManager;
  157.11 @@ -76,11 +77,6 @@
  157.12  public class XComponentPeer extends XWindow implements ComponentPeer, DropTargetPeer,
  157.13      BackBufferCapsProvider
  157.14  {
  157.15 -    /* FIX ME: these constants copied from java.awt.KeyboardFocusManager */
  157.16 -    static final int SNFH_FAILURE = 0;
  157.17 -    static final int SNFH_SUCCESS_HANDLED = 1;
  157.18 -    static final int SNFH_SUCCESS_PROCEED = 2;
  157.19 -
  157.20      private static final Logger log = Logger.getLogger("sun.awt.X11.XComponentPeer");
  157.21      private static final Logger buffersLog = Logger.getLogger("sun.awt.X11.XComponentPeer.multibuffer");
  157.22      private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XComponentPeer");
  157.23 @@ -166,7 +162,7 @@
  157.24          enableLog.log(Level.FINE, "Initial enable state: {0}", new Object[] {Boolean.valueOf(enabled)});
  157.25  
  157.26          if (target.isVisible()) {
  157.27 -            show();
  157.28 +            setVisible(true);
  157.29          }
  157.30      }
  157.31  
  157.32 @@ -314,113 +310,27 @@
  157.33          return null;
  157.34      }
  157.35  
  157.36 -    /**
  157.37 -     * Returns whether or not this component should be given focus on mouse click.
  157.38 -     * Default implementation return whether or not this peer is "focusable"
  157.39 -     * Descendants might want to override it to extend/restrict conditions at which this
  157.40 -     * component should be focused by click (see MCanvasPeer and MPanelPeer)
  157.41 -     */
  157.42 -    protected boolean shouldFocusOnClick() {
  157.43 -        return isFocusable();
  157.44 -    }
  157.45 -
  157.46 -    /**
  157.47 -     * Checks whether or not this component would be focused by native system if it would be allowed to do so.
  157.48 -     * Currently it checks that it displayable, visible, enabled and focusable.
  157.49 -     */
  157.50 -    static boolean canBeFocusedByClick(Component component) {
  157.51 -        if (component == null) {
  157.52 -            return false;
  157.53 -        } else {
  157.54 -            return component.isDisplayable() && component.isVisible() && component.isEnabled() && component.isFocusable();
  157.55 -        }
  157.56 -    }
  157.57 -
  157.58 -    static Window getContainingWindow(Component comp) {
  157.59 -        while (comp != null && !(comp instanceof Window)) {
  157.60 -            comp = comp.getParent();
  157.61 -        }
  157.62 -
  157.63 -        return (Window)comp;
  157.64 -    }
  157.65 -
  157.66 -    static Method processSynchronousLightweightTransferMethod;
  157.67 -    static boolean processSynchronousLightweightTransfer(Component heavyweight, Component descendant,
  157.68 -                                                  boolean temporary, boolean focusedWindowChangeAllowed,
  157.69 -                                                  long time)
  157.70 +    // TODO: consider moving it to KeyboardFocusManagerPeerImpl
  157.71 +    final public boolean requestFocus(Component lightweightChild, boolean temporary,
  157.72 +                                      boolean focusedWindowChangeAllowed, long time,
  157.73 +                                      CausedFocusEvent.Cause cause)
  157.74      {
  157.75 -        try {
  157.76 -            if (processSynchronousLightweightTransferMethod == null) {
  157.77 -                processSynchronousLightweightTransferMethod =
  157.78 -                    (Method)AccessController.doPrivileged(
  157.79 -                        new PrivilegedExceptionAction() {
  157.80 -                                public Object run() throws IllegalAccessException, NoSuchMethodException
  157.81 -                                {
  157.82 -                                    Method m = KeyboardFocusManager.class.
  157.83 -                                        getDeclaredMethod("processSynchronousLightweightTransfer",
  157.84 -                                                          new Class[] {Component.class, Component.class,
  157.85 -                                                                       Boolean.TYPE, Boolean.TYPE,
  157.86 -                                                                       Long.TYPE});
  157.87 -                                    m.setAccessible(true);
  157.88 -                                    return m;
  157.89 -                                }
  157.90 -                            });
  157.91 -            }
  157.92 -            Object[] params = new Object[] {
  157.93 -                        heavyweight,
  157.94 -                        descendant,
  157.95 -                        Boolean.valueOf(temporary),
  157.96 -                        Boolean.valueOf(focusedWindowChangeAllowed),
  157.97 -                        Long.valueOf(time)
  157.98 -                    };
  157.99 -            return ((Boolean)processSynchronousLightweightTransferMethod.invoke(null, params)).booleanValue();
 157.100 -        } catch (PrivilegedActionException pae) {
 157.101 -            pae.printStackTrace();
 157.102 -            return false;
 157.103 -        } catch (IllegalAccessException iae) {
 157.104 -            iae.printStackTrace();
 157.105 -            return false;
 157.106 -        } catch (IllegalArgumentException iaee) {
 157.107 -            iaee.printStackTrace();
 157.108 -            return false;
 157.109 -        } catch (InvocationTargetException ite) {
 157.110 -            ite.printStackTrace();
 157.111 -            return false;
 157.112 -        }
 157.113 -    }
 157.114 -
 157.115 -    static Method requestFocusWithCause;
 157.116 -
 157.117 -    static void callRequestFocus(Component target, CausedFocusEvent.Cause cause) {
 157.118 -        if (requestFocusWithCause == null) {
 157.119 -            requestFocusWithCause = SunToolkit.getMethod(Component.class, "requestFocus", new Class[] {CausedFocusEvent.Cause.class});
 157.120 -        }
 157.121 -        if (requestFocusWithCause != null) {
 157.122 -            try {
 157.123 -                requestFocusWithCause.invoke(target, new Object[] {cause});
 157.124 -            } catch (Exception e) {
 157.125 -                e.printStackTrace();
 157.126 -            }
 157.127 -        }
 157.128 -    }
 157.129 -
 157.130 -    final public boolean requestFocus(Component lightweightChild, boolean temporary,
 157.131 -                                      boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause)
 157.132 -    {
 157.133 -        if (processSynchronousLightweightTransfer(target, lightweightChild, temporary,
 157.134 +        if (XKeyboardFocusManagerPeer.
 157.135 +            processSynchronousLightweightTransfer(target, lightweightChild, temporary,
 157.136                                                    focusedWindowChangeAllowed, time))
 157.137          {
 157.138              return true;
 157.139          }
 157.140  
 157.141 -        int result = XKeyboardFocusManagerPeer
 157.142 -            .shouldNativelyFocusHeavyweight(target, lightweightChild,
 157.143 -                                            temporary, focusedWindowChangeAllowed, time, cause);
 157.144 +        int result = XKeyboardFocusManagerPeer.
 157.145 +            shouldNativelyFocusHeavyweight(target, lightweightChild,
 157.146 +                                           temporary, focusedWindowChangeAllowed,
 157.147 +                                           time, cause);
 157.148  
 157.149          switch (result) {
 157.150 -          case SNFH_FAILURE:
 157.151 +          case XKeyboardFocusManagerPeer.SNFH_FAILURE:
 157.152                return false;
 157.153 -          case SNFH_SUCCESS_PROCEED:
 157.154 +          case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED:
 157.155                // Currently we just generate focus events like we deal with lightweight instead of calling
 157.156                // XSetInputFocus on native window
 157.157                if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Proceeding with request to " +
 157.158 @@ -433,7 +343,7 @@
 157.159                 * focus owner which had focus before WLF. So, we should not add request record for such requests
 157.160                 * but store this component in mostRecent - and return true as before for compatibility.
 157.161                 */
 157.162 -              Window parentWindow = getContainingWindow(target);
 157.163 +              Window parentWindow = SunToolkit.getContainingWindow(target);
 157.164                if (parentWindow == null) {
 157.165                    return rejectFocusRequestHelper("WARNING: Parent window is null");
 157.166                }
 157.167 @@ -454,14 +364,13 @@
 157.168                if (!(res && parentWindow.isFocused())) {
 157.169                    return rejectFocusRequestHelper("Waiting for asynchronous processing of the request");
 157.170                }
 157.171 -
 157.172 -              // NOTE: We simulate heavyweight behavior of Motif - component receives focus right
 157.173 -              // after request, not after event. Normally, we should better listen for event
 157.174 -              // by listeners.
 157.175 -              return XKeyboardFocusManagerPeer.simulateMotifRequestFocus(lightweightChild, target, temporary,
 157.176 -                                                                         focusedWindowChangeAllowed, time, cause);
 157.177 +              return XKeyboardFocusManagerPeer.deliverFocus(lightweightChild,
 157.178 +                                                            (Component)target,
 157.179 +                                                            temporary,
 157.180 +                                                            focusedWindowChangeAllowed,
 157.181 +                                                            time, cause);
 157.182                // Motif compatibility code
 157.183 -          case SNFH_SUCCESS_HANDLED:
 157.184 +          case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED:
 157.185                // Either lightweight or excessive request - all events are generated.
 157.186                return true;
 157.187          }
 157.188 @@ -470,7 +379,7 @@
 157.189  
 157.190      private boolean rejectFocusRequestHelper(String logMsg) {
 157.191          if (focusLog.isLoggable(Level.FINER)) focusLog.finer(logMsg);
 157.192 -        KeyboardFocusManagerPeerImpl.removeLastFocusRequest(target);
 157.193 +        XKeyboardFocusManagerPeer.removeLastFocusRequest(target);
 157.194          return false;
 157.195      }
 157.196  
 157.197 @@ -496,10 +405,6 @@
 157.198          xSetVisible(b);
 157.199      }
 157.200  
 157.201 -    public void show() {
 157.202 -        setVisible(true);
 157.203 -    }
 157.204 -
 157.205      public void hide() {
 157.206          setVisible(false);
 157.207      }
 157.208 @@ -618,8 +523,9 @@
 157.209      void handleJavaMouseEvent(MouseEvent e) {
 157.210          switch (e.getID()) {
 157.211            case MouseEvent.MOUSE_PRESSED:
 157.212 -              if (target == e.getSource() && shouldFocusOnClick()
 157.213 -                  && !target.isFocusOwner() && canBeFocusedByClick(target))
 157.214 +              if (target == e.getSource() &&
 157.215 +                  !target.isFocusOwner() &&
 157.216 +                  XKeyboardFocusManagerPeer.shouldFocusOnClick(target))
 157.217                {
 157.218                    XWindowPeer parentXWindow = getParentTopLevel();
 157.219                    Window parentWindow = ((Window)parentXWindow.getTarget());
 157.220 @@ -633,7 +539,7 @@
 157.221  //                       WindowEvent wfg = new WindowEvent(parentWindow, WindowEvent.WINDOW_GAINED_FOCUS);
 157.222  //                       parentWindow.dispatchEvent(wfg);
 157.223  //                   }
 157.224 -                  callRequestFocus(target, CausedFocusEvent.Cause.MOUSE_EVENT);
 157.225 +                  XKeyboardFocusManagerPeer.requestFocusFor(target, CausedFocusEvent.Cause.MOUSE_EVENT);
 157.226                }
 157.227                break;
 157.228          }
 157.229 @@ -1418,59 +1324,21 @@
 157.230          }
 157.231      }
 157.232  
 157.233 -    public void restack() {
 157.234 -        synchronized(target.getTreeLock()) {
 157.235 -            // Build the list of X windows in the window corresponding to this container
 157.236 -            // This list is already in correct Java stacking order
 157.237 -            Container cont = (Container)target;
 157.238 -            Vector order = new Vector(cont.getComponentCount());
 157.239 -            HashSet set = new HashSet();
 157.240 +    /**
 157.241 +     * Lowers this component at the bottom of the above HW peer. If the above parameter
 157.242 +     * is null then the method places this component at the top of the Z-order.
 157.243 +     */
 157.244 +    public void setZOrder(ComponentPeer above) {
 157.245 +        long aboveWindow = (above != null) ? ((XComponentPeer)above).getWindow() : 0;
 157.246  
 157.247 -            addTree(order, set, cont);
 157.248 -
 157.249 -            XToolkit.awtLock();
 157.250 -            try {
 157.251 -                // Get the current list of X window in X window. Some of the windows
 157.252 -                // might be only native
 157.253 -                XQueryTree qt = new XQueryTree(getContentWindow());
 157.254 -                try {
 157.255 -                    if (qt.execute() != 0) {
 157.256 -                        if (qt.get_nchildren() != 0) {
 157.257 -                            long pchildren = qt.get_children();
 157.258 -                            int j = 0; // index to insert
 157.259 -                            for (int i = 0; i < qt.get_nchildren(); i++) {
 157.260 -                                Long w = Long.valueOf(Native.getLong(pchildren, i));
 157.261 -                                if (!set.contains(w)) {
 157.262 -                                    set.add(w);
 157.263 -                                    order.add(j++, w);
 157.264 -                                }
 157.265 -                            }
 157.266 -                        }
 157.267 -                    }
 157.268 -
 157.269 -                    if (order.size() != 0) {
 157.270 -                        // Create native array of the windows
 157.271 -                        long windows = Native.allocateLongArray(order.size());
 157.272 -                        Native.putLong(windows, order);
 157.273 -
 157.274 -                        // Restack native window according to the new order
 157.275 -                        XlibWrapper.XRestackWindows(XToolkit.getDisplay(), windows, order.size());
 157.276 -
 157.277 -                        XlibWrapper.unsafe.freeMemory(windows);
 157.278 -                    }
 157.279 -                } finally {
 157.280 -                    qt.dispose();
 157.281 -                }
 157.282 -            } finally {
 157.283 -                XToolkit.awtUnlock();
 157.284 -            }
 157.285 +        XToolkit.awtLock();
 157.286 +        try{
 157.287 +            XlibWrapper.SetZOrder(XToolkit.getDisplay(), getWindow(), aboveWindow);
 157.288 +        }finally{
 157.289 +            XToolkit.awtUnlock();
 157.290          }
 157.291      }
 157.292  
 157.293 -    public boolean isRestackSupported() {
 157.294 -        return true;
 157.295 -    }
 157.296 -
 157.297      private void addTree(Collection order, Set set, Container cont) {
 157.298          for (int i = 0; i < cont.getComponentCount(); i++) {
 157.299              Component comp = cont.getComponent(i);
 157.300 @@ -1560,4 +1428,8 @@
 157.301              }
 157.302          }
 157.303      }
 157.304 +
 157.305 +    public void updateGraphicsData(GraphicsConfiguration gc) {
 157.306 +        initGraphicsConfiguration();
 157.307 +    }
 157.308  }
   158.1 --- a/src/solaris/classes/sun/awt/X11/XConstants.java	Thu Apr 16 17:42:00 2009 +0100
   158.2 +++ b/src/solaris/classes/sun/awt/X11/XConstants.java	Thu Apr 16 19:10:32 2009 -0700
   158.3 @@ -1,5 +1,5 @@
   158.4  /*
   158.5 - * Copyright 2003-2008 Sun Microsystems, Inc.  All Rights Reserved.
   158.6 + * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
   158.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   158.8   *
   158.9   * This code is free software; you can redistribute it and/or modify it
  158.10 @@ -684,4 +684,19 @@
  158.11  
  158.12      public static final int LSBFirst = 0 ;
  158.13      public static final int MSBFirst = 1 ;
  158.14 +
  158.15 +    /* XKB support */
  158.16 +    public static final int  XkbUseCoreKbd = 0x0100 ;
  158.17 +    public static final int  XkbNewKeyboardNotify = 0;
  158.18 +    public static final int  XkbMapNotify = 1;
  158.19 +    public static final int  XkbStateNotify = 2;
  158.20 +    public static final long XkbNewKeyboardNotifyMask = (1L << 0);
  158.21 +    public static final long XkbMapNotifyMask = (1L << 1);
  158.22 +    public static final long XkbStateNotifyMask = (1L << 2);
  158.23 +    public static final long XkbGroupStateMask  = (1L << 4);
  158.24 +    public static final long XkbKeyTypesMask = (1L<<0);
  158.25 +    public static final long XkbKeySymsMask = (1L<<1);
  158.26 +    public static final long XkbModifierMapMask = (1L<<2);
  158.27 +    public static final long XkbVirtualModsMask = (1L<<6); //server map
  158.28 +
  158.29  }
   159.1 --- a/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java	Thu Apr 16 17:42:00 2009 +0100
   159.2 +++ b/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java	Thu Apr 16 19:10:32 2009 -0700
   159.3 @@ -383,7 +383,7 @@
   159.4              dimensions.setInsets(getRealInsets());
   159.5              insets_corrected = true;
   159.6  
   159.7 -            if (isMaximized() || isNull(correction)) {
   159.8 +            if (isMaximized()) {
   159.9                  return;
  159.10              }
  159.11  
  159.12 @@ -451,7 +451,7 @@
  159.13  
  159.14      public Insets getInsets() {
  159.15          Insets in = copy(getRealInsets());
  159.16 -        in.top += getMenuBarHeight() + getWarningWindowHeight();
  159.17 +        in.top += getMenuBarHeight();
  159.18          if (insLog.isLoggable(Level.FINEST)) {
  159.19              insLog.log(Level.FINEST, "Get insets returns {0}", new Object[] {in});
  159.20          }
  159.21 @@ -802,6 +802,8 @@
  159.22          }
  159.23          reconfigureContentWindow(newDimensions);
  159.24          updateChildrenSizes();
  159.25 +
  159.26 +        repositionSecurityWarning();
  159.27      }
  159.28  
  159.29      private void checkShellRectSize(Rectangle shellRect) {
   160.1 --- a/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java	Thu Apr 16 17:42:00 2009 +0100
   160.2 +++ b/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java	Thu Apr 16 19:10:32 2009 -0700
   160.3 @@ -184,6 +184,7 @@
   160.4              fl = new FocusEvent(currentOwner, FocusEvent.FOCUS_LOST, false, lightweightChild);
   160.5          }
   160.6  
   160.7 +        // TODO: do we need to wrap in sequenced?
   160.8          if (fl != null) {
   160.9              postEvent(XComponentPeer.wrapInSequenced(fl));
  160.10          }
  160.11 @@ -203,9 +204,9 @@
  160.12                                              temporary, false, time, cause);
  160.13  
  160.14          switch (result) {
  160.15 -          case XComponentPeer.SNFH_FAILURE:
  160.16 +          case XKeyboardFocusManagerPeer.SNFH_FAILURE:
  160.17                return false;
  160.18 -          case XComponentPeer.SNFH_SUCCESS_PROCEED:
  160.19 +          case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED:
  160.20                // Currently we just generate focus events like we deal with lightweight instead of calling
  160.21                // XSetInputFocus on native window
  160.22  
  160.23 @@ -235,9 +236,11 @@
  160.24                // NOTE: We simulate heavyweight behavior of Motif - component receives focus right
  160.25                // after request, not after event. Normally, we should better listen for event
  160.26                // by listeners.
  160.27 +
  160.28 +              // TODO: consider replacing with XKeyboardFocusManagerPeer.deliverFocus
  160.29                return simulateMotifRequestFocus(lightweightChild, temporary, focusedWindowChangeAllowed, time);
  160.30                // Motif compatibility code
  160.31 -          case XComponentPeer.SNFH_SUCCESS_HANDLED:
  160.32 +          case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED:
  160.33                // Either lightweight or excessive requiest - all events are generated.
  160.34                return true;
  160.35          }
  160.36 @@ -379,4 +382,9 @@
  160.37  
  160.38      public void applyShape(Region shape) {
  160.39      }
  160.40 +
  160.41 +    public void setZOrder(ComponentPeer above) {
  160.42 +    }
  160.43 +
  160.44 +    public void updateGraphicsData(GraphicsConfiguration gc) {}
  160.45  }
   161.1 --- a/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java	Thu Apr 16 17:42:00 2009 +0100
   161.2 +++ b/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java	Thu Apr 16 19:10:32 2009 -0700
   161.3 @@ -739,7 +739,17 @@
   161.4          this.filter = filter;
   161.5      }
   161.6  
   161.7 -    public void show() {
   161.8 +
   161.9 +    public void dispose() {
  161.10 +        FileDialog fd = (FileDialog)fileDialog;
  161.11 +        if (fd != null) {
  161.12 +            fd.removeAll();
  161.13 +        }
  161.14 +        super.dispose();
  161.15 +    }
  161.16 +
  161.17 +    // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit
  161.18 +    public void setVisible(boolean b){
  161.19          if (fileDialog == null) {
  161.20              init((FileDialog)target);
  161.21          }
  161.22 @@ -754,34 +764,20 @@
  161.23              setFile(savedFile);
  161.24          }
  161.25  
  161.26 -        super.show();
  161.27 -        selectionField.requestFocusInWindow();
  161.28 -    }
  161.29 -
  161.30 -    public void dispose() {
  161.31 -        FileDialog fd = (FileDialog)fileDialog;
  161.32 -        if (fd != null) {
  161.33 -            fd.removeAll();
  161.34 -        }
  161.35 -        super.dispose();
  161.36 -    }
  161.37 -
  161.38 -    // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit
  161.39 -    public void setVisible(boolean b){
  161.40          super.setVisible(b);
  161.41          if (b == true){
  161.42              // See 6240074 for more information
  161.43              XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
  161.44              choicePeer.addXChoicePeerListener(this);
  161.45 -
  161.46              KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
  161.47          }else{
  161.48              // See 6240074 for more information
  161.49              XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
  161.50              choicePeer.removeXChoicePeerListener();
  161.51 -
  161.52              KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
  161.53          }
  161.54 +
  161.55 +        selectionField.requestFocusInWindow();
  161.56      }
  161.57  
  161.58      /*
   162.1 --- a/src/solaris/classes/sun/awt/X11/XFramePeer.java	Thu Apr 16 17:42:00 2009 +0100
   162.2 +++ b/src/solaris/classes/sun/awt/X11/XFramePeer.java	Thu Apr 16 19:10:32 2009 -0700
   162.3 @@ -36,6 +36,7 @@
   162.4  import java.awt.peer.FramePeer;
   162.5  import java.util.logging.Level;
   162.6  import java.util.logging.Logger;
   162.7 +import sun.awt.AWTAccessor;
   162.8  
   162.9  class XFramePeer extends XDecoratedPeer implements FramePeer {
  162.10      private static Logger log = Logger.getLogger("sun.awt.X11.XFramePeer");
  162.11 @@ -231,13 +232,19 @@
  162.12          }
  162.13      }
  162.14  
  162.15 -    public int getState() { return state; }
  162.16 +    public int getState() {
  162.17 +        synchronized(getStateLock()) {
  162.18 +            return state;
  162.19 +        }
  162.20 +    }
  162.21  
  162.22      public void setState(int newState) {
  162.23 -        if (!isShowing()) {
  162.24 -            stateLog.finer("Frame is not showing");
  162.25 -            state = newState;
  162.26 -            return;
  162.27 +        synchronized(getStateLock()) {
  162.28 +            if (!isShowing()) {
  162.29 +                stateLog.finer("Frame is not showing");
  162.30 +                state = newState;
  162.31 +                return;
  162.32 +            }
  162.33          }
  162.34          changeState(newState);
  162.35      }
  162.36 @@ -296,6 +303,9 @@
  162.37          int old_state = state;
  162.38          state = newState;
  162.39  
  162.40 +        // sync target with peer
  162.41 +        AWTAccessor.getFrameAccessor().setExtendedState((Frame)target, state);
  162.42 +
  162.43          if ((changed & Frame.ICONIFIED) != 0) {
  162.44              if ((state & Frame.ICONIFIED) != 0) {
  162.45                  stateLog.finer("Iconified");
   163.1 --- a/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java	Thu Apr 16 17:42:00 2009 +0100
   163.2 +++ b/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java	Thu Apr 16 19:10:32 2009 -0700
   163.3 @@ -31,6 +31,7 @@
   163.4  import java.awt.event.FocusEvent;
   163.5  
   163.6  import java.awt.peer.KeyboardFocusManagerPeer;
   163.7 +import java.awt.peer.ComponentPeer;
   163.8  
   163.9  import java.lang.reflect.InvocationTargetException;
  163.10  import java.lang.reflect.Method;
  163.11 @@ -40,136 +41,90 @@
  163.12  
  163.13  import sun.awt.CausedFocusEvent;
  163.14  import sun.awt.SunToolkit;
  163.15 +import sun.awt.KeyboardFocusManagerPeerImpl;
  163.16  
  163.17 -public class XKeyboardFocusManagerPeer implements KeyboardFocusManagerPeer {
  163.18 +public class XKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
  163.19      private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XKeyboardFocusManagerPeer");
  163.20 -    KeyboardFocusManager manager;
  163.21 -
  163.22 -    XKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
  163.23 -        this.manager = manager;
  163.24 -    }
  163.25  
  163.26      private static Object lock = new Object() {};
  163.27      private static Component currentFocusOwner;
  163.28      private static Window currentFocusedWindow;
  163.29  
  163.30 -    static void setCurrentNativeFocusOwner(Component comp) {
  163.31 -        if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focus owner " + comp);
  163.32 -        synchronized(lock) {
  163.33 +    XKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
  163.34 +        super(manager);
  163.35 +    }
  163.36 +
  163.37 +    @Override
  163.38 +    public void setCurrentFocusOwner(Component comp) {
  163.39 +        setCurrentNativeFocusOwner(comp);
  163.40 +    }
  163.41 +
  163.42 +    @Override
  163.43 +    public Component getCurrentFocusOwner() {
  163.44 +        return getCurrentNativeFocusOwner();
  163.45 +    }
  163.46 +
  163.47 +    @Override
  163.48 +    public Window getCurrentFocusedWindow() {
  163.49 +        return getCurrentNativeFocusedWindow();
  163.50 +    }
  163.51 +
  163.52 +    public static void setCurrentNativeFocusOwner(Component comp) {
  163.53 +        synchronized (lock) {
  163.54              currentFocusOwner = comp;
  163.55          }
  163.56      }
  163.57  
  163.58 -    static void setCurrentNativeFocusedWindow(Window win) {
  163.59 -        if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focused window " + win);
  163.60 -        synchronized(lock) {
  163.61 -            currentFocusedWindow = win;
  163.62 -        }
  163.63 -    }
  163.64 -
  163.65 -    static Component getCurrentNativeFocusOwner() {
  163.66 +    public static Component getCurrentNativeFocusOwner() {
  163.67          synchronized(lock) {
  163.68              return currentFocusOwner;
  163.69          }
  163.70      }
  163.71  
  163.72 -    static Window getCurrentNativeFocusedWindow() {
  163.73 +    public static void setCurrentNativeFocusedWindow(Window win) {
  163.74 +        if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focused window " + win);
  163.75 +        XWindowPeer from = null, to = null;
  163.76 +
  163.77 +        synchronized(lock) {
  163.78 +            if (currentFocusedWindow != null) {
  163.79 +                from = (XWindowPeer)currentFocusedWindow.getPeer();
  163.80 +            }
  163.81 +
  163.82 +            currentFocusedWindow = win;
  163.83 +
  163.84 +            if (currentFocusedWindow != null) {
  163.85 +                to = (XWindowPeer)currentFocusedWindow.getPeer();
  163.86 +            }
  163.87 +        }
  163.88 +
  163.89 +        if (from != null) {
  163.90 +            from.updateSecurityWarningVisibility();
  163.91 +        }
  163.92 +        if (to != null) {
  163.93 +            to.updateSecurityWarningVisibility();
  163.94 +        }
  163.95 +    }
  163.96 +
  163.97 +    public static Window getCurrentNativeFocusedWindow() {
  163.98          synchronized(lock) {
  163.99              return currentFocusedWindow;
 163.100          }
 163.101      }
 163.102  
 163.103 -    public Window getCurrentFocusedWindow() {
 163.104 -        return getCurrentNativeFocusedWindow();
 163.105 -    }
 163.106 -
 163.107 -    public void setCurrentFocusOwner(Component comp) {
 163.108 -        setCurrentNativeFocusOwner(comp);
 163.109 -    }
 163.110 -
 163.111 -    public Component getCurrentFocusOwner() {
 163.112 -        return getCurrentNativeFocusOwner();
 163.113 -    }
 163.114 -
 163.115 -    public void clearGlobalFocusOwner(Window activeWindow) {
 163.116 -         if (activeWindow != null) {
 163.117 -            Component focusOwner = activeWindow.getFocusOwner();
 163.118 -            if (focusLog.isLoggable(Level.FINE)) focusLog.fine("Clearing global focus owner " + focusOwner);
 163.119 -            if (focusOwner != null) {
 163.120 -//                XComponentPeer nativePeer = XComponentPeer.getNativeContainer(focusOwner);
 163.121 -//                if (nativePeer != null) {
 163.122 -                    FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null,
 163.123 -                                                         CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER);
 163.124 -                    XWindow.sendEvent(fl);
 163.125 -//                }
 163.126 -            }
 163.127 -        }
 163.128 -   }
 163.129 -
 163.130 -    static boolean simulateMotifRequestFocus(Component lightweightChild, Component target, boolean temporary,
 163.131 -                                      boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause)
 163.132 +    // TODO: do something to eliminate this forwarding
 163.133 +    public static boolean deliverFocus(Component lightweightChild,
 163.134 +                                       Component target,
 163.135 +                                       boolean temporary,
 163.136 +                                       boolean focusedWindowChangeAllowed,
 163.137 +                                       long time,
 163.138 +                                       CausedFocusEvent.Cause cause)
 163.139      {
 163.140 -        if (lightweightChild == null) {
 163.141 -            lightweightChild = (Component)target;
 163.142 -        }
 163.143 -        Component currentOwner = XKeyboardFocusManagerPeer.getCurrentNativeFocusOwner();
 163.144 -        if (currentOwner != null && currentOwner.getPeer() == null) {
 163.145 -            currentOwner = null;
 163.146 -        }
 163.147 -        if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Simulating transfer from " + currentOwner + " to " + lightweightChild);
 163.148 -        FocusEvent  fg = new CausedFocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, false, currentOwner, cause);
 163.149 -        FocusEvent fl = null;
 163.150 -        if (currentOwner != null) {
 163.151 -            fl = new CausedFocusEvent(currentOwner, FocusEvent.FOCUS_LOST, false, lightweightChild, cause);
 163.152 -        }
 163.153 -
 163.154 -        if (fl != null) {
 163.155 -            XWindow.sendEvent(fl);
 163.156 -        }
 163.157 -        XWindow.sendEvent(fg);
 163.158 -        return true;
 163.159 -    }
 163.160 -
 163.161 -    static Method shouldNativelyFocusHeavyweightMethod;
 163.162 -
 163.163 -    static int shouldNativelyFocusHeavyweight(Component heavyweight,
 163.164 -         Component descendant, boolean temporary,
 163.165 -         boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause)
 163.166 -    {
 163.167 -        if (shouldNativelyFocusHeavyweightMethod == null) {
 163.168 -            Class[] arg_types =
 163.169 -                new Class[] { Component.class,
 163.170 -                              Component.class,
 163.171 -                              Boolean.TYPE,
 163.172 -                              Boolean.TYPE,
 163.173 -                              Long.TYPE,
 163.174 -                              CausedFocusEvent.Cause.class
 163.175 -            };
 163.176 -
 163.177 -            shouldNativelyFocusHeavyweightMethod =
 163.178 -                SunToolkit.getMethod(KeyboardFocusManager.class,
 163.179 -                                   "shouldNativelyFocusHeavyweight",
 163.180 -                                   arg_types);
 163.181 -        }
 163.182 -        Object[] args = new Object[] { heavyweight,
 163.183 -                                       descendant,
 163.184 -                                       Boolean.valueOf(temporary),
 163.185 -                                       Boolean.valueOf(focusedWindowChangeAllowed),
 163.186 -                                       Long.valueOf(time), cause};
 163.187 -
 163.188 -        int result = XComponentPeer.SNFH_FAILURE;
 163.189 -        if (shouldNativelyFocusHeavyweightMethod != null) {
 163.190 -            try {
 163.191 -                result = ((Integer) shouldNativelyFocusHeavyweightMethod.invoke(null, args)).intValue();
 163.192 -            }
 163.193 -            catch (IllegalAccessException e) {
 163.194 -                assert false;
 163.195 -            }
 163.196 -            catch (InvocationTargetException e) {
 163.197 -                assert false;
 163.198 -            }
 163.199 -        }
 163.200 -
 163.201 -        return result;
 163.202 +        return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild,
 163.203 +                                                         target,
 163.204 +                                                         temporary,
 163.205 +                                                         focusedWindowChangeAllowed,
 163.206 +                                                         time,
 163.207 +                                                         cause,
 163.208 +                                                         getCurrentNativeFocusOwner());
 163.209      }
 163.210  }
   164.1 --- a/src/solaris/classes/sun/awt/X11/XKeysym.java	Thu Apr 16 17:42:00 2009 +0100
   164.2 +++ b/src/solaris/classes/sun/awt/X11/XKeysym.java	Thu Apr 16 19:10:32 2009 -0700
   164.3 @@ -1,7 +1,7 @@
   164.4  // This is a generated file: do not edit! Edit keysym2ucs.h if necessary.
   164.5  
   164.6  /*
   164.7 - * Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
   164.8 + * Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   164.9   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  164.10   *
  164.11   * This code is free software; you can redistribute it and/or modify it
  164.12 @@ -89,14 +89,47 @@
  164.13          Character ch = keysym2UCSHash.get(ks);
  164.14          return ch == null ? (char)0 : ch.charValue();
  164.15      }
  164.16 +    static long xkeycode2keysym_noxkb(XKeyEvent ev, int ndx) {
  164.17 +        XToolkit.awtLock();
  164.18 +        try {
  164.19 +            return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx);
  164.20 +        } finally {
  164.21 +            XToolkit.awtUnlock();
  164.22 +        }
  164.23 +    }
  164.24 +    static long xkeycode2keysym_xkb(XKeyEvent ev, int ndx) {
  164.25 +        XToolkit.awtLock();
  164.26 +        try {
  164.27 +            int mods = ev.get_state();
  164.28 +            if ((ndx == 0) && ((mods & XConstants.ShiftMask) != 0)) {
  164.29 +                // I don't know all possible meanings of 'ndx' in case of XKB
  164.30 +                // and don't want to speculate. But this particular case
  164.31 +                // clearly means that caller needs a so called primary keysym.
  164.32 +                mods ^= XConstants.ShiftMask;
  164.33 +            }
  164.34 +            XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(),
  164.35 +                       mods, XlibWrapper.iarg1, XlibWrapper.larg3);
  164.36 +            //XXX unconsumed modifiers?
  164.37 +            return Native.getLong(XlibWrapper.larg3);
  164.38 +        } finally {
  164.39 +            XToolkit.awtUnlock();
  164.40 +        }
  164.41 +    }
  164.42      static long xkeycode2keysym(XKeyEvent ev, int ndx) {
  164.43          XToolkit.awtLock();
  164.44          try {
  164.45 -            return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx );
  164.46 +            if (XToolkit.canUseXKBCalls()) {
  164.47 +                return xkeycode2keysym_xkb(ev, ndx);
  164.48 +            }else{
  164.49 +                return xkeycode2keysym_noxkb(ev, ndx);
  164.50 +            }
  164.51          } finally {
  164.52              XToolkit.awtUnlock();
  164.53          }
  164.54      }
  164.55 +    static long xkeycode2primary_keysym(XKeyEvent ev) {
  164.56 +        return xkeycode2keysym(ev, 0);
  164.57 +    }
  164.58      public static boolean isKPEvent( XKeyEvent ev )
  164.59      {
  164.60          // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
  164.61 @@ -198,6 +231,27 @@
  164.62          Keysym2JavaKeycode jkc = getJavaKeycode( ev );
  164.63          return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
  164.64      }
  164.65 +    /**
  164.66 +     * Return an integer java keycode apprx as it was before extending keycodes range.
  164.67 +     * This call would ignore for instance XKB and process whatever is on the bottom
  164.68 +     * of keysym stack. Result will not depend on actual locale, will differ between
  164.69 +     * dual/multiple keyboard setup systems (e.g. English+Russian vs French+Russian)
  164.70 +     * but will be someway compatible with old releases.
  164.71 +     */
  164.72 +    static int getLegacyJavaKeycodeOnly( XKeyEvent ev ) {
  164.73 +        long keysym = XConstants.NoSymbol;
  164.74 +        int ndx = 0;
  164.75 +        if( (ev.get_state() & XToolkit.numLockMask) != 0 &&
  164.76 +             isKPEvent(ev)) {
  164.77 +            keysym = getKeypadKeysym( ev );
  164.78 +        } else {
  164.79 +            // we only need primary-layer keysym to derive a java keycode.
  164.80 +            ndx = 0;
  164.81 +            keysym = xkeycode2keysym_noxkb(ev, ndx);
  164.82 +        }
  164.83 +        Keysym2JavaKeycode jkc = keysym2JavaKeycodeHash.get( keysym );
  164.84 +        return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
  164.85 +    }
  164.86      static long javaKeycode2Keysym( int jkey ) {
  164.87          Long ks = javaKeycode2KeysymHash.get( jkey );
  164.88          return  (ks == null ? 0 : ks.longValue());
   165.1 --- a/src/solaris/classes/sun/awt/X11/XNETProtocol.java	Thu Apr 16 17:42:00 2009 +0100
   165.2 +++ b/src/solaris/classes/sun/awt/X11/XNETProtocol.java	Thu Apr 16 19:10:32 2009 -0700
   165.3 @@ -1,5 +1,5 @@
   165.4  /*
   165.5 - * Copyright 2003-2008 Sun Microsystems, Inc.  All Rights Reserved.
   165.6 + * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
   165.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   165.8   *
   165.9   * This code is free software; you can redistribute it and/or modify it
  165.10 @@ -169,6 +169,34 @@
  165.11          return ((layer == LAYER_ALWAYS_ON_TOP) || (layer == LAYER_NORMAL)) && doLayerProtocol();
  165.12      }
  165.13  
  165.14 +    public void requestState(XWindow window, XAtom state, boolean isAdd) {
  165.15 +        XClientMessageEvent req = new XClientMessageEvent();
  165.16 +        try {
  165.17 +            req.set_type((int)XConstants.ClientMessage);
  165.18 +            req.set_window(window.getWindow());
  165.19 +            req.set_message_type(XA_NET_WM_STATE.getAtom());
  165.20 +            req.set_format(32);
  165.21 +            req.set_data(0, isAdd ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE);
  165.22 +            req.set_data(1, state.getAtom());
  165.23 +            // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed
  165.24 +            req.set_data(2, 0);
  165.25 +            log.log(Level.FINE, "Setting _NET_STATE atom {0} on {1} for {2}", new Object[] {state, window, Boolean.valueOf(isAdd)});
  165.26 +            XToolkit.awtLock();
  165.27 +            try {
  165.28 +                XlibWrapper.XSendEvent(XToolkit.getDisplay(),
  165.29 +                        XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()),
  165.30 +                        false,
  165.31 +                        XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask,
  165.32 +                        req.pData);
  165.33 +            }
  165.34 +            finally {
  165.35 +                XToolkit.awtUnlock();
  165.36 +            }
  165.37 +        } finally {
  165.38 +            req.dispose();
  165.39 +        }
  165.40 +    }
  165.41 +
  165.42      /**
  165.43       * Helper function to set/reset one state in NET_WM_STATE
  165.44       * If window is showing then it uses ClientMessage, otherwise adjusts NET_WM_STATE list
  165.45 @@ -181,31 +209,7 @@
  165.46                  new Object[] {Boolean.valueOf(window.isWithdrawn()), Boolean.valueOf(window.isVisible()),
  165.47                                Boolean.valueOf(window.isMapped()), Boolean.valueOf(window.isShowing())});
  165.48          if (window.isShowing()) {
  165.49 -            XClientMessageEvent req = new XClientMessageEvent();
  165.50 -            try {
  165.51 -                req.set_type((int)XConstants.ClientMessage);
  165.52 -                req.set_window(window.getWindow());
  165.53 -                req.set_message_type(XA_NET_WM_STATE.getAtom());
  165.54 -                req.set_format(32);
  165.55 -                req.set_data(0, (!set) ? _NET_WM_STATE_REMOVE : _NET_WM_STATE_ADD);
  165.56 -                req.set_data(1, state.getAtom());
  165.57 -                // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed
  165.58 -                req.set_data(2, 0);
  165.59 -                log.log(Level.FINE, "Setting _NET_STATE atom {0} on {1} for {2}", new Object[] {state, window, Boolean.valueOf(set)});
  165.60 -                XToolkit.awtLock();
  165.61 -                try {
  165.62 -                    XlibWrapper.XSendEvent(XToolkit.getDisplay(),
  165.63 -                                           XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()),
  165.64 -                                           false,
  165.65 -                                           XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask,
  165.66 -                                           req.pData);
  165.67 -                }
  165.68 -                finally {
  165.69 -                    XToolkit.awtUnlock();
  165.70 -                }
  165.71 -            } finally {
  165.72 -                req.dispose();
  165.73 -            }
  165.74 +            requestState(window, state, set);
  165.75          } else {
  165.76              XAtomList net_wm_state = window.getNETWMState();
  165.77              log.log(Level.FINE, "Current state on {0} is {1}", new Object[] {window, net_wm_state});
  165.78 @@ -252,6 +256,8 @@
  165.79      XAtom XA_NET_WM_WINDOW_TYPE = XAtom.get("_NET_WM_WINDOW_TYPE");
  165.80      XAtom XA_NET_WM_WINDOW_TYPE_DIALOG = XAtom.get("_NET_WM_WINDOW_TYPE_DIALOG");
  165.81  
  165.82 +    XAtom XA_NET_WM_WINDOW_OPACITY = XAtom.get("_NET_WM_WINDOW_OPACITY");
  165.83 +
  165.84  /* For _NET_WM_STATE ClientMessage requests */
  165.85      final static int _NET_WM_STATE_REMOVE      =0; /* remove/unset property */
  165.86      final static int _NET_WM_STATE_ADD         =1; /* add/set property      */
  165.87 @@ -289,6 +295,12 @@
  165.88          boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_STATE_MODAL);
  165.89          return res;
  165.90      }
  165.91 +
  165.92 +    boolean doOpacityProtocol() {
  165.93 +        boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_WINDOW_OPACITY);
  165.94 +        return res;
  165.95 +    }
  165.96 +
  165.97      boolean isWMName(String name) {
  165.98          if (!active()) {
  165.99              return false;
   166.1 --- a/src/solaris/classes/sun/awt/X11/XPanelPeer.java	Thu Apr 16 17:42:00 2009 +0100
   166.2 +++ b/src/solaris/classes/sun/awt/X11/XPanelPeer.java	Thu Apr 16 19:10:32 2009 -0700
   166.3 @@ -130,39 +130,6 @@
   166.4          return getInsets();
   166.5      }
   166.6  
   166.7 -    /*
   166.8 -     * This method is called from XWindowPeer.displayChanged, when
   166.9 -     * the window this Panel is on is moved to the new screen, or
  166.10 -     * display mode is changed.
  166.11 -     *
  166.12 -     * The notification is propagated to the child Canvas components.
  166.13 -     * Top-level windows and other Panels are notified too as their
  166.14 -     * peers are subclasses of XCanvasPeer.
  166.15 -     */
  166.16 -    public void displayChanged(int screenNum) {
  166.17 -        super.displayChanged(screenNum);
  166.18 -        displayChanged((Container)target, screenNum);
  166.19 -    }
  166.20 -
  166.21 -    /*
  166.22 -     * Recursively iterates through all the HW and LW children
  166.23 -     * of the container and calls displayChanged() for HW peers.
  166.24 -     * Iteration through children peers only is not enough as the
  166.25 -     * displayChanged notification may not be propagated to HW
  166.26 -     * components inside LW containers, see 4452373 for details.
  166.27 -     */
  166.28 -    private static void displayChanged(Container target, int screenNum) {
  166.29 -        Component children[] = ((Container)target).getComponents();
  166.30 -        for (Component child : children) {
  166.31 -            ComponentPeer cpeer = child.getPeer();
  166.32 -            if (cpeer instanceof XCanvasPeer) {
  166.33 -                ((XCanvasPeer)cpeer).displayChanged(screenNum);
  166.34 -            } else if (child instanceof Container) {
  166.35 -                displayChanged((Container)child, screenNum);
  166.36 -            }
  166.37 -        }
  166.38 -    }
  166.39 -
  166.40      public void dispose() {
  166.41          if (embedder != null) {
  166.42              embedder.deinstall();
   167.1 --- a/src/solaris/classes/sun/awt/X11/XToolkit.java	Thu Apr 16 17:42:00 2009 +0100
   167.2 +++ b/src/solaris/classes/sun/awt/X11/XToolkit.java	Thu Apr 16 19:10:32 2009 -0700
   167.3 @@ -1,5 +1,5 @@
   167.4  /*
   167.5 - * Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
   167.6 + * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
   167.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   167.8   *
   167.9   * This code is free software; you can redistribute it and/or modify it
  167.10 @@ -54,6 +54,7 @@
  167.11  import sun.font.FontManager;
  167.12  import sun.misc.PerformanceLogger;
  167.13  import sun.print.PrintJob2D;
  167.14 +import sun.security.action.GetBooleanAction;
  167.15  
  167.16  public final class XToolkit extends UNIXToolkit implements Runnable {
  167.17      private static Logger log = Logger.getLogger("sun.awt.X11.XToolkit");
  167.18 @@ -291,6 +292,7 @@
  167.19              if (XlibWrapper.XSetLocaleModifiers("") == null) {
  167.20                  log.finer("X locale modifiers are not supported, using default");
  167.21              }
  167.22 +            tryXKB();
  167.23  
  167.24              AwtScreenData defaultScreen = new AwtScreenData(XToolkit.getDefaultScreenData());
  167.25              awt_defaultFg = defaultScreen.get_blackpixel();
  167.26 @@ -313,6 +315,7 @@
  167.27                      if (xs != null) {
  167.28                          ((XAWTXSettings)xs).dispose();
  167.29                      }
  167.30 +                    freeXKB();
  167.31                      if (log.isLoggable(Level.FINE)) {
  167.32                          dumpPeers();
  167.33                      }
  167.34 @@ -591,6 +594,9 @@
  167.35                  if (ev.get_type() != XConstants.NoExpose) {
  167.36                      eventNumber++;
  167.37                  }
  167.38 +                if (awt_UseXKB_Calls && ev.get_type() ==  awt_XKBBaseEventCode) {
  167.39 +                    processXkbChanges(ev);
  167.40 +                }
  167.41  
  167.42                  if (XDropTargetEventProcessor.processEvent(ev) ||
  167.43                      XDragSourceContextPeer.processEvent(ev)) {
  167.44 @@ -2093,8 +2099,12 @@
  167.45  
  167.46      static boolean awt_ServerInquired = false;
  167.47      static boolean awt_IsXsunServer    = false;
  167.48 -    static boolean awt_XKBInquired    = false;
  167.49      static boolean awt_UseXKB         = false;
  167.50 +    static boolean awt_UseXKB_Calls   = false;
  167.51 +    static int     awt_XKBBaseEventCode = 0;
  167.52 +    static int     awt_XKBEffectiveGroup = 0; // so far, I don't use it leaving all calculations
  167.53 +                                              // to XkbTranslateKeyCode
  167.54 +    static long    awt_XKBDescPtr     = 0;
  167.55      /**
  167.56         Try to understand if it is Xsun server.
  167.57         By now (2005) Sun is vendor of Xsun and Xorg servers; we only return true if Xsun is running.
  167.58 @@ -2124,24 +2134,144 @@
  167.59              awtUnlock();
  167.60          }
  167.61      }
  167.62 -    /**
  167.63 -      Query XKEYBOARD extension.
  167.64 -    */
  167.65      static boolean isXKBenabled() {
  167.66          awtLock();
  167.67          try {
  167.68 -            if( awt_XKBInquired ) {
  167.69 -                return awt_UseXKB;
  167.70 -            }
  167.71 -            awt_XKBInquired = true;
  167.72 -            String name = "XKEYBOARD";
  167.73 -            awt_UseXKB = XlibWrapper.XQueryExtension( getDisplay(), name, XlibWrapper.larg1, XlibWrapper.larg2, XlibWrapper.larg3);
  167.74              return awt_UseXKB;
  167.75          } finally {
  167.76              awtUnlock();
  167.77          }
  167.78      }
  167.79  
  167.80 +    /**
  167.81 +      Query XKEYBOARD extension.
  167.82 +      If possible, initialize xkb library.
  167.83 +    */
  167.84 +    static boolean tryXKB() {
  167.85 +        awtLock();
  167.86 +        try {
  167.87 +            String name = "XKEYBOARD";
  167.88 +            // First, if there is extension at all.
  167.89 +            awt_UseXKB = XlibWrapper.XQueryExtension( getDisplay(), name, XlibWrapper.larg1, XlibWrapper.larg2, XlibWrapper.larg3);
  167.90 +            if( awt_UseXKB ) {
  167.91 +                // There is a keyboard extension. Check if a client library is compatible.
  167.92 +                // If not, don't use xkb calls.
  167.93 +                // In this case we still may be Xkb-capable application.
  167.94 +                awt_UseXKB_Calls = XlibWrapper.XkbLibraryVersion( XlibWrapper.larg1, XlibWrapper.larg2);
  167.95 +                if( awt_UseXKB_Calls ) {
  167.96 +                    awt_UseXKB_Calls = XlibWrapper.XkbQueryExtension( getDisplay(),  XlibWrapper.larg1, XlibWrapper.larg2,
  167.97 +                                     XlibWrapper.larg3, XlibWrapper.larg4, XlibWrapper.larg5);
  167.98 +                    if( awt_UseXKB_Calls ) {
  167.99 +                        awt_XKBBaseEventCode = Native.getInt(XlibWrapper.larg2);
 167.100 +                        XlibWrapper.XkbSelectEvents (getDisplay(),
 167.101 +                                         XConstants.XkbUseCoreKbd,
 167.102 +                                         XConstants.XkbNewKeyboardNotifyMask |
 167.103 +                                                 XConstants.XkbMapNotifyMask ,//|
 167.104 +                                                 //XConstants.XkbStateNotifyMask,
 167.105 +                                         XConstants.XkbNewKeyboardNotifyMask |
 167.106 +                                                 XConstants.XkbMapNotifyMask );//|
 167.107 +                                                 //XConstants.XkbStateNotifyMask);
 167.108 +
 167.109 +                        XlibWrapper.XkbSelectEventDetails(getDisplay(), XConstants.XkbUseCoreKbd,
 167.110 +                                                     XConstants.XkbStateNotify,
 167.111 +                                                     XConstants.XkbGroupStateMask,
 167.112 +                                                     XConstants.XkbGroupStateMask);
 167.113 +                                                     //XXX ? XkbGroupLockMask last, XkbAllStateComponentsMask before last?
 167.114 +                        awt_XKBDescPtr = XlibWrapper.XkbGetMap(getDisplay(),
 167.115 +                                                     XConstants.XkbKeyTypesMask    |
 167.116 +                                                     XConstants.XkbKeySymsMask     |
 167.117 +                                                     XConstants.XkbModifierMapMask |
 167.118 +                                                     XConstants.XkbVirtualModsMask,
 167.119 +                                                     XConstants.XkbUseCoreKbd);
 167.120 +                    }
 167.121 +                }
 167.122 +            }
 167.123 +            return awt_UseXKB;
 167.124 +        } finally {
 167.125 +            awtUnlock();
 167.126 +        }
 167.127 +    }
 167.128 +    static boolean canUseXKBCalls() {
 167.129 +        awtLock();
 167.130 +        try {
 167.131 +            return awt_UseXKB_Calls;
 167.132 +        } finally {
 167.133 +            awtUnlock();
 167.134 +        }
 167.135 +    }
 167.136 +    static int getXKBEffectiveGroup() {
 167.137 +        awtLock();
 167.138 +        try {
 167.139 +            return awt_XKBEffectiveGroup;
 167.140 +        } finally {
 167.141 +            awtUnlock();
 167.142 +        }
 167.143 +    }
 167.144 +    static int getXKBBaseEventCode() {
 167.145 +        awtLock();
 167.146 +        try {
 167.147 +            return awt_XKBBaseEventCode;
 167.148 +        } finally {
 167.149 +            awtUnlock();
 167.150 +        }
 167.151 +    }
 167.152 +    static long getXKBKbdDesc() {
 167.153 +        awtLock();
 167.154 +        try {
 167.155 +            return awt_XKBDescPtr;
 167.156 +        } finally {
 167.157 +            awtUnlock();
 167.158 +        }
 167.159 +    }
 167.160 +    void freeXKB() {
 167.161 +        awtLock();
 167.162 +        try {
 167.163 +            if (awt_UseXKB_Calls && awt_XKBDescPtr != 0) {
 167.164 +                XlibWrapper.XkbFreeKeyboard(awt_XKBDescPtr, 0xFF, true);
 167.165 +            }
 167.166 +        } finally {
 167.167 +            awtUnlock();
 167.168 +        }
 167.169 +    }
 167.170 +    private void processXkbChanges(XEvent ev) {
 167.171 +        // mapping change --> refresh kbd map
 167.172 +        // state change --> get a new effective group; do I really need it
 167.173 +        //  or that should be left for XkbTranslateKeyCode?
 167.174 +        XkbEvent xke = new XkbEvent( ev.getPData() );
 167.175 +        int xkb_type = xke.get_any().get_xkb_type();
 167.176 +        switch( xkb_type ) {
 167.177 +            case XConstants.XkbNewKeyboardNotify :
 167.178 +                 if( awt_XKBDescPtr != 0 ) {
 167.179 +                     freeXKB();
 167.180 +                 }
 167.181 +                 awt_XKBDescPtr = XlibWrapper.XkbGetMap(getDisplay(),
 167.182 +                                              XConstants.XkbKeyTypesMask    |
 167.183 +                                              XConstants.XkbKeySymsMask     |
 167.184 +                                              XConstants.XkbModifierMapMask |
 167.185 +                                              XConstants.XkbVirtualModsMask,
 167.186 +                                              XConstants.XkbUseCoreKbd);
 167.187 +                 //System.out.println("XkbNewKeyboard:"+(xke.get_new_kbd()));
 167.188 +                 break;
 167.189 +            case XConstants.XkbMapNotify :
 167.190 +                 //TODO: provide a simple unit test.
 167.191 +                 XlibWrapper.XkbGetUpdatedMap(getDisplay(),
 167.192 +                                              XConstants.XkbKeyTypesMask    |
 167.193 +                                              XConstants.XkbKeySymsMask     |
 167.194 +                                              XConstants.XkbModifierMapMask |
 167.195 +                                              XConstants.XkbVirtualModsMask,
 167.196 +                                              awt_XKBDescPtr);
 167.197 +                 //System.out.println("XkbMap:"+(xke.get_map()));
 167.198 +                 break;
 167.199 +            case XConstants.XkbStateNotify :
 167.200 +                 // May use it later e.g. to obtain an effective group etc.
 167.201 +                 //System.out.println("XkbState:"+(xke.get_state()));
 167.202 +                 break;
 167.203 +            default:
 167.204 +                 //System.out.println("XkbEvent of xkb_type "+xkb_type);
 167.205 +                 break;
 167.206 +        }
 167.207 +    }
 167.208 +
 167.209      private static long eventNumber;
 167.210      public static long getEventNumber() {
 167.211          awtLock();
 167.212 @@ -2273,4 +2403,44 @@
 167.213      public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
 167.214          return areExtraMouseButtonsEnabled;
 167.215      }
 167.216 +
 167.217 +    @Override
 167.218 +    public boolean isWindowOpacitySupported() {
 167.219 +        XNETProtocol net_protocol = XWM.getWM().getNETProtocol();
 167.220 +
 167.221 +        if (net_protocol == null) {
 167.222 +            return false;
 167.223 +        }
 167.224 +
 167.225 +        return net_protocol.doOpacityProtocol();
 167.226 +    }
 167.227 +
 167.228 +    @Override
 167.229 +    public boolean isWindowShapingSupported() {
 167.230 +        return XlibUtil.isShapingSupported();
 167.231 +    }
 167.232 +
 167.233 +    @Override
 167.234 +    public boolean isWindowTranslucencySupported() {
 167.235 +        //NOTE: it may not be supported. The actual check is being performed
 167.236 +        //      at com.sun.awt.AWTUtilities(). In X11 we need to check
 167.237 +        //      whether there's any translucency-capable GC available.
 167.238 +        return true;
 167.239 +    }
 167.240 +
 167.241 +    @Override
 167.242 +    public boolean isTranslucencyCapable(GraphicsConfiguration gc) {
 167.243 +        if (!(gc instanceof X11GraphicsConfig)) {
 167.244 +            return false;
 167.245 +        }
 167.246 +        return ((X11GraphicsConfig)gc).isTranslucencyCapable();
 167.247 +    }
 167.248 +
 167.249 +    /**
 167.250 +     * Returns the value of "sun.awt.disablegrab" property. Default
 167.251 +     * value is {@code false}.
 167.252 +     */
 167.253 +    public static boolean getSunAwtDisableGrab() {
 167.254 +        return AccessController.doPrivileged(new GetBooleanAction("sun.awt.disablegrab"));
 167.255 +    }
 167.256  }
   168.1 --- a/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java	Thu Apr 16 17:42:00 2009 +0100
   168.2 +++ b/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java	Thu Apr 16 19:10:32 2009 -0700
   168.3 @@ -38,15 +38,18 @@
   168.4  import java.security.PrivilegedAction;
   168.5  import java.lang.reflect.InvocationTargetException;
   168.6  
   168.7 -public class XTrayIconPeer implements TrayIconPeer {
   168.8 +public class XTrayIconPeer implements TrayIconPeer,
   168.9 +       InfoWindow.Balloon.LiveArguments,
  168.10 +       InfoWindow.Tooltip.LiveArguments
  168.11 +{
  168.12      private static final Logger ctrLog = Logger.getLogger("sun.awt.X11.XTrayIconPeer.centering");
  168.13  
  168.14      TrayIcon target;
  168.15      TrayIconEventProxy eventProxy;
  168.16      XTrayIconEmbeddedFrame eframe;
  168.17      TrayIconCanvas canvas;
  168.18 -    Balloon balloon;
  168.19 -    Tooltip tooltip;
  168.20 +    InfoWindow.Balloon balloon;
  168.21 +    InfoWindow.Tooltip tooltip;
  168.22      PopupMenu popup;
  168.23      String tooltipString;
  168.24      boolean isTrayIconDisplayed;
  168.25 @@ -255,8 +258,8 @@
  168.26          eframe.setVisible(true);
  168.27          updateImage();
  168.28  
  168.29 -        balloon = new Balloon(this, eframe);
  168.30 -        tooltip = new Tooltip(this, eframe);
  168.31 +        balloon = new InfoWindow.Balloon(eframe, target, this);
  168.32 +        tooltip = new InfoWindow.Tooltip(eframe, target, this);
  168.33  
  168.34          addListeners();
  168.35      }
  168.36 @@ -300,6 +303,10 @@
  168.37          tooltipString = tooltip;
  168.38      }
  168.39  
  168.40 +    public String getTooltipString() {
  168.41 +        return tooltipString;
  168.42 +    }
  168.43 +
  168.44      public void updateImage() {
  168.45          Runnable r = new Runnable() {
  168.46                  public void run() {
  168.47 @@ -385,7 +392,7 @@
  168.48          return eframe.getLocationOnScreen();
  168.49      }
  168.50  
  168.51 -    private Rectangle getBounds() {
  168.52 +    public Rectangle getBounds() {
  168.53          Point loc = getLocationOnScreen();
  168.54          return new Rectangle(loc.x, loc.y, loc.x + TRAY_ICON_WIDTH, loc.y + TRAY_ICON_HEIGHT);
  168.55      }
  168.56 @@ -399,10 +406,14 @@
  168.57          return ((XEmbeddedFramePeer)eframe.getPeer()).getWindow();
  168.58      }
  168.59  
  168.60 -    boolean isDisposed() {
  168.61 +    public boolean isDisposed() {
  168.62          return isDisposed;
  168.63      }
  168.64  
  168.65 +    public String getActionCommand() {
  168.66 +        return target.getActionCommand();
  168.67 +    }
  168.68 +
  168.69      static class TrayIconEventProxy implements MouseListener, MouseMotionListener {
  168.70          XTrayIconPeer xtiPeer;
  168.71  
  168.72 @@ -474,8 +485,8 @@
  168.73      }
  168.74  
  168.75      static boolean isTrayIconStuffWindow(Window w) {
  168.76 -        return (w instanceof Tooltip) ||
  168.77 -               (w instanceof Balloon) ||
  168.78 +        return (w instanceof InfoWindow.Tooltip) ||
  168.79 +               (w instanceof InfoWindow.Balloon) ||
  168.80                 (w instanceof XTrayIconEmbeddedFrame);
  168.81      }
  168.82  
  168.83 @@ -530,7 +541,7 @@
  168.84          }
  168.85      }
  168.86  
  168.87 -    static class IconCanvas extends Canvas {
  168.88 +    public static class IconCanvas extends Canvas {
  168.89          volatile Image image;
  168.90          IconObserver observer;
  168.91          int width, height;
  168.92 @@ -608,429 +619,4 @@
  168.93              }
  168.94          }
  168.95      }
  168.96 -
  168.97 -    // ***************************************
  168.98 -    // Classes for toolitp and balloon windows
  168.99 -    // ***************************************
 168.100 -
 168.101 -    static class Tooltip extends InfoWindow {
 168.102 -        XTrayIconPeer xtiPeer;
 168.103 -        Label textLabel = new Label("");
 168.104 -        Runnable starter = new Runnable() {
 168.105 -                public void run() {
 168.106 -                    display();
 168.107 -                }};
 168.108 -
 168.109 -        final static int TOOLTIP_SHOW_TIME = 10000;
 168.110 -        final static int TOOLTIP_START_DELAY_TIME = 1000;
 168.111 -        final static int TOOLTIP_MAX_LENGTH = 64;
 168.112 -        final static int TOOLTIP_MOUSE_CURSOR_INDENT = 5;
 168.113 -        final static Color TOOLTIP_BACKGROUND_COLOR = new Color(255, 255, 220);
 168.114 -        final static Font TOOLTIP_TEXT_FONT = XWindow.getDefaultFont();
 168.115 -
 168.116 -        Tooltip(XTrayIconPeer xtiPeer, Frame parent) {
 168.117 -            super(parent, Color.black);
 168.118 -            this.xtiPeer = xtiPeer;
 168.119 -
 168.120 -            suppressWarningString(this);
 168.121 -
 168.122 -            setCloser(null, TOOLTIP_SHOW_TIME);
 168.123 -            textLabel.setBackground(TOOLTIP_BACKGROUND_COLOR);
 168.124 -            textLabel.setFont(TOOLTIP_TEXT_FONT);
 168.125 -            add(textLabel);
 168.126 -        }
 168.127 -
 168.128 -        /*
 168.129 -         * WARNING: this method is executed on Toolkit thread!
 168.130 -         */
 168.131 -        void display() {
 168.132 -            String tip = xtiPeer.tooltipString;
 168.133 -            if (tip == null) {
 168.134 -                return;
 168.135 -            } else if (tip.length() >  TOOLTIP_MAX_LENGTH) {
 168.136 -                textLabel.setText(tip.substring(0, TOOLTIP_MAX_LENGTH));
 168.137 -            } else {
 168.138 -                textLabel.setText(tip);
 168.139 -            }
 168.140 -
 168.141 -            // Execute on EDT to avoid deadlock (see 6280857).
 168.142 -            SunToolkit.executeOnEventHandlerThread(xtiPeer.target, new Runnable() {
 168.143 -                    public void run() {
 168.144 -                        if (xtiPeer.isDisposed()) {
 168.145 -                            return;
 168.146 -                        }
 168.147 -                        Point pointer = (Point)AccessController.doPrivileged(new PrivilegedAction() {
 168.148 -                                public Object run() {
 168.149 -                                    if (!isPointerOverTrayIcon(xtiPeer.getBounds())) {
 168.150 -                                        return null;
 168.151 -                                    }
 168.152 -                                    return MouseInfo.getPointerInfo().getLocation();
 168.153 -                                }
 168.154 -                            });
 168.155 -                        if (pointer == null) {
 168.156 -                            return;
 168.157 -                        }
 168.158 -                        show(new Point(pointer.x, pointer.y), TOOLTIP_MOUSE_CURSOR_INDENT);
 168.159 -                    }
 168.160 -                });
 168.161 -        }
 168.162 -
 168.163 -        void enter() {
 168.164 -            XToolkit.schedule(starter, TOOLTIP_START_DELAY_TIME);
 168.165 -        }
 168.166 -
 168.167 -        void exit() {
 168.168 -            XToolkit.remove(starter);
 168.169 -            if (isVisible()) {
 168.170 -                hide();
 168.171 -            }
 168.172 -        }
 168.173 -
 168.174 -        boolean isPointerOverTrayIcon(Rectangle trayRect) {
 168.175 -            Point p = MouseInfo.getPointerInfo().getLocation();
 168.176 -            return !(p.x < trayRect.x || p.x > (trayRect.x + trayRect.width) ||
 168.177 -                     p.y < trayRect.y || p.y > (trayRect.y + trayRect.height));
 168.178 -        }
 168.179 -    }
 168.180 -
 168.181 -    static class Balloon extends InfoWindow {
 168.182 -        final static int BALLOON_SHOW_TIME = 10000;
 168.183 -        final static int BALLOON_TEXT_MAX_LENGTH = 256;
 168.184 -        final static int BALLOON_WORD_LINE_MAX_LENGTH = 16;
 168.185 -        final static int BALLOON_WORD_LINE_MAX_COUNT = 4;
 168.186 -        final static int BALLOON_ICON_WIDTH = 32;
 168.187 -        final static int BALLOON_ICON_HEIGHT = 32;
 168.188 -        final static int BALLOON_TRAY_ICON_INDENT = 0;
 168.189 -        final static Color BALLOON_CAPTION_BACKGROUND_COLOR = new Color(200, 200 ,255);
 168.190 -        final static Font BALLOON_CAPTION_FONT = new Font(Font.DIALOG, Font.BOLD, 12);
 168.191 -
 168.192 -        XTrayIconPeer xtiPeer;
 168.193 -        Panel mainPanel = new Panel();
 168.194 -        Panel captionPanel = new Panel();
 168.195 -        Label captionLabel = new Label("");
 168.196 -        Button closeButton = new Button("X");
 168.197 -        Panel textPanel = new Panel();
 168.198 -        IconCanvas iconCanvas = new IconCanvas(BALLOON_ICON_WIDTH, BALLOON_ICON_HEIGHT);
 168.199 -        Label[] lineLabels = new Label[BALLOON_WORD_LINE_MAX_COUNT];
 168.200 -        ActionPerformer ap = new ActionPerformer();
 168.201 -
 168.202 -        Image iconImage;
 168.203 -        Image errorImage;
 168.204 -        Image warnImage;
 168.205 -        Image infoImage;
 168.206 -        boolean gtkImagesLoaded;
 168.207 -
 168.208 -        Displayer displayer = new Displayer();
 168.209 -
 168.210 -        Balloon(final XTrayIconPeer xtiPeer, Frame parent) {
 168.211 -            super(parent, new Color(90, 80 ,190));
 168.212 -            this.xtiPeer = xtiPeer;
 168.213 -
 168.214 -            suppressWarningString(this);
 168.215 -
 168.216 -            setCloser(new Runnable() {
 168.217 -                    public void run() {
 168.218 -                        if (textPanel != null) {
 168.219 -                            textPanel.removeAll();
 168.220 -                            textPanel.setSize(0, 0);
 168.221 -                            iconCanvas.setSize(0, 0);
 168.222 -                            XToolkit.awtLock();
 168.223 -                            try {
 168.224 -                                displayer.isDisplayed = false;
 168.225 -                                XToolkit.awtLockNotifyAll();
 168.226 -                            } finally {
 168.227 -                                XToolkit.awtUnlock();
 168.228 -                            }
 168.229 -                        }
 168.230 -                    }
 168.231 -                }, BALLOON_SHOW_TIME);
 168.232 -
 168.233 -            add(mainPanel);
 168.234 -
 168.235 -            captionLabel.setFont(BALLOON_CAPTION_FONT);
 168.236 -            captionLabel.addMouseListener(ap);
 168.237 -
 168.238 -            captionPanel.setLayout(new BorderLayout());
 168.239 -            captionPanel.add(captionLabel, BorderLayout.WEST);
 168.240 -            captionPanel.add(closeButton, BorderLayout.EAST);
 168.241 -            captionPanel.setBackground(BALLOON_CAPTION_BACKGROUND_COLOR);
 168.242 -            captionPanel.addMouseListener(ap);
 168.243 -
 168.244 -            closeButton.addActionListener(new ActionListener() {
 168.245 -                    public void actionPerformed(ActionEvent e) {
 168.246 -                        hide();
 168.247 -                    }
 168.248 -                });
 168.249 -
 168.250 -            mainPanel.setLayout(new BorderLayout());
 168.251 -            mainPanel.setBackground(Color.white);
 168.252 -            mainPanel.add(captionPanel, BorderLayout.NORTH);
 168.253 -            mainPanel.add(iconCanvas, BorderLayout.WEST);
 168.254 -            mainPanel.add(textPanel, BorderLayout.CENTER);
 168.255 -
 168.256 -            iconCanvas.addMouseListener(ap);
 168.257 -
 168.258 -            for (int i = 0; i < BALLOON_WORD_LINE_MAX_COUNT; i++) {
 168.259 -                lineLabels[i] = new Label();
 168.260 -                lineLabels[i].addMouseListener(ap);
 168.261 -                lineLabels[i].setBackground(Color.white);
 168.262 -            }
 168.263 -
 168.264 -            displayer.start();
 168.265 -        }
 168.266 -
 168.267 -        void display(String caption, String text, String messageType) {
 168.268 -            if (!gtkImagesLoaded) {
 168.269 -                loadGtkImages();
 168.270 -            }
 168.271 -            displayer.display(caption, text, messageType);
 168.272 -        }
 168.273 -
 168.274 -        private void _display(String caption, String text, String messageType) {
 168.275 -            captionLabel.setText(caption);
 168.276 -
 168.277 -            BreakIterator iter = BreakIterator.getWordInstance();
 168.278 -            if (text != null) {
 168.279 -                iter.setText(text);
 168.280 -                int start = iter.first(), end;
 168.281 -                int nLines = 0;
 168.282 -
 168.283 -                do {
 168.284 -                    end = iter.next();
 168.285 -
 168.286 -                    if (end == BreakIterator.DONE ||
 168.287 -                        text.substring(start, end).length() >= 50)
 168.288 -                    {
 168.289 -                        lineLabels[nLines].setText(text.substring(start, end == BreakIterator.DONE ?
 168.290 -                                                                  iter.last() : end));
 168.291 -                        textPanel.add(lineLabels[nLines++]);
 168.292 -                        start = end;
 168.293 -                    }
 168.294 -                    if (nLines == BALLOON_WORD_LINE_MAX_COUNT) {
 168.295 -                        if (end != BreakIterator.DONE) {
 168.296 -                            lineLabels[nLines - 1].setText(
 168.297 -                                new String(lineLabels[nLines - 1].getText() + " ..."));
 168.298 -                        }
 168.299 -                        break;
 168.300 -                    }
 168.301 -                } while (end != BreakIterator.DONE);
 168.302 -
 168.303 -
 168.304 -                textPanel.setLayout(new GridLayout(nLines, 1));
 168.305 -            }
 168.306 -
 168.307 -            if ("ERROR".equals(messageType)) {
 168.308 -                iconImage = errorImage;
 168.309 -            } else if ("WARNING".equals(messageType)) {
 168.310 -                iconImage = warnImage;
 168.311 -            } else if ("INFO".equals(messageType)) {
 168.312 -                iconImage = infoImage;
 168.313 -            } else {
 168.314 -                iconImage = null;
 168.315 -            }
 168.316 -
 168.317 -            if (iconImage != null) {
 168.318 -                Dimension tpSize = textPanel.getSize();
 168.319 -                iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ?
 168.320 -                                                        BALLOON_ICON_HEIGHT : tpSize.height));
 168.321 -                iconCanvas.validate();
 168.322 -            }
 168.323 -
 168.324 -            SunToolkit.executeOnEventHandlerThread(xtiPeer.target, new Runnable() {
 168.325 -                    public void run() {
 168.326 -                        if (xtiPeer.isDisposed()) {
 168.327 -                            return;
 168.328 -                        }
 168.329 -                        Point parLoc = getParent().getLocationOnScreen();
 168.330 -                        Dimension parSize = getParent().getSize();
 168.331 -                        show(new Point(parLoc.x + parSize.width/2, parLoc.y + parSize.height/2),
 168.332 -                             BALLOON_TRAY_ICON_INDENT);
 168.333 -                        if (iconImage != null) {
 168.334 -                            iconCanvas.updateImage(iconImage); // call it after the show(..) above
 168.335 -                        }
 168.336 -                    }
 168.337 -                });
 168.338 -        }
 168.339 -
 168.340 -        public void dispose() {
 168.341 -            displayer.interrupt();
 168.342 -            super.dispose();
 168.343 -        }
 168.344 -
 168.345 -        void loadGtkImages() {
 168.346 -            if (!gtkImagesLoaded) {
 168.347 -                errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
 168.348 -                    "gtk.icon.gtk-dialog-error.6.rtl");
 168.349 -                warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
 168.350 -                    "gtk.icon.gtk-dialog-warning.6.rtl");
 168.351 -                infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
 168.352 -                    "gtk.icon.gtk-dialog-info.6.rtl");
 168.353 -                gtkImagesLoaded = true;
 168.354 -            }
 168.355 -        }
 168.356 -
 168.357 -        class ActionPerformer extends MouseAdapter {
 168.358 -            public void mouseClicked(MouseEvent e) {
 168.359 -                // hide the balloon by any click
 168.360 -                hide();
 168.361 -                if (e.getButton() == MouseEvent.BUTTON1) {
 168.362 -                    ActionEvent aev = new ActionEvent(xtiPeer.target, ActionEvent.ACTION_PERFORMED,
 168.363 -                                                      xtiPeer.target.getActionCommand(),
 168.364 -                                                      e.getWhen(), e.getModifiers());
 168.365 -                    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(aev);
 168.366 -                }
 168.367 -            }
 168.368 -        }
 168.369 -
 168.370 -        class Displayer extends Thread {
 168.371 -            final int MAX_CONCURRENT_MSGS = 10;
 168.372 -
 168.373 -            ArrayBlockingQueue<Message> messageQueue = new ArrayBlockingQueue<Message>(MAX_CONCURRENT_MSGS);
 168.374 -            boolean isDisplayed;
 168.375 -
 168.376 -            Displayer() {
 168.377 -                setDaemon(true);
 168.378 -            }
 168.379 -
 168.380 -            public void run() {
 168.381 -                while (true) {
 168.382 -                    Message msg = null;
 168.383 -                    try {
 168.384 -                        msg = (Message)messageQueue.take();
 168.385 -                    } catch (InterruptedException e) {
 168.386 -                        return;
 168.387 -                    }
 168.388 -
 168.389 -                    /*
 168.390 -                     * Wait till the previous message is displayed if any
 168.391 -                     */
 168.392 -                    XToolkit.awtLock();
 168.393 -                    try {
 168.394 -                        while (isDisplayed) {
 168.395 -                            try {
 168.396 -                                XToolkit.awtLockWait();
 168.397 -                            } catch (InterruptedException e) {
 168.398 -                                return;
 168.399 -                            }
 168.400 -                        }
 168.401 -                        isDisplayed = true;
 168.402 -                    } finally {
 168.403 -                        XToolkit.awtUnlock();
 168.404 -                    }
 168.405 -                    _display(msg.caption, msg.text, msg.messageType);
 168.406 -                }
 168.407 -            }
 168.408 -
 168.409 -            void display(String caption, String text, String messageType) {
 168.410 -                messageQueue.offer(new Message(caption, text, messageType));
 168.411 -            }
 168.412 -        }
 168.413 -
 168.414 -        class Message {
 168.415 -            String caption, text, messageType;
 168.416 -
 168.417 -            Message(String caption, String text, String messageType) {
 168.418 -                this.caption = caption;
 168.419 -                this.text = text;
 168.420 -                this.messageType = messageType;
 168.421 -            }
 168.422 -        }
 168.423 -    }
 168.424 -
 168.425 -    static class InfoWindow extends Window {
 168.426 -        Container container;
 168.427 -        Closer closer;
 168.428 -
 168.429 -        InfoWindow(Frame parent, Color borderColor) {
 168.430 -            super(parent);
 168.431 -            container = new Container() {
 168.432 -                    public Insets getInsets() {
 168.433 -                        return new Insets(1, 1, 1, 1);
 168.434 -                    }
 168.435 -                };
 168.436 -            setLayout(new BorderLayout());
 168.437 -            setBackground(borderColor);
 168.438 -            add(container, BorderLayout.CENTER);
 168.439 -            container.setLayout(new BorderLayout());
 168.440 -
 168.441 -            closer = new Closer();
 168.442 -        }
 168.443 -
 168.444 -        public Component add(Component c) {
 168.445 -            container.add(c, BorderLayout.CENTER);
 168.446 -            return c;
 168.447 -        }
 168.448 -
 168.449 -        void setCloser(Runnable action, int time) {
 168.450 -            closer.set(action, time);
 168.451 -        }
 168.452 -
 168.453 -        // Must be executed on EDT.
 168.454 -        protected void show(Point corner, int indent) {
 168.455 -            assert SunToolkit.isDispatchThreadForAppContext(InfoWindow.this);
 168.456 -
 168.457 -            pack();
 168.458 -
 168.459 -            Dimension size = getSize();
 168.460 -            // TODO: When 6356322 is fixed we should get screen bounds in
 168.461 -            // this way: eframe.getGraphicsConfiguration().getBounds().
 168.462 -            Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
 168.463 -
 168.464 -            if (corner.x < scrSize.width/2 && corner.y < scrSize.height/2) { // 1st square
 168.465 -                setLocation(corner.x + indent, corner.y + indent);
 168.466 -
 168.467 -            } else if (corner.x >= scrSize.width/2 && corner.y < scrSize.height/2) { // 2nd square
 168.468 -                setLocation(corner.x - indent - size.width, corner.y + indent);
 168.469 -
 168.470 -            } else if (corner.x < scrSize.width/2 && corner.y >= scrSize.height/2) { // 3rd square
 168.471 -                setLocation(corner.x + indent, corner.y - indent - size.height);
 168.472 -
 168.473 -            } else if (corner.x >= scrSize.width/2 && corner.y >= scrSize.height/2) { // 4th square
 168.474 -                setLocation(corner.x - indent - size.width, corner.y - indent - size.height);
 168.475 -            }
 168.476 -
 168.477 -            InfoWindow.super.show();
 168.478 -            InfoWindow.this.closer.schedule();
 168.479 -        }
 168.480 -
 168.481 -        public void hide() {
 168.482 -            closer.close();
 168.483 -        }
 168.484 -
 168.485 -        class Closer implements Runnable {
 168.486 -            Runnable action;
 168.487 -            int time;
 168.488 -
 168.489 -            public void run() {
 168.490 -                doClose();
 168.491 -            }
 168.492 -
 168.493 -            void set(Runnable action, int time) {
 168.494 -                this.action = action;
 168.495 -                this.time = time;
 168.496 -            }
 168.497 -
 168.498 -            void schedule() {
 168.499 -                XToolkit.schedule(this, time);
 168.500 -            }
 168.501 -
 168.502 -            void close() {
 168.503 -                XToolkit.remove(this);
 168.504 -                doClose();
 168.505 -            }
 168.506 -
 168.507 -            // WARNING: this method may be executed on Toolkit thread.
 168.508 -            private void doClose() {
 168.509 -                SunToolkit.executeOnEventHandlerThread(InfoWindow.this, new Runnable() {
 168.510 -                        public void run() {
 168.511 -                            InfoWindow.super.hide();
 168.512 -                            invalidate();
 168.513 -                            if (action != null) {
 168.514 -                                action.run();
 168.515 -                            }
 168.516 -                        }
 168.517 -                    });
 168.518 -            }
 168.519 -        }
 168.520 -    }
 168.521  }
   169.1 --- a/src/solaris/classes/sun/awt/X11/XWM.java	Thu Apr 16 17:42:00 2009 +0100
   169.2 +++ b/src/solaris/classes/sun/awt/X11/XWM.java	Thu Apr 16 19:10:32 2009 -0700
   169.3 @@ -896,7 +896,7 @@
   169.4      /*
   169.5       * Set MWM decorations.  Set MWM functions depending on resizability.
   169.6       */
   169.7 -    static void setMotifDecor(XWindowPeer window, boolean resizable, int decorations, int functions) {
   169.8 +    static void setMotifDecor(XWindow window, boolean resizable, int decorations, int functions) {
   169.9          /* Apparently some WMs don't implement MWM_*_ALL semantic correctly */
  169.10          if ((decorations & MWMConstants.MWM_DECOR_ALL) != 0
  169.11              && (decorations != MWMConstants.MWM_DECOR_ALL))
   170.1 --- a/src/solaris/classes/sun/awt/X11/XWarningWindow.java	Thu Apr 16 17:42:00 2009 +0100
   170.2 +++ b/src/solaris/classes/sun/awt/X11/XWarningWindow.java	Thu Apr 16 19:10:32 2009 -0700
   170.3 @@ -25,16 +25,194 @@
   170.4  package sun.awt.X11;
   170.5  
   170.6  import java.awt.*;
   170.7 +import java.awt.event.*;
   170.8 +import java.awt.geom.Point2D;
   170.9 +import java.lang.ref.WeakReference;
  170.10 +import sun.java2d.SunGraphics2D;
  170.11 +import sun.java2d.pipe.Region;
  170.12 +import sun.awt.AWTAccessor;
  170.13 +import sun.awt.SunToolkit;
  170.14  
  170.15  class XWarningWindow extends XWindow {
  170.16 -    final static int defaultHeight = 27;
  170.17 +    private final static int showingDelay = 330;
  170.18 +    private final static int hidingDelay = 2000;
  170.19  
  170.20 -    Window ownerWindow;
  170.21 -    XWarningWindow(Window ownerWindow, long parentWindow) {
  170.22 -        super(ownerWindow, parentWindow);
  170.23 +    private final Window ownerWindow;
  170.24 +    private WeakReference<XWindowPeer> ownerPeer;
  170.25 +
  170.26 +    public final Window getOwnerWindow() {
  170.27 +        return ownerWindow;
  170.28 +    }
  170.29 +    private long parentWindow;
  170.30 +
  170.31 +    private final static String OWNER = "OWNER";
  170.32 +
  170.33 +    private static XIconInfo[][] icons;
  170.34 +
  170.35 +    private InfoWindow.Tooltip tooltip;
  170.36 +
  170.37 +    private static synchronized XIconInfo getSecurityIconInfo(int size, int num) {
  170.38 +        if (icons == null) {
  170.39 +            icons = new XIconInfo[4][3];
  170.40 +            if (XlibWrapper.dataModel == 32) {
  170.41 +                icons[0][0] = new XIconInfo(XAWTIcon32_security_icon_bw16_png.security_icon_bw16_png);
  170.42 +                icons[0][1] = new XIconInfo(XAWTIcon32_security_icon_interim16_png.security_icon_interim16_png);
  170.43 +                icons[0][2] = new XIconInfo(XAWTIcon32_security_icon_yellow16_png.security_icon_yellow16_png);
  170.44 +                icons[1][0] = new XIconInfo(XAWTIcon32_security_icon_bw24_png.security_icon_bw24_png);
  170.45 +                icons[1][1] = new XIconInfo(XAWTIcon32_security_icon_interim24_png.security_icon_interim24_png);
  170.46 +                icons[1][2] = new XIconInfo(XAWTIcon32_security_icon_yellow24_png.security_icon_yellow24_png);
  170.47 +                icons[2][0] = new XIconInfo(XAWTIcon32_security_icon_bw32_png.security_icon_bw32_png);
  170.48 +                icons[2][1] = new XIconInfo(XAWTIcon32_security_icon_interim32_png.security_icon_interim32_png);
  170.49 +                icons[2][2] = new XIconInfo(XAWTIcon32_security_icon_yellow32_png.security_icon_yellow32_png);
  170.50 +                icons[3][0] = new XIconInfo(XAWTIcon32_security_icon_bw48_png.security_icon_bw48_png);
  170.51 +                icons[3][1] = new XIconInfo(XAWTIcon32_security_icon_interim48_png.security_icon_interim48_png);
  170.52 +                icons[3][2] = new XIconInfo(XAWTIcon32_security_icon_yellow48_png.security_icon_yellow48_png);
  170.53 +            } else {
  170.54 +                icons[0][0] = new XIconInfo(XAWTIcon64_security_icon_bw16_png.security_icon_bw16_png);
  170.55 +                icons[0][1] = new XIconInfo(XAWTIcon64_security_icon_interim16_png.security_icon_interim16_png);
  170.56 +                icons[0][2] = new XIconInfo(XAWTIcon64_security_icon_yellow16_png.security_icon_yellow16_png);
  170.57 +                icons[1][0] = new XIconInfo(XAWTIcon64_security_icon_bw24_png.security_icon_bw24_png);
  170.58 +                icons[1][1] = new XIconInfo(XAWTIcon64_security_icon_interim24_png.security_icon_interim24_png);
  170.59 +                icons[1][2] = new XIconInfo(XAWTIcon64_security_icon_yellow24_png.security_icon_yellow24_png);
  170.60 +                icons[2][0] = new XIconInfo(XAWTIcon64_security_icon_bw32_png.security_icon_bw32_png);
  170.61 +                icons[2][1] = new XIconInfo(XAWTIcon64_security_icon_interim32_png.security_icon_interim32_png);
  170.62 +                icons[2][2] = new XIconInfo(XAWTIcon64_security_icon_yellow32_png.security_icon_yellow32_png);
  170.63 +                icons[3][0] = new XIconInfo(XAWTIcon64_security_icon_bw48_png.security_icon_bw48_png);
  170.64 +                icons[3][1] = new XIconInfo(XAWTIcon64_security_icon_interim48_png.security_icon_interim48_png);
  170.65 +                icons[3][2] = new XIconInfo(XAWTIcon64_security_icon_yellow48_png.security_icon_yellow48_png);
  170.66 +            }
  170.67 +        }
  170.68 +        final int sizeIndex = size % icons.length;
  170.69 +        return icons[sizeIndex][num % icons[sizeIndex].length];
  170.70 +    }
  170.71 +
  170.72 +    private volatile int currentIcon = 0;
  170.73 +
  170.74 +    /* -1 - uninitialized yet
  170.75 +     * 0 - 16x16
  170.76 +     * 1 - 24x24
  170.77 +     * 2 - 32x32
  170.78 +     * 3 - 48x48
  170.79 +     */
  170.80 +    private volatile int currentSize = -1;
  170.81 +
  170.82 +    /** Indicates whether the shape of the window must be updated
  170.83 +     */
  170.84 +    private volatile boolean sizeUpdated = true;
  170.85 +
  170.86 +    private synchronized boolean updateIconSize() {
  170.87 +        int newSize = currentSize;
  170.88 +
  170.89 +        if (ownerWindow != null) {
  170.90 +            Insets insets = ownerWindow.getInsets();
  170.91 +            int max = Math.max(insets.top, Math.max(insets.bottom,
  170.92 +                        Math.max(insets.left, insets.right)));
  170.93 +            if (max < 24) {
  170.94 +                newSize = 0;
  170.95 +            } else if (max < 32) {
  170.96 +                newSize = 1;
  170.97 +            } else if (max < 48) {
  170.98 +                newSize = 2;
  170.99 +            } else {
 170.100 +                newSize = 3;
 170.101 +            }
 170.102 +        }
 170.103 +        if (newSize != currentSize) {
 170.104 +            currentSize = newSize;
 170.105 +            sizeUpdated = true;
 170.106 +        }
 170.107 +        return sizeUpdated;
 170.108 +    }
 170.109 +
 170.110 +    private synchronized XIconInfo getSecurityIconInfo() {
 170.111 +        updateIconSize();
 170.112 +        return getSecurityIconInfo(currentSize, currentIcon);
 170.113 +    }
 170.114 +
 170.115 +    XWarningWindow(final Window ownerWindow, long parentWindow, XWindowPeer ownerPeer) {
 170.116 +        super(new XCreateWindowParams(new Object[] {
 170.117 +                        TARGET, ownerWindow,
 170.118 +                        OWNER, Long.valueOf(parentWindow)
 170.119 +        }));
 170.120          this.ownerWindow = ownerWindow;
 170.121 -        xSetVisible(true);
 170.122 -        toFront();
 170.123 +        this.parentWindow = parentWindow;
 170.124 +        this.tooltip = new InfoWindow.Tooltip(null, getTarget(),
 170.125 +                new InfoWindow.Tooltip.LiveArguments() {
 170.126 +                    public boolean isDisposed() {
 170.127 +                        return XWarningWindow.this.isDisposed();
 170.128 +                    }
 170.129 +                    public Rectangle getBounds() {
 170.130 +                        return XWarningWindow.this.getBounds();
 170.131 +                    }
 170.132 +                    public String getTooltipString() {
 170.133 +                        return XWarningWindow.this.ownerWindow.getWarningString();
 170.134 +                    }
 170.135 +                });
 170.136 +        this.ownerPeer = new WeakReference<XWindowPeer>(ownerPeer);
 170.137 +    }
 170.138 +
 170.139 +    private void requestNoTaskbar() {
 170.140 +        XNETProtocol netProtocol = XWM.getWM().getNETProtocol();
 170.141 +        if (netProtocol != null) {
 170.142 +            netProtocol.requestState(this, netProtocol.XA_NET_WM_STATE_SKIP_TASKBAR, true);
 170.143 +        }
 170.144 +    }
 170.145 +
 170.146 +    @Override
 170.147 +    void postInit(XCreateWindowParams params) {
 170.148 +        super.postInit(params);
 170.149 +        XToolkit.awtLock();
 170.150 +        try {
 170.151 +            XWM.setMotifDecor(this, false, 0, 0);
 170.152 +            XWM.setOLDecor(this, false, 0);
 170.153 +
 170.154 +            long parentWindow = ((Long)params.get(OWNER)).longValue();
 170.155 +            XlibWrapper.XSetTransientFor(XToolkit.getDisplay(),
 170.156 +                    getWindow(), parentWindow);
 170.157 +
 170.158 +            XWMHints hints = getWMHints();
 170.159 +            hints.set_flags(hints.get_flags() | (int)XUtilConstants.InputHint | (int)XUtilConstants.StateHint);
 170.160 +            hints.set_input(false);
 170.161 +            hints.set_initial_state(XUtilConstants.NormalState);
 170.162 +            XlibWrapper.XSetWMHints(XToolkit.getDisplay(), getWindow(), hints.pData);
 170.163 +
 170.164 +            initWMProtocols();
 170.165 +            requestNoTaskbar();
 170.166 +        } finally {
 170.167 +            XToolkit.awtUnlock();
 170.168 +        }
 170.169 +    }
 170.170 +
 170.171 +    private void updateWarningWindowBounds() {
 170.172 +        XWindowPeer peer = ownerPeer.get();
 170.173 +        if (peer != null) {
 170.174 +            synchronized (this) {
 170.175 +                if (updateIconSize()) {
 170.176 +                    XIconInfo ico = getSecurityIconInfo();
 170.177 +                    XToolkit.awtLock();
 170.178 +                    try {
 170.179 +                        XlibWrapper.SetBitmapShape(XToolkit.getDisplay(), getWindow(),
 170.180 +                                ico.getWidth(), ico.getHeight(), ico.getIntData());
 170.181 +                    } finally {
 170.182 +                        XToolkit.awtUnlock();
 170.183 +                    }
 170.184 +                    sizeUpdated = false;
 170.185 +                    AWTAccessor.getWindowAccessor().setSecurityWarningSize(
 170.186 +                            ownerWindow, ico.getWidth(), ico.getHeight());
 170.187 +                }
 170.188 +            }
 170.189 +            peer.repositionSecurityWarning();
 170.190 +        }
 170.191 +    }
 170.192 +
 170.193 +    /**
 170.194 +     * @param x,y,w,h coordinates of the untrusted window
 170.195 +     */
 170.196 +    public void reposition(int x, int y, int w, int h) {
 170.197 +        Point2D point = AWTAccessor.getWindowAccessor().
 170.198 +            calculateSecurityWarningPosition(ownerWindow,
 170.199 +                x, y, w, h);
 170.200 +        reshape((int)point.getX(), (int)point.getY(), getWidth(), getHeight());
 170.201      }
 170.202  
 170.203      protected String getWMName() {
 170.204 @@ -49,33 +227,19 @@
 170.205                                   getFont());
 170.206      }
 170.207      void paint(Graphics g, int x, int y, int width, int height) {
 170.208 -        String warningString = getWarningString();
 170.209 -        Rectangle bounds = getBounds();
 170.210 -        bounds.x = 0;
 170.211 -        bounds.y = 0;
 170.212 -        Rectangle updateRect = new Rectangle(x, y, width, height);
 170.213 -        if (updateRect.intersects(bounds)) {
 170.214 -            Rectangle updateArea = updateRect.intersection(bounds);
 170.215 -            g.setClip(updateArea);
 170.216 -            g.setColor(getBackground());
 170.217 -            g.fillRect(updateArea.x, updateArea.y, updateArea.width, updateArea.height);
 170.218 -            g.setColor(getColor());
 170.219 -            g.setFont(getFont());
 170.220 -            FontMetrics fm = g.getFontMetrics();
 170.221 -            int warningWidth = fm.stringWidth(warningString);
 170.222 -            int w_x = (bounds.width - warningWidth)/2;
 170.223 -            int w_y = (bounds.height + fm.getMaxAscent() - fm.getMaxDescent())/2;
 170.224 -            g.drawString(warningString, w_x, w_y);
 170.225 -            g.drawLine(bounds.x, bounds.y+bounds.height-1, bounds.x+bounds.width-1, bounds.y+bounds.height-1);
 170.226 -        }
 170.227 +        g.drawImage(getSecurityIconInfo().getImage(), 0, 0, null);
 170.228      }
 170.229  
 170.230      String getWarningString() {
 170.231          return ownerWindow.getWarningString();
 170.232      }
 170.233  
 170.234 +    int getWidth() {
 170.235 +        return getSecurityIconInfo().getWidth();
 170.236 +    }
 170.237 +
 170.238      int getHeight() {
 170.239 -        return defaultHeight; // should implement depending on Font
 170.240 +        return getSecurityIconInfo().getHeight();
 170.241      }
 170.242  
 170.243      Color getBackground() {
 170.244 @@ -97,6 +261,7 @@
 170.245          }
 170.246      }
 170.247  
 170.248 +    @Override
 170.249      public void handleExposeEvent(XEvent xev) {
 170.250          super.handleExposeEvent(xev);
 170.251  
 170.252 @@ -105,18 +270,156 @@
 170.253          final int y = xe.get_y();
 170.254          final int width = xe.get_width();
 170.255          final int height = xe.get_height();
 170.256 -        EventQueue.invokeLater(new Runnable() {
 170.257 -            public void run() {
 170.258 -                Graphics g = getGraphics();
 170.259 -                try {
 170.260 -                    paint(g, x, y, width, height);
 170.261 -                } finally {
 170.262 -                    g.dispose();
 170.263 -                }
 170.264 -            }
 170.265 -        });
 170.266 +        SunToolkit.executeOnEventHandlerThread(target,
 170.267 +                new Runnable() {
 170.268 +                    public void run() {
 170.269 +                        Graphics g = getGraphics();
 170.270 +                        try {
 170.271 +                            paint(g, x, y, width, height);
 170.272 +                        } finally {
 170.273 +                            g.dispose();
 170.274 +                        }
 170.275 +                    }
 170.276 +                });
 170.277      }
 170.278 +
 170.279 +    @Override
 170.280      protected boolean isEventDisabled(XEvent e) {
 170.281          return true;
 170.282      }
 170.283 +
 170.284 +    /** Send a synthetic UnmapNotify in order to withdraw the window.
 170.285 +     */
 170.286 +    private void withdraw() {
 170.287 +        XEvent req = new XEvent();
 170.288 +        try {
 170.289 +            long root;
 170.290 +            XToolkit.awtLock();
 170.291 +            try {
 170.292 +                root = XlibWrapper.RootWindow(XToolkit.getDisplay(), getScreenNumber());
 170.293 +            }
 170.294 +            finally {
 170.295 +                XToolkit.awtUnlock();
 170.296 +            }
 170.297 +
 170.298 +            req.set_type(XConstants.UnmapNotify);
 170.299 +
 170.300 +            XUnmapEvent umev = req.get_xunmap();
 170.301 +
 170.302 +            umev.set_event(root);
 170.303 +            umev.set_window(getWindow());
 170.304 +            umev.set_from_configure(false);
 170.305 +
 170.306 +            XToolkit.awtLock();
 170.307 +            try {
 170.308 +                XlibWrapper.XSendEvent(XToolkit.getDisplay(),
 170.309 +                        root,
 170.310 +                        false,
 170.311 +                        XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask,
 170.312 +                        req.pData);
 170.313 +            }
 170.314 +            finally {
 170.315 +                XToolkit.awtUnlock();
 170.316 +            }
 170.317 +        } finally {
 170.318 +            req.dispose();
 170.319 +        }
 170.320 +    }
 170.321 +
 170.322 +    @Override
 170.323 +    protected void stateChanged(long time, int oldState, int newState) {
 170.324 +        if (newState == XUtilConstants.IconicState) {
 170.325 +            super.xSetVisible(false);
 170.326 +            withdraw();
 170.327 +        }
 170.328 +    }
 170.329 +
 170.330 +    @Override
 170.331 +    protected void setMouseAbove(boolean above) {
 170.332 +        super.setMouseAbove(above);
 170.333 +        XWindowPeer p = ownerPeer.get();
 170.334 +        if (p != null) {
 170.335 +            p.updateSecurityWarningVisibility();
 170.336 +        }
 170.337 +    }
 170.338 +
 170.339 +    @Override
 170.340 +    protected void enterNotify(long window) {
 170.341 +        super.enterNotify(window);
 170.342 +        if (window == getWindow()) {
 170.343 +            tooltip.enter();
 170.344 +        }
 170.345 +    }
 170.346 +
 170.347 +    @Override
 170.348 +    protected void leaveNotify(long window) {
 170.349 +        super.leaveNotify(window);
 170.350 +        if (window == getWindow()) {
 170.351 +            tooltip.exit();
 170.352 +        }
 170.353 +    }
 170.354 +
 170.355 +    @Override
 170.356 +    public void xSetVisible(boolean visible) {
 170.357 +        super.xSetVisible(visible);
 170.358 +
 170.359 +        // The _NET_WM_STATE_SKIP_TASKBAR got reset upon hiding/showing,
 170.360 +        // so we request it every time whenever we change the visibility.
 170.361 +        requestNoTaskbar();
 170.362 +    }
 170.363 +
 170.364 +    private final Runnable hidingTask = new Runnable() {
 170.365 +        public void run() {
 170.366 +            xSetVisible(false);
 170.367 +        }
 170.368 +    };
 170.369 +
 170.370 +    private final Runnable showingTask = new Runnable() {
 170.371 +        public void run() {
 170.372 +            new Thread() {
 170.373 +                public void run() {
 170.374 +                    if (!isVisible()) {
 170.375 +                        xSetVisible(true);
 170.376 +                        updateWarningWindowBounds();
 170.377 +                    }
 170.378 +                    repaint();
 170.379 +                    if (currentIcon > 0) {
 170.380 +                        currentIcon--;
 170.381 +                        XToolkit.schedule(showingTask, showingDelay);
 170.382 +                    }
 170.383 +                }}.start();
 170.384 +        }
 170.385 +    };
 170.386 +
 170.387 +    public void setSecurityWarningVisible(boolean visible) {
 170.388 +        setSecurityWarningVisible(visible, true);
 170.389 +    }
 170.390 +
 170.391 +    public void setSecurityWarningVisible(boolean visible, boolean doSchedule) {
 170.392 +        if (visible) {
 170.393 +            XToolkit.remove(hidingTask);
 170.394 +            XToolkit.remove(showingTask);
 170.395 +            if (isVisible()) {
 170.396 +                currentIcon = 0;
 170.397 +            } else {
 170.398 +                currentIcon = 3;
 170.399 +            }
 170.400 +            if (doSchedule) {
 170.401 +                XToolkit.schedule(showingTask, 1);
 170.402 +            } else {
 170.403 +                showingTask.run();
 170.404 +            }
 170.405 +        } else {
 170.406 +            XToolkit.remove(showingTask);
 170.407 +            XToolkit.remove(hidingTask);
 170.408 +            if (!isVisible()) {
 170.409 +                return;
 170.410 +            }
 170.411 +            if (doSchedule) {
 170.412 +                XToolkit.schedule(hidingTask, hidingDelay);
 170.413 +            } else {
 170.414 +                hidingTask.run();
 170.415 +            }
 170.416 +        }
 170.417 +    }
 170.418  }
   171.1 --- a/src/solaris/classes/sun/awt/X11/XWindow.java	Thu Apr 16 17:42:00 2009 +0100
   171.2 +++ b/src/solaris/classes/sun/awt/X11/XWindow.java	Thu Apr 16 19:10:32 2009 -0700
   171.3 @@ -1,5 +1,5 @@
   171.4  /*
   171.5 - * Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
   171.6 + * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
   171.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   171.8   *
   171.9   * This code is free software; you can redistribute it and/or modify it
  171.10 @@ -68,6 +68,15 @@
  171.11      int oldWidth = -1;
  171.12      int oldHeight = -1;
  171.13  
  171.14 +    protected PropMwmHints mwm_hints;
  171.15 +    protected static XAtom wm_protocols;
  171.16 +    protected static XAtom wm_delete_window;
  171.17 +    protected static XAtom wm_take_focus;
  171.18 +
  171.19 +    private boolean stateChanged; // Indicates whether the value on savedState is valid
  171.20 +    private int savedState; // Holds last known state of the top-level window
  171.21 +
  171.22 +    XWindowAttributesData winAttr;
  171.23  
  171.24      protected X11GraphicsConfig graphicsConfig;
  171.25      protected AwtGraphicsConfigData graphicsConfigData;
  171.26 @@ -119,6 +128,9 @@
  171.27      private native static void initIDs();
  171.28  
  171.29      private static Field isPostedField;
  171.30 +    private static Field rawCodeField;
  171.31 +    private static Field primaryLevelUnicodeField;
  171.32 +    private static Field extendedKeyCodeField;
  171.33      static {
  171.34          initIDs();
  171.35      }
  171.36 @@ -218,6 +230,20 @@
  171.37          }
  171.38  
  171.39          params.putIfNull(BACKING_STORE, XToolkit.getBackingStoreType());
  171.40 +
  171.41 +        XToolkit.awtLock();
  171.42 +        try {
  171.43 +            if (wm_protocols == null) {
  171.44 +                wm_protocols = XAtom.get("WM_PROTOCOLS");
  171.45 +                wm_delete_window = XAtom.get("WM_DELETE_WINDOW");
  171.46 +                wm_take_focus = XAtom.get("WM_TAKE_FOCUS");
  171.47 +            }
  171.48 +        }
  171.49 +        finally {
  171.50 +            XToolkit.awtUnlock();
  171.51 +        }
  171.52 +        winAttr = new XWindowAttributesData();
  171.53 +        savedState = XUtilConstants.WithdrawnState;
  171.54      }
  171.55  
  171.56      void postInit(XCreateWindowParams params) {
  171.57 @@ -832,12 +858,42 @@
  171.58      public native boolean x11inputMethodLookupString(long event, long [] keysymArray);
  171.59      native boolean haveCurrentX11InputMethodInstance();
  171.60  
  171.61 +    private boolean mouseAboveMe;
  171.62 +
  171.63 +    public boolean isMouseAbove() {
  171.64 +        synchronized (getStateLock()) {
  171.65 +            return mouseAboveMe;
  171.66 +        }
  171.67 +    }
  171.68 +    protected void setMouseAbove(boolean above) {
  171.69 +        synchronized (getStateLock()) {
  171.70 +            mouseAboveMe = above;
  171.71 +        }
  171.72 +    }
  171.73 +
  171.74 +    protected void enterNotify(long window) {
  171.75 +        if (window == getWindow()) {
  171.76 +            setMouseAbove(true);
  171.77 +        }
  171.78 +    }
  171.79 +    protected void leaveNotify(long window) {
  171.80 +        if (window == getWindow()) {
  171.81 +            setMouseAbove(false);
  171.82 +        }
  171.83 +    }
  171.84 +
  171.85      public void handleXCrossingEvent(XEvent xev) {
  171.86          super.handleXCrossingEvent(xev);
  171.87          XCrossingEvent xce = xev.get_xcrossing();
  171.88  
  171.89          if (eventLog.isLoggable(Level.FINEST)) eventLog.finest(xce.toString());
  171.90  
  171.91 +        if (xce.get_type() == XConstants.EnterNotify) {
  171.92 +            enterNotify(xce.get_window());
  171.93 +        } else { // LeaveNotify:
  171.94 +            leaveNotify(xce.get_window());
  171.95 +        }
  171.96 +
  171.97          // Skip event If it was caused by a grab
  171.98          // This is needed because on displays with focus-follows-mouse on MousePress X system generates
  171.99          // two XCrossing events with mode != NormalNotify. First of them notifies that the mouse has left
 171.100 @@ -984,7 +1040,7 @@
 171.101         Parameter is a keysym basically from keysymdef.h
 171.102         XXX: how about vendor keys? Is there some with Unicode value and not in the list?
 171.103      */
 171.104 -    char keysymToUnicode( long keysym, int state ) {
 171.105 +    int keysymToUnicode( long keysym, int state ) {
 171.106          return XKeysym.convertKeysym( keysym, state );
 171.107      }
 171.108      int keyEventType2Id( int xEventType ) {
 171.109 @@ -994,6 +1050,13 @@
 171.110      static private long xkeycodeToKeysym(XKeyEvent ev) {
 171.111          return XKeysym.getKeysym( ev );
 171.112      }
 171.113 +    private long xkeycodeToPrimaryKeysym(XKeyEvent ev) {
 171.114 +        return XKeysym.xkeycode2primary_keysym( ev );
 171.115 +    }
 171.116 +    static private int primaryUnicode2JavaKeycode(int uni) {
 171.117 +        return (uni > 0? sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(uni) : 0);
 171.118 +        //return (uni > 0? uni + 0x01000000 : 0);
 171.119 +    }
 171.120      void logIncomingKeyEvent(XKeyEvent ev) {
 171.121          keyEventLog.fine("--XWindow.java:handleKeyEvent:"+ev);
 171.122          dumpKeysymArray(ev);
 171.123 @@ -1012,7 +1075,7 @@
 171.124      // un-final it if you need to override it in a subclass.
 171.125      final void handleKeyPress(XKeyEvent ev) {
 171.126          long keysym[] = new long[2];
 171.127 -        char unicodeKey = 0;
 171.128 +        int unicodeKey = 0;
 171.129          keysym[0] = XConstants.NoSymbol;
 171.130  
 171.131          if (keyEventLog.isLoggable(Level.FINE)) {
 171.132 @@ -1057,19 +1120,36 @@
 171.133          if( jkc == null ) {
 171.134              jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN);
 171.135          }
 171.136 +
 171.137 +        // Take the first keysym from a keysym array associated with the XKeyevent
 171.138 +        // and convert it to Unicode. Then, even if a Java keycode for the keystroke
 171.139 +        // is undefined, we still have a guess of what has been engraved on a keytop.
 171.140 +        int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0);
 171.141 +
 171.142          if (keyEventLog.isLoggable(Level.FINE)) {
 171.143              keyEventLog.fine(">>>Fire Event:"+
 171.144                 (ev.get_type() == XConstants.KeyPress ? "KEY_PRESSED; " : "KEY_RELEASED; ")+
 171.145                 "jkeycode:decimal="+jkc.getJavaKeycode()+
 171.146 -               ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "
 171.147 +               ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "+
 171.148 +               " legacy jkeycode: decimal="+XKeysym.getLegacyJavaKeycodeOnly(ev)+
 171.149 +               ", hex=0x"+Integer.toHexString(XKeysym.getLegacyJavaKeycodeOnly(ev))+"; "
 171.150              );
 171.151          }
 171.152 +
 171.153 +        int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible
 171.154 +        int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
 171.155 +                           primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
 171.156 +                             jkc.getJavaKeycode();
 171.157          postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED,
 171.158                            ev.get_time(),
 171.159 -                          jkc.getJavaKeycode(),
 171.160 +                          jkeyToReturn,
 171.161                            (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey),
 171.162                            jkc.getKeyLocation(),
 171.163 -                          ev.get_state(),ev.getPData(), XKeyEvent.getSize());
 171.164 +                          ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()),
 171.165 +                          unicodeFromPrimaryKeysym,
 171.166 +                          jkeyExtended);
 171.167 +
 171.168 +
 171.169          if( unicodeKey > 0 ) {
 171.170                  keyEventLog.fine("fire _TYPED on "+unicodeKey);
 171.171                  postKeyEvent( java.awt.event.KeyEvent.KEY_TYPED,
 171.172 @@ -1077,7 +1157,10 @@
 171.173                                java.awt.event.KeyEvent.VK_UNDEFINED,
 171.174                                unicodeKey,
 171.175                                java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN,
 171.176 -                              ev.get_state(),ev.getPData(), XKeyEvent.getSize());
 171.177 +                              ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)0,
 171.178 +                              unicodeFromPrimaryKeysym,
 171.179 +                              java.awt.event.KeyEvent.VK_UNDEFINED);
 171.180 +
 171.181          }
 171.182  
 171.183  
 171.184 @@ -1095,7 +1178,7 @@
 171.185      // un-private it if you need to call it from elsewhere
 171.186      private void handleKeyRelease(XKeyEvent ev) {
 171.187          long keysym[] = new long[2];
 171.188 -        char unicodeKey = 0;
 171.189 +        int unicodeKey = 0;
 171.190          keysym[0] = XConstants.NoSymbol;
 171.191  
 171.192          if (keyEventLog.isLoggable(Level.FINE)) {
 171.193 @@ -1113,7 +1196,9 @@
 171.194              keyEventLog.fine(">>>Fire Event:"+
 171.195                 (ev.get_type() == XConstants.KeyPress ? "KEY_PRESSED; " : "KEY_RELEASED; ")+
 171.196                 "jkeycode:decimal="+jkc.getJavaKeycode()+
 171.197 -               ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "
 171.198 +               ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "+
 171.199 +               " legacy jkeycode: decimal="+XKeysym.getLegacyJavaKeycodeOnly(ev)+
 171.200 +               ", hex=0x"+Integer.toHexString(XKeysym.getLegacyJavaKeycodeOnly(ev))+"; "
 171.201              );
 171.202          }
 171.203          // We obtain keysym from IM and derive unicodeKey from it for KeyPress only.
 171.204 @@ -1124,13 +1209,74 @@
 171.205          // That's why we use the same procedure as if there was no IM instance: do-it-yourself unicode.
 171.206          unicodeKey = keysymToUnicode( xkeycodeToKeysym(ev), ev.get_state() );
 171.207  
 171.208 +        // Take a first keysym from a keysym array associated with the XKeyevent
 171.209 +        // and convert it to Unicode. Then, even if Java keycode for the keystroke
 171.210 +        // is undefined, we still will have a guess of what was engraved on a keytop.
 171.211 +        int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0);
 171.212 +
 171.213 +        int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible
 171.214 +        int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
 171.215 +                           primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
 171.216 +                             jkc.getJavaKeycode();
 171.217          postKeyEvent(  java.awt.event.KeyEvent.KEY_RELEASED,
 171.218                            ev.get_time(),
 171.219 -                          jkc.getJavaKeycode(),
 171.220 +                          jkeyToReturn,
 171.221                            (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey),
 171.222                            jkc.getKeyLocation(),
 171.223 -                          ev.get_state(),ev.getPData(), XKeyEvent.getSize());
 171.224 +                          ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()),
 171.225 +                          unicodeFromPrimaryKeysym,
 171.226 +                          jkeyExtended);
 171.227  
 171.228 +
 171.229 +    }
 171.230 +
 171.231 +    /*
 171.232 +     * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are
 171.233 +     * unreliable, since mapping changes can happen for a virtual desktop
 171.234 +     * switch or MacOS style shading that became quite popular under X as
 171.235 +     * well.  Yes, it probably should not be this way, as it violates
 171.236 +     * ICCCM, but reality is that quite a lot of window managers abuse
 171.237 +     * mapping state.
 171.238 +     */
 171.239 +    int getWMState() {
 171.240 +        if (stateChanged) {
 171.241 +            stateChanged = false;
 171.242 +            WindowPropertyGetter getter =
 171.243 +                new WindowPropertyGetter(window, XWM.XA_WM_STATE, 0, 1, false,
 171.244 +                                         XWM.XA_WM_STATE);
 171.245 +            try {
 171.246 +                int status = getter.execute();
 171.247 +                if (status != XConstants.Success || getter.getData() == 0) {
 171.248 +                    return savedState = XUtilConstants.WithdrawnState;
 171.249 +                }
 171.250 +
 171.251 +                if (getter.getActualType() != XWM.XA_WM_STATE.getAtom() && getter.getActualFormat() != 32) {
 171.252 +                    return savedState = XUtilConstants.WithdrawnState;
 171.253 +                }
 171.254 +                savedState = (int)Native.getCard32(getter.getData());
 171.255 +            } finally {
 171.256 +                getter.dispose();
 171.257 +            }
 171.258 +        }
 171.259 +        return savedState;
 171.260 +    }
 171.261 +
 171.262 +    /**
 171.263 +     * Override this methods to get notifications when top-level window state changes. The state is
 171.264 +     * meant in terms of ICCCM: WithdrawnState, IconicState, NormalState
 171.265 +     */
 171.266 +    protected void stateChanged(long time, int oldState, int newState) {
 171.267 +    }
 171.268 +
 171.269 +    @Override
 171.270 +    public void handlePropertyNotify(XEvent xev) {
 171.271 +        super.handlePropertyNotify(xev);
 171.272 +        XPropertyEvent ev = xev.get_xproperty();
 171.273 +        if (ev.get_atom() == XWM.XA_WM_STATE.getAtom()) {
 171.274 +            // State has changed, invalidate saved value
 171.275 +            stateChanged = true;
 171.276 +            stateChanged(ev.get_time(), savedState, getWMState());
 171.277 +        }
 171.278      }
 171.279  
 171.280      public void reshape(Rectangle bounds) {
 171.281 @@ -1277,20 +1423,77 @@
 171.282          }
 171.283      }
 171.284  
 171.285 -    public void postKeyEvent(int id, long when, int keyCode, char keyChar,
 171.286 -        int keyLocation, int state, long event, int eventSize)
 171.287 +    public void postKeyEvent(int id, long when, int keyCode, int keyChar,
 171.288 +        int keyLocation, int state, long event, int eventSize, long rawCode,
 171.289 +        int unicodeFromPrimaryKeysym, int extendedKeyCode)
 171.290 +
 171.291      {
 171.292          long jWhen = XToolkit.nowMillisUTC_offset(when);
 171.293          int modifiers = getModifiers(state, 0, keyCode);
 171.294 +        if (rawCodeField == null) {
 171.295 +            rawCodeField = XToolkit.getField(KeyEvent.class, "rawCode");
 171.296 +        }
 171.297 +        if (primaryLevelUnicodeField == null) {
 171.298 +            primaryLevelUnicodeField = XToolkit.getField(KeyEvent.class, "primaryLevelUnicode");
 171.299 +        }
 171.300 +        if (extendedKeyCodeField == null) {
 171.301 +            extendedKeyCodeField = XToolkit.getField(KeyEvent.class, "extendedKeyCode");
 171.302 +        }
 171.303 +
 171.304          KeyEvent ke = new KeyEvent((Component)getEventSource(), id, jWhen,
 171.305 -                                   modifiers, keyCode, keyChar, keyLocation);
 171.306 +                                   modifiers, keyCode, (char)keyChar, keyLocation);
 171.307          if (event != 0) {
 171.308              byte[] data = Native.toBytes(event, eventSize);
 171.309              setBData(ke, data);
 171.310          }
 171.311 +        try {
 171.312 +            rawCodeField.set(ke, rawCode);
 171.313 +            primaryLevelUnicodeField.set(ke, (long)unicodeFromPrimaryKeysym);
 171.314 +            extendedKeyCodeField.set(ke, (long)extendedKeyCode);
 171.315 +        } catch (IllegalArgumentException e) {
 171.316 +            assert(false);
 171.317 +        } catch (IllegalAccessException e) {
 171.318 +            assert(false);
 171.319 +        }
 171.320          postEventToEventQueue(ke);
 171.321      }
 171.322  
 171.323      static native int getAWTKeyCodeForKeySym(int keysym);
 171.324      static native int getKeySymForAWTKeyCode(int keycode);
 171.325 +
 171.326 +    /* These two methods are actually applicable to toplevel windows only.
 171.327 +     * However, the functionality is required by both the XWindowPeer and
 171.328 +     * XWarningWindow, both of which have the XWindow as a common ancestor.
 171.329 +     * See XWM.setMotifDecor() for details.
 171.330 +     */
 171.331 +    public PropMwmHints getMWMHints() {
 171.332 +        if (mwm_hints == null) {
 171.333 +            mwm_hints = new PropMwmHints();
 171.334 +            if (!XWM.XA_MWM_HINTS.getAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS)) {
 171.335 +                mwm_hints.zero();
 171.336 +            }
 171.337 +        }
 171.338 +        return mwm_hints;
 171.339 +    }
 171.340 +
 171.341 +    public void setMWMHints(PropMwmHints hints) {
 171.342 +        mwm_hints = hints;
 171.343 +        if (hints != null) {
 171.344 +            XWM.XA_MWM_HINTS.setAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS);
 171.345 +        }
 171.346 +    }
 171.347 +
 171.348 +    protected final void initWMProtocols() {
 171.349 +        wm_protocols.setAtomListProperty(this, getWMProtocols());
 171.350 +    }
 171.351 +
 171.352 +    /**
 171.353 +     * Returns list of protocols which should be installed on this window.
 171.354 +     * Descendants can override this method to add class-specific protocols
 171.355 +     */
 171.356 +    protected XAtomList getWMProtocols() {
 171.357 +        // No protocols on simple window
 171.358 +        return new XAtomList();
 171.359 +    }
 171.360 +
 171.361  }
   172.1 --- a/src/solaris/classes/sun/awt/X11/XWindowPeer.java	Thu Apr 16 17:42:00 2009 +0100
   172.2 +++ b/src/solaris/classes/sun/awt/X11/XWindowPeer.java	Thu Apr 16 19:10:32 2009 -0700
   172.3 @@ -1,5 +1,5 @@
   172.4  /*
   172.5 - * Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
   172.6 + * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
   172.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   172.8   *
   172.9   * This code is free software; you can redistribute it and/or modify it
  172.10 @@ -30,6 +30,8 @@
  172.11  import java.awt.event.FocusEvent;
  172.12  import java.awt.event.WindowEvent;
  172.13  
  172.14 +import java.awt.image.BufferedImage;
  172.15 +
  172.16  import java.awt.peer.ComponentPeer;
  172.17  import java.awt.peer.WindowPeer;
  172.18  
  172.19 @@ -42,13 +44,17 @@
  172.20  import java.util.logging.Level;
  172.21  import java.util.logging.Logger;
  172.22  
  172.23 +import sun.awt.AWTAccessor;
  172.24  import sun.awt.ComponentAccessor;
  172.25  import sun.awt.WindowAccessor;
  172.26 +import sun.awt.AWTAccessor;
  172.27  import sun.awt.DisplayChangedListener;
  172.28  import sun.awt.SunToolkit;
  172.29  import sun.awt.X11GraphicsDevice;
  172.30  import sun.awt.X11GraphicsEnvironment;
  172.31  
  172.32 +import sun.java2d.pipe.Region;
  172.33 +
  172.34  class XWindowPeer extends XPanelPeer implements WindowPeer,
  172.35                                                  DisplayChangedListener {
  172.36  
  172.37 @@ -61,16 +67,11 @@
  172.38      // should be synchronized on awtLock
  172.39      private static Set<XWindowPeer> windows = new HashSet<XWindowPeer>();
  172.40  
  172.41 -    static XAtom wm_protocols;
  172.42 -    static XAtom wm_delete_window;
  172.43 -    static XAtom wm_take_focus;
  172.44  
  172.45 -    XWindowAttributesData winAttr;
  172.46      private boolean cachedFocusableWindow;
  172.47      XWarningWindow warningWindow;
  172.48  
  172.49      private boolean alwaysOnTop;
  172.50 -    PropMwmHints mwm_hints;
  172.51      private boolean locationByPlatform;
  172.52  
  172.53      Dialog modalBlocker;
  172.54 @@ -87,8 +88,6 @@
  172.55      private boolean grab = false; // Whether to do a grab during showing
  172.56  
  172.57      private boolean isMapped = false; // Is this window mapped or not
  172.58 -    private boolean stateChanged; // Indicates whether the value on savedState is valid
  172.59 -    private int savedState; // Holds last known state of the top-level window
  172.60      private boolean mustControlStackPosition = false; // Am override-redirect not on top
  172.61      private XEventDispatcher rootPropertyEventDispatcher = null;
  172.62  
  172.63 @@ -135,25 +134,18 @@
  172.64          super.preInit(params);
  172.65          params.putIfNull(BIT_GRAVITY, Integer.valueOf(XConstants.NorthWestGravity));
  172.66  
  172.67 -        savedState = XUtilConstants.WithdrawnState;
  172.68 +        long eventMask = 0;
  172.69 +        if (params.containsKey(EVENT_MASK)) {
  172.70 +            eventMask = ((Long)params.get(EVENT_MASK));
  172.71 +        }
  172.72 +        eventMask |= XConstants.VisibilityChangeMask;
  172.73 +        params.put(EVENT_MASK, eventMask);
  172.74 +
  172.75          XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE");
  172.76  
  172.77 -        winAttr = new XWindowAttributesData();
  172.78  
  172.79          params.put(OVERRIDE_REDIRECT, Boolean.valueOf(isOverrideRedirect()));
  172.80  
  172.81 -        SunToolkit.awtLock();
  172.82 -        try {
  172.83 -            windows.add(this);
  172.84 -            if (wm_protocols == null) {
  172.85 -                wm_protocols = XAtom.get("WM_PROTOCOLS");
  172.86 -                wm_delete_window = XAtom.get("WM_DELETE_WINDOW");
  172.87 -                wm_take_focus = XAtom.get("WM_TAKE_FOCUS");
  172.88 -            }
  172.89 -        }
  172.90 -        finally {
  172.91 -            SunToolkit.awtUnlock();
  172.92 -        }
  172.93          cachedFocusableWindow = isFocusableWindow();
  172.94  
  172.95          Font f = target.getFont();
  172.96 @@ -186,20 +178,6 @@
  172.97          params.put(BOUNDS, constrainBounds(bounds.x, bounds.y, bounds.width, bounds.height));
  172.98      }
  172.99  
 172.100 -    private void initWMProtocols() {
 172.101 -        wm_protocols.setAtomListProperty(this, getWMProtocols());
 172.102 -    }
 172.103 -
 172.104 -    /**
 172.105 -     * Returns list of protocols which should be installed on this window.
 172.106 -     * Descendants can override this method to add class-specific protocols
 172.107 -     */
 172.108 -    protected XAtomList getWMProtocols() {
 172.109 -        // No protocols on simple window
 172.110 -        return new XAtomList();
 172.111 -    }
 172.112 -
 172.113 -
 172.114      protected String getWMName() {
 172.115          String name = target.getName();
 172.116          if (name == null || name.trim().equals("")) {
 172.117 @@ -253,13 +231,17 @@
 172.118              // accessSystemTray permission allows to display TrayIcon, TrayIcon tooltip
 172.119              // and TrayIcon balloon windows without a warning window.
 172.120              if (!WindowAccessor.isTrayIconWindow((Window)target)) {
 172.121 -                warningWindow = new XWarningWindow((Window)target, getWindow());
 172.122 +                warningWindow = new XWarningWindow((Window)target, getWindow(), this);
 172.123              }
 172.124          }
 172.125  
 172.126          setSaveUnder(true);
 172.127  
 172.128          updateIconImages();
 172.129 +
 172.130 +        updateShape();
 172.131 +        updateOpacity();
 172.132 +        // no need in updateOpaque() as it is no-op
 172.133      }
 172.134  
 172.135      public void updateIconImages() {
 172.136 @@ -417,6 +399,22 @@
 172.137          return defaultIconInfo;
 172.138      }
 172.139  
 172.140 +    private void updateShape() {
 172.141 +        // Shape shape = ((Window)target).getShape();
 172.142 +        Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
 172.143 +        if (shape != null) {
 172.144 +            applyShape(Region.getInstance(shape, null));
 172.145 +        }
 172.146 +    }
 172.147 +
 172.148 +    private void updateOpacity() {
 172.149 +        // float opacity = ((Window)target).getOpacity();
 172.150 +        float opacity = AWTAccessor.getWindowAccessor().getOpacity((Window)target);
 172.151 +        if (opacity < 1.0f) {
 172.152 +            setOpacity(opacity);
 172.153 +        }
 172.154 +    }
 172.155 +
 172.156      public void updateMinimumSize() {
 172.157          //This function only saves minimumSize value in XWindowPeer
 172.158          //Setting WMSizeHints is implemented in XDecoratedPeer
 172.159 @@ -513,10 +511,15 @@
 172.160              }
 172.161  
 172.162  
 172.163 -            if (!bounds.getSize().equals(oldBounds.getSize())) {
 172.164 +            boolean isResized = !bounds.getSize().equals(oldBounds.getSize());
 172.165 +            boolean isMoved = !bounds.getLocation().equals(oldBounds.getLocation());
 172.166 +            if (isMoved || isResized) {
 172.167 +                repositionSecurityWarning();
 172.168 +            }
 172.169 +            if (isResized) {
 172.170                  postEventToEventQueue(new ComponentEvent(getEventSource(), ComponentEvent.COMPONENT_RESIZED));
 172.171              }
 172.172 -            if (!bounds.getLocation().equals(oldBounds.getLocation())) {
 172.173 +            if (isMoved) {
 172.174                  postEventToEventQueue(new ComponentEvent(getEventSource(), ComponentEvent.COMPONENT_MOVED));
 172.175              }
 172.176          } finally {
 172.177 @@ -539,7 +542,7 @@
 172.178      }
 172.179  
 172.180      public Insets getInsets() {
 172.181 -        return new Insets(getWarningWindowHeight(), 0, 0, 0);
 172.182 +        return new Insets(0, 0, 0, 0);
 172.183      }
 172.184  
 172.185      // NOTE: This method may be called by privileged threads.
 172.186 @@ -686,6 +689,7 @@
 172.187          int curScreenNum = ((X11GraphicsDevice)getGraphicsConfiguration().getDevice()).getScreen();
 172.188          int newScreenNum = 0;
 172.189          GraphicsDevice gds[] = XToolkit.localEnv.getScreenDevices();
 172.190 +        GraphicsConfiguration newGC = null;
 172.191          Rectangle screenBounds;
 172.192  
 172.193          for (int i = 0; i < gds.length; i++) {
 172.194 @@ -701,11 +705,13 @@
 172.195                  if (intAmt == area) {
 172.196                      // Completely on this screen - done!
 172.197                      newScreenNum = i;
 172.198 +                    newGC = gds[i].getDefaultConfiguration();
 172.199                      break;
 172.200                  }
 172.201                  if (intAmt > largestAmt) {
 172.202                      largestAmt = intAmt;
 172.203                      newScreenNum = i;
 172.204 +                    newGC = gds[i].getDefaultConfiguration();
 172.205                  }
 172.206              }
 172.207          }
 172.208 @@ -713,28 +719,20 @@
 172.209              if (log.isLoggable(Level.FINEST)) {
 172.210                  log.finest("XWindowPeer: Moved to a new screen");
 172.211              }
 172.212 -            draggedToNewScreen(newScreenNum);
 172.213 +            executeDisplayChangedOnEDT(newGC);
 172.214          }
 172.215      }
 172.216  
 172.217 -    /* Xinerama
 172.218 -     * called to update our GC when dragged onto another screen
 172.219 -     */
 172.220 -    public void draggedToNewScreen(int screenNum) {
 172.221 -        executeDisplayChangedOnEDT(screenNum);
 172.222 -    }
 172.223 -
 172.224      /**
 172.225       * Helper method that executes the displayChanged(screen) method on
 172.226       * the event dispatch thread.  This method is used in the Xinerama case
 172.227       * and after display mode change events.
 172.228       */
 172.229 -    private void executeDisplayChangedOnEDT(final int screenNum) {
 172.230 +    private void executeDisplayChangedOnEDT(final GraphicsConfiguration gc) {
 172.231          Runnable dc = new Runnable() {
 172.232              public void run() {
 172.233 -                // Updates this window's GC and notifies all the children.
 172.234 -                // See XPanelPeer/XCanvasPeer.displayChanged(int) for details.
 172.235 -                displayChanged(screenNum);
 172.236 +                AWTAccessor.getComponentAccessor().
 172.237 +                    setGraphicsConfiguration((Component)target, gc);
 172.238              }
 172.239          };
 172.240          SunToolkit.executeOnEventHandlerThread((Component)target, dc);
 172.241 @@ -745,9 +743,7 @@
 172.242       * X11GraphicsDevice when the display mode has been changed.
 172.243       */
 172.244      public void displayChanged() {
 172.245 -        GraphicsConfiguration gc = getGraphicsConfiguration();
 172.246 -        int curScreenNum = ((X11GraphicsDevice)gc.getDevice()).getScreen();
 172.247 -        executeDisplayChangedOnEDT(curScreenNum);
 172.248 +        executeDisplayChangedOnEDT(getGraphicsConfiguration());
 172.249      }
 172.250  
 172.251      /**
 172.252 @@ -761,6 +757,7 @@
 172.253       * Overridden to check if we need to update our GraphicsDevice/Config
 172.254       * Added for 4934052.
 172.255       */
 172.256 +    @Override
 172.257      public void handleConfigureNotifyEvent(XEvent xev) {
 172.258          // TODO: We create an XConfigureEvent every time we override
 172.259          // handleConfigureNotify() - too many!
 172.260 @@ -774,8 +771,7 @@
 172.261          // there could be a race condition in which a ComponentListener could
 172.262          // see the old screen.
 172.263          super.handleConfigureNotifyEvent(xev);
 172.264 -        // for 5085647: no applet warning window visible
 172.265 -        updateChildrenSizes();
 172.266 +        repositionSecurityWarning();
 172.267      }
 172.268  
 172.269      final void requestXFocus(long time) {
 172.270 @@ -1053,6 +1049,9 @@
 172.271          }
 172.272          updateFocusability();
 172.273          promoteDefaultPosition();
 172.274 +        if (!vis && warningWindow != null) {
 172.275 +            warningWindow.setSecurityWarningVisible(false, false);
 172.276 +        }
 172.277          super.setVisible(vis);
 172.278          if (!vis && !isWithdrawn()) {
 172.279              // ICCCM, 4.1.4. Changing Window State:
 172.280 @@ -1082,6 +1081,7 @@
 172.281          if (isOverrideRedirect() && vis) {
 172.282              updateChildrenSizes();
 172.283          }
 172.284 +        repositionSecurityWarning();
 172.285      }
 172.286  
 172.287      protected void suppressWmTakeFocus(boolean doSuppress) {
 172.288 @@ -1099,21 +1099,64 @@
 172.289          return 0;
 172.290      }
 172.291  
 172.292 -    // The height of area used to display Applet's warning about securit
 172.293 -    int getWarningWindowHeight() {
 172.294 +    // Called when shell changes its size and requires children windows
 172.295 +    // to update their sizes appropriately
 172.296 +    void updateChildrenSizes() {
 172.297 +    }
 172.298 +
 172.299 +    public void repositionSecurityWarning() {
 172.300 +        // NOTE: On KWin if the window/border snapping option is enabled,
 172.301 +        // the Java window may be swinging while it's being moved.
 172.302 +        // This doesn't make the application unusable though looks quite ugly.
 172.303 +        // Probobly we need to find some hint to assign to our Security
 172.304 +        // Warning window in order to exclude it from the snapping option.
 172.305 +        // We are not currently aware of existance of such a property.
 172.306          if (warningWindow != null) {
 172.307 -            return warningWindow.getHeight();
 172.308 -        } else {
 172.309 -            return 0;
 172.310 +            // We can't use the coordinates stored in the XBaseWindow since
 172.311 +            // they are zeros for decorated frames.
 172.312 +            int x = ComponentAccessor.getX(target);
 172.313 +            int y = ComponentAccessor.getY(target);
 172.314 +            int width = ComponentAccessor.getWidth(target);
 172.315 +            int height = ComponentAccessor.getHeight(target);
 172.316 +            warningWindow.reposition(x, y, width, height);
 172.317          }
 172.318      }
 172.319  
 172.320 -    // Called when shell changes its size and requires children windows
 172.321 -    // to update their sizes appropriately
 172.322 -    void updateChildrenSizes() {
 172.323 -        if (warningWindow != null) {
 172.324 -            warningWindow.reshape(0, getMenuBarHeight(), getSize().width, warningWindow.getHeight());
 172.325 +    @Override
 172.326 +    protected void setMouseAbove(boolean above) {
 172.327 +        super.setMouseAbove(above);
 172.328 +        updateSecurityWarningVisibility();
 172.329 +    }
 172.330 +
 172.331 +    public void updateSecurityWarningVisibility() {
 172.332 +        if (warningWindow == null) {
 172.333 +            return;
 172.334          }
 172.335 +
 172.336 +        boolean show = false;
 172.337 +
 172.338 +        int state = getWMState();
 172.339 +
 172.340 +        if (!isVisible()) {
 172.341 +            return; // The warning window should already be hidden.
 172.342 +        }
 172.343 +
 172.344 +        // getWMState() always returns 0 (Withdrawn) for simple windows. Hence
 172.345 +        // we ignore the state for such windows.
 172.346 +        if (isVisible() && (state == XUtilConstants.NormalState || isSimpleWindow())) {
 172.347 +            if (XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow() ==
 172.348 +                    getTarget())
 172.349 +            {
 172.350 +                show = true;
 172.351 +            }
 172.352 +
 172.353 +            if (isMouseAbove() || warningWindow.isMouseAbove())
 172.354 +            {
 172.355 +                show = true;
 172.356 +            }
 172.357 +        }
 172.358 +
 172.359 +        warningWindow.setSecurityWarningVisible(show);
 172.360      }
 172.361  
 172.362      boolean isOverrideRedirect() {
 172.363 @@ -1165,16 +1208,7 @@
 172.364  //         if (ve.get_state() == XlibWrapper.VisibilityUnobscured) {
 172.365  //             // raiseInputMethodWindow
 172.366  //         }
 172.367 -    }
 172.368 -
 172.369 -    public void handlePropertyNotify(XEvent xev) {
 172.370 -        super.handlePropertyNotify(xev);
 172.371 -        XPropertyEvent ev = xev.get_xproperty();
 172.372 -        if (ev.get_atom() == XWM.XA_WM_STATE.getAtom()) {
 172.373 -            // State has changed, invalidate saved value
 172.374 -            stateChanged = true;
 172.375 -            stateChanged(ev.get_time(), savedState, getWMState());
 172.376 -        }
 172.377 +        repositionSecurityWarning();
 172.378      }
 172.379  
 172.380      void handleRootPropertyNotify(XEvent xev) {
 172.381 @@ -1275,6 +1309,7 @@
 172.382       * Override this methods to get notifications when top-level window state changes. The state is
 172.383       * meant in terms of ICCCM: WithdrawnState, IconicState, NormalState
 172.384       */
 172.385 +    @Override
 172.386      protected void stateChanged(long time, int oldState, int newState) {
 172.387          // Fix for 6401700, 6412803
 172.388          // If this window is modal blocked, it is put into the transient_for
 172.389 @@ -1288,38 +1323,8 @@
 172.390          for (ToplevelStateListener topLevelListenerTmp : toplevelStateListeners) {
 172.391              topLevelListenerTmp.stateChangedICCCM(oldState, newState);
 172.392          }
 172.393 -    }
 172.394  
 172.395 -
 172.396 -    /*
 172.397 -     * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are
 172.398 -     * unreliable, since mapping changes can happen for a virtual desktop
 172.399 -     * switch or MacOS style shading that became quite popular under X as
 172.400 -     * well.  Yes, it probably should not be this way, as it violates
 172.401 -     * ICCCM, but reality is that quite a lot of window managers abuse
 172.402 -     * mapping state.
 172.403 -     */
 172.404 -    int getWMState() {
 172.405 -        if (stateChanged) {
 172.406 -            stateChanged = false;
 172.407 -            WindowPropertyGetter getter =
 172.408 -                new WindowPropertyGetter(window, XWM.XA_WM_STATE, 0, 1, false,
 172.409 -                                         XWM.XA_WM_STATE);
 172.410 -            try {
 172.411 -                int status = getter.execute();
 172.412 -                if (status != XConstants.Success || getter.getData() == 0) {
 172.413 -                    return savedState = XUtilConstants.WithdrawnState;
 172.414 -                }
 172.415 -
 172.416 -                if (getter.getActualType() != XWM.XA_WM_STATE.getAtom() && getter.getActualFormat() != 32) {
 172.417 -                    return savedState = XUtilConstants.WithdrawnState;
 172.418 -                }
 172.419 -                savedState = (int)Native.getCard32(getter.getData());
 172.420 -            } finally {
 172.421 -                getter.dispose();
 172.422 -            }
 172.423 -        }
 172.424 -        return savedState;
 172.425 +        updateSecurityWarningVisibility();
 172.426      }
 172.427  
 172.428      boolean isWithdrawn() {
 172.429 @@ -2064,4 +2069,44 @@
 172.430          }
 172.431          super.handleButtonPressRelease(xev);
 172.432      }
 172.433 +
 172.434 +    public void print(Graphics g) {
 172.435 +        // We assume we print the whole frame,
 172.436 +        // so we expect no clip was set previously
 172.437 +        Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
 172.438 +        if (shape != null) {
 172.439 +            g.setClip(shape);
 172.440 +        }
 172.441 +        super.print(g);
 172.442 +    }
 172.443 +
 172.444 +    @Override
 172.445 +    public void setOpacity(float opacity) {
 172.446 +        final long maxOpacity = 0xffffffffl;
 172.447 +        long iOpacity = (long)(opacity * maxOpacity);
 172.448 +        if (iOpacity < 0) {
 172.449 +            iOpacity = 0;
 172.450 +        }
 172.451 +        if (iOpacity > maxOpacity) {
 172.452 +            iOpacity = maxOpacity;
 172.453 +        }
 172.454 +
 172.455 +        XAtom netWmWindowOpacityAtom = XAtom.get("_NET_WM_WINDOW_OPACITY");
 172.456 +
 172.457 +        if (iOpacity == maxOpacity) {
 172.458 +            netWmWindowOpacityAtom.DeleteProperty(getWindow());
 172.459 +        } else {
 172.460 +            netWmWindowOpacityAtom.setCard32Property(getWindow(), iOpacity);
 172.461 +        }
 172.462 +    }
 172.463 +
 172.464 +    @Override
 172.465 +    public void setOpaque(boolean isOpaque) {
 172.466 +        // no-op
 172.467 +    }
 172.468 +
 172.469 +    @Override
 172.470 +    public void updateWindow(BufferedImage backBuffer) {
 172.471 +        // no-op
 172.472 +    }
 172.473  }
   173.1 --- a/src/solaris/classes/sun/awt/X11/XlibWrapper.java	Thu Apr 16 17:42:00 2009 +0100
   173.2 +++ b/src/solaris/classes/sun/awt/X11/XlibWrapper.java	Thu Apr 16 19:10:32 2009 -0700
   173.3 @@ -1,5 +1,5 @@
   173.4  /*
   173.5 - * Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
   173.6 + * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
   173.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   173.8   *
   173.9   * This code is free software; you can redistribute it and/or modify it
  173.10 @@ -156,6 +156,8 @@
  173.11  
  173.12      static native void XLowerWindow(long display, long window);
  173.13      static native void XRestackWindows(long display, long windows, int length);
  173.14 +    static native void XConfigureWindow(long display, long window,
  173.15 +            long value_mask, long values);
  173.16      static native void XSetInputFocus(long display, long window);
  173.17      static native void XSetInputFocus2(long display, long window, long time);
  173.18      static native long XGetInputFocus(long display);
  173.19 @@ -490,6 +492,21 @@
  173.20  
  173.21      static native int XKeysymToKeycode(long display, long keysym);
  173.22  
  173.23 +    // xkb-related
  173.24 +    static native int XkbGetEffectiveGroup(long display);
  173.25 +    static native long XkbKeycodeToKeysym(long display, int keycode, int group, int level);
  173.26 +    static native void XkbSelectEvents(long display, long device, long bits_to_change, long values_for_bits);
  173.27 +    static native void XkbSelectEventDetails(long display, long device, long event_type,
  173.28 +                                              long bits_to_change, long values_for_bits);
  173.29 +    static native boolean XkbQueryExtension(long display, long opcode_rtrn, long event_rtrn,
  173.30 +              long error_rtrn, long major_in_out, long minor_in_out);
  173.31 +    static native boolean XkbLibraryVersion(long lib_major_in_out, long lib_minor_in_out);
  173.32 +    static native long XkbGetMap(long display, long which, long device_spec);
  173.33 +    static native long XkbGetUpdatedMap(long display, long which, long xkb);
  173.34 +    static native void XkbFreeKeyboard(long xkb, long which, boolean free_all);
  173.35 +    static native boolean XkbTranslateKeyCode(long xkb, int keycode, long mods, long mods_rtrn, long keysym_rtrn);
  173.36 +
  173.37 +
  173.38      static native void XConvertCase(long keysym,
  173.39                                      long keysym_lowercase,
  173.40                                      long keysym_uppercase);
  173.41 @@ -533,6 +550,13 @@
  173.42      static native void SetRectangularShape(long display, long window,
  173.43              int lox, int loy, int hix, int hiy,
  173.44              sun.java2d.pipe.Region region);
  173.45 +    /** Each int in the bitmap array is one pixel with a 32-bit color:
  173.46 +     *  R, G, B, and Alpha.
  173.47 +     */
  173.48 +    static native void SetBitmapShape(long display, long window,
  173.49 +             int width, int height, int[] bitmap);
  173.50 +
  173.51 +    static native void SetZOrder(long display, long window, long above);
  173.52  
  173.53  /* Global memory area used for X lib parameter passing */
  173.54  
  173.55 @@ -608,6 +632,15 @@
  173.56          }
  173.57          return buf.toString();
  173.58      }
  173.59 +    static String getEventToString( int type ) {
  173.60 +        if( (type >= 0) && (type < eventToString.length)) {
  173.61 +            return eventToString[type];
  173.62 +        }else if( type == XToolkit.getXKBBaseEventCode() ) {
  173.63 +            //XXX TODO various xkb types
  173.64 +            return "XkbEvent";
  173.65 +        }
  173.66 +        return eventToString[0];
  173.67 +    }
  173.68  
  173.69      private static boolean getBuildInternal() {
  173.70          String javaVersion = XToolkit.getSystemProperty("java.version");
   174.1 --- a/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java	Thu Apr 16 17:42:00 2009 +0100
   174.2 +++ b/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java	Thu Apr 16 19:10:32 2009 -0700
   174.3 @@ -1,5 +1,5 @@
   174.4  /*
   174.5 - * Copyright 2003-2007 Sun Microsystems, Inc.  All Rights Reserved.
   174.6 + * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
   174.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   174.8   *
   174.9   * This code is free software; you can redistribute it and/or modify it
  174.10 @@ -859,14 +859,14 @@
  174.11                      pw.println("\n\tlong pData;");
  174.12                      pw.println("\n\tpublic long getPData() { return pData; }");
  174.13  
  174.14 -                    pw.println("\n\n\t" + stp.getJavaClassName() + "(long addr) {");
  174.15 +                    pw.println("\n\n\tpublic " + stp.getJavaClassName() + "(long addr) {");
  174.16                      if (generateLog) {
  174.17                          pw.println("\t\tlog.finest(\"Creating\");");
  174.18                      }
  174.19                      pw.println("\t\tpData=addr;");
  174.20                      pw.println("\t\tshould_free_memory = false;");
  174.21                      pw.println("\t}");
  174.22 -                    pw.println("\n\n\t" + stp.getJavaClassName() + "() {");
  174.23 +                    pw.println("\n\n\tpublic " + stp.getJavaClassName() + "() {");
  174.24                      if (generateLog) {
  174.25                          pw.println("\t\tlog.finest(\"Creating\");");
  174.26                      }
  174.27 @@ -1138,6 +1138,7 @@
  174.28              pw.println("/* This file is an automatically generated file, please do not edit this file, modify the XlibParser.java file instead !*/\n" );
  174.29              pw.println("#include <X11/Xlib.h>\n#include <X11/Xutil.h>\n#include <X11/Xos.h>\n#include <X11/Xatom.h>\n#include <stdio.h>\n");
  174.30              pw.println("#include <X11/extensions/Xdbe.h>");
  174.31 +            pw.println("#include <X11/XKBlib.h>");
  174.32              pw.println("#include \"awt_p.h\"");
  174.33              pw.println("#include \"color.h\"");
  174.34              pw.println("#include \"colordata.h\"");
   175.1 --- a/src/solaris/classes/sun/awt/X11/generator/sizes.64-solaris-i386	Thu Apr 16 17:42:00 2009 +0100
   175.2 +++ b/src/solaris/classes/sun/awt/X11/generator/sizes.64-solaris-i386	Thu Apr 16 19:10:32 2009 -0700
   175.3 @@ -16,10 +16,38 @@
   175.4  XIMStringConversionCallbackStruct.factor	10
   175.5  XIMStringConversionCallbackStruct.text	16
   175.6  XIMStringConversionCallbackStruct	24
   175.7 +XkbNewKeyboardNotifyEvent.type	0
   175.8 +XkbNewKeyboardNotifyEvent.serial	8
   175.9 +XkbNewKeyboardNotifyEvent.send_event	16
  175.10 +XkbNewKeyboardNotifyEvent.display	24
  175.11 +XkbNewKeyboardNotifyEvent.time	32
  175.12 +XkbNewKeyboardNotifyEvent.xkb_type	40
  175.13 +XkbNewKeyboardNotifyEvent.device	44
  175.14 +XkbNewKeyboardNotifyEvent.old_device	48
  175.15 +XkbNewKeyboardNotifyEvent.min_key_code	52
  175.16 +XkbNewKeyboardNotifyEvent.max_key_code	56
  175.17 +XkbNewKeyboardNotifyEvent.old_min_key_code	60
  175.18 +XkbNewKeyboardNotifyEvent.old_max_key_code	64
  175.19 +XkbNewKeyboardNotifyEvent.changed	68
  175.20 +XkbNewKeyboardNotifyEvent.req_major	72
  175.21 +XkbNewKeyboardNotifyEvent.req_minor	73
  175.22 +XkbNewKeyboardNotifyEvent	80
  175.23  XTimeCoord.time	0
  175.24  XTimeCoord.x	8
  175.25  XTimeCoord.y	10
  175.26  XTimeCoord	16
  175.27 +XkbCompatMapNotifyEvent.type	0
  175.28 +XkbCompatMapNotifyEvent.serial	8
  175.29 +XkbCompatMapNotifyEvent.send_event	16
  175.30 +XkbCompatMapNotifyEvent.display	24
  175.31 +XkbCompatMapNotifyEvent.time	32
  175.32 +XkbCompatMapNotifyEvent.xkb_type	40
  175.33 +XkbCompatMapNotifyEvent.device	44
  175.34 +XkbCompatMapNotifyEvent.changed_groups	48
  175.35 +XkbCompatMapNotifyEvent.first_si	52
  175.36 +XkbCompatMapNotifyEvent.num_si	56
  175.37 +XkbCompatMapNotifyEvent.num_total_si	60
  175.38 +XkbCompatMapNotifyEvent	64
  175.39  XIMStatusDrawCallbackStruct.type	0
  175.40  XIMStatusDrawCallbackStruct.data	8
  175.41  XIMStatusDrawCallbackStruct	16
  175.42 @@ -289,6 +317,22 @@
  175.43  XVisualInfo.colormap_size	56
  175.44  XVisualInfo.bits_per_rgb	60
  175.45  XVisualInfo	64
  175.46 +XkbControlsNotifyEvent.type	0
  175.47 +XkbControlsNotifyEvent.serial	8
  175.48 +XkbControlsNotifyEvent.send_event	16
  175.49 +XkbControlsNotifyEvent.display	24
  175.50 +XkbControlsNotifyEvent.time	32
  175.51 +XkbControlsNotifyEvent.xkb_type	40
  175.52 +XkbControlsNotifyEvent.device	44
  175.53 +XkbControlsNotifyEvent.changed_ctrls	48
  175.54 +XkbControlsNotifyEvent.enabled_ctrls	52
  175.55 +XkbControlsNotifyEvent.enabled_ctrl_changes	56
  175.56 +XkbControlsNotifyEvent.num_groups	60
  175.57 +XkbControlsNotifyEvent.keycode	64
  175.58 +XkbControlsNotifyEvent.event_type	65
  175.59 +XkbControlsNotifyEvent.req_major	66
  175.60 +XkbControlsNotifyEvent.req_minor	67
  175.61 +XkbControlsNotifyEvent	72
  175.62  PropMwmHints.flags	0
  175.63  PropMwmHints.functions	8
  175.64  PropMwmHints.decorations	16
  175.65 @@ -310,8 +354,26 @@
  175.66  XAnyEvent.display	24
  175.67  XAnyEvent.window	32
  175.68  XAnyEvent	40
  175.69 +XkbIndicatorNotifyEvent.type	0
  175.70 +XkbIndicatorNotifyEvent.serial	8
  175.71 +XkbIndicatorNotifyEvent.send_event	16
  175.72 +XkbIndicatorNotifyEvent.display	24
  175.73 +XkbIndicatorNotifyEvent.time	32
  175.74 +XkbIndicatorNotifyEvent.xkb_type	40
  175.75 +XkbIndicatorNotifyEvent.device	44
  175.76 +XkbIndicatorNotifyEvent.changed	48
  175.77 +XkbIndicatorNotifyEvent.state	52
  175.78 +XkbIndicatorNotifyEvent	56
  175.79  XIMPreeditStateNotifyCallbackStruct.state	0
  175.80  XIMPreeditStateNotifyCallbackStruct	8
  175.81 +XkbAnyEvent.type	0
  175.82 +XkbAnyEvent.serial	8
  175.83 +XkbAnyEvent.send_event	16
  175.84 +XkbAnyEvent.display	24
  175.85 +XkbAnyEvent.time	32
  175.86 +XkbAnyEvent.xkb_type	40
  175.87 +XkbAnyEvent.device	44
  175.88 +XkbAnyEvent	48
  175.89  XMotionEvent.type	0
  175.90  XMotionEvent.serial	8
  175.91  XMotionEvent.send_event	16
  175.92 @@ -334,6 +396,23 @@
  175.93  XIMStyles.count_styles	0
  175.94  XIMStyles.supported_styles	8
  175.95  XIMStyles	16
  175.96 +XkbExtensionDeviceNotifyEvent.type	0
  175.97 +XkbExtensionDeviceNotifyEvent.serial	8
  175.98 +XkbExtensionDeviceNotifyEvent.send_event	16
  175.99 +XkbExtensionDeviceNotifyEvent.display	24
 175.100 +XkbExtensionDeviceNotifyEvent.time	32
 175.101 +XkbExtensionDeviceNotifyEvent.xkb_type	40
 175.102 +XkbExtensionDeviceNotifyEvent.device	44
 175.103 +XkbExtensionDeviceNotifyEvent.reason	48
 175.104 +XkbExtensionDeviceNotifyEvent.supported	52
 175.105 +XkbExtensionDeviceNotifyEvent.unsupported	56
 175.106 +XkbExtensionDeviceNotifyEvent.first_btn	60
 175.107 +XkbExtensionDeviceNotifyEvent.num_btns	64
 175.108 +XkbExtensionDeviceNotifyEvent.leds_defined	68
 175.109 +XkbExtensionDeviceNotifyEvent.led_state	72
 175.110 +XkbExtensionDeviceNotifyEvent.led_class	76
 175.111 +XkbExtensionDeviceNotifyEvent.led_id	80
 175.112 +XkbExtensionDeviceNotifyEvent	88
 175.113  XwcTextItem.chars	0
 175.114  XwcTextItem.nchars	8
 175.115  XwcTextItem.delta	12
 175.116 @@ -419,6 +498,20 @@
 175.117  XKeyEvent.keycode	84
 175.118  XKeyEvent.same_screen	88
 175.119  XKeyEvent	96
 175.120 +XkbActionMessageEvent.type	0
 175.121 +XkbActionMessageEvent.serial	8
 175.122 +XkbActionMessageEvent.send_event	16
 175.123 +XkbActionMessageEvent.display	24
 175.124 +XkbActionMessageEvent.time	32
 175.125 +XkbActionMessageEvent.xkb_type	40
 175.126 +XkbActionMessageEvent.device	44
 175.127 +XkbActionMessageEvent.keycode	48
 175.128 +XkbActionMessageEvent.press	52
 175.129 +XkbActionMessageEvent.key_event_follows	56
 175.130 +XkbActionMessageEvent.group	60
 175.131 +XkbActionMessageEvent.mods	64
 175.132 +XkbActionMessageEvent.message	68
 175.133 +XkbActionMessageEvent	80
 175.134  XdbeSwapInfo.swap_window	0
 175.135  XdbeSwapInfo.swap_action	8
 175.136  XdbeSwapInfo	16
 175.137 @@ -458,6 +551,18 @@
 175.138  XOMOrientation.num_orientation	0
 175.139  XOMOrientation.orientation	8
 175.140  XOMOrientation	16
 175.141 +XkbAccessXNotifyEvent.type	0
 175.142 +XkbAccessXNotifyEvent.serial	8
 175.143 +XkbAccessXNotifyEvent.send_event	16
 175.144 +XkbAccessXNotifyEvent.display	24
 175.145 +XkbAccessXNotifyEvent.time	32
 175.146 +XkbAccessXNotifyEvent.xkb_type	40
 175.147 +XkbAccessXNotifyEvent.device	44
 175.148 +XkbAccessXNotifyEvent.detail	48
 175.149 +XkbAccessXNotifyEvent.keycode	52
 175.150 +XkbAccessXNotifyEvent.sk_delay	56
 175.151 +XkbAccessXNotifyEvent.debounce_delay	60
 175.152 +XkbAccessXNotifyEvent	64
 175.153  XWindowAttributes.x	0
 175.154  XWindowAttributes.y	4
 175.155  XWindowAttributes.width	8
 175.156 @@ -528,6 +633,33 @@
 175.157  awtImageData.clrdata	16
 175.158  awtImageData.convert	48
 175.159  awtImageData	560
 175.160 +XkbStateNotifyEvent.type	0
 175.161 +XkbStateNotifyEvent.serial	8
 175.162 +XkbStateNotifyEvent.send_event	16
 175.163 +XkbStateNotifyEvent.display	24
 175.164 +XkbStateNotifyEvent.time	32
 175.165 +XkbStateNotifyEvent.xkb_type	40
 175.166 +XkbStateNotifyEvent.device	44
 175.167 +XkbStateNotifyEvent.changed	48
 175.168 +XkbStateNotifyEvent.group	52
 175.169 +XkbStateNotifyEvent.base_group	56
 175.170 +XkbStateNotifyEvent.latched_group	60
 175.171 +XkbStateNotifyEvent.locked_group	64
 175.172 +XkbStateNotifyEvent.mods	68
 175.173 +XkbStateNotifyEvent.base_mods	72
 175.174 +XkbStateNotifyEvent.latched_mods	76
 175.175 +XkbStateNotifyEvent.locked_mods	80
 175.176 +XkbStateNotifyEvent.compat_state	84
 175.177 +XkbStateNotifyEvent.grab_mods	88
 175.178 +XkbStateNotifyEvent.compat_grab_mods	89
 175.179 +XkbStateNotifyEvent.lookup_mods	90
 175.180 +XkbStateNotifyEvent.compat_lookup_mods	91
 175.181 +XkbStateNotifyEvent.ptr_buttons	92
 175.182 +XkbStateNotifyEvent.keycode	96
 175.183 +XkbStateNotifyEvent.event_type	97
 175.184 +XkbStateNotifyEvent.req_major	98
 175.185 +XkbStateNotifyEvent.req_minor	99
 175.186 +XkbStateNotifyEvent	104
 175.187  XExposeEvent.type	0
 175.188  XExposeEvent.serial	8
 175.189  XExposeEvent.send_event	16
 175.190 @@ -539,6 +671,33 @@
 175.191  XExposeEvent.height	52
 175.192  XExposeEvent.count	56
 175.193  XExposeEvent	64
 175.194 +XkbMapNotifyEvent.type	0
 175.195 +XkbMapNotifyEvent.serial	8
 175.196 +XkbMapNotifyEvent.send_event	16
 175.197 +XkbMapNotifyEvent.display	24
 175.198 +XkbMapNotifyEvent.time	32
 175.199 +XkbMapNotifyEvent.xkb_type	40
 175.200 +XkbMapNotifyEvent.device	44
 175.201 +XkbMapNotifyEvent.changed	48
 175.202 +XkbMapNotifyEvent.flags	52
 175.203 +XkbMapNotifyEvent.first_type	56
 175.204 +XkbMapNotifyEvent.num_types	60
 175.205 +XkbMapNotifyEvent.min_key_code	64
 175.206 +XkbMapNotifyEvent.max_key_code	65
 175.207 +XkbMapNotifyEvent.first_key_sym	66
 175.208 +XkbMapNotifyEvent.first_key_act	67
 175.209 +XkbMapNotifyEvent.first_key_behavior	68
 175.210 +XkbMapNotifyEvent.first_key_explicit	69
 175.211 +XkbMapNotifyEvent.first_modmap_key	70
 175.212 +XkbMapNotifyEvent.first_vmodmap_key	71
 175.213 +XkbMapNotifyEvent.num_key_syms	72
 175.214 +XkbMapNotifyEvent.num_key_acts	76
 175.215 +XkbMapNotifyEvent.num_key_behaviors	80
 175.216 +XkbMapNotifyEvent.num_key_explicit	84
 175.217 +XkbMapNotifyEvent.num_modmap_keys	88
 175.218 +XkbMapNotifyEvent.num_vmodmap_keys	92
 175.219 +XkbMapNotifyEvent.vmods	96
 175.220 +XkbMapNotifyEvent	104
 175.221  XGCValues.function	0
 175.222  XGCValues.plane_mask	8
 175.223  XGCValues.foreground	16
 175.224 @@ -583,6 +742,22 @@
 175.225  XMapEvent.window	40
 175.226  XMapEvent.override_redirect	48
 175.227  XMapEvent	56
 175.228 +XkbBellNotifyEvent.type	0
 175.229 +XkbBellNotifyEvent.serial	8
 175.230 +XkbBellNotifyEvent.send_event	16
 175.231 +XkbBellNotifyEvent.display	24
 175.232 +XkbBellNotifyEvent.time	32
 175.233 +XkbBellNotifyEvent.xkb_type	40
 175.234 +XkbBellNotifyEvent.device	44
 175.235 +XkbBellNotifyEvent.percent	48
 175.236 +XkbBellNotifyEvent.pitch	52
 175.237 +XkbBellNotifyEvent.duration	56
 175.238 +XkbBellNotifyEvent.bell_class	60
 175.239 +XkbBellNotifyEvent.bell_id	64
 175.240 +XkbBellNotifyEvent.name	72
 175.241 +XkbBellNotifyEvent.window	80
 175.242 +XkbBellNotifyEvent.event_only	88
 175.243 +XkbBellNotifyEvent	96
 175.244  XIMStringConversionText.length	0
 175.245  XIMStringConversionText.feedback	8
 175.246  XIMStringConversionText.encoding_is_wchar	16
 175.247 @@ -596,6 +771,21 @@
 175.248  XKeyboardState.global_auto_repeat	24
 175.249  XKeyboardState.auto_repeats	28
 175.250  XKeyboardState	64
 175.251 +XkbEvent.type	0
 175.252 +XkbEvent.any	0
 175.253 +XkbEvent.new_kbd	0
 175.254 +XkbEvent.map	0
 175.255 +XkbEvent.state	0
 175.256 +XkbEvent.ctrls	0
 175.257 +XkbEvent.indicators	0
 175.258 +XkbEvent.names	0
 175.259 +XkbEvent.compat	0
 175.260 +XkbEvent.bell	0
 175.261 +XkbEvent.message	0
 175.262 +XkbEvent.accessx	0
 175.263 +XkbEvent.device	0
 175.264 +XkbEvent.core	0
 175.265 +XkbEvent	192
 175.266  XPoint.x	0
 175.267  XPoint.y	2
 175.268  XPoint	4
 175.269 @@ -633,6 +823,26 @@
 175.270  XRectangle.width	4
 175.271  XRectangle.height	6
 175.272  XRectangle	8
 175.273 +XkbNamesNotifyEvent.type	0
 175.274 +XkbNamesNotifyEvent.serial	8
 175.275 +XkbNamesNotifyEvent.send_event	16
 175.276 +XkbNamesNotifyEvent.display	24
 175.277 +XkbNamesNotifyEvent.time	32
 175.278 +XkbNamesNotifyEvent.xkb_type	40
 175.279 +XkbNamesNotifyEvent.device	44
 175.280 +XkbNamesNotifyEvent.changed	48
 175.281 +XkbNamesNotifyEvent.first_type	52
 175.282 +XkbNamesNotifyEvent.num_types	56
 175.283 +XkbNamesNotifyEvent.first_lvl	60
 175.284 +XkbNamesNotifyEvent.num_lvls	64
 175.285 +XkbNamesNotifyEvent.num_aliases	68
 175.286 +XkbNamesNotifyEvent.num_radio_groups	72
 175.287 +XkbNamesNotifyEvent.changed_vmods	76
 175.288 +XkbNamesNotifyEvent.changed_groups	80
 175.289 +XkbNamesNotifyEvent.changed_indicators	84
 175.290 +XkbNamesNotifyEvent.first_key	88
 175.291 +XkbNamesNotifyEvent.num_keys	92
 175.292 +XkbNamesNotifyEvent	96
 175.293  XCreateWindowEvent.type	0
 175.294  XCreateWindowEvent.serial	8
 175.295  XCreateWindowEvent.send_event	16
 175.296 @@ -774,7 +984,8 @@
 175.297  AwtGraphicsConfigData.pixelStride	136
 175.298  AwtGraphicsConfigData.color_data	144
 175.299  AwtGraphicsConfigData.glxInfo	152
 175.300 -AwtGraphicsConfigData	160
 175.301 +AwtGraphicsConfigData.isTranslucencySupported	160
 175.302 +AwtGraphicsConfigData	168
 175.303  XColor.pixel	0
 175.304  XColor.red	8
 175.305  XColor.green	10
   176.1 --- a/src/solaris/classes/sun/awt/X11/generator/xlibtypes.txt	Thu Apr 16 17:42:00 2009 +0100
   176.2 +++ b/src/solaris/classes/sun/awt/X11/generator/xlibtypes.txt	Thu Apr 16 19:10:32 2009 -0700
   176.3 @@ -119,7 +119,7 @@
   176.4      length	short
   176.5      feedback	pointer
   176.6      encoding_is_wchar	Bool
   176.7 -    string      pointer 
   176.8 +    string      pointer
   176.9  XKeymapEvent
  176.10      type	int
  176.11      serial	long
  176.12 @@ -574,7 +574,7 @@
  176.13      f.get_pixel pointer
  176.14      f.put_pixel pointer
  176.15      f.sub_image pointer
  176.16 -    f.add_pixel pointer    
  176.17 +    f.add_pixel pointer
  176.18  XIMValuesList
  176.19      count_values	short
  176.20      supported_values	pointer
  176.21 @@ -728,7 +728,7 @@
  176.22      awt_icmLUT pointer int
  176.23      awt_icmLUT2Colors pointer byte
  176.24      img_grays pointer byte
  176.25 -    img_clr_tbl pointer byte 
  176.26 +    img_clr_tbl pointer byte
  176.27      img_oda_red pointer byte
  176.28      img_oda_green pointer byte
  176.29      img_oda_blue pointer byte
  176.30 @@ -750,6 +750,7 @@
  176.31      pixelStride int
  176.32      color_data pointer ColorData
  176.33      glxInfo pointer
  176.34 +    isTranslucencySupported int
  176.35  
  176.36  AwtScreenData
  176.37      numConfigs int
  176.38 @@ -797,3 +798,227 @@
  176.39     xerror struct XErrorEvent
  176.40     xkeymap struct XKeymapEvent
  176.41     pad array long 24
  176.42 +
  176.43 +XkbAnyEvent
  176.44 +    type  int
  176.45 +    serial  ulong
  176.46 +    send_event  Bool
  176.47 +    display  long
  176.48 +    time  ulong
  176.49 +    xkb_type  int
  176.50 +    device  int
  176.51 +
  176.52 +XkbNewKeyboardNotifyEvent
  176.53 +    type  int
  176.54 +    serial  ulong
  176.55 +    send_event  Bool
  176.56 +    display  long
  176.57 +    time  ulong
  176.58 +    xkb_type  int
  176.59 +    device  int
  176.60 +    old_device  int
  176.61 +    min_key_code  int
  176.62 +    max_key_code  int
  176.63 +    old_min_key_code  int
  176.64 +    old_max_key_code  int
  176.65 +    changed  int
  176.66 +    req_major  byte
  176.67 +    req_minor  byte
  176.68 +
  176.69 +XkbMapNotifyEvent
  176.70 +    type  int
  176.71 +    serial  ulong
  176.72 +    send_event  Bool
  176.73 +    display  long
  176.74 +    time  ulong
  176.75 +    xkb_type  int
  176.76 +    device  int
  176.77 +    changed  int
  176.78 +    flags  int
  176.79 +    first_type  int
  176.80 +    num_types  int
  176.81 +    min_key_code  int
  176.82 +    max_key_code  int
  176.83 +    first_key_sym  int
  176.84 +    first_key_act  int
  176.85 +    first_key_behavior  int
  176.86 +    first_key_explicit  int
  176.87 +    first_modmap_key  int
  176.88 +    first_vmodmap_key  int
  176.89 +    num_key_syms  int
  176.90 +    num_key_acts  int
  176.91 +    num_key_behaviors  int
  176.92 +    num_key_explicit  int
  176.93 +    num_modmap_keys  int
  176.94 +    num_vmodmap_keys  int
  176.95 +    vmods  int
  176.96 +
  176.97 +XkbStateNotifyEvent
  176.98 +    type  int
  176.99 +    serial  ulong
 176.100 +    send_event  Bool
 176.101 +    display  long
 176.102 +    time  ulong
 176.103 +    xkb_type  int
 176.104 +    device  int
 176.105 +    changed  int
 176.106 +    group  int
 176.107 +    base_group  int
 176.108 +    latched_group  int
 176.109 +    locked_group  int
 176.110 +    mods  int
 176.111 +    base_mods  int
 176.112 +    latched_mods  int
 176.113 +    locked_mods  int
 176.114 +    compat_state  int
 176.115 +    grab_mods  byte
 176.116 +    compat_grab_mods  byte
 176.117 +    lookup_mods  byte
 176.118 +    compat_lookup_mods  byte
 176.119 +    ptr_buttons  int
 176.120 +    keycode  int
 176.121 +    event_type  byte
 176.122 +    req_major  byte
 176.123 +    req_minor  byte
 176.124 +
 176.125 +XkbControlsNotifyEvent
 176.126 +    type  int
 176.127 +    serial  ulong
 176.128 +    send_event  Bool
 176.129 +    display  long
 176.130 +    time  ulong
 176.131 +    xkb_type  int
 176.132 +    device  int
 176.133 +    changed_ctrls  int
 176.134 +    enabled_ctrls  int
 176.135 +    enabled_ctrl_changes  int
 176.136 +    num_groups  int
 176.137 +    keycode  int
 176.138 +    event_type  byte
 176.139 +    req_major  byte
 176.140 +    req_minor  byte
 176.141 +
 176.142 +XkbIndicatorNotifyEvent
 176.143 +    type  int
 176.144 +    serial  ulong
 176.145 +    send_event  Bool
 176.146 +    display  long
 176.147 +    time  ulong
 176.148 +    xkb_type  int
 176.149 +    device  int
 176.150 +    changed  int
 176.151 +    state  int
 176.152 +
 176.153 +XkbNamesNotifyEvent
 176.154 +    type  int
 176.155 +    serial  ulong
 176.156 +    send_event  Bool
 176.157 +    display  long
 176.158 +    time  ulong
 176.159 +    xkb_type  int
 176.160 +    device  int
 176.161 +    changed  int
 176.162 +    first_type  int
 176.163 +    num_types  int
 176.164 +    first_lvl  int
 176.165 +    num_lvls  int
 176.166 +    num_aliases  int
 176.167 +    num_radio_groups  int
 176.168 +    changed_vmods  int
 176.169 +    changed_groups  int
 176.170 +    changed_indicators  int
 176.171 +    first_key  int
 176.172 +    num_keys  int
 176.173 +
 176.174 +
 176.175 +XkbCompatMapNotifyEvent
 176.176 +    type  int
 176.177 +    serial  ulong
 176.178 +    send_event  Bool
 176.179 +    display  long
 176.180 +    time  ulong
 176.181 +    xkb_type  int
 176.182 +    device  int
 176.183 +    changed_groups  int
 176.184 +    first_si  int
 176.185 +    num_si  int
 176.186 +    num_total_si  int
 176.187 +
 176.188 +XkbBellNotifyEvent
 176.189 +    type  int
 176.190 +    serial  ulong
 176.191 +    send_event  Bool
 176.192 +    display  long
 176.193 +    time  ulong
 176.194 +    xkb_type  int
 176.195 +    device  int
 176.196 +    percent  int
 176.197 +    pitch  int
 176.198 +    duration  int
 176.199 +    bell_class  int
 176.200 +    bell_id  int
 176.201 +    name  Atom
 176.202 +    window  long
 176.203 +    event_only  Bool
 176.204 +
 176.205 +XkbActionMessageEvent
 176.206 +    type  int
 176.207 +    serial  ulong
 176.208 +    send_event  Bool
 176.209 +    display  long
 176.210 +    time  ulong
 176.211 +    xkb_type  int
 176.212 +    device  int
 176.213 +    keycode  int
 176.214 +    press  Bool
 176.215 +    key_event_follows  Bool
 176.216 +    group  int
 176.217 +    mods  int
 176.218 +    message array byte 7 //XkbActionMessageLength+1
 176.219 +
 176.220 +XkbAccessXNotifyEvent
 176.221 +    type  int
 176.222 +    serial  ulong
 176.223 +    send_event  Bool
 176.224 +    display  long
 176.225 +    time  ulong
 176.226 +    xkb_type  int
 176.227 +    device  int
 176.228 +    detail  int
 176.229 +    keycode  int
 176.230 +    sk_delay  int
 176.231 +    debounce_delay  int
 176.232 +
 176.233 +XkbExtensionDeviceNotifyEvent
 176.234 +    type  int
 176.235 +    serial  ulong
 176.236 +    send_event  Bool
 176.237 +    display  long
 176.238 +    time  ulong
 176.239 +    xkb_type  int
 176.240 +    device  int
 176.241 +    reason  int
 176.242 +    supported  int
 176.243 +    unsupported  int
 176.244 +    first_btn  int
 176.245 +    num_btns  int
 176.246 +    leds_defined  int
 176.247 +    led_state  int
 176.248 +    led_class  int
 176.249 +    led_id  int
 176.250 +
 176.251 +XkbEvent
 176.252 +    type  int
 176.253 +    any  struct XkbAnyEvent
 176.254 +    new_kbd  struct XkbNewKeyboardNotifyEvent
 176.255 +    map  struct XkbMapNotifyEvent
 176.256 +    state  struct XkbStateNotifyEvent
 176.257 +    ctrls  struct XkbControlsNotifyEvent
 176.258 +    indicators  struct XkbIndicatorNotifyEvent
 176.259 +    names  struct XkbNamesNotifyEvent
 176.260 +    compat  struct XkbCompatMapNotifyEvent
 176.261 +    bell  struct XkbBellNotifyEvent
 176.262 +    message  struct XkbActionMessageEvent
 176.263 +    accessx  struct XkbAccessXNotifyEvent
 176.264 +    device  struct XkbExtensionDeviceNotifyEvent
 176.265 +    core  struct XEvent
   177.1 --- a/src/solaris/classes/sun/awt/X11/keysym2ucs.h	Thu Apr 16 17:42:00 2009 +0100
   177.2 +++ b/src/solaris/classes/sun/awt/X11/keysym2ucs.h	Thu Apr 16 19:10:32 2009 -0700
   177.3 @@ -1,5 +1,5 @@
   177.4  /*
   177.5 - * Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
   177.6 + * Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
   177.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   177.8   *
   177.9   * This code is free software; you can redistribute it and/or modify it
  177.10 @@ -39,7 +39,7 @@
  177.11   */
  177.12  
  177.13  tojava /*
  177.14 -tojava  * Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
  177.15 +tojava  * Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
  177.16  tojava  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  177.17  tojava  *
  177.18  tojava  * This code is free software; you can redistribute it and/or modify it
  177.19 @@ -127,14 +127,47 @@
  177.20  tojava         Character ch = keysym2UCSHash.get(ks);
  177.21  tojava         return ch == null ? (char)0 : ch.charValue();
  177.22  tojava     }
  177.23 +tojava     static long xkeycode2keysym_noxkb(XKeyEvent ev, int ndx) {
  177.24 +tojava         XToolkit.awtLock();
  177.25 +tojava         try {
  177.26 +tojava             return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx);
  177.27 +tojava         } finally {
  177.28 +tojava             XToolkit.awtUnlock();
  177.29 +tojava         }
  177.30 +tojava     }
  177.31 +tojava     static long xkeycode2keysym_xkb(XKeyEvent ev, int ndx) {
  177.32 +tojava         XToolkit.awtLock();
  177.33 +tojava         try {
  177.34 +tojava             int mods = ev.get_state();
  177.35 +tojava             if ((ndx == 0) && ((mods & XConstants.ShiftMask) != 0)) {
  177.36 +tojava                 // I don't know all possible meanings of 'ndx' in case of XKB
  177.37 +tojava                 // and don't want to speculate. But this particular case
  177.38 +tojava                 // clearly means that caller needs a so called primary keysym.
  177.39 +tojava                 mods ^= XConstants.ShiftMask;
  177.40 +tojava             }
  177.41 +tojava             XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(),
  177.42 +tojava                        mods, XlibWrapper.iarg1, XlibWrapper.larg3);
  177.43 +tojava             //XXX unconsumed modifiers?
  177.44 +tojava             return Native.getLong(XlibWrapper.larg3);
  177.45 +tojava         } finally {
  177.46 +tojava             XToolkit.awtUnlock();
  177.47 +tojava         }
  177.48 +tojava     }
  177.49  tojava     static long xkeycode2keysym(XKeyEvent ev, int ndx) {
  177.50  tojava         XToolkit.awtLock();
  177.51  tojava         try {
  177.52 -tojava             return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx );
  177.53 +tojava             if (XToolkit.canUseXKBCalls()) {
  177.54 +tojava                 return xkeycode2keysym_xkb(ev, ndx);
  177.55 +tojava             }else{
  177.56 +tojava                 return xkeycode2keysym_noxkb(ev, ndx);
  177.57 +tojava             }
  177.58  tojava         } finally {
  177.59  tojava             XToolkit.awtUnlock();
  177.60  tojava         }
  177.61  tojava     }
  177.62 +tojava     static long xkeycode2primary_keysym(XKeyEvent ev) {
  177.63 +tojava         return xkeycode2keysym(ev, 0);
  177.64 +tojava     }
  177.65  tojava     public static boolean isKPEvent( XKeyEvent ev )
  177.66  tojava     {
  177.67  tojava         // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
  177.68 @@ -236,6 +269,27 @@
  177.69  tojava         Keysym2JavaKeycode jkc = getJavaKeycode( ev );
  177.70  tojava         return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
  177.71  tojava     }
  177.72 +tojava     /**
  177.73 +tojava      * Return an integer java keycode apprx as it was before extending keycodes range.
  177.74 +tojava      * This call would ignore for instance XKB and process whatever is on the bottom
  177.75 +tojava      * of keysym stack. Result will not depend on actual locale, will differ between
  177.76 +tojava      * dual/multiple keyboard setup systems (e.g. English+Russian vs French+Russian)
  177.77 +tojava      * but will be someway compatible with old releases.
  177.78 +tojava      */
  177.79 +tojava     static int getLegacyJavaKeycodeOnly( XKeyEvent ev ) {
  177.80 +tojava         long keysym = XConstants.NoSymbol;
  177.81 +tojava         int ndx = 0;
  177.82 +tojava         if( (ev.get_state() & XToolkit.numLockMask) != 0 &&
  177.83 +tojava              isKPEvent(ev)) {
  177.84 +tojava             keysym = getKeypadKeysym( ev );
  177.85 +tojava         } else {
  177.86 +tojava             // we only need primary-layer keysym to derive a java keycode.
  177.87 +tojava             ndx = 0;
  177.88 +tojava             keysym = xkeycode2keysym_noxkb(ev, ndx);
  177.89 +tojava         }
  177.90 +tojava         Keysym2JavaKeycode jkc = keysym2JavaKeycodeHash.get( keysym );
  177.91 +tojava         return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
  177.92 +tojava     }
  177.93  tojava     static long javaKeycode2Keysym( int jkey ) {
  177.94  tojava         Long ks = javaKeycode2KeysymHash.get( jkey );
  177.95  tojava         return  (ks == null ? 0 : ks.longValue());
   178.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw16.png has changed
   179.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw24.png has changed
   180.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw32.png has changed
   181.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw48.png has changed
   182.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim16.png has changed
   183.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim24.png has changed
   184.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim32.png has changed
   185.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim48.png has changed
   186.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow16.png has changed
   187.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow24.png has changed
   188.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow32.png has changed
   189.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow48.png has changed
   190.1 --- a/src/solaris/classes/sun/awt/X11GraphicsConfig.java	Thu Apr 16 17:42:00 2009 +0100
   190.2 +++ b/src/solaris/classes/sun/awt/X11GraphicsConfig.java	Thu Apr 16 19:10:32 2009 -0700
   190.3 @@ -1,5 +1,5 @@
   190.4  /*
   190.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
   190.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
   190.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   190.8   *
   190.9   * This code is free software; you can redistribute it and/or modify it
  190.10 @@ -450,4 +450,13 @@
  190.11              return 0x00; // UNDEFINED
  190.12          }
  190.13      }
  190.14 +
  190.15 +    /*
  190.16 +    @Override
  190.17 +    */
  190.18 +    public boolean isTranslucencyCapable() {
  190.19 +        return isTranslucencyCapable(getAData());
  190.20 +    }
  190.21 +
  190.22 +    private native boolean isTranslucencyCapable(long x11ConfigData);
  190.23  }
   191.1 --- a/src/solaris/classes/sun/awt/motif/MToolkit.java	Thu Apr 16 17:42:00 2009 +0100
   191.2 +++ b/src/solaris/classes/sun/awt/motif/MToolkit.java	Thu Apr 16 19:10:32 2009 -0700
   191.3 @@ -336,6 +336,10 @@
   191.4          return null;
   191.5      }
   191.6  
   191.7 +    public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
   191.8 +        return null;
   191.9 +    }
  191.10 +
  191.11      //public MEmbeddedFramePeer createEmbeddedFrame(MEmbeddedFrame target)
  191.12      //{
  191.13          //MEmbeddedFramePeer peer = new MEmbeddedFramePeer(target);
   192.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   192.2 +++ b/src/solaris/classes/sun/net/NetHooks.java	Thu Apr 16 19:10:32 2009 -0700
   192.3 @@ -0,0 +1,122 @@
   192.4 +/*
   192.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   192.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   192.7 + *
   192.8 + * This code is free software; you can redistribute it and/or modify it
   192.9 + * under the terms of the GNU General Public License version 2 only, as
  192.10 + * published by the Free Software Foundation.  Sun designates this
  192.11 + * particular file as subject to the "Classpath" exception as provided
  192.12 + * by Sun in the LICENSE file that accompanied this code.
  192.13 + *
  192.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  192.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  192.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  192.17 + * version 2 for more details (a copy is included in the LICENSE file that
  192.18 + * accompanied this code).
  192.19 + *
  192.20 + * You should have received a copy of the GNU General Public License version
  192.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  192.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  192.23 + *
  192.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  192.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  192.26 + * have any questions.
  192.27 + */
  192.28 +
  192.29 +package sun.net;
  192.30 +
  192.31 +import java.net.InetAddress;
  192.32 +import java.io.FileDescriptor;
  192.33 +import java.io.IOException;
  192.34 +import java.security.AccessController;
  192.35 +import java.security.PrivilegedAction;
  192.36 +import sun.security.action.GetPropertyAction;
  192.37 +
  192.38 +/**
  192.39 + * Defines static methods to be invoked prior to binding or connecting TCP sockets.
  192.40 + */
  192.41 +
  192.42 +public final class NetHooks {
  192.43 +
  192.44 +    /**
  192.45 +     * A provider with hooks to allow sockets be converted prior to binding or
  192.46 +     * connecting a TCP socket.
  192.47 +     *
  192.48 +     * <p> Concrete implementations of this class should define a zero-argument
  192.49 +     * constructor and implement the abstract methods specified below.
  192.50 +     */
  192.51 +    public static abstract class Provider {
  192.52 +        /**
  192.53 +         * Initializes a new instance of this class.
  192.54 +         */
  192.55 +        protected Provider() {}
  192.56 +
  192.57 +        /**
  192.58 +         * Invoked prior to binding a TCP socket.
  192.59 +         */
  192.60 +        public abstract void implBeforeTcpBind(FileDescriptor fdObj,
  192.61 +                                               InetAddress address,
  192.62 +                                               int port)
  192.63 +            throws IOException;
  192.64 +
  192.65 +        /**
  192.66 +         * Invoked prior to connecting an unbound TCP socket.
  192.67 +         */
  192.68 +        public abstract void implBeforeTcpConnect(FileDescriptor fdObj,
  192.69 +                                                 InetAddress address,
  192.70 +                                                 int port)
  192.71 +            throws IOException;
  192.72 +    }
  192.73 +
  192.74 +    /**
  192.75 +     * For now, we load the SDP provider on Solaris. In the future this may
  192.76 +     * be changed to use the ServiceLoader facility to allow the deployment of
  192.77 +     * other providers.
  192.78 +     */
  192.79 +    private static Provider loadProvider(final String cn) {
  192.80 +        return AccessController
  192.81 +            .doPrivileged(new PrivilegedAction<Provider>() {
  192.82 +                @Override public Provider run() {
  192.83 +                    Class<Provider> c;
  192.84 +                    try {
  192.85 +                        c = (Class<Provider>)Class.forName(cn, true, null);
  192.86 +                    } catch (ClassNotFoundException x) {
  192.87 +                        throw new AssertionError(x);
  192.88 +                    }
  192.89 +                    try {
  192.90 +                        return c.newInstance();
  192.91 +                    } catch (IllegalAccessException x) {
  192.92 +                        throw new AssertionError(x);
  192.93 +                    } catch (InstantiationException x) {
  192.94 +                        throw new AssertionError(x);
  192.95 +                    }
  192.96 +            }});
  192.97 +    }
  192.98 +    private static final Provider provider = AccessController
  192.99 +        .doPrivileged(new GetPropertyAction("os.name")).equals("SunOS") ?
 192.100 +            loadProvider("sun.net.spi.SdpProvider") : null;
 192.101 +
 192.102 +    /**
 192.103 +     * Invoke prior to binding a TCP socket.
 192.104 +     */
 192.105 +    public static void beforeTcpBind(FileDescriptor fdObj,
 192.106 +                                     InetAddress address,
 192.107 +                                     int port)
 192.108 +        throws IOException
 192.109 +    {
 192.110 +        if (provider != null)
 192.111 +            provider.implBeforeTcpBind(fdObj, address, port);
 192.112 +    }
 192.113 +
 192.114 +    /**
 192.115 +     * Invoke prior to connecting an unbound TCP socket.
 192.116 +     */
 192.117 +    public static void beforeTcpConnect(FileDescriptor fdObj,
 192.118 +                                        InetAddress address,
 192.119 +                                        int port)
 192.120 +        throws IOException
 192.121 +    {
 192.122 +        if (provider != null)
 192.123 +            provider.implBeforeTcpConnect(fdObj, address, port);
 192.124 +    }
 192.125 +}
   193.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   193.2 +++ b/src/solaris/classes/sun/net/spi/SdpProvider.java	Thu Apr 16 19:10:32 2009 -0700
   193.3 @@ -0,0 +1,339 @@
   193.4 +/*
   193.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   193.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   193.7 + *
   193.8 + * This code is free software; you can redistribute it and/or modify it
   193.9 + * under the terms of the GNU General Public License version 2 only, as
  193.10 + * published by the Free Software Foundation.  Sun designates this
  193.11 + * particular file as subject to the "Classpath" exception as provided
  193.12 + * by Sun in the LICENSE file that accompanied this code.
  193.13 + *
  193.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  193.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  193.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  193.17 + * version 2 for more details (a copy is included in the LICENSE file that
  193.18 + * accompanied this code).
  193.19 + *
  193.20 + * You should have received a copy of the GNU General Public License version
  193.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  193.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  193.23 + *
  193.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  193.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  193.26 + * have any questions.
  193.27 + */
  193.28 +
  193.29 +package sun.net.spi;
  193.30 +
  193.31 +import sun.net.NetHooks;
  193.32 +import java.net.InetAddress;
  193.33 +import java.net.Inet4Address;
  193.34 +import java.net.UnknownHostException;
  193.35 +import java.util.*;
  193.36 +import java.io.File;
  193.37 +import java.io.FileDescriptor;
  193.38 +import java.io.IOException;
  193.39 +import java.io.PrintStream;
  193.40 +
  193.41 +import sun.misc.SharedSecrets;
  193.42 +import sun.misc.JavaIOFileDescriptorAccess;
  193.43 +
  193.44 +/**
  193.45 + * A NetHooks provider that converts sockets from the TCP to SDP protocol prior
  193.46 + * to binding or connecting.
  193.47 + */
  193.48 +
  193.49 +public class SdpProvider extends NetHooks.Provider {
  193.50 +    private static final JavaIOFileDescriptorAccess fdAccess =
  193.51 +        SharedSecrets.getJavaIOFileDescriptorAccess();
  193.52 +
  193.53 +    // maximum port
  193.54 +    private static final int MAX_PORT = 65535;
  193.55 +
  193.56 +    // indicates if SDP is enabled and the rules for when the protocol is used
  193.57 +    private final boolean enabled;
  193.58 +    private final List<Rule> rules;
  193.59 +
  193.60 +    // logging for debug purposes
  193.61 +    private PrintStream log;
  193.62 +
  193.63 +    public SdpProvider() {
  193.64 +        // if this property is not defined then there is nothing to do.
  193.65 +        String file = System.getProperty("com.sun.sdp.conf");
  193.66 +        if (file == null) {
  193.67 +            this.enabled = false;
  193.68 +            this.rules = null;
  193.69 +            return;
  193.70 +        }
  193.71 +
  193.72 +        // load configuration file
  193.73 +        List<Rule> list = null;
  193.74 +        if (file != null) {
  193.75 +            try {
  193.76 +                list = loadRulesFromFile(file);
  193.77 +            } catch (IOException e) {
  193.78 +                fail("Error reading %s: %s", file, e.getMessage());
  193.79 +            }
  193.80 +        }
  193.81 +
  193.82 +        // check if debugging is enabled
  193.83 +        PrintStream out = null;
  193.84 +        String logfile = System.getProperty("com.sun.sdp.debug");
  193.85 +        if (logfile != null) {
  193.86 +            out = System.out;
  193.87 +            if (logfile.length() > 0) {
  193.88 +                try {
  193.89 +                    out = new PrintStream(logfile);
  193.90 +                } catch (IOException ignore) { }
  193.91 +            }
  193.92 +        }
  193.93 +
  193.94 +        this.enabled = !list.isEmpty();
  193.95 +        this.rules = list;
  193.96 +        this.log = out;
  193.97 +    }
  193.98 +
  193.99 +    // supported actions
 193.100 +    private static enum Action {
 193.101 +        BIND,
 193.102 +        CONNECT;
 193.103 +    }
 193.104 +
 193.105 +    // a rule for matching a bind or connect request
 193.106 +    private static interface Rule {
 193.107 +        boolean match(Action action, InetAddress address, int port);
 193.108 +    }
 193.109 +
 193.110 +    // rule to match port[-end]
 193.111 +    private static class PortRangeRule implements Rule {
 193.112 +        private final Action action;
 193.113 +        private final int portStart;
 193.114 +        private final int portEnd;
 193.115 +        PortRangeRule(Action action, int portStart, int portEnd) {
 193.116 +            this.action = action;
 193.117 +            this.portStart = portStart;
 193.118 +            this.portEnd = portEnd;
 193.119 +        }
 193.120 +        Action action() {
 193.121 +            return action;
 193.122 +        }
 193.123 +        @Override
 193.124 +        public boolean match(Action action, InetAddress address, int port) {
 193.125 +            return (action == this.action &&
 193.126 +                    port >= this.portStart &&
 193.127 +                    port <= this.portEnd);
 193.128 +        }
 193.129 +    }
 193.130 +
 193.131 +    // rule to match address[/prefix] port[-end]
 193.132 +    private static class AddressPortRangeRule extends PortRangeRule {
 193.133 +        private final byte[] addressAsBytes;
 193.134 +        private final int prefixByteCount;
 193.135 +        private final byte mask;
 193.136 +        AddressPortRangeRule(Action action, InetAddress address,
 193.137 +                             int prefix, int port, int end)
 193.138 +        {
 193.139 +            super(action, port, end);
 193.140 +            this.addressAsBytes = address.getAddress();
 193.141 +            this.prefixByteCount = prefix >> 3;
 193.142 +            this.mask = (byte)(0xff << (8 - (prefix % 8)));
 193.143 +        }
 193.144 +        @Override
 193.145 +        public boolean match(Action action, InetAddress address, int port) {
 193.146 +            if (action != action())
 193.147 +                return false;
 193.148 +            byte[] candidate = address.getAddress();
 193.149 +            // same address type?
 193.150 +            if (candidate.length != addressAsBytes.length)
 193.151 +                return false;
 193.152 +            // check bytes
 193.153 +            for (int i=0; i<prefixByteCount; i++) {
 193.154 +                if (candidate[i] != addressAsBytes[i])
 193.155 +                    return false;
 193.156 +            }
 193.157 +            // check remaining bits
 193.158 +            if ((prefixByteCount < addressAsBytes.length) &&
 193.159 +                ((candidate[prefixByteCount] & mask) !=
 193.160 +                 (addressAsBytes[prefixByteCount] & mask)))
 193.161 +                    return false;
 193.162 +            return super.match(action, address, port);
 193.163 +        }
 193.164 +    }
 193.165 +
 193.166 +    // parses port:[-end]
 193.167 +    private static int[] parsePortRange(String s) {
 193.168 +        int pos = s.indexOf('-');
 193.169 +        try {
 193.170 +            int[] result = new int[2];
 193.171 +            if (pos < 0) {
 193.172 +                boolean all = s.equals("*");
 193.173 +                result[0] = all ? 0 : Integer.parseInt(s);
 193.174 +                result[1] = all ? MAX_PORT : result[0];
 193.175 +            } else {
 193.176 +                String low = s.substring(0, pos);
 193.177 +                if (low.length() == 0) low = "*";
 193.178 +                String high = s.substring(pos+1);
 193.179 +                if (high.length() == 0) high = "*";
 193.180 +                result[0] = low.equals("*") ? 0 : Integer.parseInt(low);
 193.181 +                result[1] = high.equals("*") ? MAX_PORT : Integer.parseInt(high);
 193.182 +            }
 193.183 +            return result;
 193.184 +        } catch (NumberFormatException e) {
 193.185 +            return new int[0];
 193.186 +        }
 193.187 +    }
 193.188 +
 193.189 +    private static void fail(String msg, Object... args) {
 193.190 +        Formatter f = new Formatter();
 193.191 +        f.format(msg, args);
 193.192 +        throw new RuntimeException(f.out().toString());
 193.193 +    }
 193.194 +
 193.195 +    // loads rules from the given file
 193.196 +    // Each non-blank/non-comment line must have the format:
 193.197 +    // ("bind" | "connect") 1*LWSP-char (hostname | ipaddress["/" prefix])
 193.198 +    //     1*LWSP-char ("*" | port) [ "-" ("*" | port) ]
 193.199 +    private static List<Rule> loadRulesFromFile(String file)
 193.200 +        throws IOException
 193.201 +    {
 193.202 +        Scanner scanner = new Scanner(new File(file));
 193.203 +        try {
 193.204 +            List<Rule> result = new ArrayList<Rule>();
 193.205 +            while (scanner.hasNextLine()) {
 193.206 +                String line = scanner.nextLine().trim();
 193.207 +
 193.208 +                // skip blank lines and comments
 193.209 +                if (line.length() == 0 || line.charAt(0) == '#')
 193.210 +                    continue;
 193.211 +
 193.212 +                // must have 3 fields
 193.213 +                String[] s = line.split("\\s+");
 193.214 +                if (s.length != 3) {
 193.215 +                    fail("Malformed line '%s'", line);
 193.216 +                    continue;
 193.217 +                }
 193.218 +
 193.219 +                // first field is the action ("bind" or "connect")
 193.220 +                Action action = null;
 193.221 +                for (Action a: Action.values()) {
 193.222 +                    if (s[0].equalsIgnoreCase(a.name())) {
 193.223 +                        action = a;
 193.224 +                        break;
 193.225 +                    }
 193.226 +                }
 193.227 +                if (action == null) {
 193.228 +                    fail("Action '%s' not recognized", s[0]);
 193.229 +                    continue;
 193.230 +                }
 193.231 +
 193.232 +                // * port[-end]
 193.233 +                int[] ports = parsePortRange(s[2]);
 193.234 +                if (ports.length == 0) {
 193.235 +                    fail("Malformed port range '%s'", s[2]);
 193.236 +                    continue;
 193.237 +                }
 193.238 +
 193.239 +                // match all addresses
 193.240 +                if (s[1].equals("*")) {
 193.241 +                    result.add(new PortRangeRule(action, ports[0], ports[1]));
 193.242 +                    continue;
 193.243 +                }
 193.244 +
 193.245 +                // hostname | ipaddress[/prefix]
 193.246 +                int pos = s[1].indexOf('/');
 193.247 +                try {
 193.248 +                    if (pos < 0) {
 193.249 +                        // hostname or ipaddress (no prefix)
 193.250 +                        InetAddress[] addresses = InetAddress.getAllByName(s[1]);
 193.251 +                        for (InetAddress address: addresses) {
 193.252 +                            int prefix =
 193.253 +                                (address instanceof Inet4Address) ? 32 : 128;
 193.254 +                            result.add(new AddressPortRangeRule(action, address,
 193.255 +                                prefix, ports[0], ports[1]));
 193.256 +                        }
 193.257 +                    } else {
 193.258 +                        // ipaddress/prefix
 193.259 +                        InetAddress address = InetAddress
 193.260 +                            .getByName(s[1].substring(0, pos));
 193.261 +                        int prefix = -1;
 193.262 +                        try {
 193.263 +                            prefix = Integer.parseInt(s[1].substring(pos+1));
 193.264 +                            if (address instanceof Inet4Address) {
 193.265 +                                // must be 1-31
 193.266 +                                if (prefix < 0 || prefix > 32) prefix = -1;
 193.267 +                            } else {
 193.268 +                                // must be 1-128
 193.269 +                                if (prefix < 0 || prefix > 128) prefix = -1;
 193.270 +                            }
 193.271 +                        } catch (NumberFormatException e) {
 193.272 +                        }
 193.273 +
 193.274 +                        if (prefix > 0) {
 193.275 +                            result.add(new AddressPortRangeRule(action,
 193.276 +                                        address, prefix, ports[0], ports[1]));
 193.277 +                        } else {
 193.278 +                            fail("Malformed prefix '%s'", s[1]);
 193.279 +                            continue;
 193.280 +                        }
 193.281 +                    }
 193.282 +                } catch (UnknownHostException uhe) {
 193.283 +                    fail("Unknown host or malformed IP address '%s'", s[1]);
 193.284 +                    continue;
 193.285 +                }
 193.286 +            }
 193.287 +            return result;
 193.288 +        } finally {
 193.289 +            scanner.close();
 193.290 +        }
 193.291 +    }
 193.292 +
 193.293 +    // converts unbound TCP socket to a SDP socket if it matches the rules
 193.294 +    private void convertTcpToSdpIfMatch(FileDescriptor fdObj,
 193.295 +                                               Action action,
 193.296 +                                               InetAddress address,
 193.297 +                                               int port)
 193.298 +        throws IOException
 193.299 +    {
 193.300 +        boolean matched = false;
 193.301 +        for (Rule rule: rules) {
 193.302 +            if (rule.match(action, address, port)) {
 193.303 +                int fd = fdAccess.get(fdObj);
 193.304 +                convert(fd);
 193.305 +                matched = true;
 193.306 +                break;
 193.307 +            }
 193.308 +        }
 193.309 +        if (log != null) {
 193.310 +            String addr = (address instanceof Inet4Address) ?
 193.311 +                address.getHostAddress() : "[" + address.getHostAddress() + "]";
 193.312 +            if (matched) {
 193.313 +                log.format("%s to %s:%d (socket converted to SDP protocol)\n", action, addr, port);
 193.314 +            } else {
 193.315 +                log.format("%s to %s:%d (no match)\n", action, addr, port);
 193.316 +            }
 193.317 +        }
 193.318 +    }
 193.319 +
 193.320 +    @Override
 193.321 +    public void implBeforeTcpBind(FileDescriptor fdObj,
 193.322 +                              InetAddress address,
 193.323 +                              int port)
 193.324 +        throws IOException
 193.325 +    {
 193.326 +        if (enabled)
 193.327 +            convertTcpToSdpIfMatch(fdObj, Action.BIND, address, port);
 193.328 +    }
 193.329 +
 193.330 +    @Override
 193.331 +    public void implBeforeTcpConnect(FileDescriptor fdObj,
 193.332 +                                InetAddress address,
 193.333 +                                int port)
 193.334 +        throws IOException
 193.335 +    {
 193.336 +        if (enabled)
 193.337 +            convertTcpToSdpIfMatch(fdObj, Action.CONNECT, address, port);
 193.338 +    }
 193.339 +
 193.340 +    // -- native methods --
 193.341 +    private static native void convert(int fd) throws IOException;
 193.342 +}
   194.1 --- a/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java	Thu Apr 16 17:42:00 2009 +0100
   194.2 +++ b/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java	Thu Apr 16 19:10:32 2009 -0700
   194.3 @@ -76,20 +76,19 @@
   194.4      // Base address of the native pollArray
   194.5      private long pollArrayAddress;
   194.6  
   194.7 +    // Array of pollfd structs used for driver updates
   194.8 +    private AllocatedNativeObject updatePollArray;
   194.9 +
  194.10      // Maximum number of POLL_FD structs to update at once
  194.11 -    private int MAX_UPDATE_SIZE = 10000;
  194.12 +    private int MAX_UPDATE_SIZE = Math.min(OPEN_MAX, 10000);
  194.13  
  194.14      DevPollArrayWrapper() {
  194.15          int allocationSize = NUM_POLLFDS * SIZE_POLLFD;
  194.16          pollArray = new AllocatedNativeObject(allocationSize, true);
  194.17          pollArrayAddress = pollArray.address();
  194.18 +        allocationSize = MAX_UPDATE_SIZE * SIZE_POLLFD;
  194.19 +        updatePollArray = new AllocatedNativeObject(allocationSize, true);
  194.20          wfd = init();
  194.21 -
  194.22 -        for (int i=0; i<NUM_POLLFDS; i++) {
  194.23 -            putDescriptor(i, 0);
  194.24 -            putEventOps(i, 0);
  194.25 -            putReventOps(i, 0);
  194.26 -        }
  194.27      }
  194.28  
  194.29      // Machinery for remembering fd registration changes
  194.30 @@ -129,21 +128,11 @@
  194.31          register(wfd, fd0, POLLIN);
  194.32      }
  194.33  
  194.34 -    void putEventOps(int i, int event) {
  194.35 -        int offset = SIZE_POLLFD * i + EVENT_OFFSET;
  194.36 -        pollArray.putShort(offset, (short)event);
  194.37 -    }
  194.38 -
  194.39      void putReventOps(int i, int revent) {
  194.40          int offset = SIZE_POLLFD * i + REVENT_OFFSET;
  194.41          pollArray.putShort(offset, (short)revent);
  194.42      }
  194.43  
  194.44 -    void putDescriptor(int i, int fd) {
  194.45 -        int offset = SIZE_POLLFD * i + FD_OFFSET;
  194.46 -        pollArray.putInt(offset, fd);
  194.47 -    }
  194.48 -
  194.49      int getEventOps(int i) {
  194.50          int offset = SIZE_POLLFD * i + EVENT_OFFSET;
  194.51          return pollArray.getShort(offset);
  194.52 @@ -174,9 +163,10 @@
  194.53      void closeDevPollFD() throws IOException {
  194.54          FileDispatcherImpl.closeIntFD(wfd);
  194.55          pollArray.free();
  194.56 +        updatePollArray.free();
  194.57      }
  194.58  
  194.59 -    int poll(long timeout) {
  194.60 +    int poll(long timeout) throws IOException {
  194.61          updateRegistrations();
  194.62          updated = poll0(pollArrayAddress, NUM_POLLFDS, timeout, wfd);
  194.63          for (int i=0; i<updated; i++) {
  194.64 @@ -189,60 +179,34 @@
  194.65          return updated;
  194.66      }
  194.67  
  194.68 -    void updateRegistrations() {
  194.69 -        // take snapshot of the updateList size to see if there are
  194.70 -        // any registrations to update
  194.71 -        int updateSize;
  194.72 +    void updateRegistrations() throws IOException {
  194.73 +        // Populate pollfd array with updated masks
  194.74          synchronized (updateList) {
  194.75 -            updateSize = updateList.size();
  194.76 -        }
  194.77 -        if (updateSize > 0) {
  194.78 -            // Construct a pollfd array with updated masks; we may overallocate
  194.79 -            // by some amount because if the events are already POLLREMOVE
  194.80 -            // then the second pollfd of that pair will not be needed. The
  194.81 -            // number of entries is limited to a reasonable number to avoid
  194.82 -            // allocating a lot of memory.
  194.83 -            int maxUpdates = Math.min(updateSize * 2, MAX_UPDATE_SIZE);
  194.84 -            int allocationSize =  maxUpdates * SIZE_POLLFD;
  194.85 -            AllocatedNativeObject updatePollArray =
  194.86 -                new AllocatedNativeObject(allocationSize, true);
  194.87 +            while (updateList.size() > 0) {
  194.88 +                // We have to insert a dummy node in between each
  194.89 +                // real update to use POLLREMOVE on the fd first because
  194.90 +                // otherwise the changes are simply OR'd together
  194.91 +                int index = 0;
  194.92 +                Updator u = null;
  194.93 +                while ((u = updateList.poll()) != null) {
  194.94 +                    // First add pollfd struct to clear out this fd
  194.95 +                    putPollFD(updatePollArray, index, u.fd, POLLREMOVE);
  194.96 +                    index++;
  194.97 +                    // Now add pollfd to update this fd, if necessary
  194.98 +                    if (u.mask != POLLREMOVE) {
  194.99 +                        putPollFD(updatePollArray, index, u.fd, (short)u.mask);
 194.100 +                        index++;
 194.101 +                    }
 194.102  
 194.103 -            try {
 194.104 -                synchronized (updateList) {
 194.105 -                    while (updateList.size() > 0) {
 194.106 -                        // We have to insert a dummy node in between each
 194.107 -                        // real update to use POLLREMOVE on the fd first because
 194.108 -                        // otherwise the changes are simply OR'd together
 194.109 -                        int index = 0;
 194.110 -                        Updator u = null;
 194.111 -                        while ((u = updateList.poll()) != null) {
 194.112 -                            // First add pollfd struct to clear out this fd
 194.113 -                            putPollFD(updatePollArray, index, u.fd, POLLREMOVE);
 194.114 -                            index++;
 194.115 -                            // Now add pollfd to update this fd, if necessary
 194.116 -                            if (u.mask != POLLREMOVE) {
 194.117 -                                putPollFD(updatePollArray, index, u.fd,
 194.118 -                                          (short)u.mask);
 194.119 -                                index++;
 194.120 -                            }
 194.121 -
 194.122 -                            // Check against the max allocation size; these are
 194.123 -                            // all we will process. Valid index ranges from 0 to
 194.124 -                            // (maxUpdates - 1) and we can use up to 2 per loop
 194.125 -                            if (index > maxUpdates - 2)
 194.126 -                                break;
 194.127 -                        }
 194.128 -                        // Register the changes with /dev/poll
 194.129 -                        registerMultiple(wfd, updatePollArray.address(), index);
 194.130 -                     }
 194.131 +                    // Check against the max update size; these are
 194.132 +                    // all we will process. Valid index ranges from 0 to
 194.133 +                    // (MAX_UPDATE_SIZE - 1) and we can use up to 2 per loop
 194.134 +                    if (index >  MAX_UPDATE_SIZE - 2)
 194.135 +                        break;
 194.136                  }
 194.137 -            } finally {
 194.138 -                // Free the native array
 194.139 -                updatePollArray.free();
 194.140 -                // BUG: If an exception was thrown then the selector now believes
 194.141 -                // that the last set of changes was updated but it probably
 194.142 -                // was not. This should not be a likely occurrence.
 194.143 -            }
 194.144 +                // Register the changes with /dev/poll
 194.145 +                registerMultiple(wfd, updatePollArray.address(), index);
 194.146 +             }
 194.147          }
 194.148      }
 194.149  
 194.150 @@ -275,7 +239,8 @@
 194.151  
 194.152      private native int init();
 194.153      private native void register(int wfd, int fd, int mask);
 194.154 -    private native void registerMultiple(int wfd, long address, int len);
 194.155 +    private native void registerMultiple(int wfd, long address, int len)
 194.156 +        throws IOException;
 194.157      private native int poll0(long pollAddress, int numfds, long timeout,
 194.158                               int wfd);
 194.159      private static native void interrupt(int fd);
   195.1 --- a/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java	Thu Apr 16 17:42:00 2009 +0100
   195.2 +++ b/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java	Thu Apr 16 19:10:32 2009 -0700
   195.3 @@ -78,8 +78,8 @@
   195.4      // Base address of the native pollArray
   195.5      private final long pollArrayAddress;
   195.6  
   195.7 -    // Set of "idle" file descriptors
   195.8 -    private final HashSet<Integer> idleSet;
   195.9 +    // Set of "idle" channels
  195.10 +    private final HashSet<SelChImpl> idleSet;
  195.11  
  195.12      EPollArrayWrapper() {
  195.13          // creates the epoll file descriptor
  195.14 @@ -96,19 +96,22 @@
  195.15          }
  195.16  
  195.17          // create idle set
  195.18 -        idleSet = new HashSet<Integer>();
  195.19 +        idleSet = new HashSet<SelChImpl>();
  195.20      }
  195.21  
  195.22      // Used to update file description registrations
  195.23      private static class Updator {
  195.24 +        SelChImpl channel;
  195.25          int opcode;
  195.26 -        int fd;
  195.27          int events;
  195.28 -        Updator(int opcode, int fd, int events) {
  195.29 +        Updator(SelChImpl channel, int opcode, int events) {
  195.30 +            this.channel = channel;
  195.31              this.opcode = opcode;
  195.32 -            this.fd = fd;
  195.33              this.events = events;
  195.34          }
  195.35 +        Updator(SelChImpl channel, int opcode) {
  195.36 +            this(channel, opcode, 0);
  195.37 +        }
  195.38      }
  195.39  
  195.40      private LinkedList<Updator> updateList = new LinkedList<Updator>();
  195.41 @@ -163,60 +166,54 @@
  195.42      }
  195.43  
  195.44      /**
  195.45 -     * Update the events for a given file descriptor.
  195.46 +     * Update the events for a given channel.
  195.47       */
  195.48 -    void setInterest(int fd, int mask) {
  195.49 +    void setInterest(SelChImpl channel, int mask) {
  195.50          synchronized (updateList) {
  195.51 -
  195.52 -            // if the interest events are 0 then add to idle set, and delete
  195.53 -            // from epoll if registered (or pending)
  195.54 -            if (mask == 0) {
  195.55 -                if (idleSet.add(fd)) {
  195.56 -                    updateList.add(new Updator(EPOLL_CTL_DEL, fd, 0));
  195.57 -                }
  195.58 -                return;
  195.59 -            }
  195.60 -
  195.61 -            // if file descriptor is idle then add to epoll
  195.62 -            if (!idleSet.isEmpty() && idleSet.remove(fd)) {
  195.63 -                updateList.add(new Updator(EPOLL_CTL_ADD, fd, mask));
  195.64 -                return;
  195.65 -            }
  195.66 -
  195.67              // if the previous pending operation is to add this file descriptor
  195.68              // to epoll then update its event set
  195.69              if (updateList.size() > 0) {
  195.70                  Updator last = updateList.getLast();
  195.71 -                if (last.fd == fd && last.opcode == EPOLL_CTL_ADD) {
  195.72 +                if (last.channel == channel && last.opcode == EPOLL_CTL_ADD) {
  195.73                      last.events = mask;
  195.74                      return;
  195.75                  }
  195.76              }
  195.77  
  195.78              // update existing registration
  195.79 -            updateList.add(new Updator(EPOLL_CTL_MOD, fd, mask));
  195.80 +            updateList.add(new Updator(channel, EPOLL_CTL_MOD, mask));
  195.81          }
  195.82      }
  195.83  
  195.84      /**
  195.85 -     * Add a new file descriptor to epoll
  195.86 +     * Add a channel's file descriptor to epoll
  195.87       */
  195.88 -    void add(int fd) {
  195.89 +    void add(SelChImpl channel) {
  195.90          synchronized (updateList) {
  195.91 -            updateList.add(new Updator(EPOLL_CTL_ADD, fd, 0));
  195.92 +            updateList.add(new Updator(channel, EPOLL_CTL_ADD));
  195.93          }
  195.94      }
  195.95  
  195.96      /**
  195.97 -     * Remove a file descriptor from epoll
  195.98 +     * Remove a channel's file descriptor from epoll
  195.99       */
 195.100 -    void release(int fd) {
 195.101 +    void release(SelChImpl channel) {
 195.102          synchronized (updateList) {
 195.103 -            // if file descriptor is idle then remove from idle set, otherwise
 195.104 -            // delete from epoll
 195.105 -            if (!idleSet.remove(fd)) {
 195.106 -                updateList.add(new Updator(EPOLL_CTL_DEL, fd, 0));
 195.107 +            // flush any pending updates
 195.108 +            int i = 0;
 195.109 +            while (i < updateList.size()) {
 195.110 +                if (updateList.get(i).channel == channel) {
 195.111 +                    updateList.remove(i);
 195.112 +                } else {
 195.113 +                    i++;
 195.114 +                }
 195.115              }
 195.116 +
 195.117 +            // remove from the idle set (if present)
 195.118 +            idleSet.remove(channel);
 195.119 +
 195.120 +            // remove from epoll (if registered)
 195.121 +            epollCtl(epfd, EPOLL_CTL_DEL, channel.getFDVal(), 0);
 195.122          }
 195.123      }
 195.124  
 195.125 @@ -248,7 +245,26 @@
 195.126          synchronized (updateList) {
 195.127              Updator u = null;
 195.128              while ((u = updateList.poll()) != null) {
 195.129 -                epollCtl(epfd, u.opcode, u.fd, u.events);
 195.130 +                SelChImpl ch = u.channel;
 195.131 +                if (!ch.isOpen())
 195.132 +                    continue;
 195.133 +
 195.134 +                // if the events are 0 then file descriptor is put into "idle
 195.135 +                // set" to prevent it being polled
 195.136 +                if (u.events == 0) {
 195.137 +                    boolean added = idleSet.add(u.channel);
 195.138 +                    // if added to idle set then remove from epoll if registered
 195.139 +                    if (added && (u.opcode == EPOLL_CTL_MOD))
 195.140 +                        epollCtl(epfd, EPOLL_CTL_DEL, ch.getFDVal(), 0);
 195.141 +                } else {
 195.142 +                    // events are specified. If file descriptor was in idle set
 195.143 +                    // it must be re-registered (by converting opcode to ADD)
 195.144 +                    boolean idle = false;
 195.145 +                    if (!idleSet.isEmpty())
 195.146 +                        idle = idleSet.remove(u.channel);
 195.147 +                    int opcode = (idle) ? EPOLL_CTL_ADD : u.opcode;
 195.148 +                    epollCtl(epfd, opcode, ch.getFDVal(), u.events);
 195.149 +                }
 195.150              }
 195.151          }
 195.152      }
   196.1 --- a/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java	Thu Apr 16 17:42:00 2009 +0100
   196.2 +++ b/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java	Thu Apr 16 19:10:32 2009 -0700
   196.3 @@ -139,7 +139,6 @@
   196.4          FileDispatcherImpl.closeIntFD(fd0);
   196.5          FileDispatcherImpl.closeIntFD(fd1);
   196.6  
   196.7 -        pollWrapper.release(fd0);
   196.8          pollWrapper.closeEPollFD();
   196.9          // it is possible
  196.10          selectedKeys = null;
  196.11 @@ -162,17 +161,18 @@
  196.12      protected void implRegister(SelectionKeyImpl ski) {
  196.13          if (closed)
  196.14              throw new ClosedSelectorException();
  196.15 -        int fd = IOUtil.fdVal(ski.channel.getFD());
  196.16 -        fdToKey.put(Integer.valueOf(fd), ski);
  196.17 -        pollWrapper.add(fd);
  196.18 +        SelChImpl ch = ski.channel;
  196.19 +        fdToKey.put(Integer.valueOf(ch.getFDVal()), ski);
  196.20 +        pollWrapper.add(ch);
  196.21          keys.add(ski);
  196.22      }
  196.23  
  196.24      protected void implDereg(SelectionKeyImpl ski) throws IOException {
  196.25          assert (ski.getIndex() >= 0);
  196.26 -        int fd = ski.channel.getFDVal();
  196.27 +        SelChImpl ch = ski.channel;
  196.28 +        int fd = ch.getFDVal();
  196.29          fdToKey.remove(Integer.valueOf(fd));
  196.30 -        pollWrapper.release(fd);
  196.31 +        pollWrapper.release(ch);
  196.32          ski.setIndex(-1);
  196.33          keys.remove(ski);
  196.34          selectedKeys.remove(ski);
  196.35 @@ -185,8 +185,7 @@
  196.36      void putEventOps(SelectionKeyImpl sk, int ops) {
  196.37          if (closed)
  196.38              throw new ClosedSelectorException();
  196.39 -        int fd = IOUtil.fdVal(sk.channel.getFD());
  196.40 -        pollWrapper.setInterest(fd, ops);
  196.41 +        pollWrapper.setInterest(sk.channel, ops);
  196.42      }
  196.43  
  196.44      public Selector wakeup() {
   197.1 --- a/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java	Thu Apr 16 17:42:00 2009 +0100
   197.2 +++ b/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java	Thu Apr 16 19:10:32 2009 -0700
   197.3 @@ -32,6 +32,7 @@
   197.4  import java.io.IOException;
   197.5  import java.io.FileDescriptor;
   197.6  import java.security.AccessController;
   197.7 +import sun.net.NetHooks;
   197.8  import sun.security.action.GetPropertyAction;
   197.9  
  197.10  /**
  197.11 @@ -305,6 +306,7 @@
  197.12              sm.checkConnect(isa.getAddress().getHostAddress(), isa.getPort());
  197.13  
  197.14          // check and set state
  197.15 +        boolean notifyBeforeTcpConnect;
  197.16          synchronized (stateLock) {
  197.17              if (state == ST_CONNECTED)
  197.18                  throw new AlreadyConnectedException();
  197.19 @@ -312,12 +314,16 @@
  197.20                  throw new ConnectionPendingException();
  197.21              state = ST_PENDING;
  197.22              pendingRemote = remote;
  197.23 +            notifyBeforeTcpConnect = (localAddress == null);
  197.24          }
  197.25  
  197.26          AbstractFuture<Void,A> result = null;
  197.27          Throwable e = null;
  197.28          try {
  197.29              begin();
  197.30 +            // notify hook if unbound
  197.31 +            if (notifyBeforeTcpConnect)
  197.32 +                NetHooks.beforeTcpConnect(fd, isa.getAddress(), isa.getPort());
  197.33              int n = Net.connect(fd, isa.getAddress(), isa.getPort());
  197.34              if (n == IOStatus.UNAVAILABLE) {
  197.35                  // connection could not be established immediately
   198.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   198.2 +++ b/src/solaris/lib/sdp/sdp.conf.template	Thu Apr 16 19:10:32 2009 -0700
   198.3 @@ -0,0 +1,30 @@
   198.4 +#
   198.5 +# Configuration file to enable InfiniBand Sockets Direct Protocol.
   198.6 +#
   198.7 +# Each line that does not start with a comment (#) is a rule to indicate when
   198.8 +# the SDP transport protocol should be used. The format of a rule is as follows:
   198.9 +#   ("bind"|"connect") 1*LWSP-char (hostname|ipaddress["/"prefix]) 1*LWSP-char ("*"|port)["-"("*"|port)]
  198.10 +#
  198.11 +# A "bind" rule indicates that the SDP protocol transport should be used when
  198.12 +# a TCP socket binds to an address/port that matches the rule. A "connect" rule
  198.13 +# indicates that the SDP protocol transport should be used when an unbound
  198.14 +# TCP socket attempts to connect to an address/port that matches the rule.
  198.15 +# Addresses may be specified as hostnames or literal Internet Protocol (IP)
  198.16 +# addresses. When a literal IP address is used then a prefix length may be used
  198.17 +# to indicate the number of bits for matching (useful when a block of addresses
  198.18 +# or subnet is allocated to the InfiniBand fabric). 
  198.19 +
  198.20 +# Use SDP for all sockets that bind to specific local addresses
  198.21 +#bind    192.168.1.1    *
  198.22 +#bind    fe80::21b:24ff:fe3d:7896    *
  198.23 +
  198.24 +# Use SDP for all sockets that bind to the wildcard address in a port range
  198.25 +#bind    0.0.0.0    5000-5999
  198.26 +#bind    ::0        5000-5999
  198.27 +
  198.28 +# Use SDP when connecting to all application services on 192.168.1.*
  198.29 +#connect 192.168.1.0/24       1024-*
  198.30 +
  198.31 +# Use SDP when connecting to the http server or MySQL database on hpccluster.
  198.32 +#connect hpccluster.foo.com   80
  198.33 +#connect hpccluster.foo.com   3306
   199.1 --- a/src/solaris/native/sun/awt/awt_Component.h	Thu Apr 16 17:42:00 2009 +0100
   199.2 +++ b/src/solaris/native/sun/awt/awt_Component.h	Thu Apr 16 19:10:32 2009 -0700
   199.3 @@ -41,7 +41,6 @@
   199.4      jfieldID appContext;
   199.5      jmethodID getParent;
   199.6      jmethodID getLocationOnScreen;
   199.7 -    jmethodID resetGCMID;
   199.8  };
   199.9  
  199.10  /* field and method IDs for Container */
  199.11 @@ -65,7 +64,3 @@
  199.12  extern void processTree(Widget from, Widget to, Boolean action);
  199.13  #endif // HEADLESS
  199.14  
  199.15 -/* fieldIDs for Canvas fields that may be accessed from C */
  199.16 -struct CanvasIDs {
  199.17 -    jmethodID setGCFromPeerMID;
  199.18 -};
   200.1 --- a/src/solaris/native/sun/awt/awt_GraphicsEnv.c	Thu Apr 16 17:42:00 2009 +0100
   200.2 +++ b/src/solaris/native/sun/awt/awt_GraphicsEnv.c	Thu Apr 16 19:10:32 2009 -0700
   200.3 @@ -1,5 +1,5 @@
   200.4  /*
   200.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
   200.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
   200.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   200.8   *
   200.9   * This code is free software; you can redistribute it and/or modify it
  200.10 @@ -354,6 +354,48 @@
  200.11      return NULL;
  200.12  }
  200.13  
  200.14 +/* Note: until we include the <X11/extensions/Xrender.h> explicitly
  200.15 + * we have to define a couple of things ourselves.
  200.16 + */
  200.17 +typedef unsigned long   PictFormat;
  200.18 +#define PictTypeIndexed             0
  200.19 +#define PictTypeDirect              1
  200.20 +
  200.21 +typedef struct {
  200.22 +    short   red;
  200.23 +    short   redMask;
  200.24 +    short   green;
  200.25 +    short   greenMask;
  200.26 +    short   blue;
  200.27 +    short   blueMask;
  200.28 +    short   alpha;
  200.29 +    short   alphaMask;
  200.30 +} XRenderDirectFormat;
  200.31 +
  200.32 +typedef struct {
  200.33 +    PictFormat      id;
  200.34 +    int         type;
  200.35 +    int         depth;
  200.36 +    XRenderDirectFormat direct;
  200.37 +    Colormap        colormap;
  200.38 +} XRenderPictFormat;
  200.39 +
  200.40 +#define PictFormatID        (1 << 0)
  200.41 +#define PictFormatType      (1 << 1)
  200.42 +#define PictFormatDepth     (1 << 2)
  200.43 +#define PictFormatRed       (1 << 3)
  200.44 +#define PictFormatRedMask   (1 << 4)
  200.45 +#define PictFormatGreen     (1 << 5)
  200.46 +#define PictFormatGreenMask (1 << 6)
  200.47 +#define PictFormatBlue      (1 << 7)
  200.48 +#define PictFormatBlueMask  (1 << 8)
  200.49 +#define PictFormatAlpha     (1 << 9)
  200.50 +#define PictFormatAlphaMask (1 << 10)
  200.51 +#define PictFormatColormap  (1 << 11)
  200.52 +
  200.53 +typedef XRenderPictFormat *
  200.54 +XRenderFindVisualFormatFunc (Display *dpy, _Xconst Visual *visual);
  200.55 +
  200.56  static void
  200.57  getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) {
  200.58  
  200.59 @@ -367,6 +409,9 @@
  200.60      int ind;
  200.61      char errmsg[128];
  200.62      int xinawareScreen;
  200.63 +    void* xrenderLibHandle = NULL;
  200.64 +    XRenderFindVisualFormatFunc *XRenderFindVisualFormat = NULL;
  200.65 +    int major_opcode, first_event, first_error;
  200.66  
  200.67      if (usingXinerama) {
  200.68          xinawareScreen = 0;
  200.69 @@ -449,6 +494,26 @@
  200.70      graphicsConfigs[0] = defaultConfig;
  200.71      nConfig = 1; /* reserve index 0 for default config */
  200.72  
  200.73 +    // Only use the RENDER extension if it is available on the X server
  200.74 +    if (XQueryExtension(awt_display, "RENDER",
  200.75 +                        &major_opcode, &first_event, &first_error))
  200.76 +    {
  200.77 +        xrenderLibHandle = dlopen("libXrender.so.1", RTLD_LAZY | RTLD_GLOBAL);
  200.78 +
  200.79 +#ifndef __linux__ /* SOLARIS */
  200.80 +        if (xrenderLibHandle == NULL) {
  200.81 +            xrenderLibHandle = dlopen("/usr/sfw/lib/libXrender.so.1",
  200.82 +                                      RTLD_LAZY | RTLD_GLOBAL);
  200.83 +        }
  200.84 +#endif
  200.85 +
  200.86 +        if (xrenderLibHandle != NULL) {
  200.87 +            XRenderFindVisualFormat =
  200.88 +                (XRenderFindVisualFormatFunc*)dlsym(xrenderLibHandle,
  200.89 +                                                    "XRenderFindVisualFormat");
  200.90 +        }
  200.91 +    }
  200.92 +
  200.93      for (i = 0; i < nTrue; i++) {
  200.94          if (XVisualIDFromVisual(pVITrue[i].visual) ==
  200.95              XVisualIDFromVisual(defaultConfig->awt_visInfo.visual) ||
  200.96 @@ -462,6 +527,21 @@
  200.97          graphicsConfigs [ind]->awt_depth = pVITrue [i].depth;
  200.98          memcpy (&graphicsConfigs [ind]->awt_visInfo, &pVITrue [i],
  200.99                  sizeof (XVisualInfo));
 200.100 +       if (XRenderFindVisualFormat != NULL) {
 200.101 +            XRenderPictFormat *format = XRenderFindVisualFormat (awt_display,
 200.102 +                    pVITrue [i].visual);
 200.103 +            if (format &&
 200.104 +                format->type == PictTypeDirect &&
 200.105 +                format->direct.alphaMask)
 200.106 +            {
 200.107 +                graphicsConfigs [ind]->isTranslucencySupported = 1;
 200.108 +            }
 200.109 +        }
 200.110 +    }
 200.111 +
 200.112 +    if (xrenderLibHandle != NULL) {
 200.113 +        dlclose(xrenderLibHandle);
 200.114 +        xrenderLibHandle = NULL;
 200.115      }
 200.116  
 200.117      for (i = 0; i < n8p; i++) {
 200.118 @@ -1506,6 +1586,26 @@
 200.119  }
 200.120  
 200.121  /*
 200.122 + * Class:     sun_awt_X11GraphicsConfig
 200.123 + * Method:    isTranslucencyCapable
 200.124 + * Signature: (J)V
 200.125 + */
 200.126 +JNIEXPORT jboolean JNICALL
 200.127 +Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable
 200.128 +    (JNIEnv *env, jobject this, jlong configData)
 200.129 +{
 200.130 +#ifdef HEADLESS
 200.131 +    return JNI_FALSE;
 200.132 +#else
 200.133 +    AwtGraphicsConfigDataPtr aData = (AwtGraphicsConfigDataPtr)jlong_to_ptr(configData);
 200.134 +    if (aData == NULL) {
 200.135 +        return JNI_FALSE;
 200.136 +    }
 200.137 +    return (jboolean)aData->isTranslucencySupported;
 200.138 +#endif
 200.139 +}
 200.140 +
 200.141 +/*
 200.142   * Class:     sun_awt_X11GraphicsDevice
 200.143   * Method:    isDBESupported
 200.144   * Signature: ()Z
   201.1 --- a/src/solaris/native/sun/awt/awt_Window.h	Thu Apr 16 17:42:00 2009 +0100
   201.2 +++ b/src/solaris/native/sun/awt/awt_Window.h	Thu Apr 16 19:10:32 2009 -0700
   201.3 @@ -28,7 +28,6 @@
   201.4  /* fieldIDs for Window fields that may be accessed from C */
   201.5  struct WindowIDs {
   201.6      jfieldID warningString;
   201.7 -    jmethodID resetGCMID;
   201.8      jfieldID locationByPlatform;
   201.9      jfieldID isAutoRequestFocus;
  201.10  };
   202.1 --- a/src/solaris/native/sun/awt/awt_p.h	Thu Apr 16 17:42:00 2009 +0100
   202.2 +++ b/src/solaris/native/sun/awt/awt_p.h	Thu Apr 16 19:10:32 2009 -0700
   202.3 @@ -1,5 +1,5 @@
   202.4  /*
   202.5 - * Copyright 1995-2005 Sun Microsystems, Inc.  All Rights Reserved.
   202.6 + * Copyright 1995-2009 Sun Microsystems, Inc.  All Rights Reserved.
   202.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   202.8   *
   202.9   * This code is free software; you can redistribute it and/or modify it
  202.10 @@ -135,6 +135,7 @@
  202.11      int         pixelStride;     /* Used in X11SurfaceData.c */
  202.12      ColorData      *color_data;
  202.13      struct _GLXGraphicsConfigInfo *glxInfo;
  202.14 +    int         isTranslucencySupported; /* Uses Xrender to find this out. */
  202.15  } AwtGraphicsConfigData;
  202.16  
  202.17  typedef AwtGraphicsConfigData* AwtGraphicsConfigDataPtr;
   203.1 --- a/src/solaris/native/sun/awt/gtk2_interface.c	Thu Apr 16 17:42:00 2009 +0100
   203.2 +++ b/src/solaris/native/sun/awt/gtk2_interface.c	Thu Apr 16 19:10:32 2009 -0700
   203.3 @@ -93,6 +93,7 @@
   203.4  /* Static buffer for conversion from java.lang.String to UTF-8 */
   203.5  static char convertionBuffer[CONV_BUFFER_SIZE];
   203.6  
   203.7 +static gboolean new_combo = TRUE;
   203.8  const char ENV_PREFIX[] = "GTK_MODULES=";
   203.9  
  203.10  /*******************/
  203.11 @@ -608,6 +609,7 @@
  203.12              dlsym(gtk2_libhandle, "gtk_combo_box_entry_new");
  203.13          if (fp_gtk_combo_box_entry_new == NULL) {
  203.14              fp_gtk_combo_box_entry_new = dl_symbol("gtk_combo_new");
  203.15 +            new_combo = FALSE;
  203.16          }
  203.17  
  203.18          fp_gtk_separator_tool_item_new =
  203.19 @@ -1423,17 +1425,13 @@
  203.20              */
  203.21              GtkWidget *combo = (*fp_gtk_combo_box_entry_new)();
  203.22  
  203.23 -            if (widget_type == COMBO_BOX_TEXT_FIELD)
  203.24 -                (*fp_gtk_container_add)((GtkContainer *)combo, result);
  203.25 -            else
  203.26 -            {
  203.27 +            if (new_combo && widget_type == COMBO_BOX_ARROW_BUTTON) {
  203.28                  (*fp_gtk_widget_set_parent)(result, combo);
  203.29                  ((GtkBin*)combo)->child = result;
  203.30 +            } else {
  203.31 +                (*fp_gtk_container_add)((GtkContainer *)combo, result);
  203.32              }
  203.33 -
  203.34              (*fp_gtk_container_add)((GtkContainer *)gtk2_fixed, combo);
  203.35 -            (*fp_gtk_widget_realize)(result);
  203.36 -            return result;
  203.37          }
  203.38          else if (widget_type != TOOL_TIP &&
  203.39                   widget_type != INTERNAL_FRAME &&
   204.1 --- a/src/solaris/native/sun/awt/utility/rect.h	Thu Apr 16 17:42:00 2009 +0100
   204.2 +++ b/src/solaris/native/sun/awt/utility/rect.h	Thu Apr 16 19:10:32 2009 -0700
   204.3 @@ -43,4 +43,15 @@
   204.4  
   204.5  #define RECT_INC_HEIGHT(r)      (r).height++
   204.6  
   204.7 +#if defined(__cplusplus)
   204.8 +extern "C" {
   204.9 +#endif
  204.10 +
  204.11 +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height,
  204.12 +        unsigned char * buf, RECT_T * outBuf);
  204.13 +
  204.14 +#if defined(__cplusplus)
  204.15 +}
  204.16 +#endif
  204.17 +
  204.18  #endif // _AWT_RECT_H
   205.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   205.2 +++ b/src/solaris/native/sun/net/spi/SdpProvider.c	Thu Apr 16 19:10:32 2009 -0700
   205.3 @@ -0,0 +1,74 @@
   205.4 +/*
   205.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   205.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   205.7 + *
   205.8 + * This code is free software; you can redistribute it and/or modify it
   205.9 + * under the terms of the GNU General Public License version 2 only, as
  205.10 + * published by the Free Software Foundation.  Sun designates this
  205.11 + * particular file as subject to the "Classpath" exception as provided
  205.12 + * by Sun in the LICENSE file that accompanied this code.
  205.13 + *
  205.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  205.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  205.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  205.17 + * version 2 for more details (a copy is included in the LICENSE file that
  205.18 + * accompanied this code).
  205.19 + *
  205.20 + * You should have received a copy of the GNU General Public License version
  205.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  205.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  205.23 + *
  205.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  205.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  205.26 + * have any questions.
  205.27 + */
  205.28 +
  205.29 +#include <sys/types.h>
  205.30 +#include <sys/socket.h>
  205.31 +
  205.32 +#if defined(__solaris__) && !defined(PROTO_SDP)
  205.33 +#define PROTO_SDP       257
  205.34 +#endif
  205.35 +
  205.36 +#include "jni.h"
  205.37 +#include "jni_util.h"
  205.38 +#include "net_util.h"
  205.39 +
  205.40 +#define RESTARTABLE(_cmd, _result) do { \
  205.41 +  do { \
  205.42 +    _result = _cmd; \
  205.43 +  } while((_result == -1) && (errno == EINTR)); \
  205.44 +} while(0)
  205.45 +
  205.46 +JNIEXPORT void JNICALL
  205.47 +Java_sun_net_spi_SdpProvider_convert(JNIEnv *env, jclass cls, jint fd)
  205.48 +{
  205.49 +#ifdef PROTO_SDP
  205.50 +    int domain = ipv6_available() ? AF_INET6 : AF_INET;
  205.51 +    int s = socket(domain, SOCK_STREAM, PROTO_SDP);
  205.52 +    if (s < 0) {
  205.53 +        JNU_ThrowIOExceptionWithLastError(env, "socket");
  205.54 +    } else {
  205.55 +        int arg, len, res;
  205.56 +        struct linger linger;
  205.57 +
  205.58 +        /* copy socket options that are relevant to SDP */
  205.59 +        len = sizeof(arg);
  205.60 +        if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, &len) == 0)
  205.61 +            setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, len);
  205.62 +        len = sizeof(arg);
  205.63 +        if (getsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, &len) == 0)
  205.64 +            setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, len);
  205.65 +        len = sizeof(linger);
  205.66 +        if (getsockopt(fd, SOL_SOCKET, SO_LINGER, (void*)&linger, &len) == 0)
  205.67 +            setsockopt(s, SOL_SOCKET, SO_LINGER, (char*)&linger, len);
  205.68 +
  205.69 +        RESTARTABLE(dup2(s, fd), res);
  205.70 +        if (res < 0)
  205.71 +            JNU_ThrowIOExceptionWithLastError(env, "dup2");
  205.72 +        RESTARTABLE(close(s), res);
  205.73 +    }
  205.74 +#else
  205.75 +    JNU_ThrowInternalError(env, "should not reach here");
  205.76 +#endif
  205.77 +}
   206.1 --- a/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c	Thu Apr 16 17:42:00 2009 +0100
   206.2 +++ b/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c	Thu Apr 16 19:10:32 2009 -0700
   206.3 @@ -28,6 +28,7 @@
   206.4  #include "jvm.h"
   206.5  #include "jlong.h"
   206.6  #include "sun_nio_ch_DevPollArrayWrapper.h"
   206.7 +#include "java_lang_Integer.h"
   206.8  #include <sys/poll.h>
   206.9  #include <sys/resource.h>
  206.10  #include <unistd.h>
  206.11 @@ -192,7 +193,11 @@
  206.12          JNU_ThrowIOExceptionWithLastError(env,
  206.13                                            "getrlimit failed");
  206.14      }
  206.15 -    return (jint)rlp.rlim_max;
  206.16 +    if (rlp.rlim_max < 0 || rlp.rlim_max > java_lang_Integer_MAX_VALUE) {
  206.17 +        return java_lang_Integer_MAX_VALUE;
  206.18 +    } else {
  206.19 +        return (jint)rlp.rlim_max;
  206.20 +    }
  206.21  }
  206.22  
  206.23  JNIEXPORT void JNICALL
   207.1 --- a/src/solaris/native/sun/nio/ch/FileChannelImpl.c	Thu Apr 16 17:42:00 2009 +0100
   207.2 +++ b/src/solaris/native/sun/nio/ch/FileChannelImpl.c	Thu Apr 16 19:10:32 2009 -0700
   207.3 @@ -231,6 +231,8 @@
   207.4          if (result < 0) {
   207.5              if (errno == EAGAIN)
   207.6                  return IOS_UNAVAILABLE;
   207.7 +            if (errno == EOPNOTSUPP)
   207.8 +                return IOS_UNSUPPORTED_CASE;
   207.9              if ((errno == EINVAL) && ((ssize_t)count >= 0))
  207.10                  return IOS_UNSUPPORTED_CASE;
  207.11              if (errno == EINTR)
   208.1 --- a/src/solaris/native/sun/xawt/XToolkit.c	Thu Apr 16 17:42:00 2009 +0100
   208.2 +++ b/src/solaris/native/sun/xawt/XToolkit.c	Thu Apr 16 19:10:32 2009 -0700
   208.3 @@ -182,9 +182,6 @@
   208.4        (*env)->GetMethodID(env, cls, "getLocationOnScreen_NoTreeLock",
   208.5                           "()Ljava/awt/Point;");
   208.6  
   208.7 -    componentIDs.resetGCMID =
   208.8 -      (*env)->GetMethodID(env, cls, "resetGC", "()V");
   208.9 -
  208.10      keyclass = (*env)->FindClass(env, "java/awt/event/KeyEvent");
  208.11      DASSERT (keyclass != NULL);
  208.12  
  208.13 @@ -197,9 +194,6 @@
  208.14                             "Lsun/awt/AppContext;");
  208.15  
  208.16      (*env)->DeleteLocalRef(env, keyclass);
  208.17 -
  208.18 -    DASSERT(componentIDs.resetGCMID);
  208.19 -
  208.20  }
  208.21  
  208.22  
   209.1 --- a/src/solaris/native/sun/xawt/XlibWrapper.c	Thu Apr 16 17:42:00 2009 +0100
   209.2 +++ b/src/solaris/native/sun/xawt/XlibWrapper.c	Thu Apr 16 19:10:32 2009 -0700
   209.3 @@ -1,5 +1,5 @@
   209.4  /*
   209.5 - * Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
   209.6 + * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
   209.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   209.8   *
   209.9   * This code is free software; you can redistribute it and/or modify it
  209.10 @@ -42,7 +42,9 @@
  209.11  #include <jvm.h>
  209.12  
  209.13  #include <Region.h>
  209.14 +#include "utility/rect.h"
  209.15  
  209.16 +#include <X11/XKBlib.h>
  209.17  #if defined(DEBUG) || defined(INTERNAL_BUILD)
  209.18  static jmethodID lockIsHeldMID = NULL;
  209.19  
  209.20 @@ -305,6 +307,20 @@
  209.21  
  209.22  /*
  209.23   * Class:     XlibWrapper
  209.24 + * Method:    XConfigureWindow
  209.25 + * Signature: (JJJJ)V
  209.26 + */
  209.27 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConfigureWindow
  209.28 +(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong value_mask,
  209.29 + jlong values)
  209.30 +{
  209.31 +    AWT_CHECK_HAVE_LOCK();
  209.32 +    XConfigureWindow((Display*)jlong_to_ptr(display), (Window)window,
  209.33 +            (unsigned int)value_mask, (XWindowChanges*)jlong_to_ptr(values));
  209.34 +}
  209.35 +
  209.36 +/*
  209.37 + * Class:     XlibWrapper
  209.38   * Method:    XSetInputFocus
  209.39   * Signature: (JJ)V
  209.40   */
  209.41 @@ -434,6 +450,79 @@
  209.42      XSelectInput((Display *) jlong_to_ptr(display), (Window) window, mask);
  209.43  }
  209.44  
  209.45 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEvents
  209.46 +(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong bits_to_change, jlong values_for_bits)
  209.47 +{
  209.48 +    AWT_CHECK_HAVE_LOCK();
  209.49 +    XkbSelectEvents((Display *) jlong_to_ptr(display), (unsigned int)device,
  209.50 +                   (unsigned long)bits_to_change,
  209.51 +                   (unsigned long)values_for_bits);
  209.52 +}
  209.53 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails
  209.54 +(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong event_type, jlong bits_to_change, jlong values_for_bits)
  209.55 +{
  209.56 +    AWT_CHECK_HAVE_LOCK();
  209.57 +    XkbSelectEventDetails((Display *) jlong_to_ptr(display), (unsigned int)device,
  209.58 +                   (unsigned int) event_type,
  209.59 +                   (unsigned long)bits_to_change,
  209.60 +                   (unsigned long)values_for_bits);
  209.61 +}
  209.62 +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension
  209.63 +(JNIEnv *env, jclass clazz, jlong display, jlong opcode_rtrn, jlong event_rtrn,
  209.64 +              jlong error_rtrn, jlong major_in_out, jlong minor_in_out)
  209.65 +{
  209.66 +    AWT_CHECK_HAVE_LOCK();
  209.67 +    return XkbQueryExtension( (Display *) jlong_to_ptr(display),
  209.68 +                       (int *) jlong_to_ptr(opcode_rtrn),
  209.69 +                       (int *) jlong_to_ptr(event_rtrn),
  209.70 +                       (int *) jlong_to_ptr(error_rtrn),
  209.71 +                       (int *) jlong_to_ptr(major_in_out),
  209.72 +                       (int *) jlong_to_ptr(minor_in_out));
  209.73 +}
  209.74 +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
  209.75 +(JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out)
  209.76 +{
  209.77 +    AWT_CHECK_HAVE_LOCK();
  209.78 +    *((int *)lib_major_in_out) =  XkbMajorVersion;
  209.79 +    *((int *)lib_minor_in_out) =  XkbMinorVersion;
  209.80 +    return  XkbLibraryVersion((int *)jlong_to_ptr(lib_major_in_out), (int *)jlong_to_ptr(lib_minor_in_out));
  209.81 +}
  209.82 +
  209.83 +JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap
  209.84 +(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong device_spec)
  209.85 +{
  209.86 +    AWT_CHECK_HAVE_LOCK();
  209.87 +    return (jlong) XkbGetMap( (Display *) jlong_to_ptr(display),
  209.88 +                              (unsigned int) which,
  209.89 +                              (unsigned int) device_spec);
  209.90 +}
  209.91 +JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap
  209.92 +(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb)
  209.93 +{
  209.94 +    AWT_CHECK_HAVE_LOCK();
  209.95 +    return (jlong) XkbGetUpdatedMap( (Display *) jlong_to_ptr(display),
  209.96 +                              (unsigned int) which,
  209.97 +                              (XkbDescPtr) jlong_to_ptr(xkb));
  209.98 +}
  209.99 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard
 209.100 +(JNIEnv *env, jclass clazz, jlong xkb, jlong which, jboolean free_all)
 209.101 +{
 209.102 +    AWT_CHECK_HAVE_LOCK();
 209.103 +    XkbFreeKeyboard(jlong_to_ptr(xkb), (unsigned int)which, free_all);
 209.104 +}
 209.105 +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode
 209.106 +(JNIEnv *env, jclass clazz, jlong xkb, jint keycode, jlong mods, jlong mods_rtrn, jlong keysym_rtrn)
 209.107 +{
 209.108 +    Bool b;
 209.109 +    b = XkbTranslateKeyCode((XkbDescPtr)xkb, (unsigned int)keycode, (unsigned int)mods,
 209.110 +                              (unsigned int *)jlong_to_ptr(mods_rtrn),
 209.111 +                               (KeySym *)jlong_to_ptr(keysym_rtrn));
 209.112 +    //printf("native,  input: keycode:0x%0X; mods:0x%0X\n", keycode, mods);
 209.113 +    //printf("native, output:  keysym:0x%0X; mods:0x%0X\n", *(unsigned int *)jlong_to_ptr(keysym_rtrn), *(unsigned int *)jlong_to_ptr(mods_rtrn));
 209.114 +    return b;
 209.115 +}
 209.116 +
 209.117 +
 209.118  /*
 209.119   * Class:     sun_awt_X11_XlibWrapper
 209.120   * Method:    XNextEvent
 209.121 @@ -1658,6 +1747,39 @@
 209.122  }
 209.123  
 209.124  JNIEXPORT jint JNICALL
 209.125 +Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup(JNIEnv *env, jclass clazz,
 209.126 +                                              jlong display) {
 209.127 +    XkbStateRec sr;
 209.128 +    AWT_CHECK_HAVE_LOCK();
 209.129 +    memset(&sr, 0, sizeof(XkbStateRec));
 209.130 +    XkbGetState((Display*) jlong_to_ptr(display), XkbUseCoreKbd, &sr);
 209.131 +//    printf("-------------------------------------VVVV\n");
 209.132 +//    printf("                 group:0x%0X\n",sr.group);
 209.133 +//    printf("            base_group:0x%0X\n",sr.base_group);
 209.134 +//    printf("         latched_group:0x%0X\n",sr.latched_group);
 209.135 +//    printf("          locked_group:0x%0X\n",sr.locked_group);
 209.136 +//    printf("                  mods:0x%0X\n",sr.mods);
 209.137 +//    printf("             base_mods:0x%0X\n",sr.base_mods);
 209.138 +//    printf("          latched_mods:0x%0X\n",sr.latched_mods);
 209.139 +//    printf("           locked_mods:0x%0X\n",sr.locked_mods);
 209.140 +//    printf("          compat_state:0x%0X\n",sr.compat_state);
 209.141 +//    printf("             grab_mods:0x%0X\n",sr.grab_mods);
 209.142 +//    printf("      compat_grab_mods:0x%0X\n",sr.compat_grab_mods);
 209.143 +//    printf("           lookup_mods:0x%0X\n",sr.lookup_mods);
 209.144 +//    printf("    compat_lookup_mods:0x%0X\n",sr.compat_lookup_mods);
 209.145 +//    printf("           ptr_buttons:0x%0X\n",sr.ptr_buttons);
 209.146 +//    printf("-------------------------------------^^^^\n");
 209.147 +    return (jint)(sr.group);
 209.148 +}
 209.149 +JNIEXPORT jlong JNICALL
 209.150 +Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz,
 209.151 +                                              jlong display, jint keycode,
 209.152 +                                              jint group, jint level) {
 209.153 +    AWT_CHECK_HAVE_LOCK();
 209.154 +    return XkbKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (unsigned int)group, (unsigned int)level);
 209.155 +}
 209.156 +
 209.157 +JNIEXPORT jint JNICALL
 209.158  Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode(JNIEnv *env, jclass clazz,
 209.159                                                jlong display, jlong keysym) {
 209.160      AWT_CHECK_HAVE_LOCK();
 209.161 @@ -1945,3 +2067,77 @@
 209.162                  ShapeBounding, 0, 0, None, ShapeSet);
 209.163      }
 209.164  }
 209.165 +
 209.166 +/*
 209.167 + * Class:     XlibWrapper
 209.168 + * Method:    SetZOrder
 209.169 + */
 209.170 +
 209.171 +JNIEXPORT void JNICALL
 209.172 +Java_sun_awt_X11_XlibWrapper_SetZOrder
 209.173 +(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong above)
 209.174 +{
 209.175 +    AWT_CHECK_HAVE_LOCK();
 209.176 +
 209.177 +    XWindowChanges wc;
 209.178 +    wc.sibling = (Window)jlong_to_ptr(above);
 209.179 +
 209.180 +    unsigned int value_mask = CWStackMode;
 209.181 +
 209.182 +    if (above == 0) {
 209.183 +        wc.stack_mode = Above;
 209.184 +    } else {
 209.185 +        wc.stack_mode = Below;
 209.186 +        value_mask |= CWSibling;
 209.187 +    }
 209.188 +
 209.189 +    XConfigureWindow((Display *)jlong_to_ptr(display),
 209.190 +                     (Window)jlong_to_ptr(window),
 209.191 +                     value_mask, &wc );
 209.192 +}
 209.193 +
 209.194 +/*
 209.195 + * Class:     XlibWrapper
 209.196 + * Method:    SetBitmapShape
 209.197 + */
 209.198 +JNIEXPORT void JNICALL
 209.199 +Java_sun_awt_X11_XlibWrapper_SetBitmapShape
 209.200 +(JNIEnv *env, jclass clazz, jlong display, jlong window,
 209.201 + jint width, jint height, jintArray bitmap)
 209.202 +{
 209.203 +    jsize len;
 209.204 +    jint *values;
 209.205 +    jboolean isCopy = JNI_FALSE;
 209.206 +    size_t worstBufferSize = (size_t)((width / 2 + 1) * height);
 209.207 +    RECT_T * pRect;
 209.208 +
 209.209 +    AWT_CHECK_HAVE_LOCK();
 209.210 +
 209.211 +    len = (*env)->GetArrayLength(env, bitmap);
 209.212 +    if (len == 0 || len < width * height) {
 209.213 +        return;
 209.214 +    }
 209.215 +
 209.216 +    values = (*env)->GetIntArrayElements(env, bitmap, &isCopy);
 209.217 +    if (JNU_IsNull(env, values)) {
 209.218 +        return;
 209.219 +    }
 209.220 +
 209.221 +    pRect = (RECT_T *)malloc(worstBufferSize * sizeof(RECT_T));
 209.222 +
 209.223 +    /* Note: the values[0] and values[1] are supposed to contain the width
 209.224 +     * and height (see XIconInfo.getIntData() for details). So, we do +2.
 209.225 +     */
 209.226 +    int numrects = BitmapToYXBandedRectangles(32, (int)width, (int)height,
 209.227 +            (unsigned char *)(values + 2), pRect);
 209.228 +
 209.229 +    XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
 209.230 +            ShapeClip, 0, 0, pRect, numrects, ShapeSet, YXBanded);
 209.231 +    XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
 209.232 +            ShapeBounding, 0, 0, pRect, numrects, ShapeSet, YXBanded);
 209.233 +
 209.234 +    free(pRect);
 209.235 +
 209.236 +    (*env)->ReleaseIntArrayElements(env, bitmap, values, JNI_ABORT);
 209.237 +}
 209.238 +
   210.1 --- a/src/windows/classes/sun/awt/Win32GraphicsConfig.java	Thu Apr 16 17:42:00 2009 +0100
   210.2 +++ b/src/windows/classes/sun/awt/Win32GraphicsConfig.java	Thu Apr 16 19:10:32 2009 -0700
   210.3 @@ -1,5 +1,5 @@
   210.4  /*
   210.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
   210.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
   210.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   210.8   *
   210.9   * This code is free software; you can redistribute it and/or modify it
  210.10 @@ -331,4 +331,12 @@
  210.11          }
  210.12          // the rest of the flip actions are not supported
  210.13      }
  210.14 +
  210.15 +    /*
  210.16 +    @Override
  210.17 +    */
  210.18 +    public boolean isTranslucencyCapable() {
  210.19 +        //XXX: worth checking if 8-bit? Anyway, it doesn't hurt.
  210.20 +        return true;
  210.21 +    }
  210.22  }
   211.1 --- a/src/windows/classes/sun/awt/Win32GraphicsDevice.java	Thu Apr 16 17:42:00 2009 +0100
   211.2 +++ b/src/windows/classes/sun/awt/Win32GraphicsDevice.java	Thu Apr 16 19:10:32 2009 -0700
   211.3 @@ -380,7 +380,6 @@
   211.4  
   211.5              // fix for 4868278
   211.6              peer.updateGC();
   211.7 -            peer.resetTargetGC();
   211.8          }
   211.9      }
  211.10  
   212.1 --- a/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java	Thu Apr 16 17:42:00 2009 +0100
   212.2 +++ b/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java	Thu Apr 16 19:10:32 2009 -0700
   212.3 @@ -1,5 +1,5 @@
   212.4  /*
   212.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
   212.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
   212.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   212.8   *
   212.9   * This code is free software; you can redistribute it and/or modify it
  212.10 @@ -398,4 +398,11 @@
  212.11      public boolean isDisplayLocal() {
  212.12          return true;
  212.13      }
  212.14 +
  212.15 +    /**
  212.16 +     * Used to find out if the OS is Windows Vista or later.
  212.17 +     *
  212.18 +     * @return {@code true} if the OS is Vista or later, {@code false} otherwise
  212.19 +     */
  212.20 +    public static native boolean isVistaOS();
  212.21  }
   213.1 --- a/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java	Thu Apr 16 17:42:00 2009 +0100
   213.2 +++ b/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java	Thu Apr 16 19:10:32 2009 -0700
   213.3 @@ -32,6 +32,7 @@
   213.4  import java.io.FileNotFoundException;
   213.5  import java.io.IOException;
   213.6  import java.util.*;
   213.7 +import java.util.concurrent.*;
   213.8  import javax.swing.SwingConstants;
   213.9  
  213.10  // NOTE: This class supersedes Win32ShellFolder, which was removed from
  213.11 @@ -184,15 +185,20 @@
  213.12          boolean disposed;
  213.13          public void dispose() {
  213.14              if (disposed) return;
  213.15 -            if (relativePIDL != 0) {
  213.16 -                releasePIDL(relativePIDL);
  213.17 -            }
  213.18 -            if (absolutePIDL != 0) {
  213.19 -                releasePIDL(absolutePIDL);
  213.20 -            }
  213.21 -            if (pIShellFolder != 0) {
  213.22 -                releaseIShellFolder(pIShellFolder);
  213.23 -            }
  213.24 +            ShellFolder.getInvoker().invoke(new Callable<Void>() {
  213.25 +                public Void call() throws Exception {
  213.26 +                    if (relativePIDL != 0) {
  213.27 +                        releasePIDL(relativePIDL);
  213.28 +                    }
  213.29 +                    if (absolutePIDL != 0) {
  213.30 +                        releasePIDL(absolutePIDL);
  213.31 +                    }
  213.32 +                    if (pIShellFolder != 0) {
  213.33 +                        releaseIShellFolder(pIShellFolder);
  213.34 +                    }
  213.35 +                    return null;
  213.36 +                }
  213.37 +            });
  213.38              disposed = true;
  213.39          }
  213.40      }
  213.41 @@ -218,50 +224,59 @@
  213.42       */
  213.43      private boolean isPersonal;
  213.44  
  213.45 +    private static String composePathForCsidl(int csidl) throws IOException {
  213.46 +        String path = getFileSystemPath(csidl);
  213.47 +        return path == null
  213.48 +                ? ("ShellFolder: 0x" + Integer.toHexString(csidl))
  213.49 +                : path;
  213.50 +    }
  213.51  
  213.52      /**
  213.53       * Create a system special shell folder, such as the
  213.54       * desktop or Network Neighborhood.
  213.55       */
  213.56 -    Win32ShellFolder2(int csidl) throws IOException {
  213.57 +    Win32ShellFolder2(final int csidl) throws IOException {
  213.58          // Desktop is parent of DRIVES and NETWORK, not necessarily
  213.59          // other special shell folders.
  213.60 -        super(null,
  213.61 -              (getFileSystemPath(csidl) == null)
  213.62 -                ? ("ShellFolder: 0x"+Integer.toHexString(csidl)) : getFileSystemPath(csidl));
  213.63 -        if (csidl == DESKTOP) {
  213.64 -            initDesktop();
  213.65 -        } else {
  213.66 -            initSpecial(getDesktop().getIShellFolder(), csidl);
  213.67 -            // At this point, the native method initSpecial() has set our relativePIDL
  213.68 -            // relative to the Desktop, which may not be our immediate parent. We need
  213.69 -            // to traverse this ID list and break it into a chain of shell folders from
  213.70 -            // the top, with each one having an immediate parent and a relativePIDL
  213.71 -            // relative to that parent.
  213.72 -            long pIDL = disposer.relativePIDL;
  213.73 -            parent = getDesktop();
  213.74 -            while (pIDL != 0) {
  213.75 -                // Get a child pidl relative to 'parent'
  213.76 -                long childPIDL = copyFirstPIDLEntry(pIDL);
  213.77 -                if (childPIDL != 0) {
  213.78 -                    // Get a handle to the the rest of the ID list
  213.79 -                    // i,e, parent's grandchilren and down
  213.80 -                    pIDL = getNextPIDLEntry(pIDL);
  213.81 -                    if (pIDL != 0) {
  213.82 -                        // Now we know that parent isn't immediate to 'this' because it
  213.83 -                        // has a continued ID list. Create a shell folder for this child
  213.84 -                        // pidl and make it the new 'parent'.
  213.85 -                        parent = new Win32ShellFolder2((Win32ShellFolder2)parent, childPIDL);
  213.86 -                    } else {
  213.87 -                        // No grandchildren means we have arrived at the parent of 'this',
  213.88 -                        // and childPIDL is directly relative to parent.
  213.89 -                        disposer.relativePIDL = childPIDL;
  213.90 +        super(null, composePathForCsidl(csidl));
  213.91 +        ShellFolder.getInvoker().invoke(new Callable<Void>() {
  213.92 +            public Void call() throws Exception {
  213.93 +                if (csidl == DESKTOP) {
  213.94 +                    initDesktop();
  213.95 +                } else {
  213.96 +                    initSpecial(getDesktop().getIShellFolder(), csidl);
  213.97 +                    // At this point, the native method initSpecial() has set our relativePIDL
  213.98 +                    // relative to the Desktop, which may not be our immediate parent. We need
  213.99 +                    // to traverse this ID list and break it into a chain of shell folders from
 213.100 +                    // the top, with each one having an immediate parent and a relativePIDL
 213.101 +                    // relative to that parent.
 213.102 +                    long pIDL = disposer.relativePIDL;
 213.103 +                    parent = getDesktop();
 213.104 +                    while (pIDL != 0) {
 213.105 +                        // Get a child pidl relative to 'parent'
 213.106 +                        long childPIDL = copyFirstPIDLEntry(pIDL);
 213.107 +                        if (childPIDL != 0) {
 213.108 +                            // Get a handle to the the rest of the ID list
 213.109 +                            // i,e, parent's grandchilren and down
 213.110 +                            pIDL = getNextPIDLEntry(pIDL);
 213.111 +                            if (pIDL != 0) {
 213.112 +                                // Now we know that parent isn't immediate to 'this' because it
 213.113 +                                // has a continued ID list. Create a shell folder for this child
 213.114 +                                // pidl and make it the new 'parent'.
 213.115 +                                parent = new Win32ShellFolder2((Win32ShellFolder2) parent, childPIDL);
 213.116 +                            } else {
 213.117 +                                // No grandchildren means we have arrived at the parent of 'this',
 213.118 +                                // and childPIDL is directly relative to parent.
 213.119 +                                disposer.relativePIDL = childPIDL;
 213.120 +                            }
 213.121 +                        } else {
 213.122 +                            break;
 213.123 +                        }
 213.124                      }
 213.125 -                } else {
 213.126 -                    break;
 213.127                  }
 213.128 +                return null;
 213.129              }
 213.130 -        }
 213.131 +        });
 213.132  
 213.133          sun.java2d.Disposer.addRecord(this, disposer);
 213.134      }
 213.135 @@ -281,17 +296,26 @@
 213.136      /**
 213.137       * Creates a shell folder with a parent and relative PIDL
 213.138       */
 213.139 -    Win32ShellFolder2(Win32ShellFolder2 parent, long relativePIDL) {
 213.140 -        super(parent, getFileSystemPath(parent.getIShellFolder(), relativePIDL));
 213.141 +    Win32ShellFolder2(final Win32ShellFolder2 parent, final long relativePIDL) {
 213.142 +        super(parent,
 213.143 +            ShellFolder.getInvoker().invoke(new Callable<String>() {
 213.144 +                public String call() throws Exception {
 213.145 +                    return getFileSystemPath(parent.getIShellFolder(), relativePIDL);
 213.146 +                }
 213.147 +            })
 213.148 +        );
 213.149          this.disposer.relativePIDL = relativePIDL;
 213.150          getAbsolutePath();
 213.151          sun.java2d.Disposer.addRecord(this, disposer);
 213.152      }
 213.153  
 213.154      // Initializes the desktop shell folder
 213.155 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.156      private native void initDesktop();
 213.157 +
 213.158      // Initializes a special, non-file system shell folder
 213.159      // from one of the above constants
 213.160 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.161      private native void initSpecial(long desktopIShellFolder, int csidl);
 213.162  
 213.163      /** Marks this folder as being the My Documents (Personal) folder */
 213.164 @@ -311,26 +335,30 @@
 213.165       * drive (normally "C:\").
 213.166       */
 213.167      protected Object writeReplace() throws java.io.ObjectStreamException {
 213.168 -        if (isFileSystem()) {
 213.169 -            return new File(getPath());
 213.170 -        } else {
 213.171 -            Win32ShellFolder2 drives = Win32ShellFolderManager2.getDrives();
 213.172 -            if (drives != null) {
 213.173 -                File[] driveRoots = drives.listFiles();
 213.174 -                if (driveRoots != null) {
 213.175 -                    for (int i = 0; i < driveRoots.length; i++) {
 213.176 -                        if (driveRoots[i] instanceof Win32ShellFolder2) {
 213.177 -                            Win32ShellFolder2 sf = (Win32ShellFolder2)driveRoots[i];
 213.178 -                            if (sf.isFileSystem() && !sf.hasAttribute(ATTRIB_REMOVABLE)) {
 213.179 -                                return new File(sf.getPath());
 213.180 +        return ShellFolder.getInvoker().invoke(new Callable<File>() {
 213.181 +            public File call() throws Exception {
 213.182 +                if (isFileSystem()) {
 213.183 +                    return new File(getPath());
 213.184 +                } else {
 213.185 +                    Win32ShellFolder2 drives = Win32ShellFolderManager2.getDrives();
 213.186 +                    if (drives != null) {
 213.187 +                        File[] driveRoots = drives.listFiles();
 213.188 +                        if (driveRoots != null) {
 213.189 +                            for (int i = 0; i < driveRoots.length; i++) {
 213.190 +                                if (driveRoots[i] instanceof Win32ShellFolder2) {
 213.191 +                                    Win32ShellFolder2 sf = (Win32ShellFolder2) driveRoots[i];
 213.192 +                                    if (sf.isFileSystem() && !sf.hasAttribute(ATTRIB_REMOVABLE)) {
 213.193 +                                        return new File(sf.getPath());
 213.194 +                                    }
 213.195 +                                }
 213.196                              }
 213.197                          }
 213.198                      }
 213.199 +                    // Ouch, we have no hard drives. Return something "valid" anyway.
 213.200 +                    return new File("C:\\");
 213.201                  }
 213.202              }
 213.203 -            // Ouch, we have no hard drives. Return something "valid" anyway.
 213.204 -            return new File("C:\\");
 213.205 -        }
 213.206 +        });
 213.207      }
 213.208  
 213.209  
 213.210 @@ -364,6 +392,7 @@
 213.211      static native void releasePIDL(long pIDL);
 213.212  
 213.213      // Release an IShellFolder object
 213.214 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.215      private static native void releaseIShellFolder(long pIShellFolder);
 213.216  
 213.217      /**
 213.218 @@ -371,18 +400,28 @@
 213.219       */
 213.220      public long getIShellFolder() {
 213.221          if (disposer.pIShellFolder == 0) {
 213.222 -            assert(isDirectory());
 213.223 -            assert(parent != null);
 213.224 -            long parentIShellFolder = getParentIShellFolder();
 213.225 -            if (parentIShellFolder == 0) {
 213.226 -                throw new InternalError("Parent IShellFolder was null for " + getAbsolutePath());
 213.227 -            }
 213.228 -            // We are a directory with a parent and a relative PIDL.
 213.229 -            // We want to bind to the parent so we get an IShellFolder instance associated with us.
 213.230 -            disposer.pIShellFolder = bindToObject(parentIShellFolder, disposer.relativePIDL);
 213.231 -            if (disposer.pIShellFolder == 0) {
 213.232 -                throw new InternalError("Unable to bind " + getAbsolutePath() + " to parent");
 213.233 -            }
 213.234 +            disposer.pIShellFolder =
 213.235 +                ShellFolder.getInvoker().invoke(new Callable<Long>() {
 213.236 +                    public Long call() throws Exception {
 213.237 +                        assert(isDirectory());
 213.238 +                        assert(parent != null);
 213.239 +                        long parentIShellFolder = getParentIShellFolder();
 213.240 +                        if (parentIShellFolder == 0) {
 213.241 +                            throw new InternalError("Parent IShellFolder was null for "
 213.242 +                                    + getAbsolutePath());
 213.243 +                        }
 213.244 +                        // We are a directory with a parent and a relative PIDL.
 213.245 +                        // We want to bind to the parent so we get an
 213.246 +                        // IShellFolder instance associated with us.
 213.247 +                        long pIShellFolder = bindToObject(parentIShellFolder,
 213.248 +                                disposer.relativePIDL);
 213.249 +                        if (pIShellFolder == 0) {
 213.250 +                            throw new InternalError("Unable to bind "
 213.251 +                                    + getAbsolutePath() + " to parent");
 213.252 +                        }
 213.253 +                        return pIShellFolder;
 213.254 +                    }
 213.255 +                });
 213.256          }
 213.257          return disposer.pIShellFolder;
 213.258      }
 213.259 @@ -472,24 +511,42 @@
 213.260          return false;
 213.261      }
 213.262  
 213.263 -    private static boolean pidlsEqual(long pIShellFolder, long pidl1, long pidl2) {
 213.264 -        return (compareIDs(pIShellFolder, pidl1, pidl2) == 0);
 213.265 +    private static boolean pidlsEqual(final long pIShellFolder, final long pidl1, final long pidl2) {
 213.266 +        return ShellFolder.getInvoker().invoke(new Callable<Boolean>() {
 213.267 +            public Boolean call() throws Exception {
 213.268 +                return (compareIDs(pIShellFolder, pidl1, pidl2) == 0);
 213.269 +            }
 213.270 +        });
 213.271      }
 213.272 +
 213.273 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.274      private static native int compareIDs(long pParentIShellFolder, long pidl1, long pidl2);
 213.275  
 213.276 +    private Boolean cachedIsFileSystem;
 213.277 +
 213.278      /**
 213.279       * @return Whether this is a file system shell folder
 213.280       */
 213.281 -    public boolean isFileSystem() {
 213.282 -        return hasAttribute(ATTRIB_FILESYSTEM);
 213.283 +    public synchronized boolean isFileSystem() {
 213.284 +        if (cachedIsFileSystem == null) {
 213.285 +            cachedIsFileSystem = hasAttribute(ATTRIB_FILESYSTEM);
 213.286 +        }
 213.287 +
 213.288 +        return cachedIsFileSystem;
 213.289      }
 213.290  
 213.291      /**
 213.292       * Return whether the given attribute flag is set for this object
 213.293       */
 213.294 -    public boolean hasAttribute(int attribute) {
 213.295 -        // Caching at this point doesn't seem to be cost efficient
 213.296 -        return (getAttributes0(getParentIShellFolder(), getRelativePIDL(), attribute) & attribute) != 0;
 213.297 +    public boolean hasAttribute(final int attribute) {
 213.298 +        return ShellFolder.getInvoker().invoke(new Callable<Boolean>() {
 213.299 +            public Boolean call() throws Exception {
 213.300 +                // Caching at this point doesn't seem to be cost efficient
 213.301 +                return (getAttributes0(getParentIShellFolder(),
 213.302 +                        getRelativePIDL(), attribute)
 213.303 +                        & attribute) != 0;
 213.304 +            }
 213.305 +        });
 213.306      }
 213.307  
 213.308      /**
 213.309 @@ -498,26 +555,42 @@
 213.310       * Could plausibly be used for attribute caching but have to be
 213.311       * very careful not to touch network drives and file system roots
 213.312       * with a full attrsMask
 213.313 +     * NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.314       */
 213.315 +
 213.316      private static native int getAttributes0(long pParentIShellFolder, long pIDL, int attrsMask);
 213.317  
 213.318      // Return the path to the underlying file system object
 213.319 -    private static String getFileSystemPath(long parentIShellFolder, long relativePIDL) {
 213.320 -        int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER;
 213.321 -        if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() &&
 213.322 -            getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) {
 213.323 +    private static String getFileSystemPath(final long parentIShellFolder, final long relativePIDL) {
 213.324 +        return ShellFolder.getInvoker().invoke(new Callable<String>() {
 213.325 +            public String call() throws Exception {
 213.326 +                int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER;
 213.327 +                if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() &&
 213.328 +                        getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) {
 213.329  
 213.330 -            String s =
 213.331 -                getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(),
 213.332 -                                  getLinkLocation(parentIShellFolder, relativePIDL, false));
 213.333 -            if (s != null && s.startsWith("\\\\")) {
 213.334 -                return s;
 213.335 +                    String s =
 213.336 +                            getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(),
 213.337 +                                    getLinkLocation(parentIShellFolder, relativePIDL, false));
 213.338 +                    if (s != null && s.startsWith("\\\\")) {
 213.339 +                        return s;
 213.340 +                    }
 213.341 +                }
 213.342 +                return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_FORPARSING);
 213.343              }
 213.344 -        }
 213.345 -        return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_NORMAL | SHGDN_FORPARSING);
 213.346 +        });
 213.347      }
 213.348 +
 213.349      // Needs to be accessible to Win32ShellFolderManager2
 213.350 -    static native String getFileSystemPath(int csidl) throws IOException;
 213.351 +    static String getFileSystemPath(final int csidl) throws IOException {
 213.352 +        return ShellFolder.getInvoker().invoke(new Callable<String>() {
 213.353 +            public String call() throws Exception {
 213.354 +                return getFileSystemPath0(csidl);
 213.355 +            }
 213.356 +        });
 213.357 +    }
 213.358 +
 213.359 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.360 +    private static native String getFileSystemPath0(int csidl) throws IOException;
 213.361  
 213.362      // Return whether the path is a network root.
 213.363      // Path is assumed to be non-null
 213.364 @@ -557,24 +630,33 @@
 213.365       */
 213.366      // Returns an IEnumIDList interface for an IShellFolder.  The value
 213.367      // returned must be released using releaseEnumObjects().
 213.368 -    private long getEnumObjects(long pIShellFolder, boolean includeHiddenFiles) {
 213.369 -        boolean isDesktop = (disposer.pIShellFolder == getDesktopIShellFolder());
 213.370 -        return getEnumObjects(disposer.pIShellFolder, isDesktop, includeHiddenFiles);
 213.371 +    private long getEnumObjects(long pIShellFolder, final boolean includeHiddenFiles) {
 213.372 +        final boolean isDesktop = (disposer.pIShellFolder == getDesktopIShellFolder());
 213.373 +        return ShellFolder.getInvoker().invoke(new Callable<Long>() {
 213.374 +            public Long call() throws Exception {
 213.375 +                return getEnumObjects(disposer.pIShellFolder, isDesktop, includeHiddenFiles);
 213.376 +            }
 213.377 +        });
 213.378      }
 213.379 +
 213.380      // Returns an IEnumIDList interface for an IShellFolder.  The value
 213.381      // returned must be released using releaseEnumObjects().
 213.382 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.383      private native long getEnumObjects(long pIShellFolder, boolean isDesktop,
 213.384                                         boolean includeHiddenFiles);
 213.385      // Returns the next sequential child as a relative PIDL
 213.386      // from an IEnumIDList interface.  The value returned must
 213.387      // be released using releasePIDL().
 213.388 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.389      private native long getNextChild(long pEnumObjects);
 213.390      // Releases the IEnumIDList interface
 213.391 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.392      private native void releaseEnumObjects(long pEnumObjects);
 213.393  
 213.394      // Returns the IShellFolder of a child from a parent IShellFolder
 213.395      // and a relative PIDL.  The value returned must be released
 213.396      // using releaseIShellFolder().
 213.397 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.398      private static native long bindToObject(long parentIShellFolder, long pIDL);
 213.399  
 213.400      /**
 213.401 @@ -582,60 +664,64 @@
 213.402       *         object. The array will be empty if the folder is empty.  Returns
 213.403       *         <code>null</code> if this shellfolder does not denote a directory.
 213.404       */
 213.405 -    public File[] listFiles(boolean includeHiddenFiles) {
 213.406 +    public File[] listFiles(final boolean includeHiddenFiles) {
 213.407          SecurityManager security = System.getSecurityManager();
 213.408          if (security != null) {
 213.409              security.checkRead(getPath());
 213.410          }
 213.411 -        if (!isDirectory()) {
 213.412 -            return null;
 213.413 -        }
 213.414 -        // Links to directories are not directories and cannot be parents.
 213.415 -        // This does not apply to folders in My Network Places (NetHood)
 213.416 -        // because they are both links and real directories!
 213.417 -        if (isLink() && !hasAttribute(ATTRIB_FOLDER)) {
 213.418 -            return new File[0];
 213.419 -        }
 213.420  
 213.421 -        Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop();
 213.422 -        Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal();
 213.423 -
 213.424 -        // If we are a directory, we have a parent and (at least) a
 213.425 -        // relative PIDL. We must first ensure we are bound to the
 213.426 -        // parent so we have an IShellFolder to query.
 213.427 -        long pIShellFolder = getIShellFolder();
 213.428 -        // Now we can enumerate the objects in this folder.
 213.429 -        ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>();
 213.430 -        long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles);
 213.431 -        if (pEnumObjects != 0) {
 213.432 -            long childPIDL;
 213.433 -            int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR;
 213.434 -            do {
 213.435 -                if (Thread.currentThread().isInterrupted()) {
 213.436 +        return ShellFolder.getInvoker().invoke(new Callable<File[]>() {
 213.437 +            public File[] call() throws Exception {
 213.438 +                if (!isDirectory()) {
 213.439 +                    return null;
 213.440 +                }
 213.441 +                // Links to directories are not directories and cannot be parents.
 213.442 +                // This does not apply to folders in My Network Places (NetHood)
 213.443 +                // because they are both links and real directories!
 213.444 +                if (isLink() && !hasAttribute(ATTRIB_FOLDER)) {
 213.445                      return new File[0];
 213.446                  }
 213.447 -                childPIDL = getNextChild(pEnumObjects);
 213.448 -                boolean releasePIDL = true;
 213.449 -                if (childPIDL != 0 &&
 213.450 -                    (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) {
 213.451 -                    Win32ShellFolder2 childFolder = null;
 213.452 -                    if (this.equals(desktop)
 213.453 -                        && personal != null
 213.454 -                        && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) {
 213.455 -                        childFolder = personal;
 213.456 -                    } else {
 213.457 -                        childFolder = new Win32ShellFolder2(this, childPIDL);
 213.458 -                        releasePIDL = false;
 213.459 -                    }
 213.460 -                    list.add(childFolder);
 213.461 +
 213.462 +                Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop();
 213.463 +                Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal();
 213.464 +
 213.465 +                // If we are a directory, we have a parent and (at least) a
 213.466 +                // relative PIDL. We must first ensure we are bound to the
 213.467 +                // parent so we have an IShellFolder to query.
 213.468 +                long pIShellFolder = getIShellFolder();
 213.469 +                // Now we can enumerate the objects in this folder.
 213.470 +                ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>();
 213.471 +                long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles);
 213.472 +                if (pEnumObjects != 0) {
 213.473 +                    long childPIDL;
 213.474 +                    int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR;
 213.475 +                    do {
 213.476 +                        childPIDL = getNextChild(pEnumObjects);
 213.477 +                        boolean releasePIDL = true;
 213.478 +                        if (childPIDL != 0 &&
 213.479 +                                (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) {
 213.480 +                            Win32ShellFolder2 childFolder;
 213.481 +                            if (Win32ShellFolder2.this.equals(desktop)
 213.482 +                                    && personal != null
 213.483 +                                    && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) {
 213.484 +                                childFolder = personal;
 213.485 +                            } else {
 213.486 +                                childFolder = new Win32ShellFolder2(Win32ShellFolder2.this, childPIDL);
 213.487 +                                releasePIDL = false;
 213.488 +                            }
 213.489 +                            list.add(childFolder);
 213.490 +                        }
 213.491 +                        if (releasePIDL) {
 213.492 +                            releasePIDL(childPIDL);
 213.493 +                        }
 213.494 +                    } while (childPIDL != 0 && !Thread.currentThread().isInterrupted());
 213.495 +                    releaseEnumObjects(pEnumObjects);
 213.496                  }
 213.497 -                if (releasePIDL) {
 213.498 -                    releasePIDL(childPIDL);
 213.499 -                }
 213.500 -            } while (childPIDL != 0);
 213.501 -            releaseEnumObjects(pEnumObjects);
 213.502 -        }
 213.503 -        return list.toArray(new ShellFolder[list.size()]);
 213.504 +                return Thread.currentThread().isInterrupted()
 213.505 +                    ? new File[0]
 213.506 +                    : list.toArray(new ShellFolder[list.size()]);
 213.507 +            }
 213.508 +        });
 213.509      }
 213.510  
 213.511  
 213.512 @@ -644,33 +730,43 @@
 213.513       *
 213.514       * @return The child shellfolder, or null if not found.
 213.515       */
 213.516 -    Win32ShellFolder2 getChildByPath(String filePath) {
 213.517 -        long pIShellFolder = getIShellFolder();
 213.518 -        long pEnumObjects =  getEnumObjects(pIShellFolder, true);
 213.519 -        Win32ShellFolder2 child = null;
 213.520 -        long childPIDL;
 213.521 +    Win32ShellFolder2 getChildByPath(final String filePath) {
 213.522 +        return ShellFolder.getInvoker().invoke(new Callable<Win32ShellFolder2>() {
 213.523 +            public Win32ShellFolder2 call() throws Exception {
 213.524 +                long pIShellFolder = getIShellFolder();
 213.525 +                long pEnumObjects = getEnumObjects(pIShellFolder, true);
 213.526 +                Win32ShellFolder2 child = null;
 213.527 +                long childPIDL = 0;
 213.528  
 213.529 -        while ((childPIDL = getNextChild(pEnumObjects)) != 0) {
 213.530 -            if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) {
 213.531 -                String path = getFileSystemPath(pIShellFolder, childPIDL);
 213.532 -                if (path != null && path.equalsIgnoreCase(filePath)) {
 213.533 -                    long childIShellFolder = bindToObject(pIShellFolder, childPIDL);
 213.534 -                    child = new Win32ShellFolder2(this, childIShellFolder, childPIDL, path);
 213.535 -                    break;
 213.536 +                while ((childPIDL = getNextChild(pEnumObjects)) != 0) {
 213.537 +                    if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) {
 213.538 +                        String path = getFileSystemPath(pIShellFolder, childPIDL);
 213.539 +                        if (path != null && path.equalsIgnoreCase(filePath)) {
 213.540 +                            long childIShellFolder = bindToObject(pIShellFolder, childPIDL);
 213.541 +                            child = new Win32ShellFolder2(Win32ShellFolder2.this,
 213.542 +                                    childIShellFolder, childPIDL, path);
 213.543 +                            break;
 213.544 +                        }
 213.545 +                    }
 213.546 +                    releasePIDL(childPIDL);
 213.547                  }
 213.548 +                releaseEnumObjects(pEnumObjects);
 213.549 +                return child;
 213.550              }
 213.551 -            releasePIDL(childPIDL);
 213.552 -        }
 213.553 -        releaseEnumObjects(pEnumObjects);
 213.554 -        return child;
 213.555 +        });
 213.556      }
 213.557  
 213.558 +    private Boolean cachedIsLink;
 213.559  
 213.560      /**
 213.561       * @return Whether this shell folder is a link
 213.562       */
 213.563 -    public boolean isLink() {
 213.564 -        return hasAttribute(ATTRIB_LINK);
 213.565 +    public synchronized boolean isLink() {
 213.566 +        if (cachedIsLink == null) {
 213.567 +            cachedIsLink = hasAttribute(ATTRIB_LINK);
 213.568 +        }
 213.569 +
 213.570 +        return cachedIsLink;
 213.571      }
 213.572  
 213.573      /**
 213.574 @@ -682,6 +778,7 @@
 213.575  
 213.576  
 213.577      // Return the link location of a shell folder
 213.578 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.579      private static native long getLinkLocation(long parentIShellFolder,
 213.580                                          long relativePIDL, boolean resolve);
 213.581  
 213.582 @@ -693,38 +790,52 @@
 213.583          return getLinkLocation(true);
 213.584      }
 213.585  
 213.586 -    private ShellFolder getLinkLocation(boolean resolve)  {
 213.587 -        if (!isLink()) {
 213.588 -            return null;
 213.589 -        }
 213.590 +    private ShellFolder getLinkLocation(final boolean resolve) {
 213.591 +        return ShellFolder.getInvoker().invoke(new Callable<ShellFolder>() {
 213.592 +            public ShellFolder call() throws Exception {
 213.593 +                if (!isLink()) {
 213.594 +                    return null;
 213.595 +                }
 213.596  
 213.597 -        ShellFolder location = null;
 213.598 -        long linkLocationPIDL = getLinkLocation(getParentIShellFolder(),
 213.599 -                                                getRelativePIDL(), resolve);
 213.600 -        if (linkLocationPIDL != 0) {
 213.601 -            try {
 213.602 -                location =
 213.603 -                    Win32ShellFolderManager2.createShellFolderFromRelativePIDL(getDesktop(),
 213.604 -                                                                               linkLocationPIDL);
 213.605 -            } catch (InternalError e) {
 213.606 -                // Could be a link to a non-bindable object, such as a network connection
 213.607 -                // TODO: getIShellFolder() should throw FileNotFoundException instead
 213.608 +                ShellFolder location = null;
 213.609 +                long linkLocationPIDL = getLinkLocation(getParentIShellFolder(),
 213.610 +                        getRelativePIDL(), resolve);
 213.611 +                if (linkLocationPIDL != 0) {
 213.612 +                    try {
 213.613 +                        location =
 213.614 +                                Win32ShellFolderManager2.createShellFolderFromRelativePIDL(getDesktop(),
 213.615 +                                        linkLocationPIDL);
 213.616 +                    } catch (InternalError e) {
 213.617 +                        // Could be a link to a non-bindable object, such as a network connection
 213.618 +                        // TODO: getIShellFolder() should throw FileNotFoundException instead
 213.619 +                    }
 213.620 +                }
 213.621 +                return location;
 213.622              }
 213.623 -        }
 213.624 -        return location;
 213.625 +        });
 213.626      }
 213.627  
 213.628      // Parse a display name into a PIDL relative to the current IShellFolder.
 213.629 -    long parseDisplayName(String name) throws FileNotFoundException {
 213.630 +    long parseDisplayName(final String name) throws FileNotFoundException {
 213.631          try {
 213.632 -            return parseDisplayName0(getIShellFolder(), name);
 213.633 -        } catch (IOException e) {
 213.634 -            throw new FileNotFoundException("Could not find file " + name);
 213.635 +            return ShellFolder.getInvoker().invoke(new Callable<Long>() {
 213.636 +                public Long call() throws Exception {
 213.637 +                    return parseDisplayName0(getIShellFolder(), name);
 213.638 +                }
 213.639 +            });
 213.640 +        } catch (RuntimeException e) {
 213.641 +            if (e.getCause() instanceof IOException) {
 213.642 +                throw new FileNotFoundException("Could not find file " + name);
 213.643 +            }
 213.644 +            throw e;
 213.645          }
 213.646      }
 213.647 +
 213.648 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.649      private static native long parseDisplayName0(long pIShellFolder, String name) throws IOException;
 213.650  
 213.651      // Return the display name of a shell folder
 213.652 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.653      private static native String getDisplayNameOf(long parentIShellFolder,
 213.654                                                    long relativePIDL,
 213.655                                                    int attrs);
 213.656 @@ -734,12 +845,19 @@
 213.657       */
 213.658      public String getDisplayName() {
 213.659          if (displayName == null) {
 213.660 -            displayName = getDisplayNameOf(getParentIShellFolder(), getRelativePIDL(), SHGDN_NORMAL);
 213.661 +            displayName =
 213.662 +                ShellFolder.getInvoker().invoke(new Callable<String>() {
 213.663 +                    public String call() throws Exception {
 213.664 +                        return getDisplayNameOf(getParentIShellFolder(),
 213.665 +                                getRelativePIDL(), SHGDN_NORMAL);
 213.666 +                    }
 213.667 +                });
 213.668          }
 213.669          return displayName;
 213.670      }
 213.671  
 213.672      // Return the folder type of a shell folder
 213.673 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.674      private static native String getFolderType(long pIDL);
 213.675  
 213.676      /**
 213.677 @@ -747,7 +865,13 @@
 213.678       */
 213.679      public String getFolderType() {
 213.680          if (folderType == null) {
 213.681 -            folderType = getFolderType(getAbsolutePIDL());
 213.682 +            final long absolutePIDL = getAbsolutePIDL();
 213.683 +            folderType =
 213.684 +                ShellFolder.getInvoker().invoke(new Callable<String>() {
 213.685 +                    public String call() throws Exception {
 213.686 +                        return getFolderType(absolutePIDL);
 213.687 +                    }
 213.688 +                });
 213.689          }
 213.690          return folderType;
 213.691      }
 213.692 @@ -774,11 +898,16 @@
 213.693      private static Map smallLinkedSystemImages = new HashMap();
 213.694      private static Map largeLinkedSystemImages = new HashMap();
 213.695  
 213.696 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.697      private static native long getIShellIcon(long pIShellFolder);
 213.698 +
 213.699 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.700      private static native int getIconIndex(long parentIShellIcon, long relativePIDL);
 213.701  
 213.702      // Return the icon of a file system shell folder in the form of an HICON
 213.703      private static native long getIcon(String absolutePath, boolean getLargeIcon);
 213.704 +
 213.705 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.706      private static native long extractIcon(long parentIShellFolder, long relativePIDL,
 213.707                                             boolean getLargeIcon);
 213.708  
 213.709 @@ -799,7 +928,12 @@
 213.710  
 213.711      private long getIShellIcon() {
 213.712          if (pIShellIcon == -1L) {
 213.713 -            pIShellIcon = getIShellIcon(getIShellFolder());
 213.714 +            pIShellIcon =
 213.715 +                ShellFolder.getInvoker().invoke(new Callable<Long>() {
 213.716 +                    public Long call() throws Exception {
 213.717 +                        return getIShellIcon(getIShellFolder());
 213.718 +                    }
 213.719 +                });
 213.720          }
 213.721          return pIShellIcon;
 213.722      }
 213.723 @@ -850,50 +984,60 @@
 213.724      /**
 213.725       * @return The icon image used to display this shell folder
 213.726       */
 213.727 -    public Image getIcon(boolean getLargeIcon) {
 213.728 +    public Image getIcon(final boolean getLargeIcon) {
 213.729          Image icon = getLargeIcon ? largeIcon : smallIcon;
 213.730          if (icon == null) {
 213.731 -            long parentIShellIcon = (parent != null) ? ((Win32ShellFolder2)parent).getIShellIcon() : 0L;
 213.732 -            long relativePIDL = getRelativePIDL();
 213.733 +            icon =
 213.734 +                ShellFolder.getInvoker().invoke(new Callable<Image>() {
 213.735 +                    public Image call() throws Exception {
 213.736 +                        Image newIcon = null;
 213.737 +                        if (isFileSystem()) {
 213.738 +                            long parentIShellIcon = (parent != null)
 213.739 +                                ? ((Win32ShellFolder2) parent).getIShellIcon()
 213.740 +                                : 0L;
 213.741 +                            long relativePIDL = getRelativePIDL();
 213.742  
 213.743 -            if (isFileSystem()) {
 213.744 -                // These are cached per type (using the index in the system image list)
 213.745 -                int index = getIconIndex(parentIShellIcon, relativePIDL);
 213.746 -                if (index > 0) {
 213.747 -                    Map imageCache;
 213.748 -                    if (isLink()) {
 213.749 -                        imageCache = getLargeIcon ? largeLinkedSystemImages : smallLinkedSystemImages;
 213.750 -                    } else {
 213.751 -                        imageCache = getLargeIcon ? largeSystemImages : smallSystemImages;
 213.752 +                            // These are cached per type (using the index in the system image list)
 213.753 +                            int index = getIconIndex(parentIShellIcon, relativePIDL);
 213.754 +                            if (index > 0) {
 213.755 +                                Map imageCache;
 213.756 +                                if (isLink()) {
 213.757 +                                    imageCache = getLargeIcon ? largeLinkedSystemImages : smallLinkedSystemImages;
 213.758 +                                } else {
 213.759 +                                    imageCache = getLargeIcon ? largeSystemImages : smallSystemImages;
 213.760 +                                }
 213.761 +                                newIcon = (Image) imageCache.get(Integer.valueOf(index));
 213.762 +                                if (newIcon == null) {
 213.763 +                                    long hIcon = getIcon(getAbsolutePath(), getLargeIcon);
 213.764 +                                    newIcon = makeIcon(hIcon, getLargeIcon);
 213.765 +                                    disposeIcon(hIcon);
 213.766 +                                    if (newIcon != null) {
 213.767 +                                        imageCache.put(Integer.valueOf(index), newIcon);
 213.768 +                                    }
 213.769 +                                }
 213.770 +                            }
 213.771 +                        }
 213.772 +
 213.773 +                        if (newIcon == null) {
 213.774 +                            // These are only cached per object
 213.775 +                            long hIcon = extractIcon(getParentIShellFolder(),
 213.776 +                                getRelativePIDL(), getLargeIcon);
 213.777 +                            newIcon = makeIcon(hIcon, getLargeIcon);
 213.778 +                            disposeIcon(hIcon);
 213.779 +                        }
 213.780 +
 213.781 +                        if (newIcon == null) {
 213.782 +                            newIcon = Win32ShellFolder2.super.getIcon(getLargeIcon);
 213.783 +                        }
 213.784 +                        return newIcon;
 213.785                      }
 213.786 -                    icon = (Image)imageCache.get(Integer.valueOf(index));
 213.787 -                    if (icon == null) {
 213.788 -                        long hIcon = getIcon(getAbsolutePath(), getLargeIcon);
 213.789 -                        icon = makeIcon(hIcon, getLargeIcon);
 213.790 -                        disposeIcon(hIcon);
 213.791 -                        if (icon != null) {
 213.792 -                            imageCache.put(Integer.valueOf(index), icon);
 213.793 -                        }
 213.794 -                    }
 213.795 -                }
 213.796 -            }
 213.797 -
 213.798 -            if (icon == null) {
 213.799 -                // These are only cached per object
 213.800 -                long hIcon = extractIcon(getParentIShellFolder(), getRelativePIDL(), getLargeIcon);
 213.801 -                icon = makeIcon(hIcon, getLargeIcon);
 213.802 -                disposeIcon(hIcon);
 213.803 -            }
 213.804 -
 213.805 +                });
 213.806              if (getLargeIcon) {
 213.807                  largeIcon = icon;
 213.808              } else {
 213.809                  smallIcon = icon;
 213.810              }
 213.811          }
 213.812 -        if (icon == null) {
 213.813 -            icon = super.getIcon(getLargeIcon);
 213.814 -        }
 213.815          return icon;
 213.816      }
 213.817  
 213.818 @@ -969,39 +1113,50 @@
 213.819      private static final int LVCFMT_CENTER = 2;
 213.820  
 213.821      public ShellFolderColumnInfo[] getFolderColumns() {
 213.822 -        ShellFolderColumnInfo[] columns = doGetColumnInfo(getIShellFolder());
 213.823 +        return ShellFolder.getInvoker().invoke(new Callable<ShellFolderColumnInfo[]>() {
 213.824 +            public ShellFolderColumnInfo[] call() throws Exception {
 213.825 +                ShellFolderColumnInfo[] columns = doGetColumnInfo(getIShellFolder());
 213.826  
 213.827 -        if (columns != null) {
 213.828 -            List<ShellFolderColumnInfo> notNullColumns =
 213.829 -                    new ArrayList<ShellFolderColumnInfo>();
 213.830 -            for (int i = 0; i < columns.length; i++) {
 213.831 -                ShellFolderColumnInfo column = columns[i];
 213.832 -                if (column != null) {
 213.833 -                    column.setAlignment(column.getAlignment() == LVCFMT_RIGHT
 213.834 -                            ? SwingConstants.RIGHT
 213.835 -                                : column.getAlignment() == LVCFMT_CENTER
 213.836 -                            ? SwingConstants.CENTER
 213.837 -                                : SwingConstants.LEADING);
 213.838 +                if (columns != null) {
 213.839 +                    List<ShellFolderColumnInfo> notNullColumns =
 213.840 +                            new ArrayList<ShellFolderColumnInfo>();
 213.841 +                    for (int i = 0; i < columns.length; i++) {
 213.842 +                        ShellFolderColumnInfo column = columns[i];
 213.843 +                        if (column != null) {
 213.844 +                            column.setAlignment(column.getAlignment() == LVCFMT_RIGHT
 213.845 +                                    ? SwingConstants.RIGHT
 213.846 +                                    : column.getAlignment() == LVCFMT_CENTER
 213.847 +                                    ? SwingConstants.CENTER
 213.848 +                                    : SwingConstants.LEADING);
 213.849  
 213.850 -                    column.setComparator(new ColumnComparator(getIShellFolder(), i));
 213.851 +                            column.setComparator(new ColumnComparator(getIShellFolder(), i));
 213.852  
 213.853 -                    notNullColumns.add(column);
 213.854 +                            notNullColumns.add(column);
 213.855 +                        }
 213.856 +                    }
 213.857 +                    columns = new ShellFolderColumnInfo[notNullColumns.size()];
 213.858 +                    notNullColumns.toArray(columns);
 213.859                  }
 213.860 +                return columns;
 213.861              }
 213.862 -            columns = new ShellFolderColumnInfo[notNullColumns.size()];
 213.863 -            notNullColumns.toArray(columns);
 213.864 -        }
 213.865 -        return columns;
 213.866 +        });
 213.867      }
 213.868  
 213.869 -    public Object getFolderColumnValue(int column) {
 213.870 -        return doGetColumnValue(getParentIShellFolder(), getRelativePIDL(), column);
 213.871 +    public Object getFolderColumnValue(final int column) {
 213.872 +        return ShellFolder.getInvoker().invoke(new Callable<Object>() {
 213.873 +            public Object call() throws Exception {
 213.874 +                return doGetColumnValue(getParentIShellFolder(), getRelativePIDL(), column);
 213.875 +            }
 213.876 +        });
 213.877      }
 213.878  
 213.879 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.880      private native ShellFolderColumnInfo[] doGetColumnInfo(long iShellFolder2);
 213.881  
 213.882 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.883      private native Object doGetColumnValue(long parentIShellFolder2, long childPIDL, int columnIdx);
 213.884  
 213.885 +    // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
 213.886      private static native int compareIDsByColumn(long pParentIShellFolder, long pidl1, long pidl2, int columnIdx);
 213.887  
 213.888  
 213.889 @@ -1020,17 +1175,20 @@
 213.890          }
 213.891  
 213.892          // compares 2 objects within this folder by the specified column
 213.893 -        public int compare(File o, File o1) {
 213.894 -            if (o instanceof Win32ShellFolder2
 213.895 -                    && o1 instanceof Win32ShellFolder2) {
 213.896 -                // delegates comparison to native method
 213.897 -                return compareIDsByColumn(parentIShellFolder,
 213.898 -                        ((Win32ShellFolder2) o).getRelativePIDL(),
 213.899 -                        ((Win32ShellFolder2) o1).getRelativePIDL(),
 213.900 -                        columnIdx);
 213.901 -            }
 213.902 -            return 0;
 213.903 +        public int compare(final File o, final File o1) {
 213.904 +            return ShellFolder.getInvoker().invoke(new Callable<Integer>() {
 213.905 +                public Integer call() throws Exception {
 213.906 +                    if (o instanceof Win32ShellFolder2
 213.907 +                            && o1 instanceof Win32ShellFolder2) {
 213.908 +                        // delegates comparison to native method
 213.909 +                        return compareIDsByColumn(parentIShellFolder,
 213.910 +                                ((Win32ShellFolder2) o).getRelativePIDL(),
 213.911 +                                ((Win32ShellFolder2) o1).getRelativePIDL(),
 213.912 +                                columnIdx);
 213.913 +                    }
 213.914 +                    return 0;
 213.915 +                }
 213.916 +            });
 213.917          }
 213.918      }
 213.919 -
 213.920  }
   214.1 --- a/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java	Thu Apr 16 17:42:00 2009 +0100
   214.2 +++ b/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java	Thu Apr 16 19:10:32 2009 -0700
   214.3 @@ -31,7 +31,10 @@
   214.4  import java.io.FileNotFoundException;
   214.5  import java.io.IOException;
   214.6  import java.security.AccessController;
   214.7 +import java.security.PrivilegedAction;
   214.8  import java.util.*;
   214.9 +import java.util.concurrent.*;
  214.10 +
  214.11  import sun.security.action.LoadLibraryAction;
  214.12  
  214.13  import static sun.awt.shell.Win32ShellFolder2.*;
  214.14 @@ -408,4 +411,102 @@
  214.15              return name1.compareTo(name2);
  214.16          }
  214.17      }
  214.18 +
  214.19 +    @Override
  214.20 +    protected Invoker createInvoker() {
  214.21 +        return new ComInvoker();
  214.22 +    }
  214.23 +
  214.24 +    private static class ComInvoker extends ThreadPoolExecutor implements ThreadFactory, ShellFolder.Invoker {
  214.25 +        private static Thread comThread;
  214.26 +
  214.27 +        private ComInvoker() {
  214.28 +            super(1, 1, 0, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>());
  214.29 +            allowCoreThreadTimeOut(false);
  214.30 +            setThreadFactory(this);
  214.31 +            final Runnable shutdownHook = new Runnable() {
  214.32 +                public void run() {
  214.33 +                    AccessController.doPrivileged(new PrivilegedAction<Void>() {
  214.34 +                        public Void run() {
  214.35 +                            shutdownNow();
  214.36 +                            return null;
  214.37 +                        }
  214.38 +                    });
  214.39 +                }
  214.40 +            };
  214.41 +            AccessController.doPrivileged(new PrivilegedAction<Void>() {
  214.42 +                public Void run() {
  214.43 +                    Runtime.getRuntime().addShutdownHook(
  214.44 +                        new Thread(shutdownHook)
  214.45 +                    );
  214.46 +                    return null;
  214.47 +                }
  214.48 +            });
  214.49 +        }
  214.50 +
  214.51 +        public synchronized Thread newThread(final Runnable task) {
  214.52 +            final Runnable comRun = new Runnable() {
  214.53 +                public void run() {
  214.54 +                    try {
  214.55 +                        initializeCom();
  214.56 +                        task.run();
  214.57 +                    } finally {
  214.58 +                        uninitializeCom();
  214.59 +                    }
  214.60 +                }
  214.61 +            };
  214.62 +            comThread =
  214.63 +                AccessController.doPrivileged(
  214.64 +                    new PrivilegedAction<Thread>() {
  214.65 +                        public Thread run() {
  214.66 +                            /* The thread must be a member of a thread group
  214.67 +                             * which will not get GCed before VM exit.
  214.68 +                             * Make its parent the top-level thread group.
  214.69 +                             */
  214.70 +                            ThreadGroup tg = Thread.currentThread().getThreadGroup();
  214.71 +                            for (ThreadGroup tgn = tg;
  214.72 +                                 tgn != null;
  214.73 +                                 tg = tgn, tgn = tg.getParent());
  214.74 +                            Thread thread = new Thread(tg, comRun, "Swing-Shell");
  214.75 +                            thread.setDaemon(true);
  214.76 +                            return thread;
  214.77 +                        }
  214.78 +                    }
  214.79 +                );
  214.80 +            return comThread;
  214.81 +        }
  214.82 +
  214.83 +        public <T> T invoke(Callable<T> task) {
  214.84 +            try {
  214.85 +                T result;
  214.86 +                if (Thread.currentThread() == comThread) {
  214.87 +                    // if it's already called from the COM
  214.88 +                    // thread, we don't need to delegate the task
  214.89 +                    result = task.call();
  214.90 +                } else {
  214.91 +                    Future<T> future = submit(task);
  214.92 +                    try {
  214.93 +                        result = future.get();
  214.94 +                    } catch (InterruptedException e) {
  214.95 +                        result = null;
  214.96 +                        future.cancel(true);
  214.97 +                    }
  214.98 +                }
  214.99 +                return result;
 214.100 +            } catch (Exception e) {
 214.101 +                Throwable cause = (e instanceof ExecutionException) ? e.getCause() : e;
 214.102 +                if (cause instanceof RuntimeException) {
 214.103 +                    throw (RuntimeException) cause;
 214.104 +                }
 214.105 +                if (cause instanceof Error) {
 214.106 +                    throw (Error) cause;
 214.107 +                }
 214.108 +                throw new RuntimeException(cause);
 214.109 +            }
 214.110 +        }
 214.111 +    }
 214.112 +
 214.113 +    static native void initializeCom();
 214.114 +
 214.115 +    static native void uninitializeCom();
 214.116  }
   215.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   215.2 +++ b/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java	Thu Apr 16 19:10:32 2009 -0700
   215.3 @@ -0,0 +1,398 @@
   215.4 +/*
   215.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   215.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   215.7 + *
   215.8 + * This code is free software; you can redistribute it and/or modify it
   215.9 + * under the terms of the GNU General Public License version 2 only, as
  215.10 + * published by the Free Software Foundation.  Sun designates this
  215.11 + * particular file as subject to the "Classpath" exception as provided
  215.12 + * by Sun in the LICENSE file that accompanied this code.
  215.13 + *
  215.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  215.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  215.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  215.17 + * version 2 for more details (a copy is included in the LICENSE file that
  215.18 + * accompanied this code).
  215.19 + *
  215.20 + * You should have received a copy of the GNU General Public License version
  215.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  215.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  215.23 + *
  215.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  215.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  215.26 + * have any questions.
  215.27 + */
  215.28 +package sun.awt.windows;
  215.29 +
  215.30 +import java.awt.AlphaComposite;
  215.31 +import java.awt.Color;
  215.32 +import java.awt.Graphics2D;
  215.33 +import java.awt.GraphicsConfiguration;
  215.34 +import java.awt.Image;
  215.35 +import java.awt.Window;
  215.36 +import java.awt.image.BufferedImage;
  215.37 +import java.awt.image.DataBufferInt;
  215.38 +import java.awt.image.VolatileImage;
  215.39 +import java.lang.ref.WeakReference;
  215.40 +import java.security.AccessController;
  215.41 +import sun.awt.image.BufImgSurfaceData;
  215.42 +import sun.java2d.DestSurfaceProvider;
  215.43 +import sun.java2d.InvalidPipeException;
  215.44 +import sun.java2d.Surface;
  215.45 +import sun.java2d.pipe.RenderQueue;
  215.46 +import sun.java2d.pipe.hw.AccelGraphicsConfig;
  215.47 +import sun.java2d.pipe.hw.AccelSurface;
  215.48 +import sun.security.action.GetPropertyAction;
  215.49 +
  215.50 +import static java.awt.image.VolatileImage.*;
  215.51 +import static java.awt.Transparency.*;
  215.52 +import static sun.java2d.pipe.hw.AccelSurface.*;
  215.53 +import static sun.java2d.pipe.hw.ContextCapabilities.*;
  215.54 +
  215.55 +/**
  215.56 + * This class handles the updates of the non-opaque windows.
  215.57 + * The window associated with the peer is updated either given an image or
  215.58 + * the window is repainted to an internal buffer which is then used to update
  215.59 + * the window.
  215.60 + *
  215.61 + * Note: this class does not attempt to be thread safe, it is expected to be
  215.62 + * called from a single thread (EDT).
  215.63 + */
  215.64 +public abstract class TranslucentWindowPainter {
  215.65 +
  215.66 +    protected Window window;
  215.67 +    protected WWindowPeer peer;
  215.68 +
  215.69 +    // REMIND: we probably would want to remove this later
  215.70 +    private static final boolean forceOpt  =
  215.71 +        Boolean.valueOf(AccessController.doPrivileged(
  215.72 +            new GetPropertyAction("sun.java2d.twp.forceopt", "false")));
  215.73 +    private static final boolean forceSW  =
  215.74 +        Boolean.valueOf(AccessController.doPrivileged(
  215.75 +            new GetPropertyAction("sun.java2d.twp.forcesw", "false")));
  215.76 +
  215.77 +    /**
  215.78 +     * Creates an instance of the painter for particular peer.
  215.79 +     */
  215.80 +    public static TranslucentWindowPainter createInstance(WWindowPeer peer) {
  215.81 +        GraphicsConfiguration gc = peer.getGraphicsConfiguration();
  215.82 +        if (!forceSW && gc instanceof AccelGraphicsConfig) {
  215.83 +            String gcName = gc.getClass().getSimpleName();
  215.84 +            AccelGraphicsConfig agc = (AccelGraphicsConfig)gc;
  215.85 +            // this is a heuristic to check that we have a pcix board
  215.86 +            // (those have higher transfer rate from gpu to cpu)
  215.87 +            if ((agc.getContextCapabilities().getCaps() & CAPS_PS30) != 0 ||
  215.88 +                forceOpt)
  215.89 +            {
  215.90 +                // we check for name to avoid loading classes unnecessarily if
  215.91 +                // a pipeline isn't enabled
  215.92 +                if (gcName.startsWith("D3D")) {
  215.93 +                    return new VIOptD3DWindowPainter(peer);
  215.94 +                } else if (forceOpt && gcName.startsWith("WGL")) {
  215.95 +                    // on some boards (namely, ATI, even on pcix bus) ogl is
  215.96 +                    // very slow reading pixels back so for now it is disabled
  215.97 +                    // unless forced
  215.98 +                    return new VIOptWGLWindowPainter(peer);
  215.99 +                }
 215.100 +            }
 215.101 +        }
 215.102 +        return new BIWindowPainter(peer);
 215.103 +    }
 215.104 +
 215.105 +    protected TranslucentWindowPainter(WWindowPeer peer) {
 215.106 +        this.peer = peer;
 215.107 +        this.window = (Window)peer.getTarget();
 215.108 +    }
 215.109 +
 215.110 +    /**
 215.111 +     * Creates (if needed), clears and returns the buffer for this painter.
 215.112 +     */
 215.113 +    protected abstract Image getBackBuffer();
 215.114 +
 215.115 +    /**
 215.116 +     * Updates the the window associated with this painter with the contents
 215.117 +     * of the passed image.
 215.118 +     * The image can not be null, and NPE will be thrown if it is.
 215.119 +     */
 215.120 +    protected abstract boolean update(Image bb);
 215.121 +
 215.122 +    /**
 215.123 +     * Flushes the resources associated with the painter. They will be
 215.124 +     * recreated as needed.
 215.125 +     */
 215.126 +    public abstract void flush();
 215.127 +
 215.128 +    /**
 215.129 +     * Updates the window associated with the painter given the passed image.
 215.130 +     * If the passed image is null the painter will use its own buffer for
 215.131 +     * rendering the contents of the window into it and updating the window.
 215.132 +     *
 215.133 +     * If the passed buffer has dimensions different from the window, it is
 215.134 +     * copied into the internal buffer first and the latter is used to update
 215.135 +     * the window.
 215.136 +     *
 215.137 +     * @param bb the image to update the non opaque window with, or null.
 215.138 +     * If not null, the image must be of ARGB_PRE type.
 215.139 +     */
 215.140 +    public void updateWindow(Image bb) {
 215.141 +        boolean done = false;
 215.142 +        if (bb != null && (window.getWidth()  != bb.getWidth(null) ||
 215.143 +                           window.getHeight() != bb.getHeight(null)))
 215.144 +        {
 215.145 +            Image ourBB = getBackBuffer();
 215.146 +            Graphics2D g = (Graphics2D)ourBB.getGraphics();
 215.147 +            g.drawImage(bb, 0, 0, null);
 215.148 +            g.dispose();
 215.149 +            bb = ourBB;
 215.150 +        }
 215.151 +        do {
 215.152 +            if (bb == null) {
 215.153 +                bb = getBackBuffer();
 215.154 +                Graphics2D g = (Graphics2D)bb.getGraphics();
 215.155 +                try {
 215.156 +                    window.paintAll(g);
 215.157 +                } finally {
 215.158 +                    g.dispose();
 215.159 +                }
 215.160 +            }
 215.161 +
 215.162 +            peer.paintAppletWarning((Graphics2D)bb.getGraphics(),
 215.163 +                                    bb.getWidth(null), bb.getHeight(null));
 215.164 +
 215.165 +            done = update(bb);
 215.166 +            // in case they passed us a lost VI, next time around we'll use our
 215.167 +            // own bb because we can not validate and restore the contents of
 215.168 +            // their VI
 215.169 +            if (!done) {
 215.170 +                bb = null;
 215.171 +            }
 215.172 +        } while (!done);
 215.173 +    }
 215.174 +
 215.175 +    private static final Image clearImage(Image bb) {
 215.176 +        Graphics2D g = (Graphics2D)bb.getGraphics();
 215.177 +        int w = bb.getWidth(null);
 215.178 +        int h = bb.getHeight(null);
 215.179 +
 215.180 +        g.setComposite(AlphaComposite.Src);
 215.181 +        g.setColor(new Color(0, 0, 0, 0));
 215.182 +        g.fillRect(0, 0, w, h);
 215.183 +
 215.184 +        return bb;
 215.185 +    }
 215.186 +
 215.187 +    /**
 215.188 +     * A painter which uses BufferedImage as the internal buffer. The window
 215.189 +     * is painted into this buffer, and the contents then are uploaded
 215.190 +     * into the layered window.
 215.191 +     *
 215.192 +     * This painter handles all types of images passed to its paint(Image)
 215.193 +     * method (VI, BI, regular Images).
 215.194 +     */
 215.195 +    private static class BIWindowPainter extends TranslucentWindowPainter {
 215.196 +        private WeakReference<BufferedImage> biRef;
 215.197 +
 215.198 +        protected BIWindowPainter(WWindowPeer peer) {
 215.199 +            super(peer);
 215.200 +        }
 215.201 +
 215.202 +        private BufferedImage getBIBackBuffer() {
 215.203 +            int w = window.getWidth();
 215.204 +            int h = window.getHeight();
 215.205 +            BufferedImage bb = biRef == null ? null : biRef.get();
 215.206 +            if (bb == null || bb.getWidth() != w || bb.getHeight() != h) {
 215.207 +                if (bb != null) {
 215.208 +                    bb.flush();
 215.209 +                    bb = null;
 215.210 +                }
 215.211 +                bb = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE);
 215.212 +                biRef = new WeakReference<BufferedImage>(bb);
 215.213 +            }
 215.214 +            return (BufferedImage)clearImage(bb);
 215.215 +        }
 215.216 +
 215.217 +        @Override
 215.218 +        protected Image getBackBuffer() {
 215.219 +            return getBIBackBuffer();
 215.220 +        }
 215.221 +
 215.222 +        @Override
 215.223 +        protected boolean update(Image bb) {
 215.224 +            VolatileImage viBB = null;
 215.225 +
 215.226 +            if (bb instanceof BufferedImage) {
 215.227 +                BufferedImage bi = (BufferedImage)bb;
 215.228 +                int data[] =
 215.229 +                    ((DataBufferInt)bi.getRaster().getDataBuffer()).getData();
 215.230 +                peer.updateWindowImpl(data, bi.getWidth(), bi.getHeight());
 215.231 +                return true;
 215.232 +            } else if (bb instanceof VolatileImage) {
 215.233 +                viBB = (VolatileImage)bb;
 215.234 +                if (bb instanceof DestSurfaceProvider) {
 215.235 +                    Surface s = ((DestSurfaceProvider)bb).getDestSurface();
 215.236 +                    if (s instanceof BufImgSurfaceData) {
 215.237 +                        // the image is probably lost, upload the data from the
 215.238 +                        // backup surface to avoid creating another heap-based
 215.239 +                        // image (the parent's buffer)
 215.240 +                        int w = viBB.getWidth();
 215.241 +                        int h = viBB.getHeight();
 215.242 +                        BufImgSurfaceData bisd = (BufImgSurfaceData)s;
 215.243 +                        int data[] = ((DataBufferInt)bisd.getRaster(0,0,w,h).
 215.244 +                            getDataBuffer()).getData();
 215.245 +                        peer.updateWindowImpl(data, w, h);
 215.246 +                        return true;
 215.247 +                    }
 215.248 +                }
 215.249 +            }
 215.250 +
 215.251 +            // copy the passed image into our own buffer, then upload
 215.252 +            BufferedImage bi = getBIBackBuffer();
 215.253 +            Graphics2D g = (Graphics2D)bi.getGraphics();
 215.254 +            g.setComposite(AlphaComposite.Src);
 215.255 +            g.drawImage(bb, 0, 0, null);
 215.256 +
 215.257 +            int data[] =
 215.258 +                ((DataBufferInt)bi.getRaster().getDataBuffer()).getData();
 215.259 +            peer.updateWindowImpl(data, bi.getWidth(), bi.getHeight());
 215.260 +
 215.261 +            return (viBB != null ? !viBB.contentsLost() : true);
 215.262 +        }
 215.263 +
 215.264 +        public void flush() {
 215.265 +            if (biRef != null) {
 215.266 +                biRef.clear();
 215.267 +            }
 215.268 +        }
 215.269 +    }
 215.270 +
 215.271 +    /**
 215.272 +     * A version of the painter which uses VolatileImage as the internal buffer.
 215.273 +     * The window is painted into this VI and then copied into the parent's
 215.274 +     * Java heap-based buffer (which is then uploaded to the layered window)
 215.275 +     */
 215.276 +    private static class VIWindowPainter extends BIWindowPainter {
 215.277 +        private WeakReference<VolatileImage> viRef;
 215.278 +
 215.279 +        protected VIWindowPainter(WWindowPeer peer) {
 215.280 +            super(peer);
 215.281 +        }
 215.282 +
 215.283 +        @Override
 215.284 +        protected Image getBackBuffer() {
 215.285 +            int w = window.getWidth();
 215.286 +            int h = window.getHeight();
 215.287 +            GraphicsConfiguration gc = peer.getGraphicsConfiguration();
 215.288 +
 215.289 +            VolatileImage viBB = viRef == null ? null : viRef.get();
 215.290 +
 215.291 +            if (viBB == null || viBB.getWidth() != w || viBB.getHeight() != h ||
 215.292 +                viBB.validate(gc) == IMAGE_INCOMPATIBLE)
 215.293 +            {
 215.294 +                if (viBB != null) {
 215.295 +                    viBB.flush();
 215.296 +                    viBB = null;
 215.297 +                }
 215.298 +
 215.299 +                if (gc instanceof AccelGraphicsConfig) {
 215.300 +                    AccelGraphicsConfig agc = ((AccelGraphicsConfig)gc);
 215.301 +                    viBB = agc.createCompatibleVolatileImage(w, h,
 215.302 +                                                             TRANSLUCENT,
 215.303 +                                                             RT_PLAIN);
 215.304 +                }
 215.305 +                if (viBB == null) {
 215.306 +                    viBB = gc.createCompatibleVolatileImage(w, h, TRANSLUCENT);
 215.307 +                }
 215.308 +                viBB.validate(gc);
 215.309 +                viRef = new WeakReference<VolatileImage>(viBB);
 215.310 +            }
 215.311 +
 215.312 +            return clearImage(viBB);
 215.313 +        }
 215.314 +
 215.315 +        @Override
 215.316 +        public void flush() {
 215.317 +            if (viRef != null) {
 215.318 +                VolatileImage viBB = viRef.get();
 215.319 +                if (viBB != null) {
 215.320 +                    viBB.flush();
 215.321 +                    viBB = null;
 215.322 +                }
 215.323 +                viRef.clear();
 215.324 +            }
 215.325 +        }
 215.326 +    }
 215.327 +
 215.328 +    /**
 215.329 +     * Optimized version of hw painter. Uses VolatileImages for the
 215.330 +     * buffer, and uses an optimized path to pull the data from those into
 215.331 +     * the layered window, bypassing Java heap-based image.
 215.332 +     */
 215.333 +    private abstract static class VIOptWindowPainter extends VIWindowPainter {
 215.334 +
 215.335 +        protected VIOptWindowPainter(WWindowPeer peer) {
 215.336 +            super(peer);
 215.337 +        }
 215.338 +
 215.339 +        protected abstract boolean updateWindowAccel(long psdops, int w, int h);
 215.340 +
 215.341 +        @Override
 215.342 +        protected boolean update(Image bb) {
 215.343 +            if (bb instanceof DestSurfaceProvider) {
 215.344 +                Surface s = ((DestSurfaceProvider)bb).getDestSurface();
 215.345 +                if (s instanceof AccelSurface) {
 215.346 +                    final int w = bb.getWidth(null);
 215.347 +                    final int h = bb.getHeight(null);
 215.348 +                    final boolean arr[] = { false };
 215.349 +                    final AccelSurface as = (AccelSurface)s;
 215.350 +                    RenderQueue rq = as.getContext().getRenderQueue();
 215.351 +                    rq.lock();
 215.352 +                    try {
 215.353 +                        as.getContext().validateContext(as);
 215.354 +                        rq.flushAndInvokeNow(new Runnable() {
 215.355 +                            public void run() {
 215.356 +                                long psdops = as.getNativeOps();
 215.357 +                                arr[0] = updateWindowAccel(psdops, w, h);
 215.358 +                            }
 215.359 +                        });
 215.360 +                    } catch (InvalidPipeException e) {
 215.361 +                        // ignore, false will be returned
 215.362 +                    } finally {
 215.363 +                        rq.unlock();
 215.364 +                    }
 215.365 +                    return arr[0];
 215.366 +                }
 215.367 +            }
 215.368 +            return super.update(bb);
 215.369 +        }
 215.370 +    }
 215.371 +
 215.372 +    private static class VIOptD3DWindowPainter extends VIOptWindowPainter {
 215.373 +
 215.374 +        protected VIOptD3DWindowPainter(WWindowPeer peer) {
 215.375 +            super(peer);
 215.376 +        }
 215.377 +
 215.378 +        @Override
 215.379 +        protected boolean updateWindowAccel(long psdops, int w, int h) {
 215.380 +            // note: this method is executed on the toolkit thread, no sync is
 215.381 +            // necessary at the native level, and a pointer to peer can be used
 215.382 +            return sun.java2d.d3d.D3DSurfaceData.
 215.383 +                updateWindowAccelImpl(psdops, peer.getData(), w, h);
 215.384 +        }
 215.385 +    }
 215.386 +
 215.387 +    private static class VIOptWGLWindowPainter extends VIOptWindowPainter {
 215.388 +
 215.389 +        protected VIOptWGLWindowPainter(WWindowPeer peer) {
 215.390 +            super(peer);
 215.391 +        }
 215.392 +
 215.393 +        @Override
 215.394 +        protected boolean updateWindowAccel(long psdops, int w, int h) {
 215.395 +            // note: part of this method which deals with GDI will be on the
 215.396 +            // toolkit thread
 215.397 +            return sun.java2d.opengl.WGLSurfaceData.
 215.398 +                updateWindowAccelImpl(psdops, peer, w, h);
 215.399 +        }
 215.400 +    }
 215.401 +}
   216.1 --- a/src/windows/classes/sun/awt/windows/WCanvasPeer.java	Thu Apr 16 17:42:00 2009 +0100
   216.2 +++ b/src/windows/classes/sun/awt/windows/WCanvasPeer.java	Thu Apr 16 19:10:32 2009 -0700
   216.3 @@ -1,5 +1,5 @@
   216.4  /*
   216.5 - * Copyright 1996-2007 Sun Microsystems, Inc.  All Rights Reserved.
   216.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   216.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   216.8   *
   216.9   * This code is free software; you can redistribute it and/or modify it
  216.10 @@ -28,6 +28,7 @@
  216.11  import java.awt.peer.*;
  216.12  import java.lang.ref.WeakReference;
  216.13  import java.lang.reflect.Method;
  216.14 +import sun.awt.AWTAccessor;
  216.15  import sun.awt.ComponentAccessor;
  216.16  import sun.awt.SunToolkit;
  216.17  import sun.awt.Win32GraphicsDevice;
  216.18 @@ -37,44 +38,12 @@
  216.19  
  216.20      private boolean eraseBackground;
  216.21  
  216.22 -    Method resetGCMethod;
  216.23 -
  216.24      // Toolkit & peer internals
  216.25  
  216.26      WCanvasPeer(Component target) {
  216.27          super(target);
  216.28      }
  216.29  
  216.30 -    /*
  216.31 -     * From the DisplayChangedListener interface.
  216.32 -     *
  216.33 -     * Overrides WComponentPeer version because Canvases can be created with
  216.34 -     * a non-defulat GraphicsConfiguration, which is no longer valid.
  216.35 -     * Up-called for other windows peer instances (WPanelPeer, WWindowPeer).
  216.36 -     */
  216.37 -    public void displayChanged() {
  216.38 -        clearLocalGC();
  216.39 -        resetTargetGC();
  216.40 -        super.displayChanged();
  216.41 -    }
  216.42 -
  216.43 -    /*
  216.44 -     * Reset the graphicsConfiguration member of our target Component.
  216.45 -     * Component.resetGC() is a package-private method, so we have to call it
  216.46 -     * through reflection.
  216.47 -     */
  216.48 -    public void resetTargetGC() {
  216.49 -        ComponentAccessor.resetGC((Component)target);
  216.50 -    }
  216.51 -
  216.52 -    /*
  216.53 -     * Clears the peer's winGraphicsConfig member.
  216.54 -     * Overridden by WWindowPeer, which shouldn't have a null winGraphicsConfig.
  216.55 -     */
  216.56 -    void clearLocalGC() {
  216.57 -        winGraphicsConfig = null;
  216.58 -    }
  216.59 -
  216.60      native void create(WComponentPeer parent);
  216.61  
  216.62      void initialize() {
  216.63 @@ -110,16 +79,20 @@
  216.64      }
  216.65  
  216.66      public void print(Graphics g) {
  216.67 -        Dimension d = ((Component)target).getSize();
  216.68 -        if (g instanceof Graphics2D ||
  216.69 -            g instanceof sun.awt.Graphics2Delegate) {
  216.70 -            // background color is setup correctly, so just use clearRect
  216.71 -            g.clearRect(0, 0, d.width, d.height);
  216.72 -        } else {
  216.73 -            // emulate clearRect
  216.74 -            g.setColor(((Component)target).getBackground());
  216.75 -            g.fillRect(0, 0, d.width, d.height);
  216.76 -            g.setColor(((Component)target).getForeground());
  216.77 +        if (!(target instanceof Window) ||
  216.78 +            AWTAccessor.getWindowAccessor().isOpaque((Window)target))
  216.79 +        {
  216.80 +            Dimension d = ((Component)target).getSize();
  216.81 +            if (g instanceof Graphics2D ||
  216.82 +                g instanceof sun.awt.Graphics2Delegate) {
  216.83 +                // background color is setup correctly, so just use clearRect
  216.84 +                g.clearRect(0, 0, d.width, d.height);
  216.85 +            } else {
  216.86 +                // emulate clearRect
  216.87 +                g.setColor(((Component)target).getBackground());
  216.88 +                g.fillRect(0, 0, d.width, d.height);
  216.89 +                g.setColor(((Component)target).getForeground());
  216.90 +            }
  216.91          }
  216.92          super.print(g);
  216.93      }
  216.94 @@ -147,4 +120,10 @@
  216.95       */
  216.96      private native void setNativeBackgroundErase(boolean doErase,
  216.97                                                   boolean doEraseOnResize);
  216.98 +
  216.99 +    public GraphicsConfiguration getAppropriateGraphicsConfiguration(
 216.100 +            GraphicsConfiguration gc)
 216.101 +    {
 216.102 +        return gc;
 216.103 +    }
 216.104  }
   217.1 --- a/src/windows/classes/sun/awt/windows/WChoicePeer.java	Thu Apr 16 17:42:00 2009 +0100
   217.2 +++ b/src/windows/classes/sun/awt/windows/WChoicePeer.java	Thu Apr 16 19:10:32 2009 -0700
   217.3 @@ -27,6 +27,10 @@
   217.4  import java.awt.*;
   217.5  import java.awt.peer.*;
   217.6  import java.awt.event.ItemEvent;
   217.7 +import java.awt.event.WindowEvent;
   217.8 +import java.awt.event.WindowListener;
   217.9 +import java.awt.event.WindowAdapter;
  217.10 +import sun.awt.SunToolkit;
  217.11  
  217.12  class WChoicePeer extends WComponentPeer implements ChoicePeer {
  217.13  
  217.14 @@ -70,6 +74,8 @@
  217.15  
  217.16      public synchronized native void reshape(int x, int y, int width, int height);
  217.17  
  217.18 +    private WindowListener windowListener;
  217.19 +
  217.20      // Toolkit & peer internals
  217.21  
  217.22      WChoicePeer(Choice target) {
  217.23 @@ -91,9 +97,38 @@
  217.24                  select(opt.getSelectedIndex());
  217.25              }
  217.26          }
  217.27 +
  217.28 +        Window parentWindow = SunToolkit.getContainingWindow((Component)target);
  217.29 +        if (parentWindow != null) {
  217.30 +            WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
  217.31 +            if (wpeer != null) {
  217.32 +                windowListener = new WindowAdapter() {
  217.33 +                        public void windowIconified(WindowEvent e) {
  217.34 +                            closeList();
  217.35 +                        }
  217.36 +                        public void windowClosing(WindowEvent e) {
  217.37 +                            closeList();
  217.38 +                        }
  217.39 +                    };
  217.40 +                wpeer.addWindowListener(windowListener);
  217.41 +            }
  217.42 +        }
  217.43          super.initialize();
  217.44      }
  217.45  
  217.46 +    protected void disposeImpl() {
  217.47 +        // TODO: we should somehow reset the listener when the choice
  217.48 +        // is moved to another toplevel without destroying its peer.
  217.49 +        Window parentWindow = SunToolkit.getContainingWindow((Component)target);
  217.50 +        if (parentWindow != null) {
  217.51 +            WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
  217.52 +            if (wpeer != null) {
  217.53 +                wpeer.removeWindowListener(windowListener);
  217.54 +            }
  217.55 +        }
  217.56 +        super.disposeImpl();
  217.57 +    }
  217.58 +
  217.59      // native callbacks
  217.60  
  217.61      void handleAction(final int index) {
  217.62 @@ -121,4 +156,5 @@
  217.63              return getMinimumSize();
  217.64      }
  217.65  
  217.66 +    native void closeList();
  217.67  }
   218.1 --- a/src/windows/classes/sun/awt/windows/WComponentPeer.java	Thu Apr 16 17:42:00 2009 +0100
   218.2 +++ b/src/windows/classes/sun/awt/windows/WComponentPeer.java	Thu Apr 16 19:10:32 2009 -0700
   218.3 @@ -1,5 +1,5 @@
   218.4  /*
   218.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   218.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   218.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   218.8   *
   218.9   * This code is free software; you can redistribute it and/or modify it
  218.10 @@ -38,27 +38,32 @@
  218.11  import java.awt.event.PaintEvent;
  218.12  import java.awt.event.InvocationEvent;
  218.13  import java.awt.event.KeyEvent;
  218.14 +import java.awt.event.FocusEvent;
  218.15 +import java.awt.event.MouseEvent;
  218.16 +import java.awt.event.MouseWheelEvent;
  218.17 +import java.awt.event.InputEvent;
  218.18  import sun.awt.Win32GraphicsConfig;
  218.19 +import sun.awt.Win32GraphicsEnvironment;
  218.20  import sun.java2d.InvalidPipeException;
  218.21  import sun.java2d.SurfaceData;
  218.22 -import sun.java2d.d3d.D3DScreenUpdateManager;
  218.23 -import static sun.java2d.d3d.D3DSurfaceData.*;
  218.24  import sun.java2d.ScreenUpdateManager;
  218.25 +import sun.java2d.d3d.D3DSurfaceData;
  218.26  import sun.java2d.opengl.OGLSurfaceData;
  218.27 +import sun.java2d.pipe.Region;
  218.28  import sun.awt.DisplayChangedListener;
  218.29  import sun.awt.PaintEventDispatcher;
  218.30 +import sun.awt.SunToolkit;
  218.31  import sun.awt.event.IgnorePaintEvent;
  218.32  
  218.33  import java.awt.dnd.DropTarget;
  218.34  import java.awt.dnd.peer.DropTargetPeer;
  218.35  import sun.awt.ComponentAccessor;
  218.36  
  218.37 -
  218.38  import java.util.logging.*;
  218.39  
  218.40  
  218.41  public abstract class WComponentPeer extends WObjectPeer
  218.42 -    implements ComponentPeer, DropTargetPeer, DisplayChangedListener
  218.43 +    implements ComponentPeer, DropTargetPeer
  218.44  {
  218.45      /**
  218.46       * Handle to native window
  218.47 @@ -67,6 +72,7 @@
  218.48  
  218.49      private static final Logger log = Logger.getLogger("sun.awt.windows.WComponentPeer");
  218.50      private static final Logger shapeLog = Logger.getLogger("sun.awt.windows.shape.WComponentPeer");
  218.51 +    private static final Logger focusLog = Logger.getLogger("sun.awt.windows.focus.WComponentPeer");
  218.52  
  218.53      // ComponentPeer implementation
  218.54      SurfaceData surfaceData;
  218.55 @@ -186,7 +192,7 @@
  218.56                  cont.invalidate();
  218.57                  cont.validate();
  218.58  
  218.59 -                if (surfaceData instanceof D3DWindowSurfaceData ||
  218.60 +                if (surfaceData instanceof D3DSurfaceData.D3DWindowSurfaceData ||
  218.61                      surfaceData instanceof OGLSurfaceData)
  218.62                  {
  218.63                      // When OGL or D3D is enabled, it is necessary to
  218.64 @@ -258,7 +264,7 @@
  218.65              int[] pix = createPrintedPixels(0, startY, totalW, h);
  218.66              if (pix != null) {
  218.67                  BufferedImage bim = new BufferedImage(totalW, h,
  218.68 -                                              BufferedImage.TYPE_INT_RGB);
  218.69 +                                              BufferedImage.TYPE_INT_ARGB);
  218.70                  bim.setRGB(0, 0, totalW, h, pix, 0, totalW);
  218.71                  g.drawImage(bim, 0, startY, null);
  218.72                  bim.flush();
  218.73 @@ -295,14 +301,35 @@
  218.74      // on handling '\n' to prevent it from being passed to native code
  218.75      public boolean handleJavaKeyEvent(KeyEvent e) { return false; }
  218.76  
  218.77 +    public void handleJavaMouseEvent(MouseEvent e) {
  218.78 +        switch (e.getID()) {
  218.79 +          case MouseEvent.MOUSE_PRESSED:
  218.80 +              // Note that Swing requests focus in its own mouse event handler.
  218.81 +              if (target == e.getSource() &&
  218.82 +                  !((Component)target).isFocusOwner() &&
  218.83 +                  WKeyboardFocusManagerPeer.shouldFocusOnClick((Component)target))
  218.84 +              {
  218.85 +                  WKeyboardFocusManagerPeer.requestFocusFor((Component)target,
  218.86 +                                                            CausedFocusEvent.Cause.MOUSE_EVENT);
  218.87 +              }
  218.88 +              break;
  218.89 +        }
  218.90 +    }
  218.91 +
  218.92      native void nativeHandleEvent(AWTEvent e);
  218.93  
  218.94      public void handleEvent(AWTEvent e) {
  218.95          int id = e.getID();
  218.96  
  218.97 -        if (((Component)target).isEnabled() && (e instanceof KeyEvent) && !((KeyEvent)e).isConsumed())  {
  218.98 -            if (handleJavaKeyEvent((KeyEvent)e)) {
  218.99 -                return;
 218.100 +        if ((e instanceof InputEvent) && !((InputEvent)e).isConsumed() &&
 218.101 +            ((Component)target).isEnabled())
 218.102 +        {
 218.103 +            if (e instanceof MouseEvent && !(e instanceof MouseWheelEvent)) {
 218.104 +                handleJavaMouseEvent((MouseEvent) e);
 218.105 +            } else if (e instanceof KeyEvent) {
 218.106 +                if (handleJavaKeyEvent((KeyEvent)e)) {
 218.107 +                    return;
 218.108 +                }
 218.109              }
 218.110          }
 218.111  
 218.112 @@ -318,6 +345,9 @@
 218.113                      paintArea.paint(target,shouldClearRectBeforePaint());
 218.114                  }
 218.115                  return;
 218.116 +            case FocusEvent.FOCUS_LOST:
 218.117 +            case FocusEvent.FOCUS_GAINED:
 218.118 +                handleJavaFocusEvent((FocusEvent)e);
 218.119              default:
 218.120              break;
 218.121          }
 218.122 @@ -326,6 +356,13 @@
 218.123          nativeHandleEvent(e);
 218.124      }
 218.125  
 218.126 +    void handleJavaFocusEvent(FocusEvent fe) {
 218.127 +        if (focusLog.isLoggable(Level.FINER)) focusLog.finer(fe.toString());
 218.128 +        setFocus(fe.getID() == FocusEvent.FOCUS_GAINED);
 218.129 +    }
 218.130 +
 218.131 +    native void setFocus(boolean doSetFocus);
 218.132 +
 218.133      public Dimension getMinimumSize() {
 218.134          return ((Component)target).getSize();
 218.135      }
 218.136 @@ -451,15 +488,8 @@
 218.137          }
 218.138      }
 218.139  
 218.140 -    /**
 218.141 -     * From the DisplayChangedListener interface.
 218.142 -     *
 218.143 -     * Called after a change in the display mode.  This event
 218.144 -     * triggers replacing the surfaceData object (since that object
 218.145 -     * reflects the current display depth information, which has
 218.146 -     * just changed).
 218.147 -     */
 218.148 -    public void displayChanged() {
 218.149 +    public void updateGraphicsData(GraphicsConfiguration gc) {
 218.150 +        winGraphicsConfig = (Win32GraphicsConfig)gc;
 218.151          try {
 218.152              replaceSurfaceData();
 218.153          } catch (InvalidPipeException e) {
 218.154 @@ -467,13 +497,6 @@
 218.155          }
 218.156      }
 218.157  
 218.158 -    /**
 218.159 -     * Part of the DisplayChangedListener interface: components
 218.160 -     * do not need to react to this event
 218.161 -     */
 218.162 -    public void paletteChanged() {
 218.163 -    }
 218.164 -
 218.165      //This will return null for Components not yet added to a Container
 218.166      public ColorModel getColorModel() {
 218.167          GraphicsConfiguration gc = getGraphicsConfiguration();
 218.168 @@ -585,22 +608,64 @@
 218.169          WGlobalCursorManager.getCursorManager().updateCursorImmediately();
 218.170      }
 218.171  
 218.172 -    native static boolean processSynchronousLightweightTransfer(Component heavyweight, Component descendant,
 218.173 -                                                                boolean temporary, boolean focusedWindowChangeAllowed,
 218.174 -                                                                long time);
 218.175 -    public boolean requestFocus
 218.176 -        (Component lightweightChild, boolean temporary,
 218.177 -         boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause) {
 218.178 -        if (processSynchronousLightweightTransfer((Component)target, lightweightChild, temporary,
 218.179 -                                                                      focusedWindowChangeAllowed, time)) {
 218.180 +    // TODO: consider moving it to KeyboardFocusManagerPeerImpl
 218.181 +    public boolean requestFocus(Component lightweightChild, boolean temporary,
 218.182 +                                boolean focusedWindowChangeAllowed, long time,
 218.183 +                                CausedFocusEvent.Cause cause)
 218.184 +    {
 218.185 +        if (WKeyboardFocusManagerPeer.
 218.186 +            processSynchronousLightweightTransfer((Component)target, lightweightChild, temporary,
 218.187 +                                                  focusedWindowChangeAllowed, time))
 218.188 +        {
 218.189              return true;
 218.190 -        } else {
 218.191 -            return _requestFocus(lightweightChild, temporary, focusedWindowChangeAllowed, time, cause);
 218.192          }
 218.193 +
 218.194 +        int result = WKeyboardFocusManagerPeer
 218.195 +            .shouldNativelyFocusHeavyweight((Component)target, lightweightChild,
 218.196 +                                            temporary, focusedWindowChangeAllowed,
 218.197 +                                            time, cause);
 218.198 +
 218.199 +        switch (result) {
 218.200 +          case WKeyboardFocusManagerPeer.SNFH_FAILURE:
 218.201 +              return false;
 218.202 +          case WKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED:
 218.203 +              if (focusLog.isLoggable(Level.FINER)) {
 218.204 +                  focusLog.finer("Proceeding with request to " + lightweightChild + " in " + target);
 218.205 +              }
 218.206 +              Window parentWindow = SunToolkit.getContainingWindow((Component)target);
 218.207 +              if (parentWindow == null) {
 218.208 +                  return rejectFocusRequestHelper("WARNING: Parent window is null");
 218.209 +              }
 218.210 +              WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
 218.211 +              if (wpeer == null) {
 218.212 +                  return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
 218.213 +              }
 218.214 +              boolean res = wpeer.requestWindowFocus(cause);
 218.215 +
 218.216 +              if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Requested window focus: " + res);
 218.217 +              // If parent window can be made focused and has been made focused(synchronously)
 218.218 +              // then we can proceed with children, otherwise we retreat.
 218.219 +              if (!(res && parentWindow.isFocused())) {
 218.220 +                  return rejectFocusRequestHelper("Waiting for asynchronous processing of the request");
 218.221 +              }
 218.222 +              return WKeyboardFocusManagerPeer.deliverFocus(lightweightChild,
 218.223 +                                                            (Component)target,
 218.224 +                                                            temporary,
 218.225 +                                                            focusedWindowChangeAllowed,
 218.226 +                                                            time, cause);
 218.227 +
 218.228 +          case WKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED:
 218.229 +              // Either lightweight or excessive request - all events are generated.
 218.230 +              return true;
 218.231 +        }
 218.232 +        return false;
 218.233      }
 218.234 -    public native boolean _requestFocus
 218.235 -        (Component lightweightChild, boolean temporary,
 218.236 -         boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause);
 218.237 +
 218.238 +    private boolean rejectFocusRequestHelper(String logMsg) {
 218.239 +        if (focusLog.isLoggable(Level.FINER)) focusLog.finer(logMsg);
 218.240 +        WKeyboardFocusManagerPeer.removeLastFocusRequest((Component)target);
 218.241 +        return false;
 218.242 +    }
 218.243  
 218.244      public Image createImage(ImageProducer producer) {
 218.245          return new ToolkitImage(producer);
 218.246 @@ -713,7 +778,7 @@
 218.247       * NOTE: This is called on the privileged toolkit thread. Do not
 218.248       *       call directly into user code using this thread!
 218.249       */
 218.250 -    void handlePaint(int x, int y, int w, int h) {
 218.251 +    public void handlePaint(int x, int y, int w, int h) {
 218.252          postPaintIfNecessary(x, y, w, h);
 218.253      }
 218.254  
 218.255 @@ -731,9 +796,12 @@
 218.256       * Post an event. Queue it for execution by the callback thread.
 218.257       */
 218.258      void postEvent(AWTEvent event) {
 218.259 +        preprocessPostEvent(event);
 218.260          WToolkit.postEvent(WToolkit.targetToAppContext(target), event);
 218.261      }
 218.262  
 218.263 +    void preprocessPostEvent(AWTEvent event) {}
 218.264 +
 218.265      // Routines to support deferred window positioning.
 218.266      public void beginLayout() {
 218.267          // Skip all painting till endLayout
 218.268 @@ -895,9 +963,29 @@
 218.269      public void setBoundsOperation(int operation) {
 218.270      }
 218.271  
 218.272 +    /**
 218.273 +     * Returns whether this component is capable of being hw accelerated.
 218.274 +     * More specifically, whether rendering to this component or a
 218.275 +     * BufferStrategy's back-buffer for this component can be hw accelerated.
 218.276 +     *
 218.277 +     * Conditions which could prevent hw acceleration include the toplevel
 218.278 +     * window containing this component being
 218.279 +     * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}.
 218.280 +     *
 218.281 +     * @return {@code true} if this component is capable of being hw
 218.282 +     * accelerated, {@code false} otherwise
 218.283 +     * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT
 218.284 +     */
 218.285 +    public boolean isAccelCapable() {
 218.286 +        boolean isTranslucent =
 218.287 +            SunToolkit.isContainingTopLevelTranslucent((Component)target);
 218.288 +        // D3D/OGL and translucent windows interacted poorly in Windows XP;
 218.289 +        // these problems are no longer present in Vista
 218.290 +        return !isTranslucent || Win32GraphicsEnvironment.isVistaOS();
 218.291 +    }
 218.292  
 218.293      native void setRectangularShape(int lox, int loy, int hix, int hiy,
 218.294 -                     sun.java2d.pipe.Region region);
 218.295 +                     Region region);
 218.296  
 218.297  
 218.298      // REMIND: Temp workaround for issues with using HW acceleration
 218.299 @@ -915,41 +1003,10 @@
 218.300      }
 218.301  
 218.302      /**
 218.303 -     * Returns whether this component is capable of being hw accelerated.
 218.304 -     * More specifically, whether rendering to this component or a
 218.305 -     * BufferStrategy's back-buffer for this component can be hw accelerated.
 218.306 -     *
 218.307 -     * Conditions which could prevent hw acceleration include the toplevel
 218.308 -     * window containing this component being
 218.309 -     * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}.
 218.310 -     *
 218.311 -     * @return {@code true} if this component is capable of being hw
 218.312 -     * accelerated, {@code false} otherwise
 218.313 -     * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT
 218.314 -     */
 218.315 -    public boolean isAccelCapable() {
 218.316 -        // REMIND: Temp workaround for issues with using HW acceleration
 218.317 -        // in the browser on Vista when DWM is enabled
 218.318 -        if (!isContainingTopLevelAccelCapable((Component)target)) {
 218.319 -            return false;
 218.320 -        }
 218.321 -
 218.322 -        // REMIND: translucent windows support-related
 218.323 -/*
 218.324 -        boolean isTranslucent =
 218.325 -            SunToolkit.isContainingTopLevelTranslucent((Component)target);
 218.326 -        // D3D/OGL and translucent windows interacted poorly in Windows XP;
 218.327 -        // these problems are no longer present in Vista
 218.328 -        return !isTranslucent || Win32GraphicsEnvironment.isVistaOS();
 218.329 -*/
 218.330 -        return true;
 218.331 -    }
 218.332 -
 218.333 -    /**
 218.334       * Applies the shape to the native component window.
 218.335       * @since 1.7
 218.336       */
 218.337 -    public void applyShape(sun.java2d.pipe.Region shape) {
 218.338 +    public void applyShape(Region shape) {
 218.339          if (shapeLog.isLoggable(Level.FINER)) {
 218.340              shapeLog.finer(
 218.341                      "*** INFO: Setting shape: PEER: " + this
 218.342 @@ -965,4 +1022,15 @@
 218.343          }
 218.344      }
 218.345  
 218.346 +    /**
 218.347 +     * Lowers this component at the bottom of the above component. If the above parameter
 218.348 +     * is null then the method places this component at the top of the Z-order.
 218.349 +     */
 218.350 +    public void setZOrder(ComponentPeer above) {
 218.351 +        long aboveHWND = (above != null) ? ((WComponentPeer)above).getHWnd() : 0;
 218.352 +
 218.353 +        setZOrder(aboveHWND);
 218.354 +    }
 218.355 +
 218.356 +    private native void setZOrder(long above);
 218.357  }
   219.1 --- a/src/windows/classes/sun/awt/windows/WFileDialogPeer.java	Thu Apr 16 17:42:00 2009 +0100
   219.2 +++ b/src/windows/classes/sun/awt/windows/WFileDialogPeer.java	Thu Apr 16 19:10:32 2009 -0700
   219.3 @@ -1,5 +1,5 @@
   219.4  /*
   219.5 - * Copyright 1996-2007 Sun Microsystems, Inc.  All Rights Reserved.
   219.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   219.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   219.8   *
   219.9   * This code is free software; you can redistribute it and/or modify it
  219.10 @@ -225,23 +225,16 @@
  219.11      public void addDropTarget(DropTarget dt) {}
  219.12      public void removeDropTarget(DropTarget dt) {}
  219.13      public void updateFocusableWindowState() {}
  219.14 +    public void setZOrder(ComponentPeer above) {}
  219.15  
  219.16      /**
  219.17       * Initialize JNI field and method ids
  219.18       */
  219.19      private static native void initIDs();
  219.20  
  219.21 -    /**
  219.22 -     * WFileDialogPeer doesn't have native pData so we don't do restack on it
  219.23 -     * @see java.awt.peer.ContainerPeer#restack
  219.24 -     */
  219.25 -    public void restack() {
  219.26 -    }
  219.27 -
  219.28 -    /**
  219.29 -     * @see java.awt.peer.ContainerPeer#isRestackSupported
  219.30 -     */
  219.31 -    public boolean isRestackSupported() {
  219.32 -        return false;
  219.33 -    }
  219.34 +    // The effects are not supported for system dialogs.
  219.35 +    public void applyShape(sun.java2d.pipe.Region shape) {}
  219.36 +    public void setOpacity(float opacity) {}
  219.37 +    public void setOpaque(boolean isOpaque) {}
  219.38 +    public void updateWindow(java.awt.image.BufferedImage backBuffer) {}
  219.39  }
   220.1 --- a/src/windows/classes/sun/awt/windows/WFramePeer.java	Thu Apr 16 17:42:00 2009 +0100
   220.2 +++ b/src/windows/classes/sun/awt/windows/WFramePeer.java	Thu Apr 16 19:10:32 2009 -0700
   220.3 @@ -25,27 +25,46 @@
   220.4  package sun.awt.windows;
   220.5  
   220.6  import java.util.Vector;
   220.7 +
   220.8  import java.awt.*;
   220.9  import java.awt.peer.*;
  220.10  import java.awt.image.ImageObserver;
  220.11 -import sun.awt.image.ImageRepresentation;
  220.12 -import sun.awt.image.IntegerComponentRaster;
  220.13 -import sun.awt.image.ToolkitImage;
  220.14 +
  220.15  import java.awt.image.Raster;
  220.16  import java.awt.image.DataBuffer;
  220.17  import java.awt.image.DataBufferInt;
  220.18  import java.awt.image.BufferedImage;
  220.19 +
  220.20 +import java.awt.image.ColorModel;
  220.21 +
  220.22 +import sun.awt.image.ImageRepresentation;
  220.23 +import sun.awt.image.IntegerComponentRaster;
  220.24 +import sun.awt.image.ToolkitImage;
  220.25  import sun.awt.im.*;
  220.26  import sun.awt.Win32GraphicsDevice;
  220.27 -import java.awt.image.ColorModel;
  220.28 -
  220.29 +import sun.awt.AWTAccessor;
  220.30  
  220.31  class WFramePeer extends WWindowPeer implements FramePeer {
  220.32  
  220.33 +    static {
  220.34 +        initIDs();
  220.35 +    }
  220.36 +
  220.37 +    // initialize JNI field and method IDs
  220.38 +    private static native void initIDs();
  220.39 +
  220.40      // FramePeer implementation
  220.41      public native void setState(int state);
  220.42      public native int getState();
  220.43  
  220.44 +    // sync target and peer
  220.45 +    public void setExtendedState(int state) {
  220.46 +        AWTAccessor.getFrameAccessor().setExtendedState((Frame)target, state);
  220.47 +    }
  220.48 +    public int getExtendedState() {
  220.49 +        return AWTAccessor.getFrameAccessor().getExtendedState((Frame)target);
  220.50 +    }
  220.51 +
  220.52      // Convenience methods to save us from trouble of extracting
  220.53      // Rectangle fields in native code.
  220.54      private native void setMaximizedBounds(int x, int y, int w, int h);
   221.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   221.2 +++ b/src/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java	Thu Apr 16 19:10:32 2009 -0700
   221.3 @@ -0,0 +1,75 @@
   221.4 +/*
   221.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   221.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   221.7 + *
   221.8 + * This code is free software; you can redistribute it and/or modify it
   221.9 + * under the terms of the GNU General Public License version 2 only, as
  221.10 + * published by the Free Software Foundation.  Sun designates this
  221.11 + * particular file as subject to the "Classpath" exception as provided
  221.12 + * by Sun in the LICENSE file that accompanied this code.
  221.13 + *
  221.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  221.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  221.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  221.17 + * version 2 for more details (a copy is included in the LICENSE file that
  221.18 + * accompanied this code).
  221.19 + *
  221.20 + * You should have received a copy of the GNU General Public License version
  221.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  221.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  221.23 + *
  221.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  221.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  221.26 + * have any questions.
  221.27 + */
  221.28 +
  221.29 +package sun.awt.windows;
  221.30 +
  221.31 +import java.awt.KeyboardFocusManager;
  221.32 +import java.awt.Window;
  221.33 +import java.awt.Component;
  221.34 +import java.awt.peer.ComponentPeer;
  221.35 +import sun.awt.KeyboardFocusManagerPeerImpl;
  221.36 +import sun.awt.CausedFocusEvent;
  221.37 +
  221.38 +class WKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
  221.39 +    static native void setNativeFocusOwner(ComponentPeer peer);
  221.40 +    static native Component getNativeFocusOwner();
  221.41 +    static native Window getNativeFocusedWindow();
  221.42 +
  221.43 +    WKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
  221.44 +        super(manager);
  221.45 +    }
  221.46 +
  221.47 +    @Override
  221.48 +    public void setCurrentFocusOwner(Component comp) {
  221.49 +        setNativeFocusOwner(comp != null ? comp.getPeer() : null);
  221.50 +    }
  221.51 +
  221.52 +    @Override
  221.53 +    public Component getCurrentFocusOwner() {
  221.54 +        return getNativeFocusOwner();
  221.55 +    }
  221.56 +
  221.57 +    @Override
  221.58 +    public Window getCurrentFocusedWindow() {
  221.59 +        return getNativeFocusedWindow();
  221.60 +    }
  221.61 +
  221.62 +    public static boolean deliverFocus(Component lightweightChild,
  221.63 +                                       Component target,
  221.64 +                                       boolean temporary,
  221.65 +                                       boolean focusedWindowChangeAllowed,
  221.66 +                                       long time,
  221.67 +                                       CausedFocusEvent.Cause cause)
  221.68 +    {
  221.69 +        // TODO: do something to eliminate this forwarding
  221.70 +        return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild,
  221.71 +                                                         target,
  221.72 +                                                         temporary,
  221.73 +                                                         focusedWindowChangeAllowed,
  221.74 +                                                         time,
  221.75 +                                                         cause,
  221.76 +                                                         getNativeFocusOwner());
  221.77 +    }
  221.78 +}
   222.1 --- a/src/windows/classes/sun/awt/windows/WPanelPeer.java	Thu Apr 16 17:42:00 2009 +0100
   222.2 +++ b/src/windows/classes/sun/awt/windows/WPanelPeer.java	Thu Apr 16 19:10:32 2009 -0700
   222.3 @@ -100,34 +100,6 @@
   222.4          return getInsets();
   222.5      }
   222.6  
   222.7 -    /*
   222.8 -     * From the DisplayChangedListener interface. Often is
   222.9 -     * up-called from a WWindowPeer instance.
  222.10 -     */
  222.11 -    public void displayChanged() {
  222.12 -        super.displayChanged();
  222.13 -        displayChanged((Container)target);
  222.14 -    }
  222.15 -
  222.16 -    /*
  222.17 -     * Recursively iterates through all the HW and LW children
  222.18 -     * of the container and calls displayChanged() for HW peers.
  222.19 -     * Iteration through children peers only is not enough as the
  222.20 -     * displayChanged notification may not be propagated to HW
  222.21 -     * components inside LW containers, see 4452373 for details.
  222.22 -     */
  222.23 -    private static void displayChanged(Container target) {
  222.24 -        Component children[] = ((Container)target).getComponents();
  222.25 -        for (Component child : children) {
  222.26 -            ComponentPeer cpeer = child.getPeer();
  222.27 -            if (cpeer instanceof WComponentPeer) {
  222.28 -                ((WComponentPeer)cpeer).displayChanged();
  222.29 -            } else if (child instanceof Container) {
  222.30 -                displayChanged((Container)child);
  222.31 -            }
  222.32 -        }
  222.33 -    }
  222.34 -
  222.35      private native void pRestack(Object[] peers);
  222.36      private void restack(Container cont, Vector peers) {
  222.37          for (int i = 0; i < cont.getComponentCount(); i++) {
   223.1 --- a/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Thu Apr 16 17:42:00 2009 +0100
   223.2 +++ b/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Thu Apr 16 19:10:32 2009 -0700
   223.3 @@ -1,5 +1,5 @@
   223.4  /*
   223.5 - * Copyright 1999-2007 Sun Microsystems, Inc.  All Rights Reserved.
   223.6 + * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
   223.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   223.8   *
   223.9   * This code is free software; you can redistribute it and/or modify it
  223.10 @@ -27,6 +27,7 @@
  223.11  
  223.12  import java.awt.*;
  223.13  import java.awt.peer.DialogPeer;
  223.14 +import java.awt.peer.ComponentPeer;
  223.15  import java.awt.dnd.DropTarget;
  223.16  import java.util.Vector;
  223.17  import sun.awt.AppContext;
  223.18 @@ -137,23 +138,16 @@
  223.19      void invalidate(int x, int y, int width, int height) {}
  223.20      public void addDropTarget(DropTarget dt) {}
  223.21      public void removeDropTarget(DropTarget dt) {}
  223.22 +    public void setZOrder(ComponentPeer above) {}
  223.23  
  223.24      /**
  223.25       * Initialize JNI field and method ids
  223.26       */
  223.27      private static native void initIDs();
  223.28  
  223.29 -    /**
  223.30 -     * WPrintDialogPeer doesn't have native pData so we don't do restack on it
  223.31 -     * @see java.awt.peer.ContainerPeer#restack
  223.32 -     */
  223.33 -    public void restack() {
  223.34 -    }
  223.35 -
  223.36 -    /**
  223.37 -     * @see java.awt.peer.ContainerPeer#isRestackSupported
  223.38 -     */
  223.39 -    public boolean isRestackSupported() {
  223.40 -        return false;
  223.41 -    }
  223.42 +    // The effects are not supported for system dialogs.
  223.43 +    public void applyShape(sun.java2d.pipe.Region shape) {}
  223.44 +    public void setOpacity(float opacity) {}
  223.45 +    public void setOpaque(boolean isOpaque) {}
  223.46 +    public void updateWindow(java.awt.image.BufferedImage backBuffer) {}
  223.47  }
   224.1 --- a/src/windows/classes/sun/awt/windows/WScrollPanePeer.java	Thu Apr 16 17:42:00 2009 +0100
   224.2 +++ b/src/windows/classes/sun/awt/windows/WScrollPanePeer.java	Thu Apr 16 19:10:32 2009 -0700
   224.3 @@ -269,10 +269,4 @@
   224.4          }
   224.5      }
   224.6  
   224.7 -    /**
   224.8 -     * @see java.awt.peer.ContainerPeer#restack
   224.9 -     */
  224.10 -    public void restack() {
  224.11 -        // Since ScrollPane can only have one child its restacking does nothing.
  224.12 -    }
  224.13  }
   225.1 --- a/src/windows/classes/sun/awt/windows/WToolkit.java	Thu Apr 16 17:42:00 2009 +0100
   225.2 +++ b/src/windows/classes/sun/awt/windows/WToolkit.java	Thu Apr 16 19:10:32 2009 -0700
   225.3 @@ -1,5 +1,5 @@
   225.4  /*
   225.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   225.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   225.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   225.8   *
   225.9   * This code is free software; you can redistribute it and/or modify it
  225.10 @@ -494,6 +494,12 @@
  225.11          return true;
  225.12      }
  225.13  
  225.14 +    public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager)
  225.15 +      throws HeadlessException
  225.16 +    {
  225.17 +        return new WKeyboardFocusManagerPeer(manager);
  225.18 +    }
  225.19 +
  225.20      protected native void setDynamicLayoutNative(boolean b);
  225.21  
  225.22      public void setDynamicLayout(boolean b) {
  225.23 @@ -975,4 +981,34 @@
  225.24      public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
  225.25          return areExtraMouseButtonsEnabled;
  225.26      }
  225.27 +
  225.28 +    @Override
  225.29 +    public boolean isWindowOpacitySupported() {
  225.30 +        // supported in Win2K and later
  225.31 +        return true;
  225.32 +    }
  225.33 +
  225.34 +    @Override
  225.35 +    public boolean isWindowShapingSupported() {
  225.36 +        return true;
  225.37 +    }
  225.38 +
  225.39 +    @Override
  225.40 +    public boolean isWindowTranslucencySupported() {
  225.41 +        // supported in Win2K and later
  225.42 +        return true;
  225.43 +    }
  225.44 +
  225.45 +    @Override
  225.46 +    public boolean isTranslucencyCapable(GraphicsConfiguration gc) {
  225.47 +        //XXX: worth checking if 8-bit? Anyway, it doesn't hurt.
  225.48 +        return true;
  225.49 +    }
  225.50 +
  225.51 +    // On MS Windows one must use the peer.updateWindow() to implement
  225.52 +    // non-opaque windows.
  225.53 +    @Override
  225.54 +    public boolean needUpdateWindow() {
  225.55 +        return true;
  225.56 +    }
  225.57  }
   226.1 --- a/src/windows/classes/sun/awt/windows/WWindowPeer.java	Thu Apr 16 17:42:00 2009 +0100
   226.2 +++ b/src/windows/classes/sun/awt/windows/WWindowPeer.java	Thu Apr 16 19:10:32 2009 -0700
   226.3 @@ -1,5 +1,5 @@
   226.4  /*
   226.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   226.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   226.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   226.8   *
   226.9   * This code is free software; you can redistribute it and/or modify it
  226.10 @@ -31,19 +31,19 @@
  226.11  
  226.12  import java.beans.*;
  226.13  
  226.14 -import java.lang.ref.*;
  226.15  import java.lang.reflect.*;
  226.16  
  226.17 -import java.security.*;
  226.18 -
  226.19  import java.util.*;
  226.20  import java.util.List;
  226.21  import java.util.logging.*;
  226.22  
  226.23  import sun.awt.*;
  226.24 -import sun.awt.image.*;
  226.25  
  226.26 -public class WWindowPeer extends WPanelPeer implements WindowPeer {
  226.27 +import sun.java2d.pipe.Region;
  226.28 +
  226.29 +public class WWindowPeer extends WPanelPeer implements WindowPeer,
  226.30 +       DisplayChangedListener
  226.31 +{
  226.32  
  226.33      private static final Logger log = Logger.getLogger("sun.awt.windows.WWindowPeer");
  226.34      private static final Logger screenLog = Logger.getLogger("sun.awt.windows.screen.WWindowPeer");
  226.35 @@ -52,6 +52,10 @@
  226.36      // extends WWindowPeer, not WDialogPeer
  226.37      private WWindowPeer modalBlocker = null;
  226.38  
  226.39 +    private boolean isOpaque;
  226.40 +
  226.41 +    private volatile TranslucentWindowPainter painter;
  226.42 +
  226.43      /*
  226.44       * A key used for storing a list of active windows in AppContext. The value
  226.45       * is a list of windows, sorted by the time of activation: later a window is
  226.46 @@ -73,6 +77,12 @@
  226.47      private final static PropertyChangeListener guiDisposedListener =
  226.48          new GuiDisposedListener();
  226.49  
  226.50 +    /*
  226.51 +     * Called (on the Toolkit thread) before the appropriate
  226.52 +     * WindowStateEvent is posted to the EventQueue.
  226.53 +     */
  226.54 +    private WindowListener windowListener;
  226.55 +
  226.56      /**
  226.57       * Initialize JNI field IDs
  226.58       */
  226.59 @@ -91,9 +101,18 @@
  226.60                  l.remove(this);
  226.61              }
  226.62          }
  226.63 +
  226.64          // Remove ourself from the Map of DisplayChangeListeners
  226.65          GraphicsConfiguration gc = getGraphicsConfiguration();
  226.66          ((Win32GraphicsDevice)gc.getDevice()).removeDisplayChangedListener(this);
  226.67 +
  226.68 +        TranslucentWindowPainter currentPainter = painter;
  226.69 +        if (currentPainter != null) {
  226.70 +            currentPainter.flush();
  226.71 +            // don't set the current one to null here; reduces the chances of
  226.72 +            // MT issues (like NPEs)
  226.73 +        }
  226.74 +
  226.75          super.disposeImpl();
  226.76      }
  226.77  
  226.78 @@ -158,6 +177,10 @@
  226.79          initActiveWindowsTracking((Window)target);
  226.80  
  226.81          updateIconImages();
  226.82 +
  226.83 +        updateShape();
  226.84 +        updateOpacity();
  226.85 +        updateOpaque();
  226.86      }
  226.87  
  226.88      native void createAwtWindow(WComponentPeer parent);
  226.89 @@ -183,7 +206,6 @@
  226.90          // super.displayChanged() in WWindowPeer.displayChanged() regardless of whether
  226.91          // GraphicsDevice was really changed, or not. So we need to track it here.
  226.92          updateGC();
  226.93 -        resetTargetGC();
  226.94  
  226.95          realShow();
  226.96          updateMinimumSize();
  226.97 @@ -191,6 +213,8 @@
  226.98          if (((Window)target).isAlwaysOnTopSupported() && alwaysOnTop) {
  226.99              setAlwaysOnTop(alwaysOnTop);
 226.100          }
 226.101 +
 226.102 +        updateWindow(null);
 226.103      }
 226.104  
 226.105      // Synchronize the insets members (here & in helper) with actual window
 226.106 @@ -214,25 +238,62 @@
 226.107                                    int[] smallIconRaster, int smw, int smh);
 226.108  
 226.109      synchronized native void reshapeFrame(int x, int y, int width, int height);
 226.110 -    public boolean requestWindowFocus() {
 226.111 -        // Win32 window doesn't need this
 226.112 -        return false;
 226.113 +
 226.114 +    public boolean requestWindowFocus(CausedFocusEvent.Cause cause) {
 226.115 +        if (!focusAllowedFor()) {
 226.116 +            return false;
 226.117 +        }
 226.118 +        return requestWindowFocus(cause == CausedFocusEvent.Cause.MOUSE_EVENT);
 226.119      }
 226.120 +    public native boolean requestWindowFocus(boolean isMouseEventCause);
 226.121  
 226.122      public boolean focusAllowedFor() {
 226.123 -        Window target = (Window)this.target;
 226.124 -        if (!target.isVisible() ||
 226.125 -            !target.isEnabled() ||
 226.126 -            !target.isFocusable())
 226.127 +        Window window = (Window)this.target;
 226.128 +        if (!window.isVisible() ||
 226.129 +            !window.isEnabled() ||
 226.130 +            !window.isFocusableWindow())
 226.131          {
 226.132              return false;
 226.133          }
 226.134 -
 226.135          if (isModalBlocked()) {
 226.136              return false;
 226.137          }
 226.138 +        return true;
 226.139 +    }
 226.140  
 226.141 -        return true;
 226.142 +    public void hide() {
 226.143 +        WindowListener listener = windowListener;
 226.144 +        if (listener != null) {
 226.145 +            // We're not getting WINDOW_CLOSING from the native code when hiding
 226.146 +            // the window programmatically. So, create it and notify the listener.
 226.147 +            listener.windowClosing(new WindowEvent((Window)target, WindowEvent.WINDOW_CLOSING));
 226.148 +        }
 226.149 +        super.hide();
 226.150 +    }
 226.151 +
 226.152 +    // WARNING: it's called on the Toolkit thread!
 226.153 +    void preprocessPostEvent(AWTEvent event) {
 226.154 +        if (event instanceof WindowEvent) {
 226.155 +            WindowListener listener = windowListener;
 226.156 +            if (listener != null) {
 226.157 +                switch(event.getID()) {
 226.158 +                    case WindowEvent.WINDOW_CLOSING:
 226.159 +                        listener.windowClosing((WindowEvent)event);
 226.160 +                        break;
 226.161 +                    case WindowEvent.WINDOW_ICONIFIED:
 226.162 +                        listener.windowIconified((WindowEvent)event);
 226.163 +                        break;
 226.164 +                }
 226.165 +            }
 226.166 +        }
 226.167 +    }
 226.168 +
 226.169 +    synchronized void addWindowListener(WindowListener l) {
 226.170 +        windowListener = AWTEventMulticaster.add(windowListener, l);
 226.171 +    }
 226.172 +
 226.173 +    synchronized void removeWindowListener(WindowListener l) {
 226.174 +        windowListener = AWTEventMulticaster.remove(windowListener, l);
 226.175      }
 226.176  
 226.177      public void updateMinimumSize() {
 226.178 @@ -273,6 +334,31 @@
 226.179          }
 226.180      }
 226.181  
 226.182 +    private void updateShape() {
 226.183 +        // Shape shape = ((Window)target).getShape();
 226.184 +        Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
 226.185 +        if (shape != null) {
 226.186 +            applyShape(Region.getInstance(shape, null));
 226.187 +        }
 226.188 +    }
 226.189 +
 226.190 +    private void updateOpacity() {
 226.191 +        // float opacity = ((Window)target).getOpacity();
 226.192 +        float opacity = AWTAccessor.getWindowAccessor().getOpacity((Window)target);
 226.193 +        if (opacity < 1.0f) {
 226.194 +            setOpacity(opacity);
 226.195 +        }
 226.196 +    }
 226.197 +
 226.198 +    private void updateOpaque() {
 226.199 +        this.isOpaque = true;
 226.200 +        // boolean opaque = ((Window)target).isOpaque();
 226.201 +        boolean opaque = AWTAccessor.getWindowAccessor().isOpaque((Window)target);
 226.202 +        if (!opaque) {
 226.203 +            setOpaque(opaque);
 226.204 +        }
 226.205 +    }
 226.206 +
 226.207      native void setMinSize(int width, int height);
 226.208  
 226.209  /*
 226.210 @@ -358,14 +444,6 @@
 226.211          });
 226.212      }
 226.213  
 226.214 -
 226.215 -    /*
 226.216 -     * Called from WCanvasPeer.displayChanged().
 226.217 -     * Override to do nothing - Window and WWindowPeer GC must never be set to
 226.218 -     * null!
 226.219 -     */
 226.220 -    void clearLocalGC() {}
 226.221 -
 226.222      public void updateGC() {
 226.223          int scrn = getScreenImOn();
 226.224          if (screenLog.isLoggable(Level.FINER)) {
 226.225 @@ -404,18 +482,36 @@
 226.226              oldDev.removeDisplayChangedListener(this);
 226.227              newDev.addDisplayChangedListener(this);
 226.228          }
 226.229 +
 226.230 +        SunToolkit.executeOnEventHandlerThread((Component)target,
 226.231 +                new Runnable() {
 226.232 +                    public void run() {
 226.233 +                        AWTAccessor.getComponentAccessor().
 226.234 +            setGraphicsConfiguration((Component)target, winGraphicsConfig);
 226.235 +                    }
 226.236 +                });
 226.237      }
 226.238  
 226.239 -    /*
 226.240 -     * From the DisplayChangedListener interface
 226.241 +    /**
 226.242 +     * From the DisplayChangedListener interface.
 226.243       *
 226.244       * This method handles a display change - either when the display settings
 226.245       * are changed, or when the window has been dragged onto a different
 226.246       * display.
 226.247 +     * Called after a change in the display mode.  This event
 226.248 +     * triggers replacing the surfaceData object (since that object
 226.249 +     * reflects the current display depth information, which has
 226.250 +     * just changed).
 226.251       */
 226.252      public void displayChanged() {
 226.253          updateGC();
 226.254 -        super.displayChanged();
 226.255 +    }
 226.256 +
 226.257 +    /**
 226.258 +     * Part of the DisplayChangedListener interface: components
 226.259 +     * do not need to react to this event
 226.260 +     */
 226.261 +    public void paletteChanged() {
 226.262      }
 226.263  
 226.264      private native int getScreenImOn();
 226.265 @@ -451,8 +547,10 @@
 226.266       private volatile int sysH = 0;
 226.267  
 226.268       Rectangle constrainBounds(int x, int y, int width, int height) {
 226.269 +         GraphicsConfiguration gc = this.winGraphicsConfig;
 226.270 +
 226.271           // We don't restrict the setBounds() operation if the code is trusted.
 226.272 -         if (!hasWarningWindow()) {
 226.273 +         if (!hasWarningWindow() || gc == null) {
 226.274               return new Rectangle(x, y, width, height);
 226.275           }
 226.276  
 226.277 @@ -461,24 +559,24 @@
 226.278           int newW = width;
 226.279           int newH = height;
 226.280  
 226.281 -         GraphicsConfiguration gc = ((Window)target).getGraphicsConfiguration();
 226.282           Rectangle sB = gc.getBounds();
 226.283 -         Insets sIn = ((Window)target).getToolkit().getScreenInsets(gc);
 226.284 +         Insets sIn = Toolkit.getDefaultToolkit().getScreenInsets(gc);
 226.285  
 226.286           int screenW = sB.width - sIn.left - sIn.right;
 226.287           int screenH = sB.height - sIn.top - sIn.bottom;
 226.288  
 226.289           // If it's undecorated or is not currently visible
 226.290 -         if (!((Window)target).isVisible() || isTargetUndecorated()) {
 226.291 +         if (!AWTAccessor.getComponentAccessor().isVisible_NoClientCode(
 226.292 +                     (Component)target) || isTargetUndecorated())
 226.293 +         {
 226.294               // Now check each point is within the visible part of the screen
 226.295               int screenX = sB.x + sIn.left;
 226.296               int screenY = sB.y + sIn.top;
 226.297  
 226.298 -             // First make sure the size is withing the visible part of the screen
 226.299 +             // First make sure the size is within the visible part of the screen
 226.300               if (newW > screenW) {
 226.301                   newW = screenW;
 226.302               }
 226.303 -
 226.304               if (newH > screenH) {
 226.305                   newH = screenH;
 226.306               }
 226.307 @@ -489,7 +587,6 @@
 226.308               } else if (newX + newW > screenX + screenW) {
 226.309                   newX = screenX + screenW - newW;
 226.310               }
 226.311 -
 226.312               if (newY < screenY) {
 226.313                   newY = screenY;
 226.314               } else if (newY + newH > screenY + screenH) {
 226.315 @@ -504,7 +601,6 @@
 226.316               if (newW > maxW) {
 226.317                   newW = maxW;
 226.318               }
 226.319 -
 226.320               if (newH > maxH) {
 226.321                   newH = maxH;
 226.322               }
 226.323 @@ -513,6 +609,8 @@
 226.324           return new Rectangle(newX, newY, newW, newH);
 226.325       }
 226.326  
 226.327 +     public native void repositionSecurityWarning();
 226.328 +
 226.329       @Override
 226.330       public void setBounds(int x, int y, int width, int height, int op) {
 226.331           Rectangle newBounds = constrainBounds(x, y, width, height);
 226.332 @@ -525,6 +623,135 @@
 226.333           super.setBounds(newBounds.x, newBounds.y, newBounds.width, newBounds.height, op);
 226.334       }
 226.335  
 226.336 +    @Override
 226.337 +    public void print(Graphics g) {
 226.338 +        // We assume we print the whole frame,
 226.339 +        // so we expect no clip was set previously
 226.340 +        Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
 226.341 +        if (shape != null) {
 226.342 +            g.setClip(shape);
 226.343 +        }
 226.344 +        super.print(g);
 226.345 +    }
 226.346 +
 226.347 +    private void replaceSurfaceDataRecursively(Component c) {
 226.348 +        if (c instanceof Container) {
 226.349 +            for (Component child : ((Container)c).getComponents()) {
 226.350 +                replaceSurfaceDataRecursively(child);
 226.351 +            }
 226.352 +        }
 226.353 +        ComponentPeer cp = c.getPeer();
 226.354 +        if (cp instanceof WComponentPeer) {
 226.355 +            ((WComponentPeer)cp).replaceSurfaceDataLater();
 226.356 +        }
 226.357 +    }
 226.358 +
 226.359 +    private native void setOpacity(int iOpacity);
 226.360 +
 226.361 +    public void setOpacity(float opacity) {
 226.362 +        if (!((SunToolkit)((Window)target).getToolkit()).
 226.363 +            isWindowOpacitySupported())
 226.364 +        {
 226.365 +            return;
 226.366 +        }
 226.367 +
 226.368 +        replaceSurfaceDataRecursively((Component)getTarget());
 226.369 +
 226.370 +        final int maxOpacity = 0xff;
 226.371 +        int iOpacity = (int)(opacity * maxOpacity);
 226.372 +        if (iOpacity < 0) {
 226.373 +            iOpacity = 0;
 226.374 +        }
 226.375 +        if (iOpacity > maxOpacity) {
 226.376 +            iOpacity = maxOpacity;
 226.377 +        }
 226.378 +
 226.379 +        setOpacity(iOpacity);
 226.380 +        updateWindow(null);
 226.381 +    }
 226.382 +
 226.383 +    private native void setOpaqueImpl(boolean isOpaque);
 226.384 +
 226.385 +    public void setOpaque(boolean isOpaque) {
 226.386 +        Window target = (Window)getTarget();
 226.387 +
 226.388 +        SunToolkit sunToolkit = (SunToolkit)target.getToolkit();
 226.389 +        if (!sunToolkit.isWindowTranslucencySupported() ||
 226.390 +            !sunToolkit.isTranslucencyCapable(target.getGraphicsConfiguration()))
 226.391 +        {
 226.392 +            return;
 226.393 +        }
 226.394 +
 226.395 +        boolean opaqueChanged = this.isOpaque != isOpaque;
 226.396 +        boolean isVistaOS = Win32GraphicsEnvironment.isVistaOS();
 226.397 +
 226.398 +        if (opaqueChanged && !isVistaOS){
 226.399 +            // non-Vista OS: only replace the surface data if the opacity
 226.400 +            // status changed (see WComponentPeer.isAccelCapable() for more)
 226.401 +            replaceSurfaceDataRecursively(target);
 226.402 +        }
 226.403 +
 226.404 +        this.isOpaque = isOpaque;
 226.405 +
 226.406 +        setOpaqueImpl(isOpaque);
 226.407 +
 226.408 +        if (opaqueChanged) {
 226.409 +            if (isOpaque) {
 226.410 +                TranslucentWindowPainter currentPainter = painter;
 226.411 +                if (currentPainter != null) {
 226.412 +                    currentPainter.flush();
 226.413 +                    painter = null;
 226.414 +                }
 226.415 +            } else {
 226.416 +                painter = TranslucentWindowPainter.createInstance(this);
 226.417 +            }
 226.418 +        }
 226.419 +
 226.420 +        if (opaqueChanged && isVistaOS) {
 226.421 +            // On Vista: setting the window non-opaque makes the window look
 226.422 +            // rectangular, though still catching the mouse clicks within
 226.423 +            // its shape only. To restore the correct visual appearance
 226.424 +            // of the window (i.e. w/ the correct shape) we have to reset
 226.425 +            // the shape.
 226.426 +            Shape shape = AWTAccessor.getWindowAccessor().getShape(target);
 226.427 +            if (shape != null) {
 226.428 +                AWTAccessor.getWindowAccessor().setShape(target, shape);
 226.429 +            }
 226.430 +        }
 226.431 +
 226.432 +        updateWindow(null);
 226.433 +    }
 226.434 +
 226.435 +    public native void updateWindowImpl(int[] data, int width, int height);
 226.436 +
 226.437 +    public void updateWindow(BufferedImage backBuffer) {
 226.438 +        if (isOpaque) {
 226.439 +            return;
 226.440 +        }
 226.441 +
 226.442 +        TranslucentWindowPainter currentPainter = painter;
 226.443 +        if (currentPainter != null) {
 226.444 +            currentPainter.updateWindow(backBuffer);
 226.445 +        } else if (log.isLoggable(Level.FINER)) {
 226.446 +            log.log(Level.FINER,
 226.447 +                    "Translucent window painter is null in updateWindow");
 226.448 +        }
 226.449 +    }
 226.450 +
 226.451 +    /**
 226.452 +     * Paints the Applet Warning into the passed Graphics2D. This method is
 226.453 +     * called by the TranslucentWindowPainter before updating the layered
 226.454 +     * window.
 226.455 +     *
 226.456 +     * @param g Graphics context to paint the warning to
 226.457 +     * @param w the width of the area
 226.458 +     * @param h the height of the area
 226.459 +     * @see TranslucentWindowPainter
 226.460 +     */
 226.461 +    public void paintAppletWarning(Graphics2D g, int w, int h) {
 226.462 +        // REMIND: the applet warning needs to be painted here
 226.463 +    }
 226.464 +
 226.465      /*
 226.466       * The method maps the list of the active windows to the window's AppContext,
 226.467       * then the method registers ActiveWindowListener, GuiDisposedListener listeners;
   227.1 --- a/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java	Thu Apr 16 17:42:00 2009 +0100
   227.2 +++ b/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java	Thu Apr 16 19:10:32 2009 -0700
   227.3 @@ -1,5 +1,5 @@
   227.4  /*
   227.5 - * Copyright 2007-2008 Sun Microsystems, Inc.  All Rights Reserved.
   227.6 + * Copyright 2007-2009 Sun Microsystems, Inc.  All Rights Reserved.
   227.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   227.8   *
   227.9   * This code is free software; you can redistribute it and/or modify it
  227.10 @@ -37,6 +37,7 @@
  227.11  import java.util.ArrayList;
  227.12  import java.util.HashMap;
  227.13  import sun.awt.SunToolkit;
  227.14 +import sun.awt.AWTAccessor;
  227.15  import sun.awt.Win32GraphicsConfig;
  227.16  import sun.awt.windows.WComponentPeer;
  227.17  import sun.java2d.InvalidPipeException;
  227.18 @@ -284,14 +285,12 @@
  227.19       * @param peer for which target's the repaint should be issued
  227.20       */
  227.21      private void repaintPeerTarget(WComponentPeer peer) {
  227.22 -        // we don't want to call user code on our priveleged
  227.23 -        // thread, delegate to EDT
  227.24 -        final Component target = (Component)peer.getTarget();
  227.25 -        SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
  227.26 -            public void run() {
  227.27 -                target.repaint();
  227.28 -            }
  227.29 -        });
  227.30 +        Component target = (Component)peer.getTarget();
  227.31 +        Rectangle bounds = AWTAccessor.getComponentAccessor().getBounds(target);
  227.32 +        // the system-level painting operations should call the handlePaint()
  227.33 +        // method of the WComponentPeer class to repaint the component;
  227.34 +        // calling repaint() forces AWT to make call to update()
  227.35 +        peer.handlePaint(0, 0, bounds.width, bounds.height);
  227.36      }
  227.37  
  227.38      /**
   228.1 --- a/src/windows/classes/sun/java2d/opengl/WGLSurfaceData.java	Thu Apr 16 17:42:00 2009 +0100
   228.2 +++ b/src/windows/classes/sun/java2d/opengl/WGLSurfaceData.java	Thu Apr 16 19:10:32 2009 -0700
   228.3 @@ -1,5 +1,5 @@
   228.4  /*
   228.5 - * Copyright 2004-2008 Sun Microsystems, Inc.  All Rights Reserved.
   228.6 + * Copyright 2004-2009 Sun Microsystems, Inc.  All Rights Reserved.
   228.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   228.8   *
   228.9   * This code is free software; you can redistribute it and/or modify it
  228.10 @@ -72,9 +72,8 @@
  228.11          // the OGL pipeline can render directly to the screen and interfere
  228.12          // with layered windows, which is why we don't allow accelerated
  228.13          // surfaces in this case
  228.14 -        if (!peer.isAccelCapable())
  228.15 -        // REMIND: commented until toplevel translucency is implemented
  228.16 -//            || !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
  228.17 +        if (!peer.isAccelCapable() ||
  228.18 +            !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
  228.19          {
  228.20              return null;
  228.21          }
  228.22 @@ -93,9 +92,8 @@
  228.23          // the OGL pipeline can render directly to the screen and interfere
  228.24          // with layered windows, which is why we don't allow accelerated
  228.25          // surfaces in this case
  228.26 -        if (!peer.isAccelCapable())
  228.27 -        // REMIND: commented until toplevel translucency is implemented
  228.28 -//            || !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
  228.29 +        if (!peer.isAccelCapable() ||
  228.30 +            !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
  228.31          {
  228.32              return null;
  228.33          }
   229.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   229.2 +++ b/src/windows/classes/sun/net/NetHooks.java	Thu Apr 16 19:10:32 2009 -0700
   229.3 @@ -0,0 +1,59 @@
   229.4 +/*
   229.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   229.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   229.7 + *
   229.8 + * This code is free software; you can redistribute it and/or modify it
   229.9 + * under the terms of the GNU General Public License version 2 only, as
  229.10 + * published by the Free Software Foundation.  Sun designates this
  229.11 + * particular file as subject to the "Classpath" exception as provided
  229.12 + * by Sun in the LICENSE file that accompanied this code.
  229.13 + *
  229.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  229.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  229.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  229.17 + * version 2 for more details (a copy is included in the LICENSE file that
  229.18 + * accompanied this code).
  229.19 + *
  229.20 + * You should have received a copy of the GNU General Public License version
  229.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  229.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  229.23 + *
  229.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  229.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  229.26 + * have any questions.
  229.27 + */
  229.28 +package sun.net;
  229.29 +
  229.30 +import java.net.InetAddress;
  229.31 +import java.io.FileDescriptor;
  229.32 +import java.io.IOException;
  229.33 +
  229.34 +/**
  229.35 + * Defines static methods to ensure that any installed net hooks are invoked
  229.36 + * prior to binding or connecting TCP sockets.
  229.37 + */
  229.38 +
  229.39 +public final class NetHooks {
  229.40 +
  229.41 +    /**
  229.42 +     * Invoke prior to binding a TCP socket.
  229.43 +     */
  229.44 +    public static void beforeTcpBind(FileDescriptor fdObj,
  229.45 +                                     InetAddress address,
  229.46 +                                     int port)
  229.47 +        throws IOException
  229.48 +    {
  229.49 +        // nothing to do
  229.50 +    }
  229.51 +
  229.52 +    /**
  229.53 +     * Invoke prior to connecting an unbound TCP socket.
  229.54 +     */
  229.55 +    public static void beforeTcpConnect(FileDescriptor fdObj,
  229.56 +                                        InetAddress address,
  229.57 +                                        int port)
  229.58 +        throws IOException
  229.59 +    {
  229.60 +        // nothing to do
  229.61 +    }
  229.62 +}
   230.1 --- a/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java	Thu Apr 16 17:42:00 2009 +0100
   230.2 +++ b/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java	Thu Apr 16 19:10:32 2009 -0700
   230.3 @@ -34,7 +34,6 @@
   230.4  import java.nio.channels.ClosedSelectorException;
   230.5  import java.nio.channels.Pipe;
   230.6  import java.nio.channels.SelectableChannel;
   230.7 -import java.nio.channels.SelectionKey;
   230.8  import java.io.IOException;
   230.9  import java.util.List;
  230.10  import java.util.ArrayList;
  230.11 @@ -72,7 +71,7 @@
  230.12      private int threadsCount = 0;
  230.13  
  230.14      // A list of helper threads for select.
  230.15 -    private final List<Thread> threads = new ArrayList<Thread>();
  230.16 +    private final List<SelectThread> threads = new ArrayList<SelectThread>();
  230.17  
  230.18      //Pipe used as a wakeup object.
  230.19      private final Pipe wakeupPipe;
  230.20 @@ -201,7 +200,7 @@
  230.21                          Thread.currentThread().interrupt();
  230.22                      }
  230.23                  }
  230.24 -                if (thread.index >= threads.size()) { // redundant thread
  230.25 +                if (thread.isZombie()) { // redundant thread
  230.26                      return true; // will cause run() to exit.
  230.27                  } else {
  230.28                      thread.lastRun = runsCounter; // update lastRun
  230.29 @@ -388,9 +387,10 @@
  230.30  
  230.31      // Represents a helper thread used for select.
  230.32      private final class SelectThread extends Thread {
  230.33 -        private int index; // index of this thread
  230.34 -        SubSelector subSelector;
  230.35 +        private final int index; // index of this thread
  230.36 +        final SubSelector subSelector;
  230.37          private long lastRun = 0; // last run number
  230.38 +        private volatile boolean zombie;
  230.39          // Creates a new thread
  230.40          private SelectThread(int i) {
  230.41              this.index = i;
  230.42 @@ -398,6 +398,12 @@
  230.43              //make sure we wait for next round of poll
  230.44              this.lastRun = startLock.runsCounter;
  230.45          }
  230.46 +        void makeZombie() {
  230.47 +            zombie = true;
  230.48 +        }
  230.49 +        boolean isZombie() {
  230.50 +            return zombie;
  230.51 +        }
  230.52          public void run() {
  230.53              while (true) { // poll loop
  230.54                  // wait for the start of poll. If this thread has become
  230.55 @@ -432,7 +438,7 @@
  230.56          } else if (threadsCount < threads.size()) {
  230.57              // Some threads become redundant. Remove them from the threads List.
  230.58              for (int i = threads.size() - 1 ; i >= threadsCount; i--)
  230.59 -                threads.remove(i);
  230.60 +                threads.remove(i).makeZombie();
  230.61          }
  230.62      }
  230.63  
  230.64 @@ -468,10 +474,9 @@
  230.65          updateCount++;
  230.66          int numKeysUpdated = 0;
  230.67          numKeysUpdated += subSelector.processSelectedKeys(updateCount);
  230.68 -        Iterator it = threads.iterator();
  230.69 -        while (it.hasNext())
  230.70 -            numKeysUpdated += ((SelectThread)it.next()).subSelector.
  230.71 -                                             processSelectedKeys(updateCount);
  230.72 +        for (SelectThread t: threads) {
  230.73 +            numKeysUpdated += t.subSelector.processSelectedKeys(updateCount);
  230.74 +        }
  230.75          return numKeysUpdated;
  230.76      }
  230.77  
  230.78 @@ -495,13 +500,13 @@
  230.79                      }
  230.80                      pollWrapper.free();
  230.81                      pollWrapper = null;
  230.82 -                     selectedKeys = null;
  230.83 -                     channelArray = null;
  230.84 -                     threads.clear();
  230.85 -                     // Call startThreads. All remaining helper threads now exit,
  230.86 -                     // since threads.size() = 0;
  230.87 -                     startLock.startThreads();
  230.88 -                 }
  230.89 +                    selectedKeys = null;
  230.90 +                    channelArray = null;
  230.91 +                    // Make all remaining helper threads exit
  230.92 +                    for (SelectThread t: threads)
  230.93 +                         t.makeZombie();
  230.94 +                    startLock.startThreads();
  230.95 +                }
  230.96              }
  230.97          }
  230.98      }
   231.1 --- a/src/windows/native/java/io/WinNTFileSystem_md.c	Thu Apr 16 17:42:00 2009 +0100
   231.2 +++ b/src/windows/native/java/io/WinNTFileSystem_md.c	Thu Apr 16 19:10:32 2009 -0700
   231.3 @@ -309,12 +309,13 @@
   231.4                      /* No template file */
   231.5                      NULL);
   231.6      if (h != INVALID_HANDLE_VALUE) {
   231.7 -        GetFileTime(h, NULL, NULL, &t);
   231.8 +        if (GetFileTime(h, NULL, NULL, &t)) {
   231.9 +            modTime.LowPart = (DWORD) t.dwLowDateTime;
  231.10 +            modTime.HighPart = (LONG) t.dwHighDateTime;
  231.11 +            rv = modTime.QuadPart / 10000;
  231.12 +            rv -= 11644473600000;
  231.13 +        }
  231.14          CloseHandle(h);
  231.15 -        modTime.LowPart = (DWORD) t.dwLowDateTime;
  231.16 -        modTime.HighPart = (LONG) t.dwHighDateTime;
  231.17 -        rv = modTime.QuadPart / 10000;
  231.18 -        rv -= 11644473600000;
  231.19      }
  231.20      free(pathbuf);
  231.21      return rv;
   232.1 --- a/src/windows/native/java/lang/java_props_md.c	Thu Apr 16 17:42:00 2009 +0100
   232.2 +++ b/src/windows/native/java/lang/java_props_md.c	Thu Apr 16 19:10:32 2009 -0700
   232.3 @@ -717,6 +717,7 @@
   232.4           * Windows Vista family         6               0
   232.5           * Windows 2008                 6               0
   232.6           *       where ((&ver.wServicePackMinor) + 2) = 1
   232.7 +         * Windows 7                    6               1
   232.8           *
   232.9           * This mapping will presumably be augmented as new Windows
  232.10           * versions are released.
  232.11 @@ -773,13 +774,18 @@
  232.12                   * and Windows Vista are identical, you must also test
  232.13                   * whether the wProductType member is VER_NT_WORKSTATION.
  232.14                   * If wProductType is VER_NT_WORKSTATION, the operating
  232.15 -                 * system is Windows Vista; otherwise, it is Windows
  232.16 +                 * system is Windows Vista or 7; otherwise, it is Windows
  232.17                   * Server 2008."
  232.18                   */
  232.19 -                if (ver.wProductType == VER_NT_WORKSTATION)
  232.20 -                    sprops.os_name = "Windows Vista";
  232.21 -                else
  232.22 +                if (ver.wProductType == VER_NT_WORKSTATION) {
  232.23 +                    switch (ver.dwMinorVersion) {
  232.24 +                    case  0: sprops.os_name = "Windows Vista";        break;
  232.25 +                    case  1: sprops.os_name = "Windows 7";            break;
  232.26 +                    default: sprops.os_name = "Windows NT (unknown)";
  232.27 +                    }
  232.28 +                } else {
  232.29                      sprops.os_name = "Windows Server 2008";
  232.30 +                }
  232.31              } else {
  232.32                  sprops.os_name = "Windows NT (unknown)";
  232.33              }
   233.1 --- a/src/windows/native/sun/awt/utility/rect.h	Thu Apr 16 17:42:00 2009 +0100
   233.2 +++ b/src/windows/native/sun/awt/utility/rect.h	Thu Apr 16 19:10:32 2009 -0700
   233.3 @@ -1,5 +1,5 @@
   233.4  /*
   233.5 - * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
   233.6 + * Copyright 2007-2009 Sun Microsystems, Inc.  All Rights Reserved.
   233.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   233.8   *
   233.9   * This code is free software; you can redistribute it and/or modify it
  233.10 @@ -43,5 +43,15 @@
  233.11  
  233.12  #define RECT_INC_HEIGHT(r) (r).bottom++
  233.13  
  233.14 +#if defined(__cplusplus)
  233.15 +extern "C" {
  233.16 +#endif
  233.17 +
  233.18 +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height,
  233.19 +        unsigned char * buf, RECT_T * outBuf);
  233.20 +
  233.21 +#if defined(__cplusplus)
  233.22 +}
  233.23 +#endif
  233.24  
  233.25  #endif // _AWT_RECT_H
   234.1 --- a/src/windows/native/sun/java2d/d3d/D3DSurfaceData.cpp	Thu Apr 16 17:42:00 2009 +0100
   234.2 +++ b/src/windows/native/sun/java2d/d3d/D3DSurfaceData.cpp	Thu Apr 16 19:10:32 2009 -0700
   234.3 @@ -1,5 +1,5 @@
   234.4  /*
   234.5 - * Copyright 2007-2008 Sun Microsystems, Inc.  All Rights Reserved.
   234.6 + * Copyright 2007-2009 Sun Microsystems, Inc.  All Rights Reserved.
   234.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   234.8   *
   234.9   * This code is free software; you can redistribute it and/or modify it
  234.10 @@ -613,17 +613,15 @@
  234.11  
  234.12      res = pTmpSurface->LockRect(&lockedRect, NULL, D3DLOCK_NOSYSLOCK);
  234.13      if (SUCCEEDED(res)) {
  234.14 -        // REMIND: commented until translucent window support is integrated
  234.15 -//        hBitmap =
  234.16 -//            BitmapUtil::CreateBitmapFromARGBPre(w, h,
  234.17 -//                                                lockedRect.Pitch,
  234.18 -//                                                (int*)lockedRect.pBits);
  234.19 +        hBitmap =
  234.20 +            BitmapUtil::CreateBitmapFromARGBPre(w, h,
  234.21 +                                                lockedRect.Pitch,
  234.22 +                                                (int*)lockedRect.pBits);
  234.23          pTmpSurface->UnlockRect();
  234.24      }
  234.25      RETURN_STATUS_IF_NULL(hBitmap, JNI_FALSE);
  234.26  
  234.27 -    // REMIND: commented until translucent window support is integrated
  234.28 -//    window->UpdateWindow(env, NULL, w, h, hBitmap);
  234.29 +    window->UpdateWindow(env, NULL, w, h, hBitmap);
  234.30  
  234.31      // hBitmap is released in UpdateWindow
  234.32  
   235.1 --- a/src/windows/native/sun/java2d/opengl/WGLSurfaceData.c	Thu Apr 16 17:42:00 2009 +0100
   235.2 +++ b/src/windows/native/sun/java2d/opengl/WGLSurfaceData.c	Thu Apr 16 19:10:32 2009 -0700
   235.3 @@ -1,5 +1,5 @@
   235.4  /*
   235.5 - * Copyright 2004-2008 Sun Microsystems, Inc.  All Rights Reserved.
   235.6 + * Copyright 2004-2009 Sun Microsystems, Inc.  All Rights Reserved.
   235.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   235.8   *
   235.9   * This code is free software; you can redistribute it and/or modify it
  235.10 @@ -625,17 +625,15 @@
  235.11      j2d_glPixelStorei(GL_PACK_ALIGNMENT, 4);
  235.12  
  235.13      // the pixels read from the surface are already premultiplied
  235.14 -    // REMIND: commented until translucent window support is integrated
  235.15 -//    hBitmap = BitmapUtil_CreateBitmapFromARGBPre(w, h, scanStride,
  235.16 -//                                                 (int*)pDst);
  235.17 +    hBitmap = BitmapUtil_CreateBitmapFromARGBPre(w, h, scanStride,
  235.18 +                                                 (int*)pDst);
  235.19      free(pDst);
  235.20  
  235.21      if (hBitmap == NULL) {
  235.22          return JNI_FALSE;
  235.23      }
  235.24  
  235.25 -    // REMIND: commented until translucent window support is integrated
  235.26 -    // AwtWindow_UpdateWindow(env, peer, w, h, hBitmap);
  235.27 +    AwtWindow_UpdateWindow(env, peer, w, h, hBitmap);
  235.28  
  235.29      // hBitmap is released in UpdateWindow
  235.30  
   236.1 --- a/src/windows/native/sun/windows/ComCtl32Util.cpp	Thu Apr 16 17:42:00 2009 +0100
   236.2 +++ b/src/windows/native/sun/windows/ComCtl32Util.cpp	Thu Apr 16 19:10:32 2009 -0700
   236.3 @@ -27,6 +27,7 @@
   236.4  #include "ComCtl32Util.h"
   236.5  
   236.6  ComCtl32Util::ComCtl32Util() {
   236.7 +    m_bToolTipControlInitialized = FALSE;
   236.8  }
   236.9  
  236.10  ComCtl32Util::~ComCtl32Util() {
  236.11 @@ -36,7 +37,8 @@
  236.12      INITCOMMONCONTROLSEX iccex;
  236.13      memset(&iccex, 0, sizeof(INITCOMMONCONTROLSEX));
  236.14      iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
  236.15 -    ::InitCommonControlsEx(&iccex);
  236.16 +    iccex.dwICC = ICC_TAB_CLASSES;
  236.17 +    m_bToolTipControlInitialized = ::InitCommonControlsEx(&iccex);
  236.18  }
  236.19  
  236.20  WNDPROC ComCtl32Util::SubclassHWND(HWND hwnd, WNDPROC _WindowProc) {
   237.1 --- a/src/windows/native/sun/windows/ComCtl32Util.h	Thu Apr 16 17:42:00 2009 +0100
   237.2 +++ b/src/windows/native/sun/windows/ComCtl32Util.h	Thu Apr 16 19:10:32 2009 -0700
   237.3 @@ -40,6 +40,10 @@
   237.4  
   237.5          void InitLibraries();
   237.6  
   237.7 +        INLINE BOOL IsToolTipControlInitialized() {
   237.8 +            return m_bToolTipControlInitialized;
   237.9 +        }
  237.10 +
  237.11          WNDPROC SubclassHWND(HWND hwnd, WNDPROC _WindowProc);
  237.12          // DefWindowProc is the same as returned from SubclassHWND
  237.13          void UnsubclassHWND(HWND hwnd, WNDPROC _WindowProc, WNDPROC _DefWindowProc);
  237.14 @@ -50,6 +54,8 @@
  237.15          ComCtl32Util();
  237.16          ~ComCtl32Util();
  237.17  
  237.18 +        BOOL m_bToolTipControlInitialized;
  237.19 +
  237.20          // comctl32.dll version 6 window proc
  237.21          static LRESULT CALLBACK SharedWindowProc(HWND hwnd, UINT message,
  237.22                                                   WPARAM wParam, LPARAM lParam,
   238.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   238.2 +++ b/src/windows/native/sun/windows/DllUtil.cpp	Thu Apr 16 19:10:32 2009 -0700
   238.3 @@ -0,0 +1,87 @@
   238.4 +/*
   238.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   238.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   238.7 + *
   238.8 + * This code is free software; you can redistribute it and/or modify it
   238.9 + * under the terms of the GNU General Public License version 2 only, as
  238.10 + * published by the Free Software Foundation.  Sun designates this
  238.11 + * particular file as subject to the "Classpath" exception as provided
  238.12 + * by Sun in the LICENSE file that accompanied this code.
  238.13 + *
  238.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  238.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  238.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  238.17 + * version 2 for more details (a copy is included in the LICENSE file that
  238.18 + * accompanied this code).
  238.19 + *
  238.20 + * You should have received a copy of the GNU General Public License version
  238.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  238.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  238.23 + *
  238.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  238.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  238.26 + * have any questions.
  238.27 + */
  238.28 +
  238.29 +
  238.30 +#include "DllUtil.h"
  238.31 +
  238.32 +// Disable warning about using this in the initializer list.
  238.33 +#pragma warning( disable : 4355)
  238.34 +
  238.35 +DllUtil::~DllUtil()
  238.36 +{
  238.37 +    if (module != NULL) {
  238.38 +        ::FreeLibrary(module);
  238.39 +        module = NULL;
  238.40 +    }
  238.41 +}
  238.42 +
  238.43 +HMODULE DllUtil::GetModule()
  238.44 +{
  238.45 +    if (!module) {
  238.46 +        module = ::LoadLibrary(name);
  238.47 +    }
  238.48 +    return module;
  238.49 +}
  238.50 +
  238.51 +FARPROC DllUtil::GetProcAddress(LPCSTR name)
  238.52 +{
  238.53 +    if (GetModule()) {
  238.54 +        return ::GetProcAddress(GetModule(), name);
  238.55 +    }
  238.56 +    throw LibraryUnavailableException();
  238.57 +}
  238.58 +
  238.59 +DwmAPI & DwmAPI::GetInstance()
  238.60 +{
  238.61 +    static DwmAPI dll;
  238.62 +    return dll;
  238.63 +}
  238.64 +
  238.65 +DwmAPI::DwmAPI() :
  238.66 +    DllUtil(_T("DWMAPI.DLL")),
  238.67 +    DwmIsCompositionEnabledFunction((DllUtil*)this, "DwmIsCompositionEnabled"),
  238.68 +    DwmGetWindowAttributeFunction((DllUtil*)this, "DwmGetWindowAttribute")
  238.69 +{
  238.70 +}
  238.71 +
  238.72 +HRESULT DwmAPI::DwmIsCompositionEnabled(BOOL * pfEnabled)
  238.73 +{
  238.74 +    if (GetInstance().DwmIsCompositionEnabledFunction()) {
  238.75 +        return GetInstance().DwmIsCompositionEnabledFunction()(pfEnabled);
  238.76 +    }
  238.77 +    throw FunctionUnavailableException();
  238.78 +}
  238.79 +
  238.80 +HRESULT DwmAPI::DwmGetWindowAttribute(HWND hwnd, DWORD dwAttribute,
  238.81 +        PVOID pvAttribute, DWORD cbAttribute)
  238.82 +{
  238.83 +    if (GetInstance().DwmGetWindowAttributeFunction()) {
  238.84 +        return GetInstance().DwmGetWindowAttributeFunction()(hwnd, dwAttribute,
  238.85 +                pvAttribute, cbAttribute);
  238.86 +    }
  238.87 +    throw FunctionUnavailableException();
  238.88 +}
  238.89 +
  238.90 +
   239.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   239.2 +++ b/src/windows/native/sun/windows/DllUtil.h	Thu Apr 16 19:10:32 2009 -0700
   239.3 @@ -0,0 +1,97 @@
   239.4 +/*
   239.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   239.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   239.7 + *
   239.8 + * This code is free software; you can redistribute it and/or modify it
   239.9 + * under the terms of the GNU General Public License version 2 only, as
  239.10 + * published by the Free Software Foundation.  Sun designates this
  239.11 + * particular file as subject to the "Classpath" exception as provided
  239.12 + * by Sun in the LICENSE file that accompanied this code.
  239.13 + *
  239.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  239.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  239.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  239.17 + * version 2 for more details (a copy is included in the LICENSE file that
  239.18 + * accompanied this code).
  239.19 + *
  239.20 + * You should have received a copy of the GNU General Public License version
  239.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  239.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  239.23 + *
  239.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  239.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  239.26 + * have any questions.
  239.27 + */
  239.28 +
  239.29 +#ifndef DLLUTIL_H
  239.30 +#define DLLUTIL_H
  239.31 +
  239.32 +#include <tchar.h>
  239.33 +#include <windows.h>
  239.34 +
  239.35 +/**
  239.36 + * Utility class to handle dynamically loadable libraries.
  239.37 + *
  239.38 + * NOTE: THIS CLASS IS NOT THREAD-SAFE!
  239.39 + */
  239.40 +class DllUtil {
  239.41 +    public:
  239.42 +        class Exception {};
  239.43 +        class LibraryUnavailableException : public Exception {};
  239.44 +        class FunctionUnavailableException : public Exception {};
  239.45 +
  239.46 +        FARPROC GetProcAddress(LPCSTR name);
  239.47 +
  239.48 +    protected:
  239.49 +        DllUtil(const TCHAR * name) : name(name), module(NULL) {}
  239.50 +        virtual ~DllUtil();
  239.51 +
  239.52 +        HMODULE GetModule();
  239.53 +
  239.54 +        template <class FunctionType> class Function {
  239.55 +            public:
  239.56 +                Function(DllUtil * dll, LPCSTR name) :
  239.57 +                    dll(dll), name(name), function(NULL) {}
  239.58 +
  239.59 +                inline FunctionType operator () () {
  239.60 +                    if (!function) {
  239.61 +                        function = (FunctionType)dll->GetProcAddress(name);
  239.62 +                    }
  239.63 +                    return function;
  239.64 +                }
  239.65 +
  239.66 +            private:
  239.67 +                DllUtil * const dll;
  239.68 +                LPCSTR name;
  239.69 +
  239.70 +                FunctionType function;
  239.71 +        };
  239.72 +
  239.73 +    private:
  239.74 +        const TCHAR * const name;
  239.75 +        HMODULE module;
  239.76 +};
  239.77 +
  239.78 +class DwmAPI : public DllUtil {
  239.79 +    public:
  239.80 +        // See DWMWINDOWATTRIBUTE enum in dwmapi.h
  239.81 +        static const DWORD DWMWA_EXTENDED_FRAME_BOUNDS = 9;
  239.82 +
  239.83 +        static HRESULT DwmIsCompositionEnabled(BOOL * pfEnabled);
  239.84 +        static HRESULT DwmGetWindowAttribute(HWND hwnd, DWORD dwAttribute,
  239.85 +                PVOID pvAttribute, DWORD cbAttribute);
  239.86 +
  239.87 +    private:
  239.88 +        static DwmAPI & GetInstance();
  239.89 +        DwmAPI();
  239.90 +
  239.91 +        typedef HRESULT (WINAPI *DwmIsCompositionEnabledType)(BOOL*);
  239.92 +        Function<DwmIsCompositionEnabledType> DwmIsCompositionEnabledFunction;
  239.93 +
  239.94 +        typedef HRESULT (WINAPI *DwmGetWindowAttributeType)(HWND hwnd, DWORD dwAttribute,
  239.95 +                PVOID pvAttribute, DWORD cbAttribute);
  239.96 +        Function<DwmGetWindowAttributeType> DwmGetWindowAttributeFunction;
  239.97 +};
  239.98 +
  239.99 +#endif // DLLUTIL_H
 239.100 +
   240.1 --- a/src/windows/native/sun/windows/ShellFolder2.cpp	Thu Apr 16 17:42:00 2009 +0100
   240.2 +++ b/src/windows/native/sun/windows/ShellFolder2.cpp	Thu Apr 16 19:10:32 2009 -0700
   240.3 @@ -225,6 +225,34 @@
   240.4      FID_folderType = env->GetFieldID(cls, "folderType", "Ljava/lang/String;");
   240.5  }
   240.6  
   240.7 +
   240.8 +/*
   240.9 +* Class:     sun_awt_shell_Win32ShellFolderManager2
  240.10 +* Method:    initializeCom
  240.11 +* Signature: ()V
  240.12 +*/
  240.13 +JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolderManager2_initializeCom
  240.14 +        (JNIEnv* env, jclass cls)
  240.15 +{
  240.16 +    HRESULT hr = ::CoInitialize(NULL);
  240.17 +    if (FAILED(hr)) {
  240.18 +        char c[64];
  240.19 +        sprintf(c, "Could not initialize COM: HRESULT=0x%08X", hr);
  240.20 +        JNU_ThrowInternalError(env, c);
  240.21 +    }
  240.22 +}
  240.23 +
  240.24 +/*
  240.25 +* Class:     sun_awt_shell_Win32ShellFolderManager2
  240.26 +* Method:    uninitializeCom
  240.27 +* Signature: ()V
  240.28 +*/
  240.29 +JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolderManager2_uninitializeCom
  240.30 +        (JNIEnv* env, jclass cls)
  240.31 +{
  240.32 +    ::CoUninitialize();
  240.33 +}
  240.34 +
  240.35  static IShellIcon* getIShellIcon(IShellFolder* pIShellFolder) {
  240.36      // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp
  240.37      HRESULT hres;
  240.38 @@ -239,29 +267,6 @@
  240.39      return (IShellIcon*)NULL;
  240.40  }
  240.41  
  240.42 -// Fixed 6263669
  240.43 -//
  240.44 -// CoInitialize wrapper
  240.45 -// call CoInitialize to initialize COM in STA mode and check result
  240.46 -// RPC_E_CHANGED_MODE means COM has already been initialized in MTA mode,
  240.47 -// so don't set the flag to call CoUninitialize later
  240.48 -
  240.49 -BOOL CoInit(BOOL& doCoUninit) { // returns TRUE if initialized successfully
  240.50 -    switch(::CoInitialize(NULL)) {
  240.51 -    case S_OK:
  240.52 -    case S_FALSE:
  240.53 -        doCoUninit = TRUE;
  240.54 -        return TRUE;
  240.55 -        break;
  240.56 -    case RPC_E_CHANGED_MODE:
  240.57 -        doCoUninit = FALSE;
  240.58 -        return TRUE;
  240.59 -        break;
  240.60 -    default:
  240.61 -        return FALSE;
  240.62 -    }
  240.63 -}
  240.64 -
  240.65  
  240.66  /*
  240.67   * Class:     sun_awt_shell_Win32ShellFolder2
  240.68 @@ -507,10 +512,10 @@
  240.69  
  240.70  /*
  240.71   * Class:     sun_awt_shell_Win32ShellFolder2
  240.72 - * Method:    getFileSystemPath
  240.73 + * Method:    getFileSystemPath0
  240.74   * Signature: (I)Ljava/lang/String;
  240.75   */
  240.76 -JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getFileSystemPath__I
  240.77 +JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getFileSystemPath0
  240.78      (JNIEnv* env, jclass cls, jint csidl)
  240.79  {
  240.80      LPITEMIDLIST relPIDL;
  240.81 @@ -611,18 +616,6 @@
  240.82      if (SUCCEEDED (hr)) {
  240.83          return (jlong)pFolder;
  240.84      }
  240.85 -    if (IS_WINVISTA) {
  240.86 -        BOOL doCoUninit;
  240.87 -        if (CoInit(doCoUninit)) {
  240.88 -            hr = pParent->BindToObject(pidl, NULL, IID_IShellFolder, (void**)&pFolder);
  240.89 -            if (doCoUninit) {
  240.90 -                ::CoUninitialize();
  240.91 -            }
  240.92 -            if (SUCCEEDED (hr)) {
  240.93 -                return (jlong)pFolder;
  240.94 -            }
  240.95 -        }
  240.96 -    }
  240.97      return 0;
  240.98  }
  240.99  
 240.100 @@ -650,7 +643,10 @@
 240.101          return NULL;
 240.102      }
 240.103  
 240.104 -    pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret);
 240.105 +    hres = pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret);
 240.106 +    if (FAILED(hres)) {
 240.107 +        return NULL;
 240.108 +    }
 240.109  
 240.110      switch (strret.uType) {
 240.111        case STRRET_CSTR :
 240.112 @@ -669,10 +665,6 @@
 240.113          break;
 240.114      }
 240.115  
 240.116 -    BOOL doCoUninit;
 240.117 -    if (!CoInit(doCoUninit)) {
 240.118 -        return 0;
 240.119 -    }
 240.120      IShellLinkW* psl;
 240.121      hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID *)&psl);
 240.122      if (SUCCEEDED(hres)) {
 240.123 @@ -692,10 +684,10 @@
 240.124          }
 240.125          psl->Release();
 240.126      }
 240.127 -    if (doCoUninit) {
 240.128 -        ::CoUninitialize();
 240.129 +
 240.130 +    if (strret.uType == STRRET_WSTR) {
 240.131 +        CoTaskMemFree(strret.pOleStr);
 240.132      }
 240.133 -
 240.134      if (SUCCEEDED(hres)) {
 240.135          return (jlong)pidl;
 240.136      } else {
 240.137 @@ -741,7 +733,7 @@
 240.138  /*
 240.139   * Class:     sun_awt_shell_Win32ShellFolder2
 240.140   * Method:    getDisplayNameOf
 240.141 - * Signature: (JJ)Ljava/lang/String;
 240.142 + * Signature: (JJI)Ljava/lang/String;
 240.143   */
 240.144  JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getDisplayNameOf
 240.145      (JNIEnv* env, jclass cls, jlong parentIShellFolder, jlong relativePIDL, jint attrs)
 240.146 @@ -758,7 +750,11 @@
 240.147      if (pParent->GetDisplayNameOf(pidl, attrs, &strret) != S_OK) {
 240.148          return NULL;
 240.149      }
 240.150 -    return jstringFromSTRRET(env, pidl, &strret);
 240.151 +    jstring result = jstringFromSTRRET(env, pidl, &strret);
 240.152 +    if (strret.uType == STRRET_WSTR) {
 240.153 +        CoTaskMemFree(strret.pOleStr);
 240.154 +    }
 240.155 +    return result;
 240.156  }
 240.157  
 240.158  /*
 240.159 @@ -833,10 +829,6 @@
 240.160      }
 240.161  
 240.162      INT index = -1;
 240.163 -    BOOL doCoUninit;
 240.164 -    if (!CoInit(doCoUninit)) {
 240.165 -        return (jint)index;
 240.166 -    }
 240.167  
 240.168      HRESULT hres;
 240.169      // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp
 240.170 @@ -844,9 +836,6 @@
 240.171          hres = pIShellIcon->GetIconOf(pidl, GIL_FORSHELL, &index);
 240.172      }
 240.173  
 240.174 -    if (doCoUninit) {
 240.175 -        ::CoUninitialize();
 240.176 -    }
 240.177      return (jint)index;
 240.178  }
 240.179  
 240.180 @@ -866,10 +855,6 @@
 240.181      }
 240.182  
 240.183      HICON hIcon = NULL;
 240.184 -    BOOL doCoUninit;
 240.185 -    if (!CoInit(doCoUninit)) {
 240.186 -        return (jlong)hIcon;
 240.187 -    }
 240.188  
 240.189      HRESULT hres;
 240.190      IExtractIconW* pIcon;
 240.191 @@ -894,9 +879,6 @@
 240.192          }
 240.193          pIcon->Release();
 240.194      }
 240.195 -    if (doCoUninit) {
 240.196 -        ::CoUninitialize();
 240.197 -    }
 240.198      return (jlong)hIcon;
 240.199  }
 240.200  
 240.201 @@ -994,14 +976,10 @@
 240.202      HINSTANCE libComCtl32;
 240.203      HINSTANCE libShell32;
 240.204  
 240.205 -
 240.206      libShell32 = LoadLibrary(TEXT("shell32.dll"));
 240.207      if (libShell32 != NULL) {
 240.208 -        long osVersion = GetVersion();
 240.209 -        BOOL isVista = (!(osVersion & 0x80000000) && (LOBYTE(LOWORD(osVersion)) >= 6));
 240.210 -
 240.211          hBitmap = (HBITMAP)LoadImage(libShell32,
 240.212 -                    isVista ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216),
 240.213 +                    IS_WINVISTA ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216),
 240.214                      IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
 240.215      }
 240.216      if (hBitmap == NULL) {
 240.217 @@ -1095,46 +1073,6 @@
 240.218  }
 240.219  
 240.220  
 240.221 -// Helper functions for workaround COM initialization:
 240.222 -
 240.223 -static HRESULT GetDetailsOfFolder(
 240.224 -        IShellFolder2 *folder,
 240.225 -        LPCITEMIDLIST pidl,
 240.226 -        UINT column,
 240.227 -        SHELLDETAILS *psd)
 240.228 -{
 240.229 -    HRESULT hr = folder->GetDetailsOf(pidl, column, psd);
 240.230 -    if (IS_WINVISTA && FAILED (hr)) {
 240.231 -        BOOL doCoUninit;
 240.232 -        if (CoInit(doCoUninit)) {
 240.233 -            hr = folder->GetDetailsOf(pidl, column, psd);
 240.234 -            if (doCoUninit) {
 240.235 -                ::CoUninitialize();
 240.236 -            }
 240.237 -        }
 240.238 -    }
 240.239 -    return hr;
 240.240 -}
 240.241 -
 240.242 -static HRESULT GetDetailsOf(
 240.243 -        IShellDetails *details,
 240.244 -        LPCITEMIDLIST pidl,
 240.245 -        UINT column,
 240.246 -        SHELLDETAILS *psd)
 240.247 -{
 240.248 -    HRESULT hr = details->GetDetailsOf(pidl, column, psd);
 240.249 -    if (IS_WINVISTA && FAILED (hr)) {
 240.250 -        BOOL doCoUninit;
 240.251 -        if (CoInit(doCoUninit)) {
 240.252 -            hr = details->GetDetailsOf(pidl, column, psd);
 240.253 -            if (doCoUninit) {
 240.254 -                ::CoUninitialize();
 240.255 -            }
 240.256 -        }
 240.257 -    }
 240.258 -    return hr;
 240.259 -}
 240.260 -
 240.261  /*
 240.262   * Helper function for creating Java column info object
 240.263   */
 240.264 @@ -1187,7 +1125,7 @@
 240.265          int colNum = -1;
 240.266          hr = S_OK;
 240.267          do{
 240.268 -            hr = GetDetailsOfFolder(pIShellFolder2, NULL, ++colNum, &sd);
 240.269 +            hr = pIShellFolder2->GetDetailsOf(NULL, ++colNum, &sd);
 240.270          } while (SUCCEEDED (hr));
 240.271  
 240.272          jobjectArray columns =
 240.273 @@ -1202,7 +1140,7 @@
 240.274          colNum = 0;
 240.275          hr = S_OK;
 240.276          while (SUCCEEDED (hr)) {
 240.277 -            hr = GetDetailsOfFolder(pIShellFolder2, NULL, colNum, &sd);
 240.278 +            hr = pIShellFolder2->GetDetailsOf(NULL, colNum, &sd);
 240.279  
 240.280              if (SUCCEEDED (hr)) {
 240.281                  hr = pIShellFolder2->GetDefaultColumnState(colNum, &csFlags);
 240.282 @@ -1232,7 +1170,7 @@
 240.283          int colNum = -1;
 240.284          hr = S_OK;
 240.285          do{
 240.286 -            hr = GetDetailsOf(pIShellDetails, NULL, ++colNum, &sd);
 240.287 +            hr = pIShellDetails->GetDetailsOf(NULL, ++colNum, &sd);
 240.288          } while (SUCCEEDED (hr));
 240.289  
 240.290          jobjectArray columns =
 240.291 @@ -1246,7 +1184,7 @@
 240.292          colNum = 0;
 240.293          hr = S_OK;
 240.294          while (SUCCEEDED (hr)) {
 240.295 -            hr = GetDetailsOf(pIShellDetails, NULL, colNum, &sd);
 240.296 +            hr = pIShellDetails->GetDetailsOf(NULL, colNum, &sd);
 240.297              if (SUCCEEDED (hr)) {
 240.298                  jobject column = CreateColumnInfo(env,
 240.299                                      &columnClass, &columnConstructor,
 240.300 @@ -1288,7 +1226,7 @@
 240.301      if(SUCCEEDED (hr)) {
 240.302          // The folder exposes IShellFolder2 interface
 240.303          IShellFolder2 *pIShellFolder2 = (IShellFolder2*) pIUnknown;
 240.304 -        hr = GetDetailsOfFolder(pIShellFolder2, pidl, (UINT)columnIdx, &sd);
 240.305 +        hr = pIShellFolder2->GetDetailsOf(pidl, (UINT)columnIdx, &sd);
 240.306          pIShellFolder2->Release();
 240.307          if (SUCCEEDED (hr)) {
 240.308              STRRET strRet = sd.str;
 240.309 @@ -1300,7 +1238,7 @@
 240.310      if(SUCCEEDED (hr)) {
 240.311          // The folder exposes IShellDetails interface
 240.312          IShellDetails *pIShellDetails = (IShellDetails*) pIUnknown;
 240.313 -        hr = GetDetailsOf(pIShellDetails, pidl, (UINT)columnIdx, &sd);
 240.314 +        hr = pIShellDetails->GetDetailsOf(pidl, (UINT)columnIdx, &sd);
 240.315          pIShellDetails->Release();
 240.316          if (SUCCEEDED (hr)) {
 240.317              STRRET strRet = sd.str;
   241.1 --- a/src/windows/native/sun/windows/awt.rc	Thu Apr 16 17:42:00 2009 +0100
   241.2 +++ b/src/windows/native/sun/windows/awt.rc	Thu Apr 16 19:10:32 2009 -0700
   241.3 @@ -35,6 +35,13 @@
   241.4  AWT_ICON     ICON    DISCARDABLE "awt.ico"
   241.5  CHECK_BITMAP BITMAP  DISCARDABLE "check.bmp"
   241.6  
   241.7 +// Note: the number of icons used is specified in the
   241.8 +// securityWarningIconCounter constant in awt_Toolkit.cpp.
   241.9 +SECURITY_WARNING_0  ICON    DISCARDABLE "security_warning_bw.ico"
  241.10 +SECURITY_WARNING_1  ICON    DISCARDABLE "security_warning_int.ico"
  241.11 +SECURITY_WARNING_2  ICON    DISCARDABLE "security_warning.ico"
  241.12 +
  241.13 +
  241.14  /////////////////////////////////////////////////////////////////////////////
  241.15  //
  241.16  // Version
   242.1 --- a/src/windows/native/sun/windows/awt_BitmapUtil.cpp	Thu Apr 16 17:42:00 2009 +0100
   242.2 +++ b/src/windows/native/sun/windows/awt_BitmapUtil.cpp	Thu Apr 16 19:10:32 2009 -0700
   242.3 @@ -1,5 +1,5 @@
   242.4  /*
   242.5 - * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
   242.6 + * Copyright 2006-2009 Sun Microsystems, Inc.  All Rights Reserved.
   242.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   242.8   *
   242.9   * This code is free software; you can redistribute it and/or modify it
  242.10 @@ -28,9 +28,14 @@
  242.11  #include <windowsx.h>
  242.12  #include <zmouse.h>
  242.13  
  242.14 +#include "GraphicsPrimitiveMgr.h"
  242.15 +
  242.16  #include "awt.h"
  242.17  #include "awt_BitmapUtil.h"
  242.18  
  242.19 +// Platform-dependent RECT_[EQ | SET | INC_HEIGHT] macros
  242.20 +#include "utility/rect.h"
  242.21 +
  242.22  HBITMAP BitmapUtil::CreateTransparencyMaskFromARGB(int width, int height, int* imageData)
  242.23  {
  242.24      //Scan lines should be aligned to word boundary
  242.25 @@ -148,3 +153,222 @@
  242.26      ::GdiFlush();
  242.27      return hBitmap;
  242.28  }
  242.29 +
  242.30 +/*
  242.31 + * Creates 32-bit premultiplied ARGB bitmap from specified ARGBPre data.
  242.32 + * This function may not work on OS prior to Win95.
  242.33 + * See MSDN articles for CreateDIBitmap, BITMAPINFOHEADER,
  242.34 + * BITMAPV4HEADER, BITMAPV5HEADER for additional info.
  242.35 + */
  242.36 +HBITMAP BitmapUtil::CreateBitmapFromARGBPre(int width, int height,
  242.37 +                                            int srcStride,
  242.38 +                                            int* imageData)
  242.39 +{
  242.40 +    BITMAPINFOHEADER bmi;
  242.41 +    void *bitmapBits = NULL;
  242.42 +
  242.43 +    ZeroMemory(&bmi, sizeof(bmi));
  242.44 +    bmi.biSize = sizeof(bmi);
  242.45 +    bmi.biWidth = width;
  242.46 +    bmi.biHeight = -height;
  242.47 +    bmi.biPlanes = 1;
  242.48 +    bmi.biBitCount = 32;
  242.49 +    bmi.biCompression = BI_RGB;
  242.50 +
  242.51 +    HBITMAP hBitmap =
  242.52 +        ::CreateDIBSection(NULL, (BITMAPINFO *) & bmi, DIB_RGB_COLORS,
  242.53 +                           &bitmapBits, NULL, 0);
  242.54 +
  242.55 +    if (!bitmapBits) {
  242.56 +        return NULL;
  242.57 +    }
  242.58 +
  242.59 +    int dstStride = width * 4;
  242.60 +
  242.61 +    if (srcStride == dstStride) {
  242.62 +        memcpy(bitmapBits, (void*)imageData, srcStride * height);
  242.63 +    } else if (height > 0) {
  242.64 +        void *pSrcPixels = (void*)imageData;
  242.65 +        void *pDstPixels = bitmapBits;
  242.66 +        do {
  242.67 +            memcpy(pDstPixels, pSrcPixels, dstStride);
  242.68 +            pSrcPixels = PtrAddBytes(pSrcPixels, srcStride);
  242.69 +            pDstPixels = PtrAddBytes(pDstPixels, dstStride);
  242.70 +        } while (--height > 0);
  242.71 +    }
  242.72 +
  242.73 +    return hBitmap;
  242.74 +}
  242.75 +
  242.76 +extern "C" {
  242.77 +
  242.78 +/**
  242.79 + * This method is called from the WGL pipeline when it needs to create a bitmap
  242.80 + * needed to update the layered window.
  242.81 + */
  242.82 +HBITMAP BitmapUtil_CreateBitmapFromARGBPre(int width, int height,
  242.83 +                                           int srcStride,
  242.84 +                                           int* imageData)
  242.85 +{
  242.86 +    return BitmapUtil::CreateBitmapFromARGBPre(width, height,
  242.87 +                                               srcStride, imageData);
  242.88 +
  242.89 +}
  242.90 +
  242.91 +}  /* extern "C" */
  242.92 +
  242.93 +
  242.94 +/**
  242.95 + * Transforms the given bitmap into an HRGN representing the transparency
  242.96 + * of the bitmap. The bitmap MUST BE 32bpp. Alpha value == 0 is considered
  242.97 + * transparent, alpha > 0 - opaque.
  242.98 + */
  242.99 +HRGN BitmapUtil::BitmapToRgn(HBITMAP hBitmap)
 242.100 +{
 242.101 +    HDC hdc = ::CreateCompatibleDC(NULL);
 242.102 +    ::SelectObject(hdc, hBitmap);
 242.103 +
 242.104 +    BITMAPINFOEX bi;
 242.105 +    ::ZeroMemory(&bi, sizeof(bi));
 242.106 +
 242.107 +    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 242.108 +
 242.109 +    BOOL r = ::GetDIBits(hdc, hBitmap, 0, 0, NULL,
 242.110 +            reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
 242.111 +
 242.112 +    if (!r || bi.bmiHeader.biBitCount != 32)
 242.113 +    {
 242.114 +        ::DeleteDC(hdc);
 242.115 +        return NULL;
 242.116 +    }
 242.117 +
 242.118 +    UINT width = bi.bmiHeader.biWidth;
 242.119 +    UINT height = abs(bi.bmiHeader.biHeight);
 242.120 +
 242.121 +    BYTE * buf = (BYTE*)safe_Malloc(bi.bmiHeader.biSizeImage);
 242.122 +    bi.bmiHeader.biHeight = -height;
 242.123 +    ::GetDIBits(hdc, hBitmap, 0, height, buf,
 242.124 +            reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
 242.125 +
 242.126 +    /* reserving memory for the worst case */
 242.127 +    RGNDATA * pRgnData = (RGNDATA *) safe_Malloc(sizeof(RGNDATAHEADER) +
 242.128 +            sizeof(RECT) * (width / 2 + 1) * height);
 242.129 +    RGNDATAHEADER * pRgnHdr = (RGNDATAHEADER *) pRgnData;
 242.130 +    pRgnHdr->dwSize = sizeof(RGNDATAHEADER);
 242.131 +    pRgnHdr->iType = RDH_RECTANGLES;
 242.132 +    pRgnHdr->nRgnSize = 0;
 242.133 +    pRgnHdr->rcBound.top = 0;
 242.134 +    pRgnHdr->rcBound.left = 0;
 242.135 +    pRgnHdr->rcBound.bottom = height;
 242.136 +    pRgnHdr->rcBound.right = width;
 242.137 +
 242.138 +    pRgnHdr->nCount = BitmapToYXBandedRectangles(32, width, height, buf,
 242.139 +            (RECT_T *) (((BYTE *) pRgnData) + sizeof(RGNDATAHEADER)));
 242.140 +
 242.141 +    HRGN rgn = ::ExtCreateRegion(NULL,
 242.142 +            sizeof(RGNDATAHEADER) + sizeof(RECT_T) * pRgnHdr->nCount,
 242.143 +            pRgnData);
 242.144 +
 242.145 +    free(pRgnData);
 242.146 +    ::DeleteDC(hdc);
 242.147 +    free(buf);
 242.148 +
 242.149 +    return rgn;
 242.150 +}
 242.151 +
 242.152 +/**
 242.153 + * Makes a copy of the given bitmap. Blends every pixel of the source
 242.154 + * with the given blendColor and alpha. If alpha == 0, the function
 242.155 + * simply makes a plain copy of the source without any blending.
 242.156 + */
 242.157 +HBITMAP BitmapUtil::BlendCopy(HBITMAP hSrcBitmap, COLORREF blendColor,
 242.158 +        BYTE alpha)
 242.159 +{
 242.160 +    HDC hdc = ::CreateCompatibleDC(NULL);
 242.161 +    HBITMAP oldBitmap = (HBITMAP)::SelectObject(hdc, hSrcBitmap);
 242.162 +
 242.163 +    BITMAPINFOEX bi;
 242.164 +    ::ZeroMemory(&bi, sizeof(bi));
 242.165 +
 242.166 +    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 242.167 +
 242.168 +    BOOL r = ::GetDIBits(hdc, hSrcBitmap, 0, 0, NULL,
 242.169 +            reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
 242.170 +
 242.171 +    if (!r || bi.bmiHeader.biBitCount != 32)
 242.172 +    {
 242.173 +        ::DeleteDC(hdc);
 242.174 +        return NULL;
 242.175 +    }
 242.176 +
 242.177 +    UINT width = bi.bmiHeader.biWidth;
 242.178 +    UINT height = abs(bi.bmiHeader.biHeight);
 242.179 +
 242.180 +    BYTE * buf = (BYTE*)safe_Malloc(bi.bmiHeader.biSizeImage);
 242.181 +    bi.bmiHeader.biHeight = -height;
 242.182 +    ::GetDIBits(hdc, hSrcBitmap, 0, height, buf,
 242.183 +            reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
 242.184 +
 242.185 +    UINT widthBytes = width * bi.bmiHeader.biBitCount / 8;
 242.186 +    UINT alignedWidth = (((widthBytes - 1) / 4) + 1) * 4;
 242.187 +    UINT i, j;
 242.188 +
 242.189 +    for (j = 0; j < height; j++) {
 242.190 +        BYTE *pSrc = (BYTE *) buf + j * alignedWidth;
 242.191 +        for (i = 0; i < width; i++, pSrc += 4) {
 242.192 +            // Note: if the current alpha is zero, the other three color
 242.193 +            // components may (theoretically) contain some uninitialized
 242.194 +            // data. The developer does not expect to display them,
 242.195 +            // hence we handle this situation differently.
 242.196 +            if (pSrc[3] == 0) {
 242.197 +                pSrc[0] = GetBValue(blendColor) * alpha / 255;
 242.198 +                pSrc[1] = GetGValue(blendColor) * alpha / 255;
 242.199 +                pSrc[2] = GetRValue(blendColor) * alpha / 255;
 242.200 +                pSrc[3] = alpha;
 242.201 +            } else {
 242.202 +                pSrc[0] = (GetBValue(blendColor) * alpha / 255) +
 242.203 +                    (pSrc[0] * (255 - alpha) / 255);
 242.204 +                pSrc[1] = (GetGValue(blendColor) * alpha / 255) +
 242.205 +                    (pSrc[1] * (255 - alpha) / 255);
 242.206 +                pSrc[2] = (GetRValue(blendColor) * alpha / 255) +
 242.207 +                    (pSrc[2] * (255 - alpha) / 255);
 242.208 +                pSrc[3] = (alpha * alpha / 255) +
 242.209 +                    (pSrc[3] * (255 - alpha) / 255);
 242.210 +            }
 242.211 +        }
 242.212 +    }
 242.213 +
 242.214 +    HBITMAP hDstBitmap = ::CreateDIBitmap(hdc,
 242.215 +            reinterpret_cast<BITMAPINFOHEADER*>(&bi),
 242.216 +            CBM_INIT,
 242.217 +            buf,
 242.218 +            reinterpret_cast<BITMAPINFO*>(&bi),
 242.219 +            DIB_RGB_COLORS
 242.220 +            );
 242.221 +
 242.222 +    ::SelectObject(hdc, oldBitmap);
 242.223 +    ::DeleteDC(hdc);
 242.224 +    free(buf);
 242.225 +
 242.226 +    return hDstBitmap;
 242.227 +}
 242.228 +
 242.229 +/**
 242.230 + * Creates a 32 bit ARGB bitmap. Returns the bitmap handle. The *bitmapBits
 242.231 + * contains the pointer to the bitmap data or NULL if an error occured.
 242.232 + */
 242.233 +HBITMAP BitmapUtil::CreateARGBBitmap(int width, int height, void ** bitmapBitsPtr)
 242.234 +{
 242.235 +    BITMAPINFOHEADER bmi;
 242.236 +
 242.237 +    ::ZeroMemory(&bmi, sizeof(bmi));
 242.238 +    bmi.biSize = sizeof(BITMAPINFOHEADER);
 242.239 +    bmi.biWidth = width;
 242.240 +    bmi.biHeight = -height;
 242.241 +    bmi.biPlanes = 1;
 242.242 +    bmi.biBitCount = 32;
 242.243 +    bmi.biCompression = BI_RGB;
 242.244 +
 242.245 +    return ::CreateDIBSection(NULL, (BITMAPINFO *) & bmi, DIB_RGB_COLORS,
 242.246 +                bitmapBitsPtr, NULL, 0);
 242.247 +}
   243.1 --- a/src/windows/native/sun/windows/awt_BitmapUtil.h	Thu Apr 16 17:42:00 2009 +0100
   243.2 +++ b/src/windows/native/sun/windows/awt_BitmapUtil.h	Thu Apr 16 19:10:32 2009 -0700
   243.3 @@ -1,5 +1,5 @@
   243.4  /*
   243.5 - * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
   243.6 + * Copyright 2006-2009 Sun Microsystems, Inc.  All Rights Reserved.
   243.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   243.8   *
   243.9   * This code is free software; you can redistribute it and/or modify it
  243.10 @@ -45,6 +45,32 @@
  243.11       */
  243.12      static HBITMAP CreateV4BitmapFromARGB(int width, int height, int* imageData);
  243.13  
  243.14 +    /**
  243.15 +     * Creates 32-bit premultiplied ARGB V4 Bitmap (Win95-compatible) from
  243.16 +     * specified ARGB Pre input data.
  243.17 +     */
  243.18 +    static HBITMAP CreateBitmapFromARGBPre(int width, int height,
  243.19 +                                           int srcStride,
  243.20 +                                           int* imageData);
  243.21 +
  243.22 +    /**
  243.23 +     * Transforms the given bitmap into an HRGN representing the transparency
  243.24 +     * of the bitmap.
  243.25 +     */
  243.26 +    static HRGN BitmapToRgn(HBITMAP hBitmap);
  243.27 +
  243.28 +    /**
  243.29 +     * Makes a copy of the given bitmap. Blends every pixel of the source
  243.30 +     * with the given blendColor and alpha. If alpha == 0, the function
  243.31 +     * simply makes a plain copy of the source without any blending.
  243.32 +     */
  243.33 +    static HBITMAP BlendCopy(HBITMAP hSrcBitmap, COLORREF blendColor, BYTE alpha);
  243.34 +
  243.35 +    /**
  243.36 +     * Creates a 32 bit ARGB bitmap. Returns the bitmap handle.
  243.37 +     * The pointer to the bitmap data is stored into bitmapBitsPtr.
  243.38 +     */
  243.39 +    static HBITMAP CreateARGBBitmap(int width, int height, void ** bitmapBitsPtr);
  243.40  };
  243.41  
  243.42  #endif
   244.1 --- a/src/windows/native/sun/windows/awt_Button.cpp	Thu Apr 16 17:42:00 2009 +0100
   244.2 +++ b/src/windows/native/sun/windows/awt_Button.cpp	Thu Apr 16 19:10:32 2009 -0700
   244.3 @@ -1,5 +1,5 @@
   244.4  /*
   244.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   244.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   244.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   244.8   *
   244.9   * This code is free software; you can redistribute it and/or modify it
  244.10 @@ -30,7 +30,6 @@
  244.11  #include "awt_Button.h"
  244.12  #include "awt_Canvas.h"
  244.13  #include "awt_Window.h"
  244.14 -#include "awt_KeyboardFocusManager.h"
  244.15  
  244.16  /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
  244.17   */
  244.18 @@ -143,19 +142,6 @@
  244.19      return c;
  244.20  }
  244.21  
  244.22 -BOOL AwtButton::ActMouseMessage(MSG * pMsg) {
  244.23 -    if (!IsFocusingMessage(pMsg->message)) {
  244.24 -        return FALSE;
  244.25 -    }
  244.26 -
  244.27 -    if (pMsg->message == WM_LBUTTONDOWN) {
  244.28 -        SendMessage(BM_SETSTATE, TRUE, 0);
  244.29 -    } else if (pMsg->message == WM_LBUTTONUP) {
  244.30 -        SendMessage(BM_SETSTATE, FALSE, 0);
  244.31 -    }
  244.32 -    return TRUE;
  244.33 -}
  244.34 -
  244.35  MsgRouting
  244.36  AwtButton::WmMouseDown(UINT flags, int x, int y, int button)
  244.37  {
  244.38 @@ -204,23 +190,6 @@
  244.39                 (jint)AwtComponent::GetJavaModifiers());
  244.40  }
  244.41  
  244.42 -/* 4531849 fix.  Previous to 1.4, mouse clicks and typing space bar on a
  244.43 - * Button would notify ActionListeners via WM_COMMAND/WmNotify().  In 1.4, mouse
  244.44 - * grabs are done for all presses in order to correctly send drag and release
  244.45 - * events.  However, WM_COMMAND message aren't sent when the mouse is grabbed,
  244.46 - * so ActionListeners for mouse clicks are sent via WmMouseUp/WmNotify().
  244.47 - * For some reason, if the right mouse button is held down when left-clicking
  244.48 - * on a Button, WM_COMMAND _IS_ sent.  This resulted in two ActionEvents being
  244.49 - * sent in this case.  To fix the problem, we handle typing space bar similar to
  244.50 - * left clicks - in WmKeyUp(), and do nothing for WM_COMMAND.  -bchristi
  244.51 - */
  244.52 -MsgRouting
  244.53 -AwtButton::WmKeyUp(UINT wkey, UINT repCnt, UINT flags, BOOL system)
  244.54 -{
  244.55 -    MsgRouting mrResult = AwtComponent::WmKeyUp(wkey, repCnt, flags, system);
  244.56 -    return mrResult;
  244.57 -}
  244.58 -
  244.59  MsgRouting
  244.60  AwtButton::OwnerDrawItem(UINT /*ctrlId*/, DRAWITEMSTRUCT& drawInfo)
  244.61  {
  244.62 @@ -293,18 +262,26 @@
  244.63      return mrDoDefault;
  244.64  }
  244.65  
  244.66 +BOOL AwtButton::IsFocusingMouseMessage(MSG *pMsg) {
  244.67 +    return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP;
  244.68 +}
  244.69 +
  244.70 +BOOL AwtButton::IsFocusingKeyMessage(MSG *pMsg) {
  244.71 +    return (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) &&
  244.72 +            pMsg->wParam == VK_SPACE;
  244.73 +}
  244.74 +
  244.75  MsgRouting AwtButton::HandleEvent(MSG *msg, BOOL synthetic)
  244.76  {
  244.77 -    if (AwtComponent::sm_focusOwner != GetHWnd() &&
  244.78 -        (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
  244.79 -    {
  244.80 -        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  244.81 -        jobject target = GetTarget(env);
  244.82 -        env->CallStaticVoidMethod
  244.83 -            (AwtKeyboardFocusManager::keyboardFocusManagerCls,
  244.84 -             AwtKeyboardFocusManager::heavyweightButtonDownMID,
  244.85 -             target, ((jlong)msg->time) & 0xFFFFFFFF);
  244.86 -        env->DeleteLocalRef(target);
  244.87 +    if (IsFocusingMouseMessage(msg)) {
  244.88 +        SendMessage(BM_SETSTATE, msg->message == WM_LBUTTONDOWN ? TRUE : FALSE, 0);
  244.89 +        delete msg;
  244.90 +        return mrConsume;
  244.91 +    }
  244.92 +    if (IsFocusingKeyMessage(msg)) {
  244.93 +        SendMessage(BM_SETSTATE, msg->message == WM_KEYDOWN ? TRUE : FALSE, 0);
  244.94 +        delete msg;
  244.95 +        return mrConsume;
  244.96      }
  244.97      return AwtComponent::HandleEvent(msg, synthetic);
  244.98  }
   245.1 --- a/src/windows/native/sun/windows/awt_Button.h	Thu Apr 16 17:42:00 2009 +0100
   245.2 +++ b/src/windows/native/sun/windows/awt_Button.h	Thu Apr 16 19:10:32 2009 -0700
   245.3 @@ -1,5 +1,5 @@
   245.4  /*
   245.5 - * Copyright 1996-2004 Sun Microsystems, Inc.  All Rights Reserved.
   245.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   245.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   245.8   *
   245.9   * This code is free software; you can redistribute it and/or modify it
  245.10 @@ -50,13 +50,13 @@
  245.11      /* Windows message handler functions */
  245.12      MsgRouting WmMouseDown(UINT flags, int x, int y, int button);
  245.13      MsgRouting WmMouseUp(UINT flags, int x, int y, int button);
  245.14 -    MsgRouting WmKeyUp(UINT vkey, UINT repCnt, UINT flags, BOOL system);
  245.15      MsgRouting OwnerDrawItem(UINT ctrlId, DRAWITEMSTRUCT& drawInfo);
  245.16      MsgRouting WmPaint(HDC hDC);
  245.17  
  245.18      MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
  245.19  
  245.20 -    BOOL ActMouseMessage(MSG * pMsg);
  245.21 +    BOOL IsFocusingMouseMessage(MSG *pMsg);
  245.22 +    BOOL IsFocusingKeyMessage(MSG *pMsg);
  245.23  
  245.24      // called on Toolkit thread from JNI
  245.25      static void _SetLabel(void *param);
   246.1 --- a/src/windows/native/sun/windows/awt_Canvas.cpp	Thu Apr 16 17:42:00 2009 +0100
   246.2 +++ b/src/windows/native/sun/windows/awt_Canvas.cpp	Thu Apr 16 19:10:32 2009 -0700
   246.3 @@ -1,5 +1,5 @@
   246.4  /*
   246.5 - * Copyright 1996-2007 Sun Microsystems, Inc.  All Rights Reserved.
   246.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   246.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   246.8   *
   246.9   * This code is free software; you can redistribute it and/or modify it
  246.10 @@ -26,7 +26,6 @@
  246.11  #include "awt_Toolkit.h"
  246.12  #include "awt_Canvas.h"
  246.13  #include "awt_Win32GraphicsConfig.h"
  246.14 -#include "awt_KeyboardFocusManager.h"
  246.15  #include "awt_Window.h"
  246.16  
  246.17  /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
  246.18 @@ -176,27 +175,9 @@
  246.19  
  246.20  MsgRouting AwtCanvas::HandleEvent(MSG *msg, BOOL synthetic)
  246.21  {
  246.22 -    if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
  246.23 -        /*
  246.24 -         * Fix for BugTraq ID 4041703: keyDown not being invoked.
  246.25 -         * Give the focus to a Canvas or Panel if it doesn't have heavyweight
  246.26 -         * subcomponents so that they will behave the same way as on Solaris
  246.27 -         * providing a possibility of giving keyboard focus to an empty Applet.
  246.28 -         * Since ScrollPane doesn't receive focus on mouse press on Solaris,
  246.29 -         * HandleEvent() is overriden there to do nothing with focus.
  246.30 -         */
  246.31 -        if (AwtComponent::sm_focusOwner != GetHWnd() &&
  246.32 -            ::GetWindow(GetHWnd(), GW_CHILD) == NULL)
  246.33 -        {
  246.34 -            JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  246.35 -            jobject target = GetTarget(env);
  246.36 -            env->CallStaticVoidMethod
  246.37 -                (AwtKeyboardFocusManager::keyboardFocusManagerCls,
  246.38 -                 AwtKeyboardFocusManager::heavyweightButtonDownMID,
  246.39 -                 target, ((jlong)msg->time) & 0xFFFFFFFF);
  246.40 -            env->DeleteLocalRef(target);
  246.41 -            AwtSetFocus();
  246.42 -        }
  246.43 +    if (IsFocusingMouseMessage(msg)) {
  246.44 +        delete msg;
  246.45 +        return mrConsume;
  246.46      }
  246.47      return AwtComponent::HandleEvent(msg, synthetic);
  246.48  }
   247.1 --- a/src/windows/native/sun/windows/awt_Checkbox.cpp	Thu Apr 16 17:42:00 2009 +0100
   247.2 +++ b/src/windows/native/sun/windows/awt_Checkbox.cpp	Thu Apr 16 19:10:32 2009 -0700
   247.3 @@ -26,7 +26,6 @@
   247.4  #include "awt.h"
   247.5  #include "awt_Toolkit.h"
   247.6  #include "awt_Checkbox.h"
   247.7 -#include "awt_KeyboardFocusManager.h"
   247.8  #include "awt_Canvas.h"
   247.9  #include "awt_Window.h"
  247.10  
  247.11 @@ -143,17 +142,6 @@
  247.12      return checkbox;
  247.13  }
  247.14  
  247.15 -BOOL AwtCheckbox::ActMouseMessage(MSG* pMsg) {
  247.16 -    if (!IsFocusingMessage(pMsg->message)) {
  247.17 -        return FALSE;
  247.18 -    }
  247.19 -
  247.20 -    if (pMsg->message == WM_LBUTTONDOWN) {
  247.21 -        SendMessage(BM_SETSTATE, ~SendMessage(BM_GETSTATE, 0, 0), 0);
  247.22 -    }
  247.23 -    return TRUE;
  247.24 -}
  247.25 -
  247.26  MsgRouting
  247.27  AwtCheckbox::WmMouseUp(UINT flags, int x, int y, int button)
  247.28  {
  247.29 @@ -329,18 +317,32 @@
  247.30      return mrDoDefault;
  247.31  }
  247.32  
  247.33 +BOOL AwtCheckbox::IsFocusingMouseMessage(MSG *pMsg) {
  247.34 +    return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP;
  247.35 +}
  247.36 +
  247.37 +BOOL AwtCheckbox::IsFocusingKeyMessage(MSG *pMsg) {
  247.38 +    return (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) &&
  247.39 +            pMsg->wParam == VK_SPACE;
  247.40 +}
  247.41 +
  247.42  MsgRouting AwtCheckbox::HandleEvent(MSG *msg, BOOL synthetic)
  247.43  {
  247.44 -    if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd() &&
  247.45 -        (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
  247.46 -    {
  247.47 -        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  247.48 -        jobject target = GetTarget(env);
  247.49 -        env->CallStaticVoidMethod
  247.50 -            (AwtKeyboardFocusManager::keyboardFocusManagerCls,
  247.51 -             AwtKeyboardFocusManager::heavyweightButtonDownMID,
  247.52 -             target, ((jlong)msg->time) & 0xFFFFFFFF);
  247.53 -        env->DeleteLocalRef(target);
  247.54 +    if (IsFocusingMouseMessage(msg)) {
  247.55 +        SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_LBUTTONDOWN ? TRUE : FALSE));
  247.56 +        delete msg;
  247.57 +        return mrConsume;
  247.58 +    }
  247.59 +    if (IsFocusingKeyMessage(msg)) {
  247.60 +        SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_KEYDOWN ? TRUE : FALSE));
  247.61 +        if (msg->message == WM_KEYDOWN) {
  247.62 +            m_fLButtonDowned = TRUE;
  247.63 +        } else if (m_fLButtonDowned == TRUE) {
  247.64 +            WmNotify(BN_CLICKED);
  247.65 +            m_fLButtonDowned = TRUE;
  247.66 +        }
  247.67 +        delete msg;
  247.68 +        return mrConsume;
  247.69      }
  247.70      return AwtComponent::HandleEvent(msg, synthetic);
  247.71  }
   248.1 --- a/src/windows/native/sun/windows/awt_Checkbox.h	Thu Apr 16 17:42:00 2009 +0100
   248.2 +++ b/src/windows/native/sun/windows/awt_Checkbox.h	Thu Apr 16 19:10:32 2009 -0700
   248.3 @@ -69,7 +69,8 @@
   248.4  
   248.5      MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
   248.6  
   248.7 -    BOOL ActMouseMessage(MSG* pMsg);
   248.8 +    BOOL IsFocusingMouseMessage(MSG *pMsg);
   248.9 +    BOOL IsFocusingKeyMessage(MSG *pMsg);
  248.10  
  248.11      // called on Toolkit thread from JNI
  248.12      static void _SetLabel(void *param);
   249.1 --- a/src/windows/native/sun/windows/awt_Choice.cpp	Thu Apr 16 17:42:00 2009 +0100
   249.2 +++ b/src/windows/native/sun/windows/awt_Choice.cpp	Thu Apr 16 19:10:32 2009 -0700
   249.3 @@ -23,14 +23,17 @@
   249.4   * have any questions.
   249.5   */
   249.6  
   249.7 +#include <windowsx.h>
   249.8 +
   249.9  #include "awt_Toolkit.h"
  249.10  #include "awt_Choice.h"
  249.11 -#include "awt_KeyboardFocusManager.h"
  249.12  #include "awt_Canvas.h"
  249.13  
  249.14  #include "awt_Dimension.h"
  249.15  #include "awt_Container.h"
  249.16  
  249.17 +#include "ComCtl32Util.h"
  249.18 +
  249.19  #include <java_awt_Toolkit.h>
  249.20  #include <java_awt_FontMetrics.h>
  249.21  #include <java_awt_event_InputEvent.h>
  249.22 @@ -71,18 +74,31 @@
  249.23  /* Bug #4338368: consume the spurious MouseUp when the choice loses focus */
  249.24  
  249.25  BOOL AwtChoice::skipNextMouseUp = FALSE;
  249.26 +
  249.27 +BOOL AwtChoice::sm_isMouseMoveInList = FALSE;
  249.28 +
  249.29 +static const UINT MINIMUM_NUMBER_OF_VISIBLE_ITEMS = 8;
  249.30 +
  249.31  /*************************************************************************
  249.32   * AwtChoice class methods
  249.33   */
  249.34  
  249.35  AwtChoice::AwtChoice() {
  249.36 -    killFocusRouting = mrPassAlong;
  249.37 +    m_hList = NULL;
  249.38 +    m_listDefWindowProc = NULL;
  249.39  }
  249.40  
  249.41  LPCTSTR AwtChoice::GetClassName() {
  249.42      return TEXT("COMBOBOX");  /* System provided combobox class */
  249.43  }
  249.44  
  249.45 +void AwtChoice::Dispose() {
  249.46 +    if (m_hList != NULL && m_listDefWindowProc != NULL) {
  249.47 +        ComCtl32Util::GetInstance().UnsubclassHWND(m_hList, ListWindowProc, m_listDefWindowProc);
  249.48 +    }
  249.49 +    AwtComponent::Dispose();
  249.50 +}
  249.51 +
  249.52  AwtChoice* AwtChoice::Create(jobject peer, jobject parent) {
  249.53  
  249.54  
  249.55 @@ -162,6 +178,10 @@
  249.56              env->SetIntField(target, AwtComponent::widthID,  (jint) rc.right);
  249.57              env->SetIntField(target, AwtComponent::heightID, (jint) rc.bottom);
  249.58  
  249.59 +            if (IS_WINXP) {
  249.60 +                ::SendMessage(c->GetHWnd(), CB_SETMINVISIBLE, (WPARAM) MINIMUM_NUMBER_OF_VISIBLE_ITEMS, 0);
  249.61 +            }
  249.62 +
  249.63              env->DeleteLocalRef(dimension);
  249.64          }
  249.65      } catch (...) {
  249.66 @@ -175,24 +195,13 @@
  249.67      return c;
  249.68  }
  249.69  
  249.70 -BOOL AwtChoice::ActMouseMessage(MSG* pMsg) {
  249.71 -    if (!IsFocusingMessage(pMsg->message)) {
  249.72 -        return FALSE;
  249.73 -    }
  249.74 -
  249.75 -    if (pMsg->message == WM_LBUTTONDOWN) {
  249.76 -        SendMessage(CB_SHOWDROPDOWN, ~SendMessage(CB_GETDROPPEDSTATE, 0, 0), 0);
  249.77 -    }
  249.78 -    return TRUE;
  249.79 -}
  249.80 -
  249.81  // calculate height of drop-down list part of the combobox
  249.82  // to show all the items up to a maximum of eight
  249.83  int AwtChoice::GetDropDownHeight()
  249.84  {
  249.85      int itemHeight =(int)::SendMessage(GetHWnd(), CB_GETITEMHEIGHT, (UINT)0,0);
  249.86      int numItemsToShow = (int)::SendMessage(GetHWnd(), CB_GETCOUNT, 0,0);
  249.87 -    numItemsToShow = numItemsToShow > 8 ? 8 : numItemsToShow;
  249.88 +    numItemsToShow = min(MINIMUM_NUMBER_OF_VISIBLE_ITEMS, numItemsToShow);
  249.89      // drop-down height snaps to nearest line, so add a
  249.90      // fudge factor of 1/2 line to ensure last line shows
  249.91      return itemHeight*numItemsToShow + itemHeight/2;
  249.92 @@ -253,6 +262,7 @@
  249.93          }
  249.94          return;
  249.95      }
  249.96 +
  249.97      // don't want to interfere with other controls
  249.98      if (::GetCapture() == NULL) {
  249.99          ::SetCapture(GetHWnd());
 249.100 @@ -370,6 +380,58 @@
 249.101      env->DeleteLocalRef(target);
 249.102  }
 249.103  
 249.104 +static int lastClickX = -1;
 249.105 +static int lastClickY = -1;
 249.106 +
 249.107 +LRESULT CALLBACK AwtChoice::ListWindowProc(HWND hwnd, UINT message,
 249.108 +                                           WPARAM wParam, LPARAM lParam)
 249.109 +{
 249.110 +    /*
 249.111 +     * We don't pass the choice WM_LBUTTONDOWN message. As the result the choice's list
 249.112 +     * doesn't forward mouse messages it captures. Below we do forward what we need.
 249.113 +     */
 249.114 +
 249.115 +    TRY;
 249.116 +
 249.117 +    DASSERT(::IsWindow(hwnd));
 249.118 +
 249.119 +    switch (message) {
 249.120 +        case WM_LBUTTONDOWN: {
 249.121 +            DWORD curPos = ::GetMessagePos();
 249.122 +            lastClickX = GET_X_LPARAM(curPos);
 249.123 +            lastClickY = GET_Y_LPARAM(curPos);
 249.124 +            break;
 249.125 +        }
 249.126 +        case WM_MOUSEMOVE: {
 249.127 +            RECT rect;
 249.128 +            ::GetClientRect(hwnd, &rect);
 249.129 +
 249.130 +            POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
 249.131 +            if (::PtInRect(&rect, pt)) {
 249.132 +                sm_isMouseMoveInList = TRUE;
 249.133 +            }
 249.134 +
 249.135 +            POINT lastPt = {lastClickX, lastClickY};
 249.136 +            ::ScreenToClient(hwnd, &lastPt);
 249.137 +            if (::PtInRect(&rect, lastPt)) {
 249.138 +                break; // ignore when dragging inside the list
 249.139 +            }
 249.140 +        }
 249.141 +        case WM_LBUTTONUP: {
 249.142 +            lastClickX = -1;
 249.143 +            lastClickY = -1;
 249.144 +
 249.145 +            AwtChoice *c = (AwtChoice *)::GetWindowLongPtr(hwnd, GWLP_USERDATA);
 249.146 +            if (c != NULL) {
 249.147 +                // forward the msg to the choice
 249.148 +                c->WindowProc(message, wParam, lParam);
 249.149 +            }
 249.150 +        }
 249.151 +    }
 249.152 +    return ComCtl32Util::GetInstance().DefWindowProc(NULL, hwnd, message, wParam, lParam);
 249.153 +
 249.154 +    CATCH_BAD_ALLOC_RET(0);
 249.155 +}
 249.156  
 249.157  
 249.158  MsgRouting AwtChoice::WmNotify(UINT notifyCode)
 249.159 @@ -379,15 +441,24 @@
 249.160          if (itemSelect != CB_ERR){
 249.161              DoCallback("handleAction", "(I)V", itemSelect);
 249.162          }
 249.163 -    } else if (notifyCode == CBN_DROPDOWN && !IsFocusable()) {
 249.164 -        // While non-focusable Choice is shown all WM_KILLFOCUS messages should be consumed.
 249.165 -        killFocusRouting = mrConsume;
 249.166 -    } else if (notifyCode == CBN_CLOSEUP && !IsFocusable()) {
 249.167 -        // When non-focusable Choice is about to close, send it synthetic WM_KILLFOCUS
 249.168 -        // message that should be processed by the native widget only. This will allow
 249.169 -        // the native widget to properly process WM_KILLFOCUS that was earlier consumed.
 249.170 -        killFocusRouting = mrDoDefault;
 249.171 -        ::PostMessage(GetHWnd(), WM_KILLFOCUS, (LPARAM)sm_focusOwner, 0);
 249.172 +    } else if (notifyCode == CBN_DROPDOWN) {
 249.173 +
 249.174 +        if (m_hList == NULL) {
 249.175 +            COMBOBOXINFO cbi;
 249.176 +            cbi.cbSize = sizeof(COMBOBOXINFO);
 249.177 +            ::GetComboBoxInfo(GetHWnd(), &cbi);
 249.178 +            m_hList = cbi.hwndList;
 249.179 +            m_listDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(m_hList, ListWindowProc);
 249.180 +            DASSERT(::GetWindowLongPtr(m_hList, GWLP_USERDATA) == NULL);
 249.181 +            ::SetWindowLongPtr(m_hList, GWLP_USERDATA, (LONG_PTR)this);
 249.182 +        }
 249.183 +        sm_isMouseMoveInList = FALSE;
 249.184 +
 249.185 +        // Clicking in the dropdown list steals focus from the proxy.
 249.186 +        // So, set the focus-restore flag up.
 249.187 +        SetRestoreFocus(TRUE);
 249.188 +    } else if (notifyCode == CBN_CLOSEUP) {
 249.189 +        SetRestoreFocus(FALSE);
 249.190      }
 249.191      return mrDoDefault;
 249.192  }
 249.193 @@ -414,19 +485,7 @@
 249.194  AwtChoice::WmKillFocus(HWND hWndGotFocus)
 249.195  {
 249.196      skipNextMouseUp = TRUE;
 249.197 -
 249.198 -    switch (killFocusRouting) {
 249.199 -    case mrConsume:
 249.200 -        return mrConsume;
 249.201 -    case mrDoDefault:
 249.202 -        killFocusRouting = mrPassAlong;
 249.203 -        return mrDoDefault;
 249.204 -    case mrPassAlong:
 249.205 -        return AwtComponent::WmKillFocus(hWndGotFocus);
 249.206 -    }
 249.207 -
 249.208 -    DASSERT(false); // must never reach here
 249.209 -    return mrDoDefault;
 249.210 +    return AwtComponent::WmKillFocus(hWndGotFocus);
 249.211  }
 249.212  
 249.213  MsgRouting
 249.214 @@ -441,27 +500,17 @@
 249.215  
 249.216  MsgRouting AwtChoice::HandleEvent(MSG *msg, BOOL synthetic)
 249.217  {
 249.218 -    /*
 249.219 -     * 6366006
 249.220 -     * Note: the event can be sent in two cases:
 249.221 -     *       1) The Choice is closed and user clicks on it to drop it down.
 249.222 -     *       2) The Choice is non-focusable, it's droped down, user
 249.223 -     *          clicks on it (or outside) to close it.
 249.224 -     *       So, if the Choice is in droped down state, we shouldn't call
 249.225 -     *       heavyweightButtonDown() method. Otherwise it will set a typeahead marker
 249.226 -     *       that won't be removed, because no focus events will be generated.
 249.227 -     */
 249.228 -    if (AwtComponent::sm_focusOwner != GetHWnd() &&
 249.229 -        (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) &&
 249.230 -        !IsChoiceOpened())
 249.231 +    if (IsFocusingMouseMessage(msg)) {
 249.232 +        SendMessage(CB_SHOWDROPDOWN, ~SendMessage(CB_GETDROPPEDSTATE, 0, 0), 0);
 249.233 +        delete msg;
 249.234 +        return mrConsume;
 249.235 +    }
 249.236 +    // To simulate the native behavior, we close the list on WM_LBUTTONUP if
 249.237 +    // WM_MOUSEMOVE has been dedected on the list since it has been dropped down.
 249.238 +    if (msg->message == WM_LBUTTONUP && SendMessage(CB_GETDROPPEDSTATE, 0, 0) &&
 249.239 +        sm_isMouseMoveInList)
 249.240      {
 249.241 -        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 249.242 -        jobject target = GetTarget(env);
 249.243 -        env->CallStaticVoidMethod
 249.244 -            (AwtKeyboardFocusManager::keyboardFocusManagerCls,
 249.245 -             AwtKeyboardFocusManager::heavyweightButtonDownMID,
 249.246 -             target, ((jlong)msg->time) & 0xFFFFFFFF);
 249.247 -        env->DeleteLocalRef(target);
 249.248 +        SendMessage(CB_SHOWDROPDOWN, FALSE, 0);
 249.249      }
 249.250      return AwtComponent::HandleEvent(msg, synthetic);
 249.251  }
 249.252 @@ -618,6 +667,26 @@
 249.253      env->DeleteGlobalRef(choice);
 249.254  }
 249.255  
 249.256 +void AwtChoice::_CloseList(void *param)
 249.257 +{
 249.258 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 249.259 +
 249.260 +    jobject choice = (jobject)param;
 249.261 +
 249.262 +    AwtChoice *c = NULL;
 249.263 +
 249.264 +    PDATA pData;
 249.265 +    JNI_CHECK_PEER_GOTO(choice, done);
 249.266 +
 249.267 +    c = (AwtChoice *)pData;
 249.268 +    if (::IsWindow(c->GetHWnd()) && c->SendMessage(CB_GETDROPPEDSTATE, 0, 0)) {
 249.269 +        c->SendMessage(CB_SHOWDROPDOWN, FALSE, 0);
 249.270 +    }
 249.271 +
 249.272 +done:
 249.273 +    env->DeleteGlobalRef(choice);
 249.274 +}
 249.275 +
 249.276  /************************************************************************
 249.277   * WChoicePeer native methods
 249.278   */
 249.279 @@ -752,6 +821,23 @@
 249.280      CATCH_BAD_ALLOC;
 249.281  }
 249.282  
 249.283 +/*
 249.284 + * Class:     sun_awt_windows_WChoicePeer
 249.285 + * Method:    closeList
 249.286 + * Signature: ()V
 249.287 + */
 249.288 +JNIEXPORT void JNICALL
 249.289 +Java_sun_awt_windows_WChoicePeer_closeList(JNIEnv *env, jobject self)
 249.290 +{
 249.291 +    TRY;
 249.292 +
 249.293 +    jobject selfGlobalRef = env->NewGlobalRef(self);
 249.294 +
 249.295 +    AwtToolkit::GetInstance().SyncCall(AwtChoice::_CloseList, (void *)selfGlobalRef);
 249.296 +    // global ref is deleted in _CloseList
 249.297 +
 249.298 +    CATCH_BAD_ALLOC;
 249.299 +}
 249.300  } /* extern "C" */
 249.301  
 249.302  
   250.1 --- a/src/windows/native/sun/windows/awt_Choice.h	Thu Apr 16 17:42:00 2009 +0100
   250.2 +++ b/src/windows/native/sun/windows/awt_Choice.h	Thu Apr 16 19:10:32 2009 -0700
   250.3 @@ -43,6 +43,8 @@
   250.4      virtual LPCTSTR GetClassName();
   250.5      static AwtChoice* Create(jobject peer, jobject hParent);
   250.6  
   250.7 +    virtual void Dispose();
   250.8 +
   250.9      virtual void Reshape(int x, int y, int w, int h);
  250.10      void ResetDropDownHeight();
  250.11      int GetDropDownHeight();
  250.12 @@ -75,9 +77,6 @@
  250.13      virtual void SetDragCapture(UINT flags);
  250.14      virtual void ReleaseDragCapture(UINT flags);
  250.15  
  250.16 -    BOOL ActMouseMessage(MSG * pMsg);
  250.17 -    INLINE BOOL AwtChoice::IsChoiceOpened() {return SendMessage(CB_GETDROPPEDSTATE, 0, 0);}
  250.18 -
  250.19      static BOOL mouseCapture;
  250.20      static BOOL skipNextMouseUp;
  250.21  
  250.22 @@ -87,11 +86,16 @@
  250.23      static void _AddItems(void *param);
  250.24      static void _Remove(void *param);
  250.25      static void _RemoveAll(void *param);
  250.26 +    static void _CloseList(void *param);
  250.27  
  250.28  private:
  250.29      int GetFieldHeight();
  250.30      int GetTotalHeight();
  250.31 -    MsgRouting killFocusRouting;
  250.32 +    static BOOL sm_isMouseMoveInList;
  250.33 +    HWND m_hList;
  250.34 +    WNDPROC m_listDefWindowProc;
  250.35 +    static LRESULT CALLBACK ListWindowProc(HWND hwnd, UINT message,
  250.36 +                                           WPARAM wParam, LPARAM lParam);
  250.37  };
  250.38  
  250.39  #endif /* AWT_CHOICE_H */
   251.1 --- a/src/windows/native/sun/windows/awt_Component.cpp	Thu Apr 16 17:42:00 2009 +0100
   251.2 +++ b/src/windows/native/sun/windows/awt_Component.cpp	Thu Apr 16 19:10:32 2009 -0700
   251.3 @@ -1,5 +1,5 @@
   251.4  /*
   251.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   251.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   251.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   251.8   *
   251.9   * This code is free software; you can redistribute it and/or modify it
  251.10 @@ -38,7 +38,6 @@
  251.11  #include "awt_InputTextInfor.h"
  251.12  #include "awt_Insets.h"
  251.13  #include "awt_KeyEvent.h"
  251.14 -#include "awt_KeyboardFocusManager.h"
  251.15  #include "awt_MenuItem.h"
  251.16  #include "awt_MouseEvent.h"
  251.17  #include "awt_Palette.h"
  251.18 @@ -58,7 +57,6 @@
  251.19  #include <java_awt_Event.h>
  251.20  #include <java_awt_event_KeyEvent.h>
  251.21  #include <java_awt_Insets.h>
  251.22 -#include <java_awt_KeyboardFocusManager.h>
  251.23  #include <sun_awt_windows_WPanelPeer.h>
  251.24  #include <java_awt_event_InputEvent.h>
  251.25  #include <java_awt_event_InputMethodEvent.h>
  251.26 @@ -94,12 +92,13 @@
  251.27      BOOL g_bUserHasChangedInputLang = FALSE;
  251.28  }
  251.29  
  251.30 -BOOL AwtComponent::sm_suppressFocusAndActivation;
  251.31 -HWND AwtComponent::sm_focusOwner;
  251.32 -HWND AwtComponent::sm_focusedWindow;
  251.33 -HWND AwtComponent::sm_realFocusOpposite;
  251.34 +BOOL AwtComponent::sm_suppressFocusAndActivation = FALSE;
  251.35 +BOOL AwtComponent::sm_restoreFocusAndActivation = FALSE;
  251.36 +HWND AwtComponent::sm_focusOwner = NULL;
  251.37 +HWND AwtComponent::sm_focusedWindow = NULL;
  251.38  BOOL AwtComponent::sm_bMenuLoop = FALSE;
  251.39  AwtComponent* AwtComponent::sm_getComponentCache = NULL;
  251.40 +BOOL AwtComponent::sm_inSynthesizeFocus = FALSE;
  251.41  
  251.42  /************************************************************************/
  251.43  // Struct for _Reshape() and ReshapeNoCheck() methods
  251.44 @@ -123,15 +122,6 @@
  251.45      jobject component;
  251.46      jobject font;
  251.47  };
  251.48 -// Struct for _RequestFocus() method
  251.49 -struct RequestFocusStruct {
  251.50 -    jobject component;
  251.51 -    jobject lightweightChild;
  251.52 -    jboolean temporary;
  251.53 -    jboolean focusedWindowChangeAllowed;
  251.54 -    jlong time;
  251.55 -    jobject cause;
  251.56 -};
  251.57  // Struct for _CreatePrintedPixels() method
  251.58  struct CreatePrintedPixelsStruct {
  251.59      jobject component;
  251.60 @@ -149,6 +139,16 @@
  251.61      jobject window;
  251.62      RECT *insets;
  251.63  };
  251.64 +// Struct for _SetZOrder function
  251.65 +struct SetZOrderStruct {
  251.66 +    jobject component;
  251.67 +    jlong above;
  251.68 +};
  251.69 +// Struct for _SetFocus function
  251.70 +struct SetFocusStruct {
  251.71 +    jobject component;
  251.72 +    jboolean doSetFocus;
  251.73 +};
  251.74  /************************************************************************/
  251.75  
  251.76  //////////////////////////////////////////////////////////////////////////
  251.77 @@ -199,8 +199,7 @@
  251.78  BOOL AwtComponent::sm_rtlReadingOrder =
  251.79      PRIMARYLANGID(GetInputLanguage()) == LANG_ARABIC;
  251.80  
  251.81 -UINT AwtComponent::sm_95WheelMessage = WM_NULL;
  251.82 -UINT AwtComponent::sm_95WheelSupport = WM_NULL;
  251.83 +BOOL AwtComponent::sm_PrimaryDynamicTableBuilt = FALSE;
  251.84  
  251.85  HWND AwtComponent::sm_cursorOn;
  251.86  BOOL AwtComponent::m_QueryNewPaletteCalled = FALSE;
  251.87 @@ -208,8 +207,6 @@
  251.88  CriticalSection windowMoveLock;
  251.89  BOOL windowMoveLockHeld = FALSE;
  251.90  
  251.91 -int AwtComponent::sm_wheelRotationAmount = 0;
  251.92 -
  251.93  /************************************************************************
  251.94   * AwtComponent methods
  251.95   */
  251.96 @@ -237,7 +234,6 @@
  251.97      m_InputMethod = NULL;
  251.98      m_useNativeCompWindow = TRUE;
  251.99      m_PendingLeadByte = 0;
 251.100 -    m_skipNextSetFocus = FALSE;
 251.101      m_bitsCandType = 0;
 251.102  
 251.103      windowMoveLockPosX = 0;
 251.104 @@ -250,6 +246,12 @@
 251.105      m_bSubclassed = FALSE;
 251.106  
 251.107      m_MessagesProcessing = 0;
 251.108 +    m_wheelRotationAmount = 0;
 251.109 +    if (!sm_PrimaryDynamicTableBuilt) {
 251.110 +        // do it once.
 251.111 +        AwtComponent::BuildPrimaryDynamicTable();
 251.112 +        sm_PrimaryDynamicTableBuilt = TRUE;
 251.113 +    }
 251.114  }
 251.115  
 251.116  AwtComponent::~AwtComponent()
 251.117 @@ -265,8 +267,7 @@
 251.118       * the native one anymore. So we can safely destroy component's
 251.119       * handle.
 251.120       */
 251.121 -    AwtToolkit::DestroyComponentHWND(m_hwnd);
 251.122 -    m_hwnd = NULL;
 251.123 +    DestroyHWnd();
 251.124  
 251.125      if (sm_getComponentCache == this) {
 251.126          sm_getComponentCache = NULL;
 251.127 @@ -275,15 +276,8 @@
 251.128  
 251.129  void AwtComponent::Dispose()
 251.130  {
 251.131 -    if (sm_focusOwner == GetHWnd()) {
 251.132 -        ::SetFocus(NULL);
 251.133 -    }
 251.134 -    if (sm_focusedWindow == GetHWnd()) {
 251.135 -        sm_focusedWindow = NULL;
 251.136 -    }
 251.137 -    if (sm_realFocusOpposite == GetHWnd()) {
 251.138 -        sm_realFocusOpposite = NULL;
 251.139 -    }
 251.140 +    // NOTE: in case the component/toplevel was focused, Java should
 251.141 +    // have already taken care of proper transfering it or clearing.
 251.142  
 251.143      if (m_hdwp != NULL) {
 251.144      // end any deferred window positioning, regardless
 251.145 @@ -588,6 +582,17 @@
 251.146  }
 251.147  
 251.148  /*
 251.149 + * Destroy this window's HWND
 251.150 + */
 251.151 +void AwtComponent::DestroyHWnd() {
 251.152 +    if (m_hwnd != NULL) {
 251.153 +        AwtToolkit::DestroyComponentHWND(m_hwnd);
 251.154 +        //AwtToolkit::DestroyComponent(this);
 251.155 +        m_hwnd = NULL;
 251.156 +    }
 251.157 +}
 251.158 +
 251.159 +/*
 251.160   * Returns hwnd for target on non Toolkit thread
 251.161   */
 251.162  HWND
 251.163 @@ -888,27 +893,8 @@
 251.164  
 251.165  void AwtComponent::Hide()
 251.166  {
 251.167 -    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.168 -    jobject peer = GetPeer(env);
 251.169 -    BOOL oldValue = sm_suppressFocusAndActivation;
 251.170      m_visible = false;
 251.171 -
 251.172 -    // On disposal the focus owner actually loses focus at the moment of hiding.
 251.173 -    // So, focus change suppression (if requested) should be made here.
 251.174 -    if (GetHWnd() == sm_focusOwner &&
 251.175 -        !JNU_CallMethodByName(env, NULL, peer, "isAutoFocusTransferOnDisposal", "()Z").z)
 251.176 -   {
 251.177 -        sm_suppressFocusAndActivation = TRUE;
 251.178 -        // The native system may autotransfer focus on hiding to the parent
 251.179 -        // of the component. Nevertheless this focus change won't be posted
 251.180 -        // to the Java level, we're better to avoid this. Anyway, after
 251.181 -        // the disposal focus should be requested to the right component.
 251.182 -        ::SetFocus(NULL);
 251.183 -        sm_focusOwner = NULL;
 251.184 -    }
 251.185      ::ShowWindow(GetHWnd(), SW_HIDE);
 251.186 -
 251.187 -    sm_suppressFocusAndActivation = oldValue;
 251.188  }
 251.189  
 251.190  BOOL
 251.191 @@ -1252,6 +1238,7 @@
 251.192          WIN_MSG(WM_AWT_COMPONENT_SHOW)
 251.193          WIN_MSG(WM_AWT_COMPONENT_HIDE)
 251.194          WIN_MSG(WM_AWT_COMPONENT_SETFOCUS)
 251.195 +        WIN_MSG(WM_AWT_WINDOW_SETACTIVE)
 251.196          WIN_MSG(WM_AWT_LIST_SETMULTISELECT)
 251.197          WIN_MSG(WM_AWT_HANDLE_EVENT)
 251.198          WIN_MSG(WM_AWT_PRINT_COMPONENT)
 251.199 @@ -1503,67 +1490,54 @@
 251.200            sm_bMenuLoop = FALSE;
 251.201            break;
 251.202  
 251.203 +      // We don't expect any focus messages on non-proxy component,
 251.204 +      // except those that came from Java.
 251.205        case WM_SETFOCUS:
 251.206 -          mr = (!sm_suppressFocusAndActivation && !m_skipNextSetFocus)
 251.207 -              ? WmSetFocus((HWND)wParam) : mrConsume;
 251.208 -          m_skipNextSetFocus = FALSE;
 251.209 +          if (sm_inSynthesizeFocus) {
 251.210 +              mr = WmSetFocus((HWND)wParam);
 251.211 +          } else {
 251.212 +              mr = mrConsume;
 251.213 +          }
 251.214            break;
 251.215        case WM_KILLFOCUS:
 251.216 -          mr = (!sm_suppressFocusAndActivation)
 251.217 -              ? WmKillFocus((HWND)wParam) : mrConsume;
 251.218 +          if (sm_inSynthesizeFocus) {
 251.219 +              mr = WmKillFocus((HWND)wParam);
 251.220 +          } else {
 251.221 +              mr = mrConsume;
 251.222 +          }
 251.223            break;
 251.224 -      case WM_ACTIVATE:
 251.225 -      {
 251.226 +      case WM_ACTIVATE: {
 251.227            UINT nState = LOWORD(wParam);
 251.228            BOOL fMinimized = (BOOL)HIWORD(wParam);
 251.229 +          mr = mrConsume;
 251.230 +
 251.231            if (!sm_suppressFocusAndActivation &&
 251.232                (!fMinimized || (nState == WA_INACTIVE)))
 251.233            {
 251.234                mr = WmActivate(nState, fMinimized, (HWND)lParam);
 251.235 -              m_skipNextSetFocus = FALSE;
 251.236 +
 251.237                // When the window is deactivated, send WM_IME_ENDCOMPOSITION
 251.238                // message to deactivate the composition window so that
 251.239                // it won't receive keyboard input focus.
 251.240                if (ImmGetContext() != NULL) {
 251.241                    DefWindowProc(WM_IME_ENDCOMPOSITION, 0, 0);
 251.242                }
 251.243 -          } else {
 251.244 -              if (!sm_suppressFocusAndActivation
 251.245 -                  && fMinimized && (nState != WA_INACTIVE))
 251.246 -              {
 251.247 -                  m_skipNextSetFocus = TRUE;
 251.248 -              }
 251.249 -              mr = mrConsume;
 251.250            }
 251.251 +          break;
 251.252        }
 251.253 -      break;
 251.254 -    case WM_MOUSEACTIVATE: {
 251.255 -        AwtWindow * window = (AwtWindow*)GetComponent((HWND)wParam);
 251.256 -        if (window != NULL) {
 251.257 -            if (!window->IsFocusableWindow()) {
 251.258 -                // if it is non-focusable window we can return
 251.259 -                // MA_NOACTIVATExxx and it will not be activated. We
 251.260 -                // return NOACTIVATE for a client part of the window so we
 251.261 -                // receive mouse event responsible for activation. We
 251.262 -                // return NOACTIVEA for Frame's non-client so user be able
 251.263 -                // to resize and move frames by title and borders. We
 251.264 -                // return NOACTIVATEANDEAT for Window non-client area as
 251.265 -                // there is noone to listen for this event.
 251.266 -                mr = mrConsume;
 251.267 -                if ((window == this) && LOWORD(lParam) != HTCLIENT ) {
 251.268 -                    if (window->IsSimpleWindow()) {
 251.269 -                        retValue = MA_NOACTIVATEANDEAT;
 251.270 -                    } else {
 251.271 -                        retValue = MA_NOACTIVATE;
 251.272 -                    }
 251.273 -                } else {
 251.274 -                    retValue = MA_NOACTIVATE;
 251.275 -                }
 251.276 -            }
 251.277 -        }
 251.278 -        break;
 251.279 -    }
 251.280 -
 251.281 +      case WM_MOUSEACTIVATE: {
 251.282 +          AwtWindow *window = GetContainer();
 251.283 +          if (window && window->IsFocusableWindow()) {
 251.284 +              // AWT/Swing will later request focus to a proper component
 251.285 +              // on handling the Java mouse event. Anyway, we have to
 251.286 +              // activate the window here as it works both for AWT & Swing.
 251.287 +              // Do it in our own fassion,
 251.288 +              window->AwtSetActiveWindow(TRUE, LOWORD(lParam)/*hittest*/);
 251.289 +          }
 251.290 +          mr = mrConsume;
 251.291 +          retValue = MA_NOACTIVATE;
 251.292 +          break;
 251.293 +      }
 251.294        case WM_CTLCOLORMSGBOX:
 251.295        case WM_CTLCOLOREDIT:
 251.296        case WM_CTLCOLORLISTBOX:
 251.297 @@ -1920,7 +1894,15 @@
 251.298            break;
 251.299  
 251.300        case WM_AWT_COMPONENT_SETFOCUS:
 251.301 -          retValue = (LRESULT)WmComponentSetFocus((WmComponentSetFocusData *)wParam);
 251.302 +          if ((BOOL)wParam) {
 251.303 +              retValue = SynthesizeWmSetFocus(GetHWnd(), NULL);
 251.304 +          } else {
 251.305 +              retValue = SynthesizeWmKillFocus(GetHWnd(), NULL);
 251.306 +          }
 251.307 +          mr = mrConsume;
 251.308 +          break;
 251.309 +      case WM_AWT_WINDOW_SETACTIVE:
 251.310 +          retValue = (LRESULT)((AwtWindow*)this)->AwtSetActiveWindow((BOOL)wParam);
 251.311            mr = mrConsume;
 251.312            break;
 251.313  
 251.314 @@ -2048,188 +2030,16 @@
 251.315  
 251.316  MsgRouting AwtComponent::WmSetFocus(HWND hWndLostFocus)
 251.317  {
 251.318 -    if (sm_focusOwner == GetHWnd()) {
 251.319 -        sm_realFocusOpposite = NULL;
 251.320 -        return mrConsume;
 251.321 -    }
 251.322 -
 251.323 -    HWND toplevelHWnd = AwtComponent::GetTopLevelParentForWindow(GetHWnd());
 251.324 -    AwtComponent *comp = AwtComponent::GetComponent(toplevelHWnd);
 251.325 -
 251.326 -    if (comp && comp->IsEmbeddedFrame() &&
 251.327 -        !((AwtFrame*)comp)->activateEmbeddedFrameOnSetFocus(hWndLostFocus))
 251.328 -    {
 251.329 -        // Fix for 6562716.
 251.330 -        // In order that AwtSetFocus() returns FALSE.
 251.331 -        sm_suppressFocusAndActivation = TRUE;
 251.332 -        ::SetFocus(NULL);
 251.333 -        sm_suppressFocusAndActivation = FALSE;
 251.334 -
 251.335 -        return mrConsume;
 251.336 -    }
 251.337 -
 251.338 -    sm_focusOwner = GetHWnd();
 251.339 -    sm_focusedWindow = toplevelHWnd;
 251.340 -
 251.341 -    if (sm_realFocusOpposite != NULL) {
 251.342 -        hWndLostFocus = sm_realFocusOpposite;
 251.343 -        sm_realFocusOpposite = NULL;
 251.344 -    }
 251.345 -
 251.346 -    sm_wheelRotationAmount = 0;
 251.347 -
 251.348 -    SendFocusEvent(java_awt_event_FocusEvent_FOCUS_GAINED, hWndLostFocus);
 251.349 -
 251.350 +    m_wheelRotationAmount = 0;
 251.351      return mrDoDefault;
 251.352  }
 251.353  
 251.354  MsgRouting AwtComponent::WmKillFocus(HWND hWndGotFocus)
 251.355  {
 251.356 -    if (sm_focusOwner != NULL && sm_focusOwner == hWndGotFocus) {
 251.357 -        return mrConsume;
 251.358 -    }
 251.359 -
 251.360 -    if (sm_focusOwner != GetHWnd()) {
 251.361 -        if (sm_focusOwner != NULL) {
 251.362 -            if (hWndGotFocus != NULL &&
 251.363 -                AwtComponent::GetComponent(hWndGotFocus) != NULL)
 251.364 -            {
 251.365 -                sm_realFocusOpposite = sm_focusOwner;
 251.366 -            }
 251.367 -            ::SendMessage(sm_focusOwner, WM_KILLFOCUS, (WPARAM)hWndGotFocus,
 251.368 -                          0);
 251.369 -        }
 251.370 -        return mrConsume;
 251.371 -    }
 251.372 -
 251.373 -    AwtComponent *comp = AwtComponent::GetComponent(sm_focusedWindow);
 251.374 -
 251.375 -    if (comp && comp->IsEmbeddedFrame()) {
 251.376 -        ((AwtFrame*)comp)->deactivateEmbeddedFrameOnKillFocus(hWndGotFocus);
 251.377 -    }
 251.378 -
 251.379 -    sm_focusOwner = NULL;
 251.380 -    sm_wheelRotationAmount = 0;
 251.381 -
 251.382 -    SendFocusEvent(java_awt_event_FocusEvent_FOCUS_LOST, hWndGotFocus);
 251.383 +    m_wheelRotationAmount = 0;
 251.384      return mrDoDefault;
 251.385  }
 251.386  
 251.387 -jboolean
 251.388 -AwtComponent::WmComponentSetFocus(WmComponentSetFocusData *data)
 251.389 -{
 251.390 -    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.391 -    if (env->EnsureLocalCapacity(1) < 0) {
 251.392 -        env->DeleteGlobalRef(data->lightweightChild);
 251.393 -        delete data;
 251.394 -        return JNI_FALSE;
 251.395 -    }
 251.396 -
 251.397 -    jboolean result = JNI_FALSE;
 251.398 -
 251.399 -    BOOL setSuppressFocusAndActivation = FALSE;
 251.400 -
 251.401 -    /*
 251.402 -     * This is a fix for 4628933.
 251.403 -     * If sm_suppressFocusAndActivation is TRUE here then
 251.404 -     * this means that we dispatch WM_COMPONENT_SET_FOCUS inside
 251.405 -     * dispatching bounce activation, this unlikely but possible.
 251.406 -     * So we reset sm_suppressFocusAndActivation to give a chance
 251.407 -     * to dispatch focus events which will generate due this focus
 251.408 -     * request to Java.
 251.409 -     *
 251.410 -     * son@sparc.spb.su
 251.411 -     */
 251.412 -    if (sm_suppressFocusAndActivation) {
 251.413 -        sm_suppressFocusAndActivation = FALSE;
 251.414 -        setSuppressFocusAndActivation = TRUE;
 251.415 -    }
 251.416 -
 251.417 -    jobject heavyweight = GetTarget(env);
 251.418 -    jint retval = env->CallStaticIntMethod
 251.419 -        (AwtKeyboardFocusManager::keyboardFocusManagerCls,
 251.420 -         AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID,
 251.421 -         heavyweight, data->lightweightChild, data->temporary,
 251.422 -         data->focusedWindowChangeAllowed, data->time, data->cause);
 251.423 -
 251.424 -    if (retval == java_awt_KeyboardFocusManager_SNFH_SUCCESS_HANDLED) {
 251.425 -        result = JNI_TRUE;
 251.426 -    } else if (retval == java_awt_KeyboardFocusManager_SNFH_SUCCESS_PROCEED) {
 251.427 -        result = (AwtSetFocus()) ? JNI_TRUE : JNI_FALSE;
 251.428 -        if (result == JNI_FALSE) {
 251.429 -            env->CallStaticVoidMethod
 251.430 -                (AwtKeyboardFocusManager::keyboardFocusManagerCls,
 251.431 -                 AwtKeyboardFocusManager::removeLastFocusRequestMID,
 251.432 -                 heavyweight);
 251.433 -        }
 251.434 -    } else {
 251.435 -        DASSERT(retval == java_awt_KeyboardFocusManager_SNFH_FAILURE);
 251.436 -        result = JNI_FALSE;
 251.437 -    }
 251.438 -    env->DeleteLocalRef(heavyweight);
 251.439 -
 251.440 -    /*
 251.441 -     * Set sm_suppressFocusAndActivation back to TRUE if needed.
 251.442 -     * Fix for 4628933 (son@sparc.spb.su)
 251.443 -     */
 251.444 -   if (setSuppressFocusAndActivation) {
 251.445 -        sm_suppressFocusAndActivation = TRUE;
 251.446 -    }
 251.447 -
 251.448 -    env->DeleteGlobalRef(data->lightweightChild);
 251.449 -    delete data;
 251.450 -    return result;
 251.451 -}
 251.452 -
 251.453 -BOOL
 251.454 -AwtComponent::AwtSetFocus()
 251.455 -{
 251.456 -    HWND hwnd = GetHWnd();
 251.457 -
 251.458 -    if (sm_focusOwner == hwnd) {
 251.459 -        return TRUE;
 251.460 -    }
 251.461 -
 251.462 -    HWND fgWindow = ::GetForegroundWindow();
 251.463 -    if (NULL != fgWindow) {
 251.464 -        DWORD fgProcessID;
 251.465 -        ::GetWindowThreadProcessId(fgWindow, &fgProcessID);
 251.466 -
 251.467 -        if (fgProcessID != ::GetCurrentProcessId()
 251.468 -            && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID))
 251.469 -        {
 251.470 -            // fix for 6458497.  we shouldn't request focus if it is out of both
 251.471 -            // our and embedder process.
 251.472 -            return FALSE;
 251.473 -        }
 251.474 -    }
 251.475 -
 251.476 -    AwtWindow *pCont = GetContainer();
 251.477 -    AwtFrame *owner = pCont ? pCont->GetOwningFrameOrDialog() : NULL;
 251.478 -
 251.479 -    if (owner == NULL) {
 251.480 -        ::SetFocus(hwnd);
 251.481 -        if (::GetFocus() != hwnd) {
 251.482 -            return FALSE;
 251.483 -        }
 251.484 -    } else {
 251.485 -        HWND oldFocusOwner = sm_focusOwner;
 251.486 -        if (oldFocusOwner != NULL) {
 251.487 -            ::SendMessage(oldFocusOwner, WM_KILLFOCUS, (WPARAM)hwnd, 0);
 251.488 -        }
 251.489 -
 251.490 -        sm_suppressFocusAndActivation = TRUE;
 251.491 -        ::SetActiveWindow(owner->GetHWnd());
 251.492 -        ::SetFocus(owner->GetProxyFocusOwner());
 251.493 -        sm_suppressFocusAndActivation = FALSE;
 251.494 -
 251.495 -        sm_focusedWindow = GetTopLevelParentForWindow(GetHWnd());
 251.496 -        ::SendMessage(hwnd, WM_SETFOCUS, (WPARAM)oldFocusOwner, 0);
 251.497 -    }
 251.498 -
 251.499 -    return TRUE;
 251.500 -}
 251.501 -
 251.502  MsgRouting AwtComponent::WmCtlColor(HDC hDC, HWND hCtrl,
 251.503                                      UINT ctlColor, HBRUSH& retBrush)
 251.504  {
 251.505 @@ -2524,7 +2334,6 @@
 251.506              AwtWindow::GetGrabbedWindow()->Ungrab();
 251.507          }
 251.508      }
 251.509 -
 251.510      return mrConsume;
 251.511  }
 251.512  
 251.513 @@ -2638,11 +2447,11 @@
 251.514      BOOL result;
 251.515      UINT platformLines;
 251.516  
 251.517 -    sm_wheelRotationAmount += wheelRotation;
 251.518 +    m_wheelRotationAmount += wheelRotation;
 251.519  
 251.520      // AWT interprets wheel rotation differently than win32, so we need to
 251.521      // decode wheel amount.
 251.522 -    jint roundedWheelRotation = sm_wheelRotationAmount / (-1 * WHEEL_DELTA);
 251.523 +    jint roundedWheelRotation = m_wheelRotationAmount / (-1 * WHEEL_DELTA);
 251.524      jdouble preciseWheelRotation = (jdouble) wheelRotation / (-1 * WHEEL_DELTA);
 251.525  
 251.526      MSG msg;
 251.527 @@ -2668,7 +2477,9 @@
 251.528                          eventPt.x, eventPt.y, GetJavaModifiers(), 0, 0, scrollType,
 251.529                          scrollLines, roundedWheelRotation, preciseWheelRotation, &msg);
 251.530  
 251.531 -    sm_wheelRotationAmount %= WHEEL_DELTA;
 251.532 +    m_wheelRotationAmount %= WHEEL_DELTA;
 251.533 +    // this message could be propagated up to the parent chain
 251.534 +    // by the mouse message post processors
 251.535      return mrConsume;
 251.536  }
 251.537  
 251.538 @@ -3088,6 +2899,19 @@
 251.539      {0,0}
 251.540  };
 251.541  
 251.542 +// The full map of the current keyboard state including
 251.543 +// windows virtual key, scancode, java virtual key, and unicode
 251.544 +// for this key sans modifiers.
 251.545 +// All but first element may be 0.
 251.546 +// XXX in the update releases this is an addition to the unchanged existing code
 251.547 +struct DynPrimaryKeymapEntry {
 251.548 +    UINT wkey;
 251.549 +    UINT scancode;
 251.550 +    UINT jkey;
 251.551 +    WCHAR unicode;
 251.552 +};
 251.553 +
 251.554 +static DynPrimaryKeymapEntry dynPrimaryKeymap[256];
 251.555  
 251.556  void
 251.557  AwtComponent::InitDynamicKeyMapTable()
 251.558 @@ -3096,6 +2920,8 @@
 251.559  
 251.560      if (!kbdinited) {
 251.561          AwtComponent::BuildDynamicKeyMapTable();
 251.562 +        // We cannot build it here since JNI is not available yet:
 251.563 +        //AwtComponent::BuildPrimaryDynamicTable();
 251.564          kbdinited = TRUE;
 251.565      }
 251.566  }
 251.567 @@ -3321,7 +3147,11 @@
 251.568  
 251.569      for (int j = 0; dynamicKeyMapTable[j].windowsKey != 0; j++) {
 251.570          if (dynamicKeyMapTable[j].windowsKey == windowsKey) {
 251.571 -            return dynamicKeyMapTable[j].javaKey;
 251.572 +            if (dynamicKeyMapTable[j].javaKey != java_awt_event_KeyEvent_VK_UNDEFINED) {
 251.573 +                return dynamicKeyMapTable[j].javaKey;
 251.574 +            }else{
 251.575 +                break;
 251.576 +            }
 251.577          }
 251.578      }
 251.579  
 251.580 @@ -3398,6 +3228,122 @@
 251.581  
 251.582      return FALSE;
 251.583  }
 251.584 +static void
 251.585 +resetKbdState( BYTE kstate[256]) {
 251.586 +    BYTE tmpState[256];
 251.587 +    WCHAR wc[2];
 251.588 +    memmove(tmpState, kstate, sizeof(kstate));
 251.589 +    tmpState[VK_SHIFT] = 0;
 251.590 +    tmpState[VK_CONTROL] = 0;
 251.591 +    tmpState[VK_MENU] = 0;
 251.592 +
 251.593 +    ::ToUnicodeEx(VK_SPACE,::MapVirtualKey(VK_SPACE, 0), tmpState, wc, 2, 0,  GetKeyboardLayout(0));
 251.594 +}
 251.595 +
 251.596 +// XXX in the update releases this is an addition to the unchanged existing code
 251.597 +// After the call, a table will have a unicode associated with a windows virtual keycode
 251.598 +// sans modifiers. With some further simplification, one can
 251.599 +// derive java keycode from it, and anyway we will pass this unicode value
 251.600 +// all the way up in a comment to a KeyEvent.
 251.601 +void
 251.602 +AwtComponent::BuildPrimaryDynamicTable() {
 251.603 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.604 +    // XXX: how about that?
 251.605 +    //CriticalSection::Lock l(GetLock());
 251.606 +    //if (GetPeer(env) == NULL) {
 251.607 +    //    /* event received during termination. */
 251.608 +    //    return;
 251.609 +    //}
 251.610 +
 251.611 +    HKL hkl = GetKeyboardLayout();
 251.612 +    UINT sc = 0;
 251.613 +    BYTE kbdState[AwtToolkit::KB_STATE_SIZE];
 251.614 +    memset(kbdState, 0, sizeof (kbdState));
 251.615 +
 251.616 +    // Use JNI call to obtain java key code. We should keep a list
 251.617 +    // of currently available keycodes in a single place.
 251.618 +    static jclass extKeyCodesCls;
 251.619 +    if( extKeyCodesCls == NULL) {
 251.620 +        jclass extKeyCodesClsLocal = env->FindClass("sun/awt/ExtendedKeyCodes");
 251.621 +        DASSERT(extKeyCodesClsLocal);
 251.622 +        if (extKeyCodesClsLocal == NULL) {
 251.623 +            /* exception already thrown */
 251.624 +            return;
 251.625 +        }
 251.626 +        extKeyCodesCls = (jclass)env->NewGlobalRef(extKeyCodesClsLocal);
 251.627 +        env->DeleteLocalRef(extKeyCodesClsLocal);
 251.628 +    }
 251.629 +    static jmethodID getExtendedKeyCodeForChar;
 251.630 +    if (getExtendedKeyCodeForChar == NULL) {
 251.631 +        getExtendedKeyCodeForChar =
 251.632 +                  env->GetStaticMethodID(extKeyCodesCls, "getExtendedKeyCodeForChar", "(I)I");
 251.633 +        DASSERT(getExtendedKeyCodeForChar);
 251.634 +    }
 251.635 +    jint extJKC; //extended Java key code
 251.636 +
 251.637 +    for (UINT i = 0; i < 256; i++) {
 251.638 +        dynPrimaryKeymap[i].wkey = i;
 251.639 +        dynPrimaryKeymap[i].jkey = java_awt_event_KeyEvent_VK_UNDEFINED;
 251.640 +        dynPrimaryKeymap[i].unicode = 0;
 251.641 +
 251.642 +        if ((sc = MapVirtualKey (i, 0)) == 0) {
 251.643 +            dynPrimaryKeymap[i].scancode = 0;
 251.644 +            continue;
 251.645 +        }
 251.646 +        dynPrimaryKeymap[i].scancode = sc;
 251.647 +
 251.648 +        // XXX process cases like VK_SHIFT etc.
 251.649 +        kbdState[i] = 0x80; // "key pressed".
 251.650 +        WCHAR wc[16];
 251.651 +        int k = ::ToUnicodeEx(i, sc, kbdState, wc, 16, 0, hkl);
 251.652 +        if (k == 1) {
 251.653 +            // unicode
 251.654 +            dynPrimaryKeymap[i].unicode = wc[0];
 251.655 +            if (dynPrimaryKeymap[i].jkey == java_awt_event_KeyEvent_VK_UNDEFINED) {
 251.656 +            // Convert unicode to java keycode.
 251.657 +                //dynPrimaryKeymap[i].jkey = ((UINT)(wc[0]) + 0x01000000);
 251.658 +                //
 251.659 +                //XXX If this key in on the keypad, we should force a special value equal to
 251.660 +                //XXX an old java keycode: but how to say if it is a keypad key?
 251.661 +                //XXX We'll do it in WmKeyUp/Down.
 251.662 +                extJKC = env->CallStaticIntMethod(extKeyCodesCls,
 251.663 +                                                  getExtendedKeyCodeForChar, (jint)(wc[0]));
 251.664 +                dynPrimaryKeymap[i].jkey = extJKC;
 251.665 +            }
 251.666 +        }else if (k == -1) {
 251.667 +            // dead key: use charToDeadVKTable
 251.668 +            dynPrimaryKeymap[i].unicode = wc[0];
 251.669 +            resetKbdState( kbdState );
 251.670 +            for (const CharToVKEntry *map = charToDeadVKTable;  map->c != 0;  ++map) {
 251.671 +                if (wc[0] == map->c) {
 251.672 +                    dynPrimaryKeymap[i].jkey = map->javaKey;
 251.673 +                    break;
 251.674 +                }
 251.675 +            }
 251.676 +        } else if (k == 0) {
 251.677 +            // reset
 251.678 +            resetKbdState( kbdState );
 251.679 +        }else {
 251.680 +            printf ("++++Whats that? wkey 0x%x (%d)\n", i,i);
 251.681 +        }
 251.682 +        kbdState[i] = 0; // "key unpressed"
 251.683 +    }
 251.684 +}
 251.685 +void
 251.686 +AwtComponent::UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers)
 251.687 +{
 251.688 +    if( wkey && wkey < 256 ) {
 251.689 +        if(keyLocation == java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD) {
 251.690 +            // At the creation time,
 251.691 +            // dynPrimaryKeymap cannot distinguish between e.g. "/" and "NumPad /"
 251.692 +            dynPrimaryKeymap[wkey].jkey = jkeyLegacy;
 251.693 +        }
 251.694 +        if(dynPrimaryKeymap[wkey].jkey ==  java_awt_event_KeyEvent_VK_UNDEFINED) {
 251.695 +            // E.g. it is non-unicode key
 251.696 +            dynPrimaryKeymap[wkey].jkey = jkeyLegacy;
 251.697 +        }
 251.698 +    }
 251.699 +}
 251.700  
 251.701  UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops)
 251.702  {
 251.703 @@ -3554,10 +3500,12 @@
 251.704      jint keyLocation = GetKeyLocation(wkey, flags);
 251.705      UINT jkey = WindowsKeyToJavaKey(wkey, modifiers);
 251.706      UINT character = WindowsKeyToJavaChar(wkey, modifiers, SAVE);
 251.707 +    UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
 251.708 +
 251.709  
 251.710      SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_PRESSED,
 251.711                               TimeHelper::windowsToUTC(msg.time), jkey, character,
 251.712 -                             modifiers, keyLocation, &msg);
 251.713 +                             modifiers, keyLocation, (jlong)wkey, &msg);
 251.714  
 251.715      // bugid 4724007: Windows does not create a WM_CHAR for the Del key
 251.716      // for some reason, so we need to create the KEY_TYPED event on the
 251.717 @@ -3569,7 +3517,7 @@
 251.718                                   TimeHelper::windowsToUTC(msg.time),
 251.719                                   java_awt_event_KeyEvent_VK_UNDEFINED,
 251.720                                   character, modifiers,
 251.721 -                                 java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN);
 251.722 +                                 java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0);
 251.723      }
 251.724  
 251.725      return mrConsume;
 251.726 @@ -3594,10 +3542,11 @@
 251.727      jint keyLocation = GetKeyLocation(wkey, flags);
 251.728      UINT jkey = WindowsKeyToJavaKey(wkey, modifiers);
 251.729      UINT character = WindowsKeyToJavaChar(wkey, modifiers, LOAD);
 251.730 +    UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
 251.731  
 251.732      SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_RELEASED,
 251.733                               TimeHelper::windowsToUTC(msg.time), jkey, character,
 251.734 -                             modifiers, keyLocation, &msg);
 251.735 +                             modifiers, keyLocation, (jlong)wkey, &msg);
 251.736      return mrConsume;
 251.737  }
 251.738  
 251.739 @@ -3613,6 +3562,7 @@
 251.740      m_idLang = LOWORD(hKeyboardLayout); // lower word of HKL is LANGID
 251.741      m_CodePage = LangToCodePage(m_idLang);
 251.742      BuildDynamicKeyMapTable();  // compute new mappings for VK_OEM
 251.743 +    BuildPrimaryDynamicTable();
 251.744      return mrConsume;           // do not propagate to children
 251.745  }
 251.746  
 251.747 @@ -3643,7 +3593,7 @@
 251.748                               TimeHelper::windowsToUTC(msg.time),
 251.749                               java_awt_event_KeyEvent_VK_UNDEFINED,
 251.750                               unicodeChar, modifiers,
 251.751 -                             java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
 251.752 +                             java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
 251.753                               &msg);
 251.754      return mrConsume;
 251.755  }
 251.756 @@ -3712,7 +3662,7 @@
 251.757                               TimeHelper::windowsToUTC(msg.time),
 251.758                               java_awt_event_KeyEvent_VK_UNDEFINED,
 251.759                               unicodeChar, modifiers,
 251.760 -                             java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
 251.761 +                             java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
 251.762                               &msg);
 251.763      return mrConsume;
 251.764  }
 251.765 @@ -4033,14 +3983,15 @@
 251.766  
 251.767  HWND AwtComponent::GetProxyFocusOwner()
 251.768  {
 251.769 -    AwtWindow * window = GetContainer();
 251.770 +    AwtWindow *window = GetContainer();
 251.771      if (window != 0) {
 251.772 -        AwtFrame * owner = window->GetOwningFrameOrDialog();
 251.773 +        AwtFrame *owner = window->GetOwningFrameOrDialog();
 251.774          if (owner != 0) {
 251.775              return owner->GetProxyFocusOwner();
 251.776 +        } else if (!window->IsSimpleWindow()) { // isn't an owned simple window
 251.777 +            return ((AwtFrame*)window)->GetProxyFocusOwner();
 251.778          }
 251.779      }
 251.780 -
 251.781      return (HWND)NULL;
 251.782  }
 251.783  
 251.784 @@ -4562,6 +4513,25 @@
 251.785      return hdc;
 251.786  }
 251.787  
 251.788 +void AwtComponent::FillBackground(HDC hMemoryDC, SIZE &size)
 251.789 +{
 251.790 +    RECT eraseR = { 0, 0, size.cx, size.cy };
 251.791 +    VERIFY(::FillRect(hMemoryDC, &eraseR, GetBackgroundBrush()));
 251.792 +}
 251.793 +
 251.794 +void AwtComponent::FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha)
 251.795 +{
 251.796 +    if (bitmapBits) {
 251.797 +        DWORD* dest = (DWORD*)bitmapBits;
 251.798 +        //XXX: might be optimized to use one loop (cy*cx -> 0).
 251.799 +        for (int i = 0; i < size.cy; i++ ) {
 251.800 +            for (int j = 0; j < size.cx; j++ ) {
 251.801 +                ((BYTE*)(dest++))[3] = alpha;
 251.802 +            }
 251.803 +        }
 251.804 +    }
 251.805 +}
 251.806 +
 251.807  jintArray AwtComponent::CreatePrintedPixels(SIZE &loc, SIZE &size) {
 251.808      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.809  
 251.810 @@ -4619,26 +4589,53 @@
 251.811      return pixelArray;
 251.812  }
 251.813  
 251.814 -void *
 251.815 -AwtComponent::GetNativeFocusOwner() {
 251.816 +void* AwtComponent::SetNativeFocusOwner(void *self) {
 251.817 +    if (self == NULL) {
 251.818 +        // It means that the KFM wants to set focus to null
 251.819 +        sm_focusOwner = NULL;
 251.820 +        return NULL;
 251.821 +    }
 251.822 +
 251.823 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.824 +
 251.825 +    AwtComponent *c = NULL;
 251.826 +    jobject peer = (jobject)self;
 251.827 +
 251.828 +    PDATA pData;
 251.829 +    JNI_CHECK_NULL_GOTO(peer, "peer", ret);
 251.830 +    pData = JNI_GET_PDATA(peer);
 251.831 +    if (pData == NULL) {
 251.832 +        goto ret;
 251.833 +    }
 251.834 +    c = (AwtComponent *)pData;
 251.835 +
 251.836 +ret:
 251.837 +    if (c && ::IsWindow(c->GetHWnd())) {
 251.838 +        sm_focusOwner = c->GetHWnd();
 251.839 +        AwtFrame *owner = (AwtFrame*)GetComponent(c->GetProxyToplevelContainer());
 251.840 +        if (owner) {
 251.841 +            owner->SetLastProxiedFocusOwner(sm_focusOwner);
 251.842 +        }
 251.843 +    } else {
 251.844 +        sm_focusOwner = NULL;
 251.845 +    }
 251.846 +    env->DeleteGlobalRef(peer);
 251.847 +    return NULL;
 251.848 +}
 251.849 +
 251.850 +void* AwtComponent::GetNativeFocusedWindow() {
 251.851 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.852 +    AwtComponent *comp =
 251.853 +        AwtComponent::GetComponent(AwtComponent::GetFocusedWindow());
 251.854 +    return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL;
 251.855 +}
 251.856 +
 251.857 +void* AwtComponent::GetNativeFocusOwner() {
 251.858      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.859      AwtComponent *comp =
 251.860          AwtComponent::GetComponent(AwtComponent::sm_focusOwner);
 251.861      return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL;
 251.862  }
 251.863 -void *
 251.864 -AwtComponent::GetNativeFocusedWindow() {
 251.865 -    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.866 -    AwtComponent *comp =
 251.867 -        AwtComponent::GetComponent(AwtComponent::sm_focusedWindow);
 251.868 -    return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL;
 251.869 -}
 251.870 -void
 251.871 -AwtComponent::ClearGlobalFocusOwner() {
 251.872 -    if (AwtComponent::sm_focusOwner != NULL) {
 251.873 -        ::SetFocus(NULL);
 251.874 -    }
 251.875 -}
 251.876  
 251.877  AwtComponent* AwtComponent::SearchChild(UINT id) {
 251.878      ChildListItem* child;
 251.879 @@ -4674,7 +4671,7 @@
 251.880  }
 251.881  
 251.882  void AwtComponent::SendKeyEvent(jint id, jlong when, jint raw, jint cooked,
 251.883 -                                jint modifiers, jint keyLocation, MSG *pMsg)
 251.884 +                                jint modifiers, jint keyLocation, jlong nativeCode, MSG *pMsg)
 251.885  {
 251.886      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 251.887      CriticalSection::Lock l(GetLock());
 251.888 @@ -4711,6 +4708,18 @@
 251.889      if (safe_ExceptionOccurred(env)) env->ExceptionDescribe();
 251.890      DASSERT(!safe_ExceptionOccurred(env));
 251.891      DASSERT(keyEvent != NULL);
 251.892 +    env->SetLongField(keyEvent, AwtKeyEvent::rawCodeID, nativeCode);
 251.893 +    if( nativeCode && nativeCode < 256 ) {
 251.894 +        env->SetLongField(keyEvent, AwtKeyEvent::primaryLevelUnicodeID, (jlong)(dynPrimaryKeymap[nativeCode].unicode));
 251.895 +        env->SetLongField(keyEvent, AwtKeyEvent::extendedKeyCodeID, (jlong)(dynPrimaryKeymap[nativeCode].jkey));
 251.896 +        if( nativeCode < 255 ) {
 251.897 +            env->SetLongField(keyEvent, AwtKeyEvent::scancodeID, (jlong)(dynPrimaryKeymap[nativeCode].scancode));
 251.898 +        }else if( pMsg != NULL ) {
 251.899 +            // unknown key with virtual keycode 0xFF.
 251.900 +            // Its scancode is not in the table, pickup it from the message.
 251.901 +            env->SetLongField(keyEvent, AwtKeyEvent::scancodeID, (jlong)(HIWORD(pMsg->lParam) & 0xFF));
 251.902 +        }
 251.903 +    }
 251.904      if (pMsg != NULL) {
 251.905          AwtAWTEvent::saveMSG(env, pMsg, keyEvent);
 251.906      }
 251.907 @@ -4724,16 +4733,17 @@
 251.908  AwtComponent::SendKeyEventToFocusOwner(jint id, jlong when,
 251.909                                         jint raw, jint cooked,
 251.910                                         jint modifiers, jint keyLocation,
 251.911 +                                       jlong nativeCode,
 251.912                                         MSG *msg)
 251.913  {
 251.914      /*
 251.915       * if focus owner is null, but focused window isn't
 251.916       * we will send key event to focused window
 251.917       */
 251.918 -    HWND hwndTarget = ((sm_focusOwner != NULL) ? sm_focusOwner : sm_focusedWindow);
 251.919 +    HWND hwndTarget = ((sm_focusOwner != NULL) ? sm_focusOwner : AwtComponent::GetFocusedWindow());
 251.920  
 251.921      if (hwndTarget == GetHWnd()) {
 251.922 -        SendKeyEvent(id, when, raw, cooked, modifiers, keyLocation, msg);
 251.923 +        SendKeyEvent(id, when, raw, cooked, modifiers, keyLocation, nativeCode, msg);
 251.924      } else {
 251.925          AwtComponent *target = NULL;
 251.926          if (hwndTarget != NULL) {
 251.927 @@ -4744,7 +4754,7 @@
 251.928          }
 251.929          if (target != NULL) {
 251.930              target->SendKeyEvent(id, when, raw, cooked, modifiers,
 251.931 -              keyLocation, msg);
 251.932 +              keyLocation, nativeCode, msg);
 251.933          }
 251.934      }
 251.935  }
 251.936 @@ -5158,14 +5168,7 @@
 251.937      jint x = (env)->GetIntField(mouseEvent, AwtMouseEvent::xID);
 251.938      jint y = (env)->GetIntField(mouseEvent, AwtMouseEvent::yID);
 251.939      MSG* msg = CreateMessage(message, wParam, MAKELPARAM(x, y), x, y);
 251.940 -    // If the window is not focusable but if this is a focusing
 251.941 -    // message we should skip it then and perform our own actions.
 251.942 -    AwtWindow *pCont = GetContainer();
 251.943 -    if ((pCont && pCont->IsFocusableWindow()) || !ActMouseMessage(msg)) {
 251.944 -        PostHandleEventMessage(msg, TRUE);
 251.945 -    } else {
 251.946 -        delete msg;
 251.947 -    }
 251.948 +    PostHandleEventMessage(msg, TRUE);
 251.949  }
 251.950  
 251.951  BOOL AwtComponent::InheritsNativeMouseWheelBehavior() {return false;}
 251.952 @@ -5251,15 +5254,14 @@
 251.953  
 251.954  void AwtComponent::Enable(BOOL bEnable)
 251.955  {
 251.956 -    sm_suppressFocusAndActivation = TRUE;
 251.957 -
 251.958      if (bEnable && IsTopLevel()) {
 251.959          // we should not enable blocked toplevels
 251.960          bEnable = !::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()));
 251.961      }
 251.962 +    // Shouldn't trigger native focus change
 251.963 +    // (only the proxy may be the native focus owner).
 251.964      ::EnableWindow(GetHWnd(), bEnable);
 251.965  
 251.966 -    sm_suppressFocusAndActivation = FALSE;
 251.967      CriticalSection::Lock l(GetLock());
 251.968      VerifyState();
 251.969  }
 251.970 @@ -5286,23 +5288,12 @@
 251.971      }
 251.972  }
 251.973  
 251.974 -/**
 251.975 - * Special procedure responsible for performing the actions which
 251.976 - * usually happen with component when mouse buttons are being
 251.977 - * pressed. It is required in case of non-focusable components - we
 251.978 - * don't pass mouse messages directly to the windows because otherwise
 251.979 - * it will try to focus component first which we don't want.  This
 251.980 - * function receives MSG and should return TRUE if it processed the
 251.981 - * message and no furhter processing is allowed, FALSE otherwise.
 251.982 - * Default implementation returns TRUE it is the message on which
 251.983 - * Windows try to focus the component.  Descendant components write
 251.984 - * their own implementation of this procedure.
 251.985 - */
 251.986 -BOOL AwtComponent::ActMouseMessage(MSG * pMsg) {
 251.987 -    if (IsFocusingMessage(pMsg->message)) {
 251.988 -        return TRUE;
 251.989 -    }
 251.990 -    return FALSE;
 251.991 +BOOL AwtComponent::IsFocusingMouseMessage(MSG *pMsg) {
 251.992 +    return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK;
 251.993 +}
 251.994 +
 251.995 +BOOL AwtComponent::IsFocusingKeyMessage(MSG *pMsg) {
 251.996 +    return pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SPACE;
 251.997  }
 251.998  
 251.999  void AwtComponent::_Show(void *param)
251.1000 @@ -5640,22 +5631,12 @@
251.1001                  return;
251.1002              }
251.1003  
251.1004 -            /* Post the message directly to the subclassed component. */
251.1005 -            if (self && (pData = JNI_GET_PDATA(self))) {
251.1006 -                AwtComponent* p = (AwtComponent*)pData;
251.1007 -                // If the window is not focusable but if this is a focusing
251.1008 -                // message we should skip it then and perform our own actions.
251.1009 -                AwtWindow *pCont = (AwtWindow*)(p->GetContainer());
251.1010 -                if ((pCont && pCont->IsFocusableWindow()) ||
251.1011 -                    !p->ActMouseMessage(&msg))
251.1012 -                {
251.1013 -                    // Create copy for local msg
251.1014 -                    MSG* pCopiedMsg = new MSG;
251.1015 -                    memmove(pCopiedMsg, &msg, sizeof(MSG));
251.1016 -                    // Event handler deletes msg
251.1017 -                    p->PostHandleEventMessage(pCopiedMsg, FALSE);
251.1018 -                }
251.1019 -            }
251.1020 +            // Create copy for local msg
251.1021 +            MSG* pCopiedMsg = new MSG;
251.1022 +            memmove(pCopiedMsg, &msg, sizeof(MSG));
251.1023 +            // Event handler deletes msg
251.1024 +            p->PostHandleEventMessage(pCopiedMsg, FALSE);
251.1025 +
251.1026              env->DeleteGlobalRef(self);
251.1027              env->DeleteGlobalRef(event);
251.1028              delete nhes;
251.1029 @@ -5777,19 +5758,15 @@
251.1030      delete sfs;
251.1031  }
251.1032  
251.1033 -jboolean AwtComponent::_RequestFocus(void *param)
251.1034 +// Sets or kills focus for a component.
251.1035 +void AwtComponent::_SetFocus(void *param)
251.1036  {
251.1037      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.1038  
251.1039 -    RequestFocusStruct *rfs = (RequestFocusStruct *)param;
251.1040 -    jobject self = rfs->component;
251.1041 -    jobject lightweightChild = rfs->lightweightChild;
251.1042 -    jboolean temporary = rfs->temporary;
251.1043 -    jboolean focusedWindowChangeAllowed = rfs->focusedWindowChangeAllowed;
251.1044 -    jlong time = rfs->time;
251.1045 -    jobject cause = rfs->cause;
251.1046 -
251.1047 -    jboolean result = JNI_FALSE;
251.1048 +    SetFocusStruct *sfs = (SetFocusStruct *)param;
251.1049 +    jobject self = sfs->component;
251.1050 +    jboolean doSetFocus = sfs->doSetFocus;
251.1051 +
251.1052      AwtComponent *c = NULL;
251.1053  
251.1054      PDATA pData;
251.1055 @@ -5801,25 +5778,13 @@
251.1056      }
251.1057  
251.1058      c = (AwtComponent *)pData;
251.1059 -    if (::IsWindow(c->GetHWnd()))
251.1060 -    {
251.1061 -        WmComponentSetFocusData *data = new WmComponentSetFocusData;
251.1062 -        data->lightweightChild = env->NewGlobalRef(lightweightChild);
251.1063 -        data->temporary = temporary;
251.1064 -        data->focusedWindowChangeAllowed = focusedWindowChangeAllowed;
251.1065 -        data->time = time;
251.1066 -        data->cause = cause;
251.1067 -        result = (jboolean)c->SendMessage(WM_AWT_COMPONENT_SETFOCUS, (WPARAM)data, 0);
251.1068 -        // data and global ref in it are deleted in WmComponentSetFocus
251.1069 +    if (::IsWindow(c->GetHWnd())) {
251.1070 +        c->SendMessage(WM_AWT_COMPONENT_SETFOCUS, (WPARAM)doSetFocus, 0);
251.1071      }
251.1072  ret:
251.1073      env->DeleteGlobalRef(self);
251.1074 -    env->DeleteGlobalRef(lightweightChild);
251.1075 -    env->DeleteGlobalRef(cause);
251.1076 -
251.1077 -    delete rfs;
251.1078 -
251.1079 -    return result;
251.1080 +
251.1081 +    delete sfs;
251.1082  }
251.1083  
251.1084  void AwtComponent::_Start(void *param)
251.1085 @@ -6082,9 +6047,9 @@
251.1086              HWND selfWnd = comps[0]->GetHWnd();
251.1087              HWND parentWnd = comps[1]->GetHWnd();
251.1088              if (::IsWindow(selfWnd) && ::IsWindow(parentWnd)) {
251.1089 -                sm_suppressFocusAndActivation = TRUE;
251.1090 +                // Shouldn't trigger native focus change
251.1091 +                // (only the proxy may be the native focus owner).
251.1092                  ::SetParent(selfWnd, parentWnd);
251.1093 -                sm_suppressFocusAndActivation = FALSE;
251.1094              }
251.1095          }
251.1096          delete[] comps;
251.1097 @@ -6107,15 +6072,12 @@
251.1098  
251.1099      AwtComponent *c = NULL;
251.1100  
251.1101 -
251.1102 -
251.1103      PDATA pData;
251.1104      JNI_CHECK_PEER_GOTO(self, ret);
251.1105 +
251.1106      c = (AwtComponent *)pData;
251.1107 -    if (::IsWindow(c->GetHWnd()))
251.1108 -    {
251.1109 +    if (::IsWindow(c->GetHWnd())) {
251.1110          HRGN hRgn = NULL;
251.1111 -
251.1112          if (region || x1 || x2 || y1 || y2) {
251.1113              // If all the params are zeros, the shape must be simply reset.
251.1114              // Otherwise, convert it into a region.
251.1115 @@ -6157,6 +6119,33 @@
251.1116      delete data;
251.1117  }
251.1118  
251.1119 +void AwtComponent::_SetZOrder(void *param) {
251.1120 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.1121 +
251.1122 +    SetZOrderStruct *data = (SetZOrderStruct *)param;
251.1123 +    jobject self = data->component;
251.1124 +    HWND above = HWND_TOP;
251.1125 +    if (data->above != 0) {
251.1126 +        above = reinterpret_cast<HWND>(data->above);
251.1127 +    }
251.1128 +
251.1129 +    AwtComponent *c = NULL;
251.1130 +
251.1131 +    PDATA pData;
251.1132 +    JNI_CHECK_PEER_GOTO(self, ret);
251.1133 +
251.1134 +    c = (AwtComponent *)pData;
251.1135 +    if (::IsWindow(c->GetHWnd())) {
251.1136 +        ::SetWindowPos(c->GetHWnd(), above, 0, 0, 0, 0,
251.1137 +                       SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE | SWP_ASYNCWINDOWPOS);
251.1138 +    }
251.1139 +
251.1140 +ret:
251.1141 +    env->DeleteGlobalRef(self);
251.1142 +
251.1143 +    delete data;
251.1144 +}
251.1145 +
251.1146  void AwtComponent::PostUngrabEvent() {
251.1147      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.1148      jobject target = GetTarget(env);
251.1149 @@ -6173,6 +6162,14 @@
251.1150      }
251.1151  }
251.1152  
251.1153 +void AwtComponent::SetFocusedWindow(HWND window)
251.1154 +{
251.1155 +    HWND old = sm_focusedWindow;
251.1156 +    sm_focusedWindow = window;
251.1157 +
251.1158 +    AwtWindow::FocusedWindowChanged(old, window);
251.1159 +}
251.1160 +
251.1161  /************************************************************************
251.1162   * Component native methods
251.1163   */
251.1164 @@ -6587,31 +6584,25 @@
251.1165  
251.1166  /*
251.1167   * Class:     sun_awt_windows_WComponentPeer
251.1168 - * Method:    requestFocus
251.1169 - * Signature: (Ljava/awt/Component;ZZJ)Z
251.1170 + * Method:    focusGained
251.1171 + * Signature: (Z)
251.1172   */
251.1173 -JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WComponentPeer__1requestFocus
251.1174 -    (JNIEnv *env, jobject self, jobject lightweightChild, jboolean temporary,
251.1175 -     jboolean focusedWindowChangeAllowed, jlong time, jobject cause)
251.1176 +JNIEXPORT void JNICALL Java_sun_awt_windows_WComponentPeer_setFocus
251.1177 +    (JNIEnv *env, jobject self, jboolean doSetFocus)
251.1178  {
251.1179      TRY;
251.1180  
251.1181      jobject selfGlobalRef = env->NewGlobalRef(self);
251.1182 -    jobject lightweightChildGlobalRef = env->NewGlobalRef(lightweightChild);
251.1183 -
251.1184 -    RequestFocusStruct *rfs = new RequestFocusStruct;
251.1185 -    rfs->component = selfGlobalRef;
251.1186 -    rfs->lightweightChild = lightweightChildGlobalRef;
251.1187 -    rfs->temporary = temporary;
251.1188 -    rfs->focusedWindowChangeAllowed = focusedWindowChangeAllowed;
251.1189 -    rfs->time = time;
251.1190 -    rfs->cause = env->NewGlobalRef(cause);
251.1191 -
251.1192 -    return (jboolean)AwtToolkit::GetInstance().SyncCall(
251.1193 -        (void*(*)(void*))AwtComponent::_RequestFocus, rfs);
251.1194 -    // global refs and rfs are deleted in _RequestFocus
251.1195 -
251.1196 -    CATCH_BAD_ALLOC_RET(JNI_FALSE);
251.1197 +
251.1198 +    SetFocusStruct *sfs = new SetFocusStruct;
251.1199 +    sfs->component = selfGlobalRef;
251.1200 +    sfs->doSetFocus = doSetFocus;
251.1201 +
251.1202 +    AwtToolkit::GetInstance().SyncCall(
251.1203 +        (void*(*)(void*))AwtComponent::_SetFocus, sfs);
251.1204 +    // global refs and self are deleted in _SetFocus
251.1205 +
251.1206 +    CATCH_BAD_ALLOC;
251.1207  }
251.1208  
251.1209  /*
251.1210 @@ -6823,25 +6814,6 @@
251.1211      CATCH_BAD_ALLOC_RET(NULL);
251.1212  }
251.1213  
251.1214 -JNIEXPORT jboolean JNICALL
251.1215 -Java_sun_awt_windows_WComponentPeer_processSynchronousLightweightTransfer(JNIEnv *env, jclass cls,
251.1216 -                                                                          jobject heavyweight,
251.1217 -                                                                          jobject descendant,
251.1218 -                                                                          jboolean temporary,
251.1219 -                                                                          jboolean focusedWindowChangeAllowed,
251.1220 -                                                                          jlong time)
251.1221 -{
251.1222 -    TRY;
251.1223 -
251.1224 -    return env->CallStaticBooleanMethod(AwtKeyboardFocusManager::keyboardFocusManagerCls,
251.1225 -                                        AwtKeyboardFocusManager::processSynchronousTransfer,
251.1226 -                                        heavyweight, descendant, temporary,
251.1227 -                                        focusedWindowChangeAllowed,
251.1228 -                                        time);
251.1229 -
251.1230 -    CATCH_BAD_ALLOC_RET(JNI_TRUE);
251.1231 -}
251.1232 -
251.1233  JNIEXPORT void JNICALL
251.1234  Java_sun_awt_windows_WComponentPeer_pSetParent(JNIEnv* env, jobject self, jobject parent) {
251.1235      TRY;
251.1236 @@ -6883,6 +6855,21 @@
251.1237      CATCH_BAD_ALLOC;
251.1238  }
251.1239  
251.1240 +JNIEXPORT void JNICALL
251.1241 +Java_sun_awt_windows_WComponentPeer_setZOrder(JNIEnv* env, jobject self, jlong above)
251.1242 +{
251.1243 +    TRY;
251.1244 +
251.1245 +    SetZOrderStruct * data = new SetZOrderStruct;
251.1246 +    data->component = env->NewGlobalRef(self);
251.1247 +    data->above = above;
251.1248 +
251.1249 +    AwtToolkit::GetInstance().SyncCall(AwtComponent::_SetZOrder, data);
251.1250 +    // global refs and data are deleted in _SetLower
251.1251 +
251.1252 +    CATCH_BAD_ALLOC;
251.1253 +}
251.1254 +
251.1255  } /* extern "C" */
251.1256  
251.1257  
   252.1 --- a/src/windows/native/sun/windows/awt_Component.h	Thu Apr 16 17:42:00 2009 +0100
   252.2 +++ b/src/windows/native/sun/windows/awt_Component.h	Thu Apr 16 19:10:32 2009 -0700
   252.3 @@ -1,5 +1,5 @@
   252.4  /*
   252.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   252.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   252.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   252.8   *
   252.9   * This code is free software; you can redistribute it and/or modify it
  252.10 @@ -78,8 +78,6 @@
  252.11  
  252.12  class AwtDropTarget;
  252.13  
  252.14 -struct WmComponentSetFocusData;
  252.15 -
  252.16  /*
  252.17   * Message routing codes
  252.18   */
  252.19 @@ -139,12 +137,13 @@
  252.20      virtual void RegisterClass();
  252.21      virtual void UnregisterClass();
  252.22  
  252.23 -    void CreateHWnd(JNIEnv *env, LPCWSTR title,
  252.24 +    virtual void CreateHWnd(JNIEnv *env, LPCWSTR title,
  252.25                      DWORD windowStyle, DWORD windowExStyle,
  252.26                      int x, int y, int w, int h,
  252.27                      HWND hWndParent, HMENU hMenu,
  252.28                      COLORREF colorForeground, COLORREF colorBackground,
  252.29                      jobject peer);
  252.30 +    virtual void DestroyHWnd();
  252.31      void InitPeerGraphicsConfig(JNIEnv *env, jobject peer);
  252.32  
  252.33      virtual void Dispose();
  252.34 @@ -221,17 +220,10 @@
  252.35      virtual BOOL IsContainer() { return FALSE;} // Plain components can't
  252.36  
  252.37      /**
  252.38 -     * Perform some actions which by default are being performed by Default Window procedure of
  252.39 -     * this window class
  252.40 -     * For detailed comments see implementation in awt_Component.cpp
  252.41 +     * Returns TRUE if this message will trigger native focus change, FALSE otherwise.
  252.42       */
  252.43 -    virtual BOOL ActMouseMessage(MSG * pMsg);
  252.44 -    /**
  252.45 -     * Returns TRUE if this message will this component to become focused. Returns FALSE otherwise.
  252.46 -     */
  252.47 -    inline BOOL IsFocusingMessage(UINT message) {
  252.48 -        return message == WM_LBUTTONDOWN || message == WM_LBUTTONUP || message == WM_LBUTTONDBLCLK;
  252.49 -    }
  252.50 +    virtual BOOL IsFocusingKeyMessage(MSG *pMsg);
  252.51 +    virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
  252.52  
  252.53      BOOL IsFocusable();
  252.54  
  252.55 @@ -373,7 +365,7 @@
  252.56      }
  252.57  
  252.58      void SendKeyEventToFocusOwner(jint id, jlong when, jint raw, jint cooked,
  252.59 -                                  jint modifiers, jint keyLocation,
  252.60 +                                  jint modifiers, jint keyLocation, jlong nativeCode,
  252.61                                    MSG *msg = NULL);
  252.62      /*
  252.63       * Allocate and initialize a new java.awt.event.KeyEvent, and
  252.64 @@ -381,7 +373,7 @@
  252.65       * from the target.
  252.66       */
  252.67      void SendKeyEvent(jint id, jlong when, jint raw, jint cooked,
  252.68 -                      jint modifiers, jint keyLocation,
  252.69 +                      jint modifiers, jint keyLocation, jlong nativeCode,
  252.70                        MSG *msg = NULL);
  252.71  
  252.72      /*
  252.73 @@ -431,13 +423,6 @@
  252.74       */
  252.75      virtual BOOL InheritsNativeMouseWheelBehavior();
  252.76  
  252.77 -    /* Functions for MouseWheel support on Windows95
  252.78 -     * These should only be called if running on 95
  252.79 -     */
  252.80 -    static void Wheel95Init();
  252.81 -    INLINE static UINT Wheel95GetMsg() {return sm_95WheelMessage;}
  252.82 -    static UINT Wheel95GetScrLines();
  252.83 -
  252.84      /* Determines whether the component is obscured by another window */
  252.85      // Called on Toolkit thread
  252.86      static jboolean _IsObscured(void *param);
  252.87 @@ -457,6 +442,7 @@
  252.88      static UINT GetButtonMK(int mouseButton);
  252.89      static UINT WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers);
  252.90      static void JavaKeyToWindowsKey(UINT javaKey, UINT *windowsKey, UINT *modifiers, UINT originalWindowsKey);
  252.91 +    static void UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers);
  252.92  
  252.93      INLINE static void AwtComponent::JavaKeyToWindowsKey(UINT javaKey,
  252.94                                         UINT *windowsKey, UINT *modifiers)
  252.95 @@ -480,6 +466,12 @@
  252.96      HIMC ImmGetContext();
  252.97      HIMC ImmAssociateContext(HIMC himc);
  252.98      HWND GetProxyFocusOwner();
  252.99 +
 252.100 +    INLINE HWND GetProxyToplevelContainer() {
 252.101 +        HWND proxyHWnd = GetProxyFocusOwner();
 252.102 +        return ::GetAncestor(proxyHWnd, GA_ROOT); // a browser in case of EmbeddedFrame
 252.103 +    }
 252.104 +
 252.105      void CallProxyDefWindowProc(UINT message,
 252.106                                  WPARAM wParam,
 252.107                                  LPARAM lParam,
 252.108 @@ -517,11 +509,6 @@
 252.109      virtual MsgRouting WmShowWindow(BOOL show, UINT status);
 252.110      virtual MsgRouting WmSetFocus(HWND hWndLost);
 252.111      virtual MsgRouting WmKillFocus(HWND hWndGot);
 252.112 -    jboolean WmComponentSetFocus(WmComponentSetFocusData *data);
 252.113 -    // Use instead of ::SetFocus to maintain special focusing semantics for
 252.114 -    // Windows which are not Frames/Dialogs.
 252.115 -    BOOL AwtSetFocus();
 252.116 -
 252.117      virtual MsgRouting WmCtlColor(HDC hDC, HWND hCtrl,
 252.118                                    UINT ctlColor, HBRUSH& retBrush);
 252.119      virtual MsgRouting WmHScroll(UINT scrollCode, UINT pos, HWND hScrollBar);
 252.120 @@ -611,10 +598,6 @@
 252.121  
 252.122      jintArray CreatePrintedPixels(SIZE &loc, SIZE &size);
 252.123  
 252.124 -    static void * GetNativeFocusOwner();
 252.125 -    static void * GetNativeFocusedWindow();
 252.126 -    static void   ClearGlobalFocusOwner();
 252.127 -
 252.128      /*
 252.129       * HWND, AwtComponent and Java Peer interaction
 252.130       *
 252.131 @@ -673,7 +656,6 @@
 252.132      static void _SetForeground(void *param);
 252.133      static void _SetBackground(void *param);
 252.134      static void _SetFont(void *param);
 252.135 -    static jboolean _RequestFocus(void *param);
 252.136      static void _Start(void *param);
 252.137      static void _BeginValidate(void *param);
 252.138      static void _EndValidate(void *param);
 252.139 @@ -683,10 +665,40 @@
 252.140      static jintArray _CreatePrintedPixels(void *param);
 252.141      static jboolean _NativeHandlesWheelScrolling(void *param);
 252.142      static void _SetRectangularShape(void *param);
 252.143 +    static void _SetZOrder(void *param);
 252.144  
 252.145      static HWND sm_focusOwner;
 252.146 +
 252.147 +private:
 252.148      static HWND sm_focusedWindow;
 252.149  
 252.150 +public:
 252.151 +    static inline HWND GetFocusedWindow() { return sm_focusedWindow; }
 252.152 +    static void SetFocusedWindow(HWND window);
 252.153 +
 252.154 +    static void _SetFocus(void *param);
 252.155 +
 252.156 +    static void *SetNativeFocusOwner(void *self);
 252.157 +    static void *GetNativeFocusedWindow();
 252.158 +    static void *GetNativeFocusOwner();
 252.159 +
 252.160 +    static BOOL sm_inSynthesizeFocus;
 252.161 +
 252.162 +    // Execute on Toolkit only.
 252.163 +    INLINE static LRESULT SynthesizeWmSetFocus(HWND targetHWnd, HWND oppositeHWnd) {
 252.164 +        sm_inSynthesizeFocus = TRUE;
 252.165 +        LRESULT res = ::SendMessage(targetHWnd, WM_SETFOCUS, (WPARAM)oppositeHWnd, 0);
 252.166 +        sm_inSynthesizeFocus = FALSE;
 252.167 +        return res;
 252.168 +    }
 252.169 +    // Execute on Toolkit only.
 252.170 +    INLINE static LRESULT SynthesizeWmKillFocus(HWND targetHWnd, HWND oppositeHWnd) {
 252.171 +        sm_inSynthesizeFocus = TRUE;
 252.172 +        LRESULT res = ::SendMessage(targetHWnd, WM_KILLFOCUS, (WPARAM)oppositeHWnd, 0);
 252.173 +        sm_inSynthesizeFocus = FALSE;
 252.174 +        return res;
 252.175 +    }
 252.176 +
 252.177      static BOOL sm_bMenuLoop;
 252.178      static INLINE BOOL isMenuLoopActive() {
 252.179          return sm_bMenuLoop;
 252.180 @@ -710,14 +722,25 @@
 252.181      BOOL     m_visible;         /* copy of Component.visible */
 252.182  
 252.183      static BOOL sm_suppressFocusAndActivation;
 252.184 -    static HWND sm_realFocusOpposite;
 252.185 +    static BOOL sm_restoreFocusAndActivation;
 252.186 +
 252.187 +    /*
 252.188 +     * The function sets the focus-restore flag ON/OFF.
 252.189 +     * When the flag is ON, focus is restored immidiately after the proxy loses it.
 252.190 +     * All focus messages are suppressed. It's also assumed that sm_focusedWindow and
 252.191 +     * sm_focusOwner don't change after the flag is set ON and before it's set OFF.
 252.192 +     */
 252.193 +    static INLINE void SetRestoreFocus(BOOL doSet) {
 252.194 +        sm_suppressFocusAndActivation = doSet;
 252.195 +        sm_restoreFocusAndActivation = doSet;
 252.196 +    }
 252.197  
 252.198      virtual void SetDragCapture(UINT flags);
 252.199      virtual void ReleaseDragCapture(UINT flags);
 252.200  
 252.201 -    // 95 support for mouse wheel
 252.202 -    static UINT sm_95WheelMessage;
 252.203 -    static UINT sm_95WheelSupport;
 252.204 +    //These functions are overridden in AwtWindow to handle non-opaque windows.
 252.205 +    virtual void FillBackground(HDC hMemoryDC, SIZE &size);
 252.206 +    virtual void FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha);
 252.207  
 252.208  private:
 252.209      /* A bitmask keeps the button's numbers as MK_LBUTTON, MK_MBUTTON, MK_RBUTTON
 252.210 @@ -761,6 +784,8 @@
 252.211      static BOOL sm_rtl;
 252.212      static BOOL sm_rtlReadingOrder;
 252.213  
 252.214 +    static BOOL sm_PrimaryDynamicTableBuilt;
 252.215 +
 252.216      jobject m_InputMethod;
 252.217      BOOL    m_useNativeCompWindow;
 252.218      LPARAM  m_bitsCandType;
 252.219 @@ -780,8 +805,6 @@
 252.220  
 252.221      static BOOL m_QueryNewPaletteCalled;
 252.222  
 252.223 -    BOOL m_skipNextSetFocus;
 252.224 -
 252.225      static AwtComponent* sm_getComponentCache; // a cache for the GetComponent(..) method.
 252.226  
 252.227      int windowMoveLockPosX;
 252.228 @@ -790,7 +813,7 @@
 252.229      int windowMoveLockPosCY;
 252.230  
 252.231      // 6524352: support finer-resolution
 252.232 -    static int sm_wheelRotationAmount;
 252.233 +    int m_wheelRotationAmount;
 252.234  
 252.235      /*
 252.236       * The association list of children's IDs and corresponding components.
 252.237 @@ -826,6 +849,7 @@
 252.238      AwtComponent* SearchChild(UINT id);
 252.239      void RemoveChild(UINT id) ;
 252.240      static BOOL IsNavigationKey(UINT wkey);
 252.241 +    static void BuildPrimaryDynamicTable();
 252.242  
 252.243      ChildListItem* m_childList;
 252.244  
 252.245 @@ -876,14 +900,6 @@
 252.246      void            RealizePalettes(int screen);
 252.247  };
 252.248  
 252.249 -struct WmComponentSetFocusData {
 252.250 -    jobject lightweightChild;
 252.251 -    jboolean temporary;
 252.252 -    jboolean focusedWindowChangeAllowed;
 252.253 -    jlong time;
 252.254 -    jobject cause;
 252.255 -};
 252.256 -
 252.257  void ReleaseDCList(HWND hwnd, DCList &list);
 252.258  void MoveDCToPassiveList(HDC hDC);
 252.259  
   253.1 --- a/src/windows/native/sun/windows/awt_Dialog.cpp	Thu Apr 16 17:42:00 2009 +0100
   253.2 +++ b/src/windows/native/sun/windows/awt_Dialog.cpp	Thu Apr 16 19:10:32 2009 -0700
   253.3 @@ -230,25 +230,8 @@
   253.4          if (::IsIconic(hWnd)) {
   253.5              ::ShowWindow(hWnd, SW_RESTORE);
   253.6          }
   253.7 -        HWND topMostBlocker = blocker;
   253.8 -        HWND toolkitHWnd = AwtToolkit::GetInstance().GetHWnd();
   253.9 -        while (::IsWindow(blocker)) {
  253.10 -            topMostBlocker = blocker;
  253.11 -            // fix for 6494032: restore the blocker if it was minimized
  253.12 -            // together with its parent frame; in such cases the check
  253.13 -            // ::IsIconic() for the blocker returns false, so we use
  253.14 -            // ::IsWindowVisible() instead
  253.15 -            if (!::IsWindowVisible(topMostBlocker) &&
  253.16 -                (topMostBlocker != toolkitHWnd))
  253.17 -            {
  253.18 -                ::ShowWindow(topMostBlocker, SW_SHOWNA);
  253.19 -            }
  253.20 -            ::BringWindowToTop(blocker);
  253.21 -            blocker = AwtWindow::GetModalBlocker(blocker);
  253.22 -        }
  253.23 -        if (topMostBlocker != toolkitHWnd) {
  253.24 -            ::SetForegroundWindow(topMostBlocker);
  253.25 -        }
  253.26 +        PopupAllDialogs(blocker, TRUE, ::GetForegroundWindow(), FALSE);
  253.27 +        // return 1 to prevent the system from allowing the operation
  253.28          return 1;
  253.29      }
  253.30      return CallNextHookEx(0, code, wParam, lParam);
  253.31 @@ -271,30 +254,11 @@
  253.32              (wParam == WM_NCRBUTTONDOWN))
  253.33          {
  253.34              HWND blocker = AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(hWnd));
  253.35 -            HWND topMostBlocker = blocker;
  253.36 -            HWND prevForegroundWindow = ::GetForegroundWindow();
  253.37              if (::IsWindow(blocker)) {
  253.38 -                ::BringWindowToTop(hWnd);
  253.39 -            }
  253.40 -            while (::IsWindow(blocker)) {
  253.41 -                topMostBlocker = blocker;
  253.42 -                ::BringWindowToTop(blocker);
  253.43 -                blocker = AwtWindow::GetModalBlocker(blocker);
  253.44 -            }
  253.45 -            if (::IsWindow(topMostBlocker)) {
  253.46 -                // no beep/flash if the mouse was clicked in the taskbar menu
  253.47 -                // or the dialog is currently inactive
  253.48 -                if ((::WindowFromPoint(mhs->pt) == hWnd) &&
  253.49 -                    (prevForegroundWindow == topMostBlocker))
  253.50 -                {
  253.51 -                    ::MessageBeep(MB_OK);
  253.52 -                    // some heuristics: 3 times x 64 milliseconds
  253.53 -                    AwtWindow::FlashWindowEx(topMostBlocker, 3, 64, FLASHW_CAPTION);
  253.54 -                }
  253.55 -                if (topMostBlocker != AwtToolkit::GetInstance().GetHWnd()) {
  253.56 -                    ::BringWindowToTop(topMostBlocker);
  253.57 -                    ::SetForegroundWindow(topMostBlocker);
  253.58 -                }
  253.59 +                BOOL onTaskbar = !(::WindowFromPoint(mhs->pt) == hWnd);
  253.60 +                PopupAllDialogs(hWnd, FALSE, ::GetForegroundWindow(), onTaskbar);
  253.61 +                // return a nonzero value to prevent the system from passing
  253.62 +                // the message to the target window procedure
  253.63                  return 1;
  253.64              }
  253.65          }
  253.66 @@ -303,6 +267,63 @@
  253.67      return CallNextHookEx(0, nCode, wParam, lParam);
  253.68  }
  253.69  
  253.70 +/*
  253.71 + * The function goes through the heirarchy of the blocker dialogs and
  253.72 + * popups all the dialogs. Note that the function starts from the top
  253.73 + * blocker dialog and goes down to the dialog which is the bottom dialog.
  253.74 + * Using another traversal may cause to the flickering issue as a bottom
  253.75 + * dialog will cover a top dialog for some period of time.
  253.76 + */
  253.77 +void AwtDialog::PopupAllDialogs(HWND dialog, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar)
  253.78 +{
  253.79 +    HWND blocker = AwtWindow::GetModalBlocker(dialog);
  253.80 +    BOOL isBlocked = ::IsWindow(blocker);
  253.81 +    if (isBlocked) {
  253.82 +        PopupAllDialogs(blocker, isModalHook, prevFGWindow, onTaskbar);
  253.83 +    }
  253.84 +    PopupOneDialog(dialog, blocker, isModalHook, prevFGWindow, onTaskbar);
  253.85 +}
  253.86 +
  253.87 +/*
  253.88 + * The function popups the dialog, it distinguishes non-blocked dialogs
  253.89 + * and activates the dialogs (sets as foreground window). If the dialog is
  253.90 + * blocked, then it changes the Z-order of the dialog.
  253.91 + */
  253.92 +void AwtDialog::PopupOneDialog(HWND dialog, HWND blocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar)
  253.93 +{
  253.94 +    if (dialog == AwtToolkit::GetInstance().GetHWnd()) {
  253.95 +        return;
  253.96 +    }
  253.97 +
  253.98 +    // fix for 6494032
  253.99 +    if (isModalHook && !::IsWindowVisible(dialog)) {
 253.100 +        ::ShowWindow(dialog, SW_SHOWNA);
 253.101 +    }
 253.102 +
 253.103 +    BOOL isBlocked = ::IsWindow(blocker);
 253.104 +    UINT flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE;
 253.105 +
 253.106 +    if (isBlocked) {
 253.107 +        ::SetWindowPos(dialog, blocker, 0, 0, 0, 0, flags);
 253.108 +    } else {
 253.109 +        ::SetWindowPos(dialog, HWND_TOP, 0, 0, 0, 0, flags);
 253.110 +        // no beep/flash if the mouse was clicked in the taskbar menu
 253.111 +        // or the dialog is currently inactive
 253.112 +        if (!isModalHook && !onTaskbar && (dialog == prevFGWindow)) {
 253.113 +            AnimateModalBlocker(dialog);
 253.114 +        }
 253.115 +        ::BringWindowToTop(dialog);
 253.116 +        ::SetForegroundWindow(dialog);
 253.117 +    }
 253.118 +}
 253.119 +
 253.120 +void AwtDialog::AnimateModalBlocker(HWND window)
 253.121 +{
 253.122 +    ::MessageBeep(MB_OK);
 253.123 +    // some heuristics: 3 times x 64 milliseconds
 253.124 +    AwtWindow::FlashWindowEx(window, 3, 64, FLASHW_CAPTION);
 253.125 +}
 253.126 +
 253.127  LRESULT CALLBACK AwtDialog::MouseHookProc_NonTT(int nCode,
 253.128                                                  WPARAM wParam, LPARAM lParam)
 253.129  {
   254.1 --- a/src/windows/native/sun/windows/awt_Dialog.h	Thu Apr 16 17:42:00 2009 +0100
   254.2 +++ b/src/windows/native/sun/windows/awt_Dialog.h	Thu Apr 16 19:10:32 2009 -0700
   254.3 @@ -76,7 +76,7 @@
   254.4       * Thus we don't have to perform any transitive (a blocker of a blocker) checks.
   254.5       */
   254.6      INLINE virtual BOOL IsFocusedWindowModalBlocker() {
   254.7 -        return (sm_focusedWindow != NULL) && (GetModalBlocker(sm_focusedWindow) == GetHWnd());
   254.8 +        return (AwtComponent::GetFocusedWindow() != NULL) && (GetModalBlocker(AwtComponent::GetFocusedWindow()) == GetHWnd());
   254.9      }
  254.10  
  254.11      // finds and activates some window after the modal dialog is hidden
  254.12 @@ -113,6 +113,9 @@
  254.13       */
  254.14      static void ModalPerformActivation(HWND hWnd);
  254.15  
  254.16 +    static void PopupAllDialogs(HWND dialog, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar);
  254.17 +    static void PopupOneDialog(HWND dialog, HWND blocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar);
  254.18 +
  254.19  public:
  254.20  
  254.21      // WH_CBT hook procedure used in modality, prevents modal
  254.22 @@ -129,6 +132,8 @@
  254.23      // example on browser's thread when running in Java Plugin
  254.24      static LRESULT CALLBACK MouseHookProc_NonTT(int code,
  254.25                                                  WPARAM wParam, LPARAM lParam);
  254.26 +
  254.27 +    static void AnimateModalBlocker(HWND window);
  254.28  };
  254.29  
  254.30  #endif /* AWT_DIALOG_H */
   255.1 --- a/src/windows/native/sun/windows/awt_FileDialog.cpp	Thu Apr 16 17:42:00 2009 +0100
   255.2 +++ b/src/windows/native/sun/windows/awt_FileDialog.cpp	Thu Apr 16 19:10:32 2009 -0700
   255.3 @@ -101,7 +101,8 @@
   255.4          }
   255.5      }
   255.6  
   255.7 -    return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam);
   255.8 +    WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp));
   255.9 +    return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam);
  255.10  }
  255.11  
  255.12  static UINT_PTR CALLBACK
  255.13 @@ -135,16 +136,19 @@
  255.14              }
  255.15  
  255.16              // subclass dialog's parent to receive additional messages
  255.17 -            ComCtl32Util::GetInstance().SubclassHWND(parent,
  255.18 -                                                     FileDialogWndProc);
  255.19 +            WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(parent,
  255.20 +                                                                           FileDialogWndProc);
  255.21 +            ::SetProp(parent, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc));
  255.22  
  255.23              break;
  255.24          }
  255.25          case WM_DESTROY: {
  255.26 +            WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(parent, NativeDialogWndProcProp));
  255.27              ComCtl32Util::GetInstance().UnsubclassHWND(parent,
  255.28                                                         FileDialogWndProc,
  255.29 -                                                       NULL);
  255.30 +                                                       lpfnWndProc);
  255.31              ::RemoveProp(parent, ModalDialogPeerProp);
  255.32 +            ::RemoveProp(parent, NativeDialogWndProcProp);
  255.33              break;
  255.34          }
  255.35          case WM_NOTIFY: {
   256.1 --- a/src/windows/native/sun/windows/awt_Frame.cpp	Thu Apr 16 17:42:00 2009 +0100
   256.2 +++ b/src/windows/native/sun/windows/awt_Frame.cpp	Thu Apr 16 19:10:32 2009 -0700
   256.3 @@ -1,5 +1,5 @@
   256.4  /*
   256.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   256.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   256.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   256.8   *
   256.9   * This code is free software; you can redistribute it and/or modify it
  256.10 @@ -39,8 +39,6 @@
  256.11  #include <sun_awt_windows_WEmbeddedFramePeer.h>
  256.12  
  256.13  
  256.14 -BOOL isAppActive = FALSE;
  256.15 -
  256.16  /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
  256.17   */
  256.18  
  256.19 @@ -90,8 +88,10 @@
  256.20   */
  256.21  
  256.22  jfieldID AwtFrame::handleID;
  256.23 -jfieldID AwtFrame::stateID;
  256.24 +
  256.25  jfieldID AwtFrame::undecoratedID;
  256.26 +jmethodID AwtFrame::getExtendedStateMID;
  256.27 +jmethodID AwtFrame::setExtendedStateMID;
  256.28  
  256.29  jmethodID AwtFrame::activateEmbeddingTopLevelMID;
  256.30  
  256.31 @@ -110,6 +110,7 @@
  256.32      m_isInputMethodWindow = FALSE;
  256.33      m_isUndecorated = FALSE;
  256.34      m_proxyFocusOwner = NULL;
  256.35 +    m_lastProxiedFocusOwner = NULL;
  256.36      m_actualFocusedWindow = NULL;
  256.37      m_iconic = FALSE;
  256.38      m_zoomed = FALSE;
  256.39 @@ -232,7 +233,7 @@
  256.40                  frame->InitPeerGraphicsConfig(env, self);
  256.41                  AwtToolkit::GetInstance().RegisterEmbedderProcessId(hwndParent);
  256.42              } else {
  256.43 -                jint state = env->GetIntField(target, AwtFrame::stateID);
  256.44 +                jint state = env->CallIntMethod(self, AwtFrame::getExtendedStateMID);
  256.45                  DWORD exStyle;
  256.46                  DWORD style;
  256.47  
  256.48 @@ -285,7 +286,6 @@
  256.49                                    ::GetSysColor(COLOR_WINDOWTEXT),
  256.50                                    ::GetSysColor(COLOR_WINDOWFRAME),
  256.51                                    self);
  256.52 -
  256.53                  /*
  256.54                   * Reshape here instead of during create, so that a
  256.55                   * WM_NCCALCSIZE is sent.
  256.56 @@ -319,12 +319,13 @@
  256.57          AwtComponent::GetComponentImpl(::GetParent(hwnd));
  256.58  
  256.59      if (!parent || parent->GetProxyFocusOwner() != hwnd ||
  256.60 -        message == AwtComponent::WmAwtIsComponent)
  256.61 +        message == AwtComponent::WmAwtIsComponent ||
  256.62 +        message == WM_GETOBJECT)
  256.63      {
  256.64          return ComCtl32Util::GetInstance().DefWindowProc(NULL, hwnd, message, wParam, lParam);
  256.65      }
  256.66  
  256.67 -    AwtComponent *p = NULL;
  256.68 +    AwtComponent *focusOwner = NULL;
  256.69      // IME and input language related messages need to be sent to a window
  256.70      // which has the Java input focus
  256.71      switch (message) {
  256.72 @@ -342,16 +343,37 @@
  256.73          case WM_IME_KEYUP:
  256.74          case WM_INPUTLANGCHANGEREQUEST:
  256.75          case WM_INPUTLANGCHANGE:
  256.76 -            p = AwtComponent::GetComponent(sm_focusOwner);
  256.77 -            if  (p != NULL) {
  256.78 -                return p->WindowProc(message, wParam, lParam);
  256.79 +        // TODO: when a Choice's list is dropped down and we're scrolling in
  256.80 +        // the list WM_MOUSEWHEEL messages come to the poxy, not to the list. Why?
  256.81 +        case WM_MOUSEWHEEL:
  256.82 +            focusOwner = AwtComponent::GetComponent(parent->GetLastProxiedFocusOwner());
  256.83 +            if  (focusOwner != NULL) {
  256.84 +                return focusOwner->WindowProc(message, wParam, lParam);
  256.85              }
  256.86              break;
  256.87 +        case WM_SETFOCUS:
  256.88 +            if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) {
  256.89 +                parent->AwtSetActiveWindow();
  256.90 +            }
  256.91 +            return 0;
  256.92 +        case WM_KILLFOCUS:
  256.93 +            if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) {
  256.94 +                AwtWindow::SynthesizeWmActivate(FALSE, parent->GetHWnd(), NULL);
  256.95 +
  256.96 +            } else if (sm_restoreFocusAndActivation) {
  256.97 +                if (AwtComponent::GetFocusedWindow() != NULL) {
  256.98 +                    AwtWindow *focusedWindow = (AwtWindow*)GetComponent(AwtComponent::GetFocusedWindow());
  256.99 +                    if (focusedWindow != NULL) {
 256.100 +                        // Will just silently restore native focus & activation.
 256.101 +                        focusedWindow->AwtSetActiveWindow();
 256.102 +                    }
 256.103 +                }
 256.104 +            }
 256.105 +            return 0;
 256.106          case 0x0127: // WM_CHANGEUISTATE
 256.107          case 0x0128: // WM_UPDATEUISTATE
 256.108              return 0;
 256.109      }
 256.110 -
 256.111      return parent->WindowProc(message, wParam, lParam);
 256.112  
 256.113      CATCH_BAD_ALLOC_RET(0);
 256.114 @@ -554,7 +576,6 @@
 256.115      if (m_grabbedWindow != NULL/* && !m_grabbedWindow->IsOneOfOwnersOf(this)*/) {
 256.116          m_grabbedWindow->Ungrab();
 256.117      }
 256.118 -
 256.119      if (!IsFocusableWindow() && (button & LEFT_BUTTON)) {
 256.120          switch (hitTest) {
 256.121          case HTTOP:
 256.122 @@ -586,11 +607,6 @@
 256.123      return AwtWindow::WmNcMouseDown(hitTest, x, y, button);
 256.124  }
 256.125  
 256.126 -MsgRouting AwtFrame::WmWindowPosChanged(LPARAM windowPos) {
 256.127 -    return mrDoDefault;
 256.128 -}
 256.129 -
 256.130 -
 256.131  // Override AwtWindow::Reshape() to handle minimized/maximized
 256.132  // frames (see 6525850, 4065534)
 256.133  void AwtFrame::Reshape(int x, int y, int width, int height)
 256.134 @@ -827,6 +843,11 @@
 256.135  
 256.136  MsgRouting AwtFrame::WmSize(UINT type, int w, int h)
 256.137  {
 256.138 +    currentWmSizeState = type;
 256.139 +    if (currentWmSizeState == SIZE_MINIMIZED) {
 256.140 +        UpdateSecurityWarningVisibility();
 256.141 +    }
 256.142 +
 256.143      if (m_ignoreWmSize) {
 256.144          return mrDoDefault;
 256.145      }
 256.146 @@ -883,6 +904,11 @@
 256.147      if (changed != 0) {
 256.148          DTRACE_PRINTLN2("AwtFrame::WmSize: reporting state change %x -> %x",
 256.149                  oldState, newState);
 256.150 +
 256.151 +        // sync target with peer
 256.152 +        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 256.153 +        env->CallVoidMethod(GetPeer(env), AwtFrame::setExtendedStateMID, newState);
 256.154 +
 256.155          // report (de)iconification to old clients
 256.156          if (changed & java_awt_Frame_ICONIFIED) {
 256.157              if (newState & java_awt_Frame_ICONIFIED) {
 256.158 @@ -907,33 +933,16 @@
 256.159  MsgRouting AwtFrame::WmActivate(UINT nState, BOOL fMinimized, HWND opposite)
 256.160  {
 256.161      jint type;
 256.162 -    BOOL doActivateFrame = TRUE;
 256.163  
 256.164      if (nState != WA_INACTIVE) {
 256.165 -        if (!::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()))) {
 256.166 -            ::SetFocus(NULL); // The KeyboardFocusManager will set focus later
 256.167 -            type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS;
 256.168 -            isAppActive = TRUE;
 256.169 -            sm_focusedWindow = GetHWnd();
 256.170 +        if (::IsWindow(AwtWindow::GetModalBlocker(GetHWnd())) ||
 256.171 +            CheckActivateActualFocusedWindow(opposite))
 256.172 +        {
 256.173 +            return mrConsume;
 256.174 +        }
 256.175 +        type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS;
 256.176 +        AwtComponent::SetFocusedWindow(GetHWnd());
 256.177  
 256.178 -            /*
 256.179 -             * Fix for 4823903.
 256.180 -             * If the window to be focused is actually not this Frame
 256.181 -             * and it's visible then send it WM_ACTIVATE.
 256.182 -             */
 256.183 -            if (m_actualFocusedWindow != NULL) {
 256.184 -                HWND hwnd = m_actualFocusedWindow->GetHWnd();
 256.185 -
 256.186 -                if (hwnd != NULL && ::IsWindowVisible(hwnd)) {
 256.187 -
 256.188 -                    ::SendMessage(hwnd, WM_ACTIVATE, MAKEWPARAM(nState, fMinimized), (LPARAM)opposite);
 256.189 -                    doActivateFrame = FALSE;
 256.190 -                }
 256.191 -                m_actualFocusedWindow = NULL;
 256.192 -            }
 256.193 -        } else {
 256.194 -            doActivateFrame = FALSE;
 256.195 -        }
 256.196      } else {
 256.197          if (!::IsWindow(AwtWindow::GetModalBlocker(opposite))) {
 256.198              // If deactivation happens because of press on grabbing
 256.199 @@ -955,37 +964,63 @@
 256.200                      }
 256.201                  }
 256.202              }
 256.203 -
 256.204 -            // If actual focused window is not this Frame
 256.205 -            if (sm_focusedWindow != GetHWnd()) {
 256.206 -
 256.207 -                // Check that the Frame is going to be really inactive (i.e. the opposite is not its owned window)
 256.208 -                if (opposite != NULL) {
 256.209 -                    AwtWindow *wOpposite = (AwtWindow *)AwtComponent::GetComponent(opposite);
 256.210 -
 256.211 -                    if (wOpposite != NULL &&
 256.212 -                        wOpposite->GetOwningFrameOrDialog() != this)
 256.213 -                    {
 256.214 -                        AwtWindow *window = (AwtWindow *)AwtComponent::GetComponent(sm_focusedWindow);
 256.215 -
 256.216 -                        // If actual focused window is one of Frame's owned windows
 256.217 -                        if (window != NULL && window->GetOwningFrameOrDialog() == this) {
 256.218 -                            m_actualFocusedWindow = window;
 256.219 -                        }
 256.220 -                    }
 256.221 -                }
 256.222 -            }
 256.223 +            CheckRetainActualFocusedWindow(opposite);
 256.224  
 256.225              type = java_awt_event_WindowEvent_WINDOW_LOST_FOCUS;
 256.226 -            isAppActive = FALSE;
 256.227 -            sm_focusedWindow = NULL;
 256.228 +            AwtComponent::SetFocusedWindow(NULL);
 256.229 +            sm_focusOwner = NULL;
 256.230          }
 256.231      }
 256.232  
 256.233 -    if (doActivateFrame) {
 256.234 -        SendWindowEvent(type, opposite);
 256.235 +    SendWindowEvent(type, opposite);
 256.236 +    return mrConsume;
 256.237 +}
 256.238 +
 256.239 +BOOL AwtFrame::CheckActivateActualFocusedWindow(HWND deactivatedOpositeHWnd)
 256.240 +{
 256.241 +    if (m_actualFocusedWindow != NULL) {
 256.242 +        HWND hwnd = m_actualFocusedWindow->GetHWnd();
 256.243 +        if (hwnd != NULL && ::IsWindowVisible(hwnd)) {
 256.244 +            SynthesizeWmActivate(TRUE, hwnd, deactivatedOpositeHWnd);
 256.245 +            return TRUE;
 256.246 +        }
 256.247 +        m_actualFocusedWindow = NULL;
 256.248      }
 256.249 -    return mrConsume;
 256.250 +    return FALSE;
 256.251 +}
 256.252 +
 256.253 +void AwtFrame::CheckRetainActualFocusedWindow(HWND activatedOpositeHWnd)
 256.254 +{
 256.255 +    // If actual focused window is not this Frame
 256.256 +    if (AwtComponent::GetFocusedWindow() != GetHWnd()) {
 256.257 +        // Make sure the actual focused window is an owned window of this frame
 256.258 +        AwtWindow *focusedWindow = (AwtWindow *)AwtComponent::GetComponent(AwtComponent::GetFocusedWindow());
 256.259 +        if (focusedWindow != NULL && focusedWindow->GetOwningFrameOrDialog() == this) {
 256.260 +
 256.261 +            // Check that the opposite window is not this frame, nor an owned window of this frame
 256.262 +            if (activatedOpositeHWnd != NULL) {
 256.263 +                AwtWindow *oppositeWindow = (AwtWindow *)AwtComponent::GetComponent(activatedOpositeHWnd);
 256.264 +                if (oppositeWindow && oppositeWindow != this &&
 256.265 +                    oppositeWindow->GetOwningFrameOrDialog() != this)
 256.266 +                {
 256.267 +                    m_actualFocusedWindow = focusedWindow;
 256.268 +                }
 256.269 +            } else {
 256.270 +                 m_actualFocusedWindow = focusedWindow;
 256.271 +            }
 256.272 +        }
 256.273 +    }
 256.274 +}
 256.275 +
 256.276 +BOOL AwtFrame::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest)
 256.277 +{
 256.278 +    if (hittest == HTCLIENT) {
 256.279 +        // Don't let the actualFocusedWindow to steal focus if:
 256.280 +        // a) the frame is clicked in its client area;
 256.281 +        // b) focus is requested to some of the frame's child.
 256.282 +        m_actualFocusedWindow = NULL;
 256.283 +    }
 256.284 +    return AwtWindow::AwtSetActiveWindow(isMouseEventCause);
 256.285  }
 256.286  
 256.287  MsgRouting AwtFrame::WmEnterMenuLoop(BOOL isTrackPopupMenu)
 256.288 @@ -1161,60 +1196,6 @@
 256.289      return 0L;
 256.290  }
 256.291  
 256.292 -/*
 256.293 - * hWndLostFocus - the opposite component
 256.294 - * Returns TRUE if WM_SETFOCUS may be processed further, otherwise FALSE.
 256.295 - */
 256.296 -BOOL AwtFrame::activateEmbeddedFrameOnSetFocus(HWND hWndLostFocus) {
 256.297 -
 256.298 -    // If the EmbeddedFrame is not yet active, then this is either:
 256.299 -    // - requesting focus on smth in the EmbeddedFrame, or
 256.300 -    // - Alt hitting in IE while its menu is active (see 6374321).
 256.301 -    // In both these cases we get WM_SETFOCUS without WM_ACTIVATE
 256.302 -    // on the EmbeddedFrame.
 256.303 -    if (sm_focusedWindow != GetHWnd()) {
 256.304 -        HWND oppositeToplevelHWnd = AwtComponent::GetTopLevelParentForWindow(hWndLostFocus);
 256.305 -
 256.306 -        // As we get WM_SETFOCUS from the native system we expect
 256.307 -        // the native toplevel be set to the active window.
 256.308 -        HWND activeWindowHWnd = ::GetActiveWindow();
 256.309 -        DASSERT(activeWindowHWnd == ::GetAncestor(GetHWnd(), GA_ROOT));
 256.310 -
 256.311 -        // See 6538154.
 256.312 -        ::BringWindowToTop(activeWindowHWnd);
 256.313 -        ::SetForegroundWindow(activeWindowHWnd);
 256.314 -
 256.315 -        SynthesizeWmActivate(TRUE, oppositeToplevelHWnd);
 256.316 -
 256.317 -        return FALSE;
 256.318 -    }
 256.319 -    // If the EmbeddedFrame is already active, then this is a mouse click
 256.320 -    // or activation (by Alt-Tab, start etc).
 256.321 -    return TRUE;
 256.322 -}
 256.323 -
 256.324 -/*
 256.325 - * hWndGotFocus - the opposite component
 256.326 - * Returns TRUE if WM_KILLFOCUS may be processed further, otherwise FALSE.
 256.327 - */
 256.328 -BOOL AwtFrame::deactivateEmbeddedFrameOnKillFocus(HWND hWndGotFocus) {
 256.329 -    HWND oppositeToplevelHWnd = AwtComponent::GetTopLevelParentForWindow(hWndGotFocus);
 256.330 -
 256.331 -    if (oppositeToplevelHWnd != sm_focusedWindow) {
 256.332 -        SynthesizeWmActivate(FALSE, oppositeToplevelHWnd);
 256.333 -    }
 256.334 -    return TRUE;
 256.335 -}
 256.336 -
 256.337 -/*
 256.338 - * Execute on Toolkit only.
 256.339 - */
 256.340 -void AwtFrame::SynthesizeWmActivate(BOOL doActivate, HWND opposite) {
 256.341 -    if (::IsWindowVisible(GetHWnd())) {
 256.342 -        ::SendMessage(GetHWnd(), WM_ACTIVATE, MAKEWPARAM(doActivate ? WA_ACTIVE : WA_INACTIVE, FALSE), (LPARAM) opposite);
 256.343 -    }
 256.344 -}
 256.345 -
 256.346  void AwtFrame::_SynthesizeWmActivate(void *param)
 256.347  {
 256.348      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 256.349 @@ -1229,7 +1210,7 @@
 256.350      JNI_CHECK_PEER_GOTO(self, ret);
 256.351      frame = (AwtFrame *)pData;
 256.352  
 256.353 -    frame->SynthesizeWmActivate(doActivate, NULL);
 256.354 +    SynthesizeWmActivate(doActivate, frame->GetHWnd(), NULL);
 256.355  ret:
 256.356      env->DeleteGlobalRef(self);
 256.357  
 256.358 @@ -1594,7 +1575,7 @@
 256.359  extern "C" {
 256.360  
 256.361  /*
 256.362 - * Class:     sun_awt_windows_WFramePeer
 256.363 + * Class:     java_awt_Frame
 256.364   * Method:    initIDs
 256.365   * Signature: ()V
 256.366   */
 256.367 @@ -1603,9 +1584,6 @@
 256.368  {
 256.369      TRY;
 256.370  
 256.371 -    AwtFrame::stateID = env->GetFieldID(cls, "state", "I");
 256.372 -    DASSERT(AwtFrame::stateID != NULL);
 256.373 -
 256.374      AwtFrame::undecoratedID = env->GetFieldID(cls,"undecorated","Z");
 256.375      DASSERT(AwtFrame::undecoratedID != NULL);
 256.376  
 256.377 @@ -1614,6 +1592,25 @@
 256.378  
 256.379  /*
 256.380   * Class:     sun_awt_windows_WFramePeer
 256.381 + * Method:    initIDs
 256.382 + * Signature: ()V
 256.383 + */
 256.384 +JNIEXPORT void JNICALL
 256.385 +Java_sun_awt_windows_WFramePeer_initIDs(JNIEnv *env, jclass cls)
 256.386 +{
 256.387 +    TRY;
 256.388 +
 256.389 +    AwtFrame::setExtendedStateMID = env->GetMethodID(cls, "setExtendedState", "(I)V");
 256.390 +    AwtFrame::getExtendedStateMID = env->GetMethodID(cls, "getExtendedState", "()I");
 256.391 +
 256.392 +    DASSERT(AwtFrame::setExtendedStateMID);
 256.393 +    DASSERT(AwtFrame::getExtendedStateMID);
 256.394 +
 256.395 +    CATCH_BAD_ALLOC;
 256.396 +}
 256.397 +
 256.398 +/*
 256.399 + * Class:     sun_awt_windows_WFramePeer
 256.400   * Method:    setState
 256.401   * Signature: (I)V
 256.402   */
   257.1 --- a/src/windows/native/sun/windows/awt_Frame.h	Thu Apr 16 17:42:00 2009 +0100
   257.2 +++ b/src/windows/native/sun/windows/awt_Frame.h	Thu Apr 16 19:10:32 2009 -0700
   257.3 @@ -1,5 +1,5 @@
   257.4  /*
   257.5 - * Copyright 1996-2007 Sun Microsystems, Inc.  All Rights Reserved.
   257.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   257.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   257.8   *
   257.9   * This code is free software; you can redistribute it and/or modify it
  257.10 @@ -48,14 +48,14 @@
  257.11          FRAME_SETMENUBAR
  257.12      };
  257.13  
  257.14 -    /* int handle field for sun.awt.windows.WEmbeddedFrame */
  257.15 +    /* java.awt.Frame fields and method IDs */
  257.16 +    static jfieldID undecoratedID;
  257.17 +
  257.18 +    /* sun.awt.windows.WEmbeddedFrame fields and method IDs */
  257.19      static jfieldID handleID;
  257.20  
  257.21 -    /* int state field for java.awt.Frame */
  257.22 -    static jfieldID stateID;
  257.23 -
  257.24 -    /* boolean undecorated field for java.awt.Frame */
  257.25 -    static jfieldID undecoratedID;
  257.26 +    static jmethodID setExtendedStateMID;
  257.27 +    static jmethodID getExtendedStateMID;
  257.28  
  257.29      /* method id for WEmbeddedFrame.requestActivate() method */
  257.30      static jmethodID activateEmbeddingTopLevelMID;
  257.31 @@ -108,7 +108,6 @@
  257.32      MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button);
  257.33      MsgRouting WmNcMouseUp(WPARAM hitTest, int x, int y, int button);
  257.34      MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal);
  257.35 -    MsgRouting WmWindowPosChanged(LPARAM windowPos);
  257.36      MsgRouting WmShowWindow(BOOL show, UINT status);
  257.37  
  257.38      virtual MsgRouting WmSysCommand(UINT uCmdType, int xPos, int yPos);
  257.39 @@ -133,11 +132,6 @@
  257.40      // adjusts the IME candidate window position if needed
  257.41      void AdjustCandidateWindowPos();
  257.42  
  257.43 -    void SynthesizeWmActivate(BOOL doActivate, HWND opposite);
  257.44 -
  257.45 -    BOOL activateEmbeddedFrameOnSetFocus(HWND hWndLostFocus);
  257.46 -    BOOL deactivateEmbeddedFrameOnKillFocus(HWND hWndGotFocus);
  257.47 -
  257.48      // invoked on Toolkit thread
  257.49      static jobject _GetBoundsPrivate(void *param);
  257.50  
  257.51 @@ -153,6 +147,14 @@
  257.52  
  257.53      virtual void Reshape(int x, int y, int width, int height);
  257.54  
  257.55 +    virtual BOOL AwtSetActiveWindow(BOOL isMouseEventCause = FALSE, UINT hittest = HTCLIENT);
  257.56 +
  257.57 +    void CheckRetainActualFocusedWindow(HWND activatedOpositeHWnd);
  257.58 +    BOOL CheckActivateActualFocusedWindow(HWND deactivatedOpositeHWnd);
  257.59 +
  257.60 +    INLINE HWND GetLastProxiedFocusOwner() { return m_lastProxiedFocusOwner; }
  257.61 +    INLINE void SetLastProxiedFocusOwner(HWND hwnd) { m_lastProxiedFocusOwner = hwnd; }
  257.62 +
  257.63  protected:
  257.64      /* The frame is undecorated. */
  257.65      BOOL m_isUndecorated;
  257.66 @@ -189,6 +191,10 @@
  257.67         or an AwtDialog (or one of its children) has the logical input focus. */
  257.68      HWND m_proxyFocusOwner;
  257.69  
  257.70 +    /* Retains the last/current sm_focusOwner proxied. Actually, it should be
  257.71 +     * a component of an owned window last/currently active. */
  257.72 +    HWND m_lastProxiedFocusOwner;
  257.73 +
  257.74      /*
  257.75       * Fix for 4823903.
  257.76       * Retains a focus proxied window to set the focus correctly
   258.1 --- a/src/windows/native/sun/windows/awt_InputMethod.cpp	Thu Apr 16 17:42:00 2009 +0100
   258.2 +++ b/src/windows/native/sun/windows/awt_InputMethod.cpp	Thu Apr 16 19:10:32 2009 -0700
   258.3 @@ -1,5 +1,5 @@
   258.4  /*
   258.5 - * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
   258.6 + * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
   258.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   258.8   *
   258.9   * This code is free software; you can redistribute it and/or modify it
  258.10 @@ -176,7 +176,7 @@
  258.11                              java_awt_event_KeyEvent_CHAR_UNDEFINED,
  258.12                              unicodeChar,
  258.13                              modifiers,
  258.14 -                            java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
  258.15 +                            java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
  258.16                              &msg);
  258.17          } else {
  258.18              MSG* pCopiedMsg = new MSG;
   259.1 --- a/src/windows/native/sun/windows/awt_KeyEvent.cpp	Thu Apr 16 17:42:00 2009 +0100
   259.2 +++ b/src/windows/native/sun/windows/awt_KeyEvent.cpp	Thu Apr 16 19:10:32 2009 -0700
   259.3 @@ -1,5 +1,5 @@
   259.4  /*
   259.5 - * Copyright 1998-1999 Sun Microsystems, Inc.  All Rights Reserved.
   259.6 + * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
   259.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   259.8   *
   259.9   * This code is free software; you can redistribute it and/or modify it
  259.10 @@ -32,6 +32,10 @@
  259.11  
  259.12  jfieldID AwtKeyEvent::keyCodeID;
  259.13  jfieldID AwtKeyEvent::keyCharID;
  259.14 +jfieldID AwtKeyEvent::rawCodeID;
  259.15 +jfieldID AwtKeyEvent::primaryLevelUnicodeID;
  259.16 +jfieldID AwtKeyEvent::scancodeID;
  259.17 +jfieldID AwtKeyEvent::extendedKeyCodeID;
  259.18  
  259.19  /************************************************************************
  259.20   * AwtKeyEvent native methods
  259.21 @@ -45,9 +49,18 @@
  259.22  
  259.23      AwtKeyEvent::keyCodeID = env->GetFieldID(cls, "keyCode", "I");
  259.24      AwtKeyEvent::keyCharID = env->GetFieldID(cls, "keyChar", "C");
  259.25 +    AwtKeyEvent::rawCodeID = env->GetFieldID(cls, "rawCode", "J");
  259.26 +    AwtKeyEvent::primaryLevelUnicodeID = env->GetFieldID(cls, "primaryLevelUnicode", "J");
  259.27 +    AwtKeyEvent::scancodeID = env->GetFieldID(cls, "scancode", "J");
  259.28 +    AwtKeyEvent::extendedKeyCodeID = env->GetFieldID(cls, "extendedKeyCode", "J");
  259.29 +
  259.30  
  259.31      DASSERT(AwtKeyEvent::keyCodeID != NULL);
  259.32      DASSERT(AwtKeyEvent::keyCharID != NULL);
  259.33 +    DASSERT(AwtKeyEvent::rawCodeID != NULL);
  259.34 +    DASSERT(AwtKeyEvent::primaryLevelUnicodeID != NULL);
  259.35 +    DASSERT(AwtKeyEvent::scancodeID != NULL);
  259.36 +    DASSERT(AwtKeyEvent::extendedKeyCodeID != NULL);
  259.37  
  259.38      CATCH_BAD_ALLOC;
  259.39  }
   260.1 --- a/src/windows/native/sun/windows/awt_KeyEvent.h	Thu Apr 16 17:42:00 2009 +0100
   260.2 +++ b/src/windows/native/sun/windows/awt_KeyEvent.h	Thu Apr 16 19:10:32 2009 -0700
   260.3 @@ -39,7 +39,10 @@
   260.4      /* java.awt.KeyEvent field ids */
   260.5      static jfieldID keyCodeID;
   260.6      static jfieldID keyCharID;
   260.7 -
   260.8 +    static jfieldID rawCodeID;
   260.9 +    static jfieldID primaryLevelUnicodeID;
  260.10 +    static jfieldID scancodeID;
  260.11 +    static jfieldID extendedKeyCodeID;
  260.12  };
  260.13  
  260.14  #endif // AWT_KEYEVENT_H
   261.1 --- a/src/windows/native/sun/windows/awt_KeyboardFocusManager.cpp	Thu Apr 16 17:42:00 2009 +0100
   261.2 +++ b/src/windows/native/sun/windows/awt_KeyboardFocusManager.cpp	Thu Apr 16 19:10:32 2009 -0700
   261.3 @@ -1,5 +1,5 @@
   261.4  /*
   261.5 - * Copyright 2000-2004 Sun Microsystems, Inc.  All Rights Reserved.
   261.6 + * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
   261.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   261.8   *
   261.9   * This code is free software; you can redistribute it and/or modify it
  261.10 @@ -24,30 +24,20 @@
  261.11   */
  261.12  
  261.13  #include "awt.h"
  261.14 -#include "awt_KeyboardFocusManager.h"
  261.15  #include "awt_Component.h"
  261.16  #include "awt_Toolkit.h"
  261.17  #include <java_awt_KeyboardFocusManager.h>
  261.18 -
  261.19 -jclass AwtKeyboardFocusManager::keyboardFocusManagerCls;
  261.20 -jmethodID AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID;
  261.21 -jmethodID AwtKeyboardFocusManager::heavyweightButtonDownMID;
  261.22 -jmethodID AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID;
  261.23 -jmethodID AwtKeyboardFocusManager::removeLastFocusRequestMID;
  261.24 -jfieldID  AwtKeyboardFocusManager::isProxyActive;
  261.25 -jmethodID AwtKeyboardFocusManager::processSynchronousTransfer;
  261.26 +#include <jni.h>
  261.27  
  261.28  static jobject getNativeFocusState(JNIEnv *env, void*(*ftn)()) {
  261.29 -    jobject lFocusState = NULL;
  261.30 +    jobject gFocusState = (jobject)AwtToolkit::GetInstance().SyncCall(ftn);
  261.31  
  261.32 -    jobject gFocusState = reinterpret_cast<jobject>(AwtToolkit::GetInstance().
  261.33 -        InvokeFunction(ftn));
  261.34      if (gFocusState != NULL) {
  261.35 -        lFocusState = env->NewLocalRef(gFocusState);
  261.36 +        jobject lFocusState = env->NewLocalRef(gFocusState);
  261.37          env->DeleteGlobalRef(gFocusState);
  261.38 +        return lFocusState;
  261.39      }
  261.40 -
  261.41 -    return lFocusState;
  261.42 +    return NULL;
  261.43  }
  261.44  
  261.45  extern "C" {
  261.46 @@ -61,53 +51,35 @@
  261.47  Java_java_awt_KeyboardFocusManager_initIDs
  261.48      (JNIEnv *env, jclass cls)
  261.49  {
  261.50 +}
  261.51 +
  261.52 +/*
  261.53 + * Class:     sun_awt_windows_WKeyboardFocusManagerPeer
  261.54 + * Method:    setNativeFocusOwner
  261.55 + * Signature: (Lsun/awt/windows/WComponentPeer)
  261.56 + */
  261.57 +JNIEXPORT void JNICALL
  261.58 +Java_sun_awt_windows_WKeyboardFocusManagerPeer_setNativeFocusOwner
  261.59 +    (JNIEnv *env, jclass cls, jobject compPeer)
  261.60 +{
  261.61      TRY;
  261.62  
  261.63 -    AwtKeyboardFocusManager::keyboardFocusManagerCls = (jclass)
  261.64 -        env->NewGlobalRef(cls);
  261.65 -    AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID =
  261.66 -        env->GetStaticMethodID(cls, "shouldNativelyFocusHeavyweight",
  261.67 -            "(Ljava/awt/Component;Ljava/awt/Component;ZZJLsun/awt/CausedFocusEvent$Cause;)I");
  261.68 -    AwtKeyboardFocusManager::heavyweightButtonDownMID =
  261.69 -        env->GetStaticMethodID(cls, "heavyweightButtonDown",
  261.70 -            "(Ljava/awt/Component;J)V");
  261.71 -    AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID =
  261.72 -        env->GetStaticMethodID(cls, "markClearGlobalFocusOwner",
  261.73 -                               "()Ljava/awt/Window;");
  261.74 -    AwtKeyboardFocusManager::removeLastFocusRequestMID =
  261.75 -        env->GetStaticMethodID(cls, "removeLastFocusRequest",
  261.76 -                               "(Ljava/awt/Component;)V");
  261.77 +    jobject peerGlobalRef = env->NewGlobalRef(compPeer);
  261.78  
  261.79 -    AwtKeyboardFocusManager::processSynchronousTransfer =
  261.80 -        env->GetStaticMethodID(cls, "processSynchronousLightweightTransfer",
  261.81 -                               "(Ljava/awt/Component;Ljava/awt/Component;ZZJ)Z");
  261.82 +    AwtToolkit::GetInstance().SyncCall(AwtComponent::SetNativeFocusOwner,
  261.83 +                                       (void*)peerGlobalRef);
  261.84 +    // peerGlobalRef is deleted in SetNativeFocusOwner
  261.85  
  261.86 -    jclass keyclass = env->FindClass("java/awt/event/KeyEvent");
  261.87 -    DASSERT (keyclass != NULL);
  261.88 -
  261.89 -    AwtKeyboardFocusManager::isProxyActive =
  261.90 -        env->GetFieldID(keyclass, "isProxyActive", "Z");
  261.91 -
  261.92 -    env->DeleteLocalRef(keyclass);
  261.93 -
  261.94 -    DASSERT(AwtKeyboardFocusManager::keyboardFocusManagerCls != NULL);
  261.95 -    DASSERT(AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID !=
  261.96 -            NULL);
  261.97 -    DASSERT(AwtKeyboardFocusManager::heavyweightButtonDownMID != NULL);
  261.98 -    DASSERT(AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID != NULL);
  261.99 -    DASSERT(AwtKeyboardFocusManager::removeLastFocusRequestMID != NULL);
 261.100 -    DASSERT(AwtKeyboardFocusManager::processSynchronousTransfer != NULL);
 261.101      CATCH_BAD_ALLOC;
 261.102  }
 261.103  
 261.104 -
 261.105  /*
 261.106 - * Class:     sun_awt_KeyboardFocusManagerPeerImpl
 261.107 + * Class:     sun_awt_windows_WKeyboardFocusManagerPeer
 261.108   * Method:    getNativeFocusOwner
 261.109 - * Signature: ()Ljava/awt/Component;
 261.110 + * Signature: (Lsun/awt/windows/WComponentPeer)
 261.111   */
 261.112  JNIEXPORT jobject JNICALL
 261.113 -Java_sun_awt_KeyboardFocusManagerPeerImpl_getNativeFocusOwner
 261.114 +Java_sun_awt_windows_WKeyboardFocusManagerPeer_getNativeFocusOwner
 261.115      (JNIEnv *env, jclass cls)
 261.116  {
 261.117      TRY;
 261.118 @@ -118,12 +90,12 @@
 261.119  }
 261.120  
 261.121  /*
 261.122 - * Class:     sun_awt_KeyboardFocusManagerPeerImpl
 261.123 + * Class:     sun_awt_windows_WKeyboardFocusManagerPeer
 261.124   * Method:    getNativeFocusedWindow
 261.125   * Signature: ()Ljava/awt/Window;
 261.126   */
 261.127  JNIEXPORT jobject JNICALL
 261.128 -Java_sun_awt_KeyboardFocusManagerPeerImpl_getNativeFocusedWindow
 261.129 +Java_sun_awt_windows_WKeyboardFocusManagerPeer_getNativeFocusedWindow
 261.130      (JNIEnv *env, jclass cls)
 261.131  {
 261.132      TRY;
 261.133 @@ -132,21 +104,4 @@
 261.134  
 261.135      CATCH_BAD_ALLOC_RET(NULL);
 261.136  }
 261.137 -
 261.138 -/*
 261.139 - * Class:     sun_awt_KeyboardFocusManagerPeerImpl
 261.140 - * Method:    clearNativeGlobalFocusOwner
 261.141 - * Signature: (Ljava/awt/Window;)V
 261.142 - */
 261.143 -JNIEXPORT void JNICALL
 261.144 -Java_sun_awt_KeyboardFocusManagerPeerImpl_clearNativeGlobalFocusOwner
 261.145 -    (JNIEnv *env, jobject self, jobject activeWindow)
 261.146 -{
 261.147 -    TRY;
 261.148 -
 261.149 -    AwtToolkit::GetInstance().InvokeFunction
 261.150 -        ((void*(*)(void))AwtComponent::ClearGlobalFocusOwner);
 261.151 -
 261.152 -    CATCH_BAD_ALLOC;
 261.153  }
 261.154 -}
   262.1 --- a/src/windows/native/sun/windows/awt_KeyboardFocusManager.h	Thu Apr 16 17:42:00 2009 +0100
   262.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   262.3 @@ -1,43 +0,0 @@
   262.4 -/*
   262.5 - * Copyright 2001-2002 Sun Microsystems, Inc.  All Rights Reserved.
   262.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   262.7 - *
   262.8 - * This code is free software; you can redistribute it and/or modify it
   262.9 - * under the terms of the GNU General Public License version 2 only, as
  262.10 - * published by the Free Software Foundation.  Sun designates this
  262.11 - * particular file as subject to the "Classpath" exception as provided
  262.12 - * by Sun in the LICENSE file that accompanied this code.
  262.13 - *
  262.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
  262.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  262.16 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  262.17 - * version 2 for more details (a copy is included in the LICENSE file that
  262.18 - * accompanied this code).
  262.19 - *
  262.20 - * You should have received a copy of the GNU General Public License version
  262.21 - * 2 along with this work; if not, write to the Free Software Foundation,
  262.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  262.23 - *
  262.24 - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  262.25 - * CA 95054 USA or visit www.sun.com if you need additional information or
  262.26 - * have any questions.
  262.27 - */
  262.28 -
  262.29 -#ifndef AWT_KEYBOARDFOCUSMANAGER_H
  262.30 -#define AWT_KEYBOARDFOCUSMANAGER_H
  262.31 -
  262.32 -#include <jni.h>
  262.33 -
  262.34 -class AwtKeyboardFocusManager {
  262.35 -public:
  262.36 -
  262.37 -    static jclass keyboardFocusManagerCls;
  262.38 -    static jmethodID shouldNativelyFocusHeavyweightMID;
  262.39 -    static jmethodID heavyweightButtonDownMID;
  262.40 -    static jmethodID markClearGlobalFocusOwnerMID;
  262.41 -    static jmethodID removeLastFocusRequestMID;
  262.42 -    static jfieldID isProxyActive;
  262.43 -    static jmethodID processSynchronousTransfer;
  262.44 -};
  262.45 -
  262.46 -#endif // AWT_KEYBOARDFOCUSMANAGER_H
   263.1 --- a/src/windows/native/sun/windows/awt_List.cpp	Thu Apr 16 17:42:00 2009 +0100
   263.2 +++ b/src/windows/native/sun/windows/awt_List.cpp	Thu Apr 16 19:10:32 2009 -0700
   263.3 @@ -1,5 +1,5 @@
   263.4  /*
   263.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   263.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   263.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   263.8   *
   263.9   * This code is free software; you can redistribute it and/or modify it
  263.10 @@ -24,7 +24,6 @@
  263.11   */
  263.12  
  263.13  #include "awt_List.h"
  263.14 -#include "awt_KeyboardFocusManager.h"
  263.15  #include "awt_Canvas.h"
  263.16  #include "awt_Dimension.h"
  263.17  #include "awt_Toolkit.h"
  263.18 @@ -154,28 +153,6 @@
  263.19      return c;
  263.20  }
  263.21  
  263.22 -BOOL AwtList::ActMouseMessage(MSG * pMsg) {
  263.23 -    if (!IsFocusingMessage(pMsg->message)) {
  263.24 -        return FALSE;
  263.25 -    }
  263.26 -
  263.27 -    if (pMsg->message == WM_LBUTTONDOWN) {
  263.28 -        LONG item = static_cast<LONG>(SendListMessage(LB_ITEMFROMPOINT, 0, pMsg->lParam));
  263.29 -        if (item != LB_ERR) {
  263.30 -            if (isMultiSelect) {
  263.31 -                if (IsItemSelected(item)) {
  263.32 -                    Deselect(item);
  263.33 -                } else {
  263.34 -                    Select(item);
  263.35 -                }
  263.36 -            } else {
  263.37 -                Select(item);
  263.38 -            }
  263.39 -        }
  263.40 -    }
  263.41 -    return TRUE;
  263.42 -}
  263.43 -
  263.44  void AwtList::SetDragCapture(UINT flags)
  263.45  {
  263.46      // don't want to interfere with other controls
  263.47 @@ -473,17 +450,11 @@
  263.48      }
  263.49  
  263.50      /*
  263.51 -     * Fix for 6240202. List being inside a non-focusable Window (or non-focusable List
  263.52 -     * being a single component inside a focusable Window) won't trigger ActionEvent by
  263.53 -     * double click. All focus events will be filtered (in the AWT focus hook) for such
  263.54 -     * a Window containing the List. In such a case OS Windows won't generate WM_COMMAND
  263.55 -     * (and no WmNotify() will be called for the List). Here we call WmCommand()
  263.56 -     * synthetically.
  263.57 +     * As we consume WM_LBUTONDOWN the list won't trigger ActionEvent by double click.
  263.58 +     * We trigger it ourselves. (see also 6240202)
  263.59       */
  263.60      int clickCount = GetClickCount();
  263.61 -    if (button == LEFT_BUTTON && clickCount >= 2 && clickCount % 2 == 0 &&
  263.62 -        !GetContainer()->IsFocusableWindow())
  263.63 -    {
  263.64 +    if (button == LEFT_BUTTON && clickCount >= 2 && clickCount % 2 == 0) {
  263.65          WmCommand(0, GetListHandle(), LBN_DBLCLK);
  263.66      }
  263.67      return mrResult;
  263.68 @@ -500,67 +471,32 @@
  263.69      return mrConsume;
  263.70  }
  263.71  
  263.72 -// Override WmSetFocus and WmKillFocus so that they operate on the List handle
  263.73 -// instead of the wrapper handle. Otherwise, the methods are the same as their
  263.74 -// AwtComponent counterparts.
  263.75 -
  263.76 -MsgRouting AwtList::WmSetFocus(HWND hWndLostFocus) {
  263.77 -    if (sm_focusOwner == GetListHandle()) {
  263.78 -        sm_realFocusOpposite = NULL;
  263.79 -        return mrConsume;
  263.80 -    }
  263.81 -
  263.82 -    sm_focusOwner = GetListHandle();
  263.83 -
  263.84 -    if (sm_realFocusOpposite != NULL) {
  263.85 -        hWndLostFocus = sm_realFocusOpposite;
  263.86 -        sm_realFocusOpposite = NULL;
  263.87 -    }
  263.88 -
  263.89 -    SendFocusEvent(java_awt_event_FocusEvent_FOCUS_GAINED, hWndLostFocus);
  263.90 -
  263.91 -    return mrDoDefault;
  263.92 -}
  263.93 -
  263.94 -MsgRouting AwtList::WmKillFocus(HWND hWndGotFocus) {
  263.95 -    if (sm_focusOwner != NULL && sm_focusOwner == hWndGotFocus) {
  263.96 -        return mrConsume;
  263.97 -    }
  263.98 -
  263.99 -    if (sm_focusOwner != GetListHandle()) {
 263.100 -        if (sm_focusOwner != NULL) {
 263.101 -            if (hWndGotFocus != NULL &&
 263.102 -                AwtComponent::GetComponent(hWndGotFocus) != NULL)
 263.103 -                {
 263.104 -                    sm_realFocusOpposite = sm_focusOwner;
 263.105 -                }
 263.106 -            ::SendMessage(sm_focusOwner, WM_KILLFOCUS, (WPARAM)hWndGotFocus,
 263.107 -                          0);
 263.108 -        }
 263.109 -        return mrConsume;
 263.110 -    }
 263.111 -
 263.112 -    sm_focusOwner = NULL;
 263.113 -
 263.114 -    SendFocusEvent(java_awt_event_FocusEvent_FOCUS_LOST, hWndGotFocus);
 263.115 -
 263.116 -    return mrDoDefault;
 263.117 +BOOL AwtList::IsFocusingMouseMessage(MSG *pMsg)
 263.118 +{
 263.119 +    return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK;
 263.120  }
 263.121  
 263.122  MsgRouting AwtList::HandleEvent(MSG *msg, BOOL synthetic)
 263.123  {
 263.124 -    if (AwtComponent::sm_focusOwner != GetListHandle() &&
 263.125 -        (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
 263.126 -    {
 263.127 -        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 263.128 -        jobject target = GetTarget(env);
 263.129 -        env->CallStaticVoidMethod
 263.130 -            (AwtKeyboardFocusManager::keyboardFocusManagerCls,
 263.131 -             AwtKeyboardFocusManager::heavyweightButtonDownMID,
 263.132 -             target, ((jlong)msg->time) & 0xFFFFFFFF);
 263.133 -        env->DeleteLocalRef(target);
 263.134 +    if (IsFocusingMouseMessage(msg)) {
 263.135 +        LONG item = static_cast<LONG>(SendListMessage(LB_ITEMFROMPOINT, 0, msg->lParam));
 263.136 +        if (item != LB_ERR) {
 263.137 +            if (isMultiSelect) {
 263.138 +                if (IsItemSelected(item)) {
 263.139 +                    Deselect(item);
 263.140 +                } else {
 263.141 +                    Select(item);
 263.142 +                }
 263.143 +            } else {
 263.144 +                Select(item);
 263.145 +            }
 263.146 +        }
 263.147 +        delete msg;
 263.148 +        return mrConsume;
 263.149      }
 263.150 -
 263.151 +    if (msg->message == WM_KEYDOWN && msg->wParam == VK_RETURN) {
 263.152 +        WmNotify(LBN_DBLCLK);
 263.153 +    }
 263.154      return AwtComponent::HandleEvent(msg, synthetic);
 263.155  }
 263.156  
 263.157 @@ -607,15 +543,6 @@
 263.158      return mrDoDefault;
 263.159  }
 263.160  
 263.161 -MsgRouting
 263.162 -AwtList::WmKeyDown(UINT wkey, UINT repCnt, UINT flags, BOOL system)
 263.163 -{
 263.164 -    if (wkey == VK_RETURN) {
 263.165 -        WmNotify(LBN_DBLCLK);
 263.166 -    }
 263.167 -    return AwtComponent::WmKeyDown(wkey, repCnt, flags, system);
 263.168 -}
 263.169 -
 263.170  BOOL AwtList::InheritsNativeMouseWheelBehavior() {return true;}
 263.171  
 263.172  jint AwtList::_GetMaxWidth(void *param)
   264.1 --- a/src/windows/native/sun/windows/awt_List.h	Thu Apr 16 17:42:00 2009 +0100
   264.2 +++ b/src/windows/native/sun/windows/awt_List.h	Thu Apr 16 19:10:32 2009 -0700
   264.3 @@ -1,5 +1,5 @@
   264.4  /*
   264.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
   264.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   264.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   264.8   *
   264.9   * This code is free software; you can redistribute it and/or modify it
  264.10 @@ -97,8 +97,6 @@
  264.11          }
  264.12      }
  264.13  
  264.14 -    BOOL ActMouseMessage(MSG* pMsg);
  264.15 -
  264.16      // Netscape : Change the font on the list and redraw the
  264.17      // items nicely.
  264.18      virtual void SetFont(AwtFont *pFont);
  264.19 @@ -116,7 +114,6 @@
  264.20      MsgRouting WmMouseDown(UINT flags, int x, int y, int button);
  264.21      MsgRouting WmMouseUp(UINT flags, int x, int y, int button);
  264.22      MsgRouting WmNotify(UINT notifyCode);
  264.23 -    MsgRouting WmKeyDown(UINT vkey, UINT repCnt, UINT flags, BOOL system);
  264.24  
  264.25      /* for multifont list */
  264.26      MsgRouting OwnerDrawItem(UINT ctrlId, DRAWITEMSTRUCT& drawInfo);
  264.27 @@ -127,8 +124,6 @@
  264.28  
  264.29      MsgRouting WmCtlColor(HDC hDC, HWND hCtrl, UINT ctlColor,
  264.30                            HBRUSH& retBrush);
  264.31 -    MsgRouting WmSetFocus(HWND hWndLostFocus);
  264.32 -    MsgRouting WmKillFocus(HWND hWndGotFocus);
  264.33  
  264.34      MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
  264.35  
  264.36 @@ -170,6 +165,8 @@
  264.37  
  264.38      virtual BOOL InheritsNativeMouseWheelBehavior();
  264.39  
  264.40 +    virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
  264.41 +
  264.42      // some methods called on Toolkit thread
  264.43      static jint _GetMaxWidth(void *param);
  264.44      static void _UpdateMaxItemWidth(void *param);
   265.1 --- a/src/windows/native/sun/windows/awt_Panel.cpp	Thu Apr 16 17:42:00 2009 +0100
   265.2 +++ b/src/windows/native/sun/windows/awt_Panel.cpp	Thu Apr 16 19:10:32 2009 -0700
   265.3 @@ -34,70 +34,6 @@
   265.4  
   265.5  jfieldID AwtPanel::insets_ID;
   265.6  
   265.7 -static char* AWTPANEL_RESTACK_MSG_1 = "Peers array is null";
   265.8 -static char* AWTPANEL_RESTACK_MSG_2 = "Peer null in JNI";
   265.9 -static char* AWTPANEL_RESTACK_MSG_3 = "Native resources unavailable";
  265.10 -static char* AWTPANEL_RESTACK_MSG_4 = "Child peer is null";
  265.11 -
  265.12 -void* AwtPanel::Restack(void * param) {
  265.13 -    TRY;
  265.14 -
  265.15 -    JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  265.16 -    jobjectArray peers = (jobjectArray)param;
  265.17 -
  265.18 -    int peerCount = env->GetArrayLength(peers);
  265.19 -    if (peerCount < 1) {
  265.20 -        env->DeleteGlobalRef(peers);
  265.21 -        return AWTPANEL_RESTACK_MSG_1;
  265.22 -    }
  265.23 -
  265.24 -    jobject self = env->GetObjectArrayElement(peers, 0);
  265.25 -    // It's entirely possible that our native resources have been destroyed
  265.26 -    // before our java peer - if we're dispose()d, for instance.
  265.27 -    // Alert caller w/ IllegalComponentStateException.
  265.28 -    if (self == NULL) {
  265.29 -        env->DeleteGlobalRef(peers);
  265.30 -        return AWTPANEL_RESTACK_MSG_2;
  265.31 -    }
  265.32 -    PDATA pData = JNI_GET_PDATA(self);
  265.33 -    if (pData == NULL) {
  265.34 -        env->DeleteGlobalRef(peers);
  265.35 -        env->DeleteLocalRef(self);
  265.36 -        return AWTPANEL_RESTACK_MSG_3;
  265.37 -    }
  265.38 -
  265.39 -    AwtPanel* panel = (AwtPanel*)pData;
  265.40 -
  265.41 -    HWND prevWindow = 0;
  265.42 -
  265.43 -    for (int i = 1; i < peerCount; i++) {
  265.44 -        jobject peer = env->GetObjectArrayElement(peers, i);
  265.45 -        if (peer == NULL) {
  265.46 -            // Nonsense
  265.47 -            env->DeleteGlobalRef(peers);
  265.48 -            env->DeleteLocalRef(self);
  265.49 -            return  AWTPANEL_RESTACK_MSG_4;
  265.50 -        }
  265.51 -        PDATA child_pData = JNI_GET_PDATA(peer);
  265.52 -        if (child_pData == NULL) {
  265.53 -            env->DeleteLocalRef(peer);
  265.54 -            env->DeleteGlobalRef(peers);
  265.55 -            env->DeleteLocalRef(self);
  265.56 -            return AWTPANEL_RESTACK_MSG_3;
  265.57 -        }
  265.58 -        AwtComponent* child_comp = (AwtComponent*)child_pData;
  265.59 -        ::SetWindowPos(child_comp->GetHWnd(), prevWindow, 0, 0, 0, 0,
  265.60 -                       SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE | SWP_ASYNCWINDOWPOS);
  265.61 -        prevWindow = child_comp->GetHWnd();
  265.62 -        env->DeleteLocalRef(peer);
  265.63 -    }
  265.64 -    env->DeleteGlobalRef(peers);
  265.65 -    env->DeleteLocalRef(self);
  265.66 -
  265.67 -    CATCH_BAD_ALLOC_RET("Allocation error");
  265.68 -    return NULL;
  265.69 -}
  265.70 -
  265.71  /************************************************************************
  265.72   * AwtPanel native methods
  265.73   */
  265.74 @@ -116,18 +52,4 @@
  265.75      CATCH_BAD_ALLOC;
  265.76  }
  265.77  
  265.78 -JNIEXPORT void JNICALL
  265.79 -Java_sun_awt_windows_WPanelPeer_pRestack(JNIEnv *env, jobject self, jobjectArray peers) {
  265.80 -
  265.81 -    TRY;
  265.82 -
  265.83 -    const char * error = (const char*)AwtToolkit::GetInstance().InvokeFunction(AwtPanel::Restack, env->NewGlobalRef(peers));
  265.84 -    if (error != NULL) {
  265.85 -        JNU_ThrowByName(env, "java/awt/IllegalComponentStateException", error);
  265.86 -    }
  265.87 -
  265.88 -    CATCH_BAD_ALLOC;
  265.89 -}
  265.90 -
  265.91 -
  265.92  } /* extern "C" */
   266.1 --- a/src/windows/native/sun/windows/awt_Panel.h	Thu Apr 16 17:42:00 2009 +0100
   266.2 +++ b/src/windows/native/sun/windows/awt_Panel.h	Thu Apr 16 19:10:32 2009 -0700
   266.3 @@ -35,11 +35,8 @@
   266.4  
   266.5  class AwtPanel {
   266.6  public:
   266.7 -    static void* Restack(void * param);
   266.8 -
   266.9      /* java.awt.Panel field ids */
  266.10      static jfieldID insets_ID;
  266.11 -
  266.12  };
  266.13  
  266.14  #endif // AWT_PANEL_H
   267.1 --- a/src/windows/native/sun/windows/awt_PrintDialog.cpp	Thu Apr 16 17:42:00 2009 +0100
   267.2 +++ b/src/windows/native/sun/windows/awt_PrintDialog.cpp	Thu Apr 16 19:10:32 2009 -0700
   267.3 @@ -65,7 +65,8 @@
   267.4          }
   267.5      }
   267.6  
   267.7 -    return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam);
   267.8 +    WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp));
   267.9 +    return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam);
  267.10  }
  267.11  
  267.12  static UINT_PTR CALLBACK
  267.13 @@ -87,7 +88,7 @@
  267.14              DWORD style = ::GetClassLong(hdlg, GCL_STYLE);
  267.15              ::SetClassLong(hdlg,GCL_STYLE, style & ~CS_SAVEBITS);
  267.16  
  267.17 -            ::SetFocus(hdlg);
  267.18 +            ::SetFocus(hdlg); // will not break synthetic focus as hdlg is a native toplevel
  267.19  
  267.20              // set appropriate icon for parentless dialogs
  267.21              jobject awtParent = env->GetObjectField(peer, AwtPrintDialog::parentID);
  267.22 @@ -99,16 +100,19 @@
  267.23              }
  267.24  
  267.25              // subclass dialog's parent to receive additional messages
  267.26 -            ComCtl32Util::GetInstance().SubclassHWND(hdlg,
  267.27 -                                                     PrintDialogWndProc);
  267.28 +            WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hdlg,
  267.29 +                                                                           PrintDialogWndProc);
  267.30 +            ::SetProp(hdlg, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc));
  267.31  
  267.32              break;
  267.33          }
  267.34          case WM_DESTROY: {
  267.35 +            WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hdlg, NativeDialogWndProcProp));
  267.36              ComCtl32Util::GetInstance().UnsubclassHWND(hdlg,
  267.37                                                         PrintDialogWndProc,
  267.38 -                                                       NULL);
  267.39 +                                                       lpfnWndProc);
  267.40              ::RemoveProp(hdlg, ModalDialogPeerProp);
  267.41 +            ::RemoveProp(hdlg, NativeDialogWndProcProp);
  267.42              break;
  267.43          }
  267.44      }
   268.1 --- a/src/windows/native/sun/windows/awt_PrintJob.cpp	Thu Apr 16 17:42:00 2009 +0100
   268.2 +++ b/src/windows/native/sun/windows/awt_PrintJob.cpp	Thu Apr 16 19:10:32 2009 -0700
   268.3 @@ -2885,7 +2885,8 @@
   268.4          }
   268.5      }
   268.6  
   268.7 -    return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam);
   268.8 +    WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp));
   268.9 +    return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam);
  268.10  }
  268.11  
  268.12  /**
  268.13 @@ -2919,16 +2920,19 @@
  268.14              }
  268.15  
  268.16              // subclass dialog's parent to receive additional messages
  268.17 -            ComCtl32Util::GetInstance().SubclassHWND(hDlg,
  268.18 -                                                     PageDialogWndProc);
  268.19 +            WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hDlg,
  268.20 +                                                                           PageDialogWndProc);
  268.21 +            ::SetProp(hDlg, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc));
  268.22  
  268.23              break;
  268.24          }
  268.25          case WM_DESTROY: {
  268.26 +            WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hDlg, NativeDialogWndProcProp));
  268.27              ComCtl32Util::GetInstance().UnsubclassHWND(hDlg,
  268.28                                                         PageDialogWndProc,
  268.29 -                                                       NULL);
  268.30 +                                                       lpfnWndProc);
  268.31              ::RemoveProp(hDlg, ModalDialogPeerProp);
  268.32 +            ::RemoveProp(hDlg, NativeDialogWndProcProp);
  268.33              break;
  268.34          }
  268.35      }
   269.1 --- a/src/windows/native/sun/windows/awt_ScrollPane.cpp	Thu Apr 16 17:42:00 2009 +0100
   269.2 +++ b/src/windows/native/sun/windows/awt_ScrollPane.cpp	Thu Apr 16 19:10:32 2009 -0700
   269.3 @@ -1,5 +1,5 @@
   269.4  /*
   269.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   269.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   269.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   269.8   *
   269.9   * This code is free software; you can redistribute it and/or modify it
  269.10 @@ -361,13 +361,6 @@
  269.11      DASSERT(!safe_ExceptionOccurred(env));
  269.12  }
  269.13  
  269.14 -BOOL AwtScrollPane::ActMouseMessage(MSG* pMsg) {
  269.15 -    if (!IsFocusingMessage(pMsg->message)) {
  269.16 -        return FALSE;
  269.17 -    }
  269.18 -    return TRUE;
  269.19 -}
  269.20 -
  269.21  MsgRouting
  269.22  AwtScrollPane::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
  269.23  {
  269.24 @@ -412,13 +405,10 @@
  269.25      return mrConsume;
  269.26  }
  269.27  
  269.28 -/*
  269.29 - * Fix for BugTraq ID 4041703: keyDown not being invoked.
  269.30 - * This method overrides AwtCanvas::HandleEvent() since we
  269.31 - * don't want ScrollPanel to receive focus on mouse press.
  269.32 - */
  269.33  MsgRouting AwtScrollPane::HandleEvent(MSG *msg, BOOL synthetic)
  269.34  {
  269.35 +    // SunAwtScrollPane control doesn't cause activation on mouse/key events,
  269.36 +    // so we can safely (for synthetic focus) pass them to the system proc.
  269.37      return AwtComponent::HandleEvent(msg, synthetic);
  269.38  }
  269.39  
   270.1 --- a/src/windows/native/sun/windows/awt_ScrollPane.h	Thu Apr 16 17:42:00 2009 +0100
   270.2 +++ b/src/windows/native/sun/windows/awt_ScrollPane.h	Thu Apr 16 19:10:32 2009 -0700
   270.3 @@ -1,5 +1,5 @@
   270.4  /*
   270.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
   270.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   270.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   270.8   *
   270.9   * This code is free software; you can redistribute it and/or modify it
  270.10 @@ -65,7 +65,6 @@
  270.11      virtual void Reshape(int x, int y, int w, int h);
  270.12      virtual void BeginValidate() {}
  270.13      virtual void EndValidate() {}
  270.14 -    BOOL ActMouseMessage(MSG* pMsg);
  270.15  
  270.16      /*
  270.17       * Fix for bug 4046446
   271.1 --- a/src/windows/native/sun/windows/awt_Scrollbar.cpp	Thu Apr 16 17:42:00 2009 +0100
   271.2 +++ b/src/windows/native/sun/windows/awt_Scrollbar.cpp	Thu Apr 16 19:10:32 2009 -0700
   271.3 @@ -1,5 +1,5 @@
   271.4  /*
   271.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
   271.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   271.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   271.8   *
   271.9   * This code is free software; you can redistribute it and/or modify it
  271.10 @@ -27,7 +27,6 @@
  271.11  #include "awt_Scrollbar.h"
  271.12  #include "awt_Canvas.h"
  271.13  #include "awt_Window.h"
  271.14 -#include "awt_KeyboardFocusManager.h"
  271.15  
  271.16  /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
  271.17   */
  271.18 @@ -61,7 +60,6 @@
  271.19      m_orientation = SB_HORZ;
  271.20      m_lineIncr = 0;
  271.21      m_pageIncr = 0;
  271.22 -    m_ignoreFocusEvents = FALSE;
  271.23      m_prevCallback = NULL;
  271.24      m_prevCallbackPos = 0;
  271.25      ms_instanceCounter++;
  271.26 @@ -221,7 +219,6 @@
  271.27      return retValue;
  271.28  }
  271.29  
  271.30 -
  271.31  MsgRouting
  271.32  AwtScrollbar::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
  271.33  {
  271.34 @@ -265,17 +262,10 @@
  271.35  MsgRouting
  271.36  AwtScrollbar::HandleEvent(MSG *msg, BOOL synthetic)
  271.37  {
  271.38 -    if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
  271.39 -        if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) {
  271.40 -            JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  271.41 -            jobject target = GetTarget(env);
  271.42 -            env->CallStaticVoidMethod
  271.43 -                (AwtKeyboardFocusManager::keyboardFocusManagerCls,
  271.44 -                 AwtKeyboardFocusManager::heavyweightButtonDownMID,
  271.45 -                 target, ((jlong)msg->time) & 0xFFFFFFFF);
  271.46 -            env->DeleteLocalRef(target);
  271.47 -            AwtSetFocus();
  271.48 -        }
  271.49 +    // SCROLLBAR control doesn't cause activation on mouse/key events,
  271.50 +    // so we can safely (for synthetic focus) pass them to the system proc.
  271.51 +
  271.52 +    if (IsFocusingMouseMessage(msg)) {
  271.53          // Left button press was already routed to default window
  271.54          // procedure in the WmMouseDown above.  Propagating synthetic
  271.55          // press seems like a bad idea as internal message loop
  271.56 @@ -283,54 +273,19 @@
  271.57          delete msg;
  271.58          return mrConsume;
  271.59      }
  271.60 -    else {
  271.61 -        return AwtComponent::HandleEvent(msg, synthetic);
  271.62 -    }
  271.63 +    return AwtComponent::HandleEvent(msg, synthetic);
  271.64  }
  271.65  
  271.66 -
  271.67  // Work around a windows bug descrbed in KB article Q73839.  Reset
  271.68  // focus on scrollbars to update focus indicator.  The article advises
  271.69 -// to disable/enable the scrollbar, but simply resetting the focus is
  271.70 -// sufficient.
  271.71 +// to disable/enable the scrollbar.
  271.72  void
  271.73  AwtScrollbar::UpdateFocusIndicator()
  271.74  {
  271.75      if (IsFocusable()) {
  271.76 -        m_ignoreFocusEvents = TRUE;
  271.77 -        ::SetFocus(NULL);
  271.78 -        AwtSetFocus();
  271.79 -        m_ignoreFocusEvents = FALSE;
  271.80 -    }
  271.81 -}
  271.82 -
  271.83 -MsgRouting
  271.84 -AwtScrollbar::WmKillFocus(HWND hWndGot)
  271.85 -{
  271.86 -    if (m_ignoreFocusEvents) {
  271.87 -        // We are voluntary giving up focus and will get it back
  271.88 -        // immediately.  This is necessary to force windows to update
  271.89 -        // the focus indicator.
  271.90 -        sm_focusOwner = NULL;
  271.91 -        return mrDoDefault;
  271.92 -    }
  271.93 -    else {
  271.94 -        return AwtComponent::WmKillFocus(hWndGot);
  271.95 -    }
  271.96 -}
  271.97 -
  271.98 -MsgRouting
  271.99 -AwtScrollbar::WmSetFocus(HWND hWndLost)
 271.100 -{
 271.101 -    if (m_ignoreFocusEvents) {
 271.102 -        // We have voluntary gave up focus and are getting it back
 271.103 -        // now.  This is necessary to force windows to update the
 271.104 -        // focus indicator.
 271.105 -        sm_focusOwner = GetHWnd();
 271.106 -        return mrDoDefault;
 271.107 -    }
 271.108 -    else {
 271.109 -        return AwtComponent::WmSetFocus(hWndLost);
 271.110 +        // todo: doesn't work
 271.111 +        SendMessage((WPARAM)ESB_DISABLE_BOTH);
 271.112 +        SendMessage((WPARAM)ESB_ENABLE_BOTH);
 271.113      }
 271.114  }
 271.115  
   272.1 --- a/src/windows/native/sun/windows/awt_Scrollbar.h	Thu Apr 16 17:42:00 2009 +0100
   272.2 +++ b/src/windows/native/sun/windows/awt_Scrollbar.h	Thu Apr 16 19:10:32 2009 -0700
   272.3 @@ -1,5 +1,5 @@
   272.4  /*
   272.5 - * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
   272.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   272.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   272.8   *
   272.9   * This code is free software; you can redistribute it and/or modify it
  272.10 @@ -69,10 +69,6 @@
  272.11      virtual MsgRouting WmHScroll(UINT scrollCode, UINT pos, HWND hScrollBar);
  272.12      virtual MsgRouting WmVScroll(UINT scrollCode, UINT pos, HWND hScrollBar);
  272.13  
  272.14 -    // Work around KB Q73839 bug.
  272.15 -    virtual MsgRouting WmSetFocus(HWND hWndLost);
  272.16 -    virtual MsgRouting WmKillFocus(HWND hWndGot);
  272.17 -
  272.18      // Prevent KB Q102552 race.
  272.19      virtual MsgRouting WmMouseDown(UINT flags, int x, int y, int button);
  272.20      virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal);
  272.21 @@ -91,7 +87,6 @@
  272.22      int           m_pageIncr;
  272.23  
  272.24      // Work around KB Q73839 bug.
  272.25 -    BOOL m_ignoreFocusEvents;
  272.26      void UpdateFocusIndicator();
  272.27  
  272.28      // Don't do redundant callbacks.
   273.1 --- a/src/windows/native/sun/windows/awt_TextArea.cpp	Thu Apr 16 17:42:00 2009 +0100
   273.2 +++ b/src/windows/native/sun/windows/awt_TextArea.cpp	Thu Apr 16 19:10:32 2009 -0700
   273.3 @@ -1,5 +1,5 @@
   273.4  /*
   273.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   273.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   273.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   273.8   *
   273.9   * This code is free software; you can redistribute it and/or modify it
  273.10 @@ -26,9 +26,9 @@
  273.11  #include "awt_Toolkit.h"
  273.12  #include "awt_TextArea.h"
  273.13  #include "awt_TextComponent.h"
  273.14 -#include "awt_KeyboardFocusManager.h"
  273.15  #include "awt_Canvas.h"
  273.16  #include "awt_Window.h"
  273.17 +#include "awt_Frame.h"
  273.18  
  273.19  /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
  273.20   */
  273.21 @@ -362,13 +362,6 @@
  273.22      DASSERT(::IsWindow(::GetParent(hWnd)));
  273.23  
  273.24      switch (message) {
  273.25 -    case WM_SETFOCUS:
  273.26 -        ::SendMessage(::GetParent(hWnd), EM_HIDESELECTION, FALSE, 0);
  273.27 -        break;
  273.28 -    case WM_KILLFOCUS:
  273.29 -        ::SendMessage(::GetParent(hWnd), EM_HIDESELECTION, TRUE, 0);
  273.30 -        break;
  273.31 -
  273.32      case WM_UNDO:
  273.33      case WM_CUT:
  273.34      case WM_COPY:
  273.35 @@ -400,7 +393,6 @@
  273.36  
  273.37  MsgRouting
  273.38  AwtTextArea::WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos) {
  273.39 -
  273.40      /* Use the system provided edit control class to generate context menu. */
  273.41      if (m_hEditCtrl == NULL) {
  273.42          DWORD dwStyle = WS_CHILD;
  273.43 @@ -494,22 +486,11 @@
  273.44          VERIFY(::ClientToScreen(GetHWnd(), &p));
  273.45      }
  273.46  
  273.47 -    ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl,
  273.48 -                  MAKELPARAM(p.x, p.y));
  273.49 -    /*
  273.50 -     * After the context menu is dismissed focus is owned by the edit contol.
  273.51 -     * Return focus to parent.
  273.52 -     */
  273.53 -    if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) {
  273.54 -        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  273.55 -        jobject target = GetTarget(env);
  273.56 -        env->CallStaticVoidMethod
  273.57 -            (AwtKeyboardFocusManager::keyboardFocusManagerCls,
  273.58 -             AwtKeyboardFocusManager::heavyweightButtonDownMID,
  273.59 -             target, TimeHelper::getMessageTimeUTC());
  273.60 -        env->DeleteLocalRef(target);
  273.61 -        AwtSetFocus();
  273.62 -    }
  273.63 +    // The context menu steals focus from the proxy.
  273.64 +    // So, set the focus-restore flag up.
  273.65 +    SetRestoreFocus(TRUE);
  273.66 +    ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, MAKELPARAM(p.x, p.y));
  273.67 +    SetRestoreFocus(FALSE);
  273.68  
  273.69      return mrConsume;
  273.70  }
  273.71 @@ -558,20 +539,11 @@
  273.72       * By consuming WM_MOUSEMOVE messages we also don't give
  273.73       * the RichEdit control a chance to recognize a drag gesture
  273.74       * and initiate its own drag-n-drop operation.
  273.75 +     *
  273.76 +     * The workaround also allows us to implement synthetic focus mechanism.
  273.77 +     *
  273.78       */
  273.79 -    if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
  273.80 -
  273.81 -        if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) {
  273.82 -            JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  273.83 -            jobject target = GetTarget(env);
  273.84 -            env->CallStaticVoidMethod
  273.85 -                (AwtKeyboardFocusManager::keyboardFocusManagerCls,
  273.86 -                 AwtKeyboardFocusManager::heavyweightButtonDownMID,
  273.87 -                 target, ((jlong)msg->time) & 0xFFFFFFFF);
  273.88 -            env->DeleteLocalRef(target);
  273.89 -            AwtSetFocus();
  273.90 -        }
  273.91 -
  273.92 +    if (IsFocusingMouseMessage(msg)) {
  273.93          CHARRANGE cr;
  273.94  
  273.95          LONG lCurPos = EditGetCharFromPos(msg->pt);
  273.96 @@ -717,6 +689,7 @@
  273.97              p.x = -1;
  273.98              p.y = -1;
  273.99          }
 273.100 +
 273.101          if (!::PostMessage(GetHWnd(), WM_CONTEXTMENU, (WPARAM)GetHWnd(),
 273.102                             MAKELPARAM(p.x, p.y))) {
 273.103              JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 273.104 @@ -724,6 +697,8 @@
 273.105              env->ExceptionDescribe();
 273.106              env->ExceptionClear();
 273.107          }
 273.108 +        delete msg;
 273.109 +        return mrConsume;
 273.110      } else if (msg->message == WM_MOUSEWHEEL) {
 273.111          // 4417236: If there is an old version of RichEd32.dll which
 273.112          // does not provide the mouse wheel scrolling we have to
   274.1 --- a/src/windows/native/sun/windows/awt_TextComponent.cpp	Thu Apr 16 17:42:00 2009 +0100
   274.2 +++ b/src/windows/native/sun/windows/awt_TextComponent.cpp	Thu Apr 16 19:10:32 2009 -0700
   274.3 @@ -1,5 +1,5 @@
   274.4  /*
   274.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   274.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   274.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   274.8   *
   274.9   * This code is free software; you can redistribute it and/or modify it
  274.10 @@ -25,7 +25,6 @@
  274.11  
  274.12  #include "awt_Toolkit.h"
  274.13  #include "awt_TextComponent.h"
  274.14 -#include "awt_KeyboardFocusManager.h"
  274.15  #include "awt_Canvas.h"
  274.16  
  274.17  #include "jni.h"
  274.18 @@ -62,9 +61,9 @@
  274.19  
  274.20  AwtTextComponent::AwtTextComponent() {
  274.21      m_synthetic = FALSE;
  274.22 -    m_lStartPos       = -1;
  274.23 -    m_lEndPos         = -1;
  274.24 -    m_lLastPos        = -1;
  274.25 +    m_lStartPos = -1;
  274.26 +    m_lEndPos   = -1;
  274.27 +    m_lLastPos  = -1;
  274.28      m_isLFonly        = FALSE;
  274.29      m_EOLchecked      = FALSE;
  274.30  //    javaEventsMask = 0;    // accessibility support
  274.31 @@ -74,10 +73,6 @@
  274.32      return TEXT("EDIT");  /* System provided edit control class */
  274.33  }
  274.34  
  274.35 -BOOL AwtTextComponent::ActMouseMessage(MSG* pMsg) {
  274.36 -    return FALSE;
  274.37 -}
  274.38 -
  274.39  /* Set a suitable font to IME against the component font. */
  274.40  void AwtTextComponent::SetFont(AwtFont* font)
  274.41  {
  274.42 @@ -143,23 +138,16 @@
  274.43      return mrDoDefault;
  274.44  }
  274.45  
  274.46 +BOOL AwtTextComponent::IsFocusingMouseMessage(MSG *pMsg)
  274.47 +{
  274.48 +    return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK;
  274.49 +}
  274.50 +
  274.51  MsgRouting
  274.52  AwtTextComponent::HandleEvent(MSG *msg, BOOL synthetic)
  274.53  {
  274.54      MsgRouting returnVal;
  274.55  
  274.56 -    if (AwtComponent::sm_focusOwner != GetHWnd() && IsFocusable() &&
  274.57 -        (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
  274.58 -    {
  274.59 -        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
  274.60 -        jobject target = GetTarget(env);
  274.61 -        env->CallStaticVoidMethod
  274.62 -            (AwtKeyboardFocusManager::keyboardFocusManagerCls,
  274.63 -             AwtKeyboardFocusManager::heavyweightButtonDownMID,
  274.64 -             target, ((jlong)msg->time) & 0xFFFFFFFF);
  274.65 -        env->DeleteLocalRef(target);
  274.66 -    }
  274.67 -
  274.68      /*
  274.69       * Store the 'synthetic' parameter so that the WM_PASTE security check
  274.70       * happens only for synthetic events.
   275.1 --- a/src/windows/native/sun/windows/awt_TextComponent.h	Thu Apr 16 17:42:00 2009 +0100
   275.2 +++ b/src/windows/native/sun/windows/awt_TextComponent.h	Thu Apr 16 19:10:32 2009 -0700
   275.3 @@ -1,5 +1,5 @@
   275.4  /*
   275.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   275.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   275.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   275.8   *
   275.9   * This code is free software; you can redistribute it and/or modify it
  275.10 @@ -69,8 +69,6 @@
  275.11      // called on Toolkit thread from JNI
  275.12      static jstring _GetText(void *param);
  275.13  
  275.14 -    BOOL ActMouseMessage(MSG* pMsg);
  275.15 -
  275.16      void SetFont(AwtFont* font);
  275.17  
  275.18      /*
  275.19 @@ -80,6 +78,8 @@
  275.20      MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
  275.21      MsgRouting WmPaste();
  275.22  
  275.23 +    virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
  275.24 +
  275.25  /*  To be fully implemented in a future release
  275.26  
  275.27      MsgRouting WmKeyDown(UINT wkey, UINT repCnt,
  275.28 @@ -125,7 +125,6 @@
  275.29      LONG    m_lEndPos;
  275.30      LONG    m_lLastPos;
  275.31  
  275.32 -
  275.33      HFONT m_hFont;
  275.34      //im --- end
  275.35  
   276.1 --- a/src/windows/native/sun/windows/awt_TextField.cpp	Thu Apr 16 17:42:00 2009 +0100
   276.2 +++ b/src/windows/native/sun/windows/awt_TextField.cpp	Thu Apr 16 19:10:32 2009 -0700
   276.3 @@ -1,5 +1,5 @@
   276.4  /*
   276.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   276.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   276.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   276.8   *
   276.9   * This code is free software; you can redistribute it and/or modify it
  276.10 @@ -26,7 +26,6 @@
  276.11  #include "awt_Toolkit.h"
  276.12  #include "awt_TextField.h"
  276.13  #include "awt_TextComponent.h"
  276.14 -#include "awt_KeyboardFocusManager.h"
  276.15  #include "awt_Canvas.h"
  276.16  
  276.17  /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
  276.18 @@ -150,135 +149,130 @@
  276.19       * By consuming WM_MOUSEMOVE messages we also don't give
  276.20       * the RichEdit control a chance to recognize a drag gesture
  276.21       * and initiate its own drag-n-drop operation.
  276.22 +     *
  276.23 +     * The workaround also allows us to implement synthetic focus mechanism.
  276.24       */
  276.25 -    /**
  276.26 -     * In non-focusable mode we don't pass mouse messages to native window thus making user unable
  276.27 -     * to select the text. Below is the code from awt_TextArea.cpp which implements selection
  276.28 -     * functionality. For safety this code is only being executed in non-focusable mode.
  276.29 -     */
  276.30 -    if (!IsFocusable()) {
  276.31 -        if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
  276.32 +    if (IsFocusingMouseMessage(msg)) {
  276.33 +        CHARRANGE cr;
  276.34 +
  276.35 +        LONG lCurPos = EditGetCharFromPos(msg->pt);
  276.36 +
  276.37 +        EditGetSel(cr);
  276.38 +        /*
  276.39 +         * NOTE: Plain EDIT control always clears selection on mouse
  276.40 +         * button press. We are clearing the current selection only if
  276.41 +         * the mouse pointer is not over the selected region.
  276.42 +         * In this case we sacrifice backward compatibility
  276.43 +         * to allow dnd of the current selection.
  276.44 +         */
  276.45 +        if (msg->message == WM_LBUTTONDBLCLK) {
  276.46 +            SetStartSelectionPos(static_cast<LONG>(SendMessage(
  276.47 +                EM_FINDWORDBREAK, WB_MOVEWORDLEFT, lCurPos)));
  276.48 +            SetEndSelectionPos(static_cast<LONG>(SendMessage(
  276.49 +                EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, lCurPos)));
  276.50 +        } else {
  276.51 +            SetStartSelectionPos(lCurPos);
  276.52 +            SetEndSelectionPos(lCurPos);
  276.53 +        }
  276.54 +        cr.cpMin = GetStartSelectionPos();
  276.55 +        cr.cpMax = GetEndSelectionPos();
  276.56 +        EditSetSel(cr);
  276.57 +
  276.58 +        delete msg;
  276.59 +        return mrConsume;
  276.60 +    } else if (msg->message == WM_LBUTTONUP) {
  276.61 +
  276.62 +        /*
  276.63 +         * If the left mouse button is pressed on the selected region
  276.64 +         * we don't clear the current selection. We clear it on button
  276.65 +         * release instead. This is to allow dnd of the current selection.
  276.66 +         */
  276.67 +        if (GetStartSelectionPos() == -1 && GetEndSelectionPos() == -1) {
  276.68              CHARRANGE cr;
  276.69  
  276.70              LONG lCurPos = EditGetCharFromPos(msg->pt);
  276.71  
  276.72 -            EditGetSel(cr);
  276.73 +            cr.cpMin = lCurPos;
  276.74 +            cr.cpMax = lCurPos;
  276.75 +            EditSetSel(cr);
  276.76 +        }
  276.77 +
  276.78 +        /*
  276.79 +         * Cleanup the state variables when left mouse button is released.
  276.80 +         * These state variables are designed to reflect the selection state
  276.81 +         * while the left mouse button is pressed and be set to -1 otherwise.
  276.82 +         */
  276.83 +        SetStartSelectionPos(-1);
  276.84 +        SetEndSelectionPos(-1);
  276.85 +        SetLastSelectionPos(-1);
  276.86 +
  276.87 +        delete msg;
  276.88 +        return mrConsume;
  276.89 +    } else if (msg->message == WM_MOUSEMOVE && (msg->wParam & MK_LBUTTON)) {
  276.90 +
  276.91 +        /*
  276.92 +         * We consume WM_MOUSEMOVE while the left mouse button is pressed,
  276.93 +         * so we have to simulate autoscrolling when mouse is moved outside
  276.94 +         * of the client area.
  276.95 +         */
  276.96 +        POINT p;
  276.97 +        RECT r;
  276.98 +        BOOL bScrollLeft = FALSE;
  276.99 +        BOOL bScrollRight = FALSE;
 276.100 +        BOOL bScrollUp = FALSE;
 276.101 +        BOOL bScrollDown = FALSE;
 276.102 +
 276.103 +        p.x = msg->pt.x;
 276.104 +        p.y = msg->pt.y;
 276.105 +        VERIFY(::GetClientRect(GetHWnd(), &r));
 276.106 +
 276.107 +        if (p.x < 0) {
 276.108 +            bScrollLeft = TRUE;
 276.109 +            p.x = 0;
 276.110 +        } else if (p.x > r.right) {
 276.111 +            bScrollRight = TRUE;
 276.112 +            p.x = r.right - 1;
 276.113 +        }
 276.114 +        LONG lCurPos = EditGetCharFromPos(p);
 276.115 +
 276.116 +        if (GetStartSelectionPos() != -1 &&
 276.117 +            GetEndSelectionPos() != -1 &&
 276.118 +            lCurPos != GetLastSelectionPos()) {
 276.119 +
 276.120 +            CHARRANGE cr;
 276.121 +
 276.122 +            SetLastSelectionPos(lCurPos);
 276.123 +
 276.124 +            cr.cpMin = GetStartSelectionPos();
 276.125 +            cr.cpMax = GetLastSelectionPos();
 276.126 +
 276.127 +            EditSetSel(cr);
 276.128 +        }
 276.129 +
 276.130 +        if (bScrollLeft == TRUE || bScrollRight == TRUE) {
 276.131 +            SCROLLINFO si;
 276.132 +            memset(&si, 0, sizeof(si));
 276.133 +            si.cbSize = sizeof(si);
 276.134 +            si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
 276.135 +
 276.136 +            VERIFY(::GetScrollInfo(GetHWnd(), SB_HORZ, &si));
 276.137 +            if (bScrollLeft == TRUE) {
 276.138 +                si.nPos = si.nPos - si.nPage / 2;
 276.139 +                si.nPos = max(si.nMin, si.nPos);
 276.140 +            } else if (bScrollRight == TRUE) {
 276.141 +                si.nPos = si.nPos + si.nPage / 2;
 276.142 +                si.nPos = min(si.nPos, si.nMax);
 276.143 +            }
 276.144              /*
 276.145 -             * NOTE: Plain EDIT control always clears selection on mouse
 276.146 -             * button press. We are clearing the current selection only if
 276.147 -             * the mouse pointer is not over the selected region.
 276.148 -             * In this case we sacrifice backward compatibility
 276.149 -             * to allow dnd of the current selection.
 276.150 +             * Okay to use 16-bit position since RichEdit control adjusts
 276.151 +             * its scrollbars so that their range is always 16-bit.
 276.152               */
 276.153 -            if (msg->message == WM_LBUTTONDBLCLK) {
 276.154 -                SetStartSelectionPos(static_cast<LONG>(SendMessage(
 276.155 -                    EM_FINDWORDBREAK, WB_MOVEWORDLEFT, lCurPos)));
 276.156 -                SetEndSelectionPos(static_cast<LONG>(SendMessage(
 276.157 -                    EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, lCurPos)));
 276.158 -            } else {
 276.159 -                SetStartSelectionPos(lCurPos);
 276.160 -                SetEndSelectionPos(lCurPos);
 276.161 -            }
 276.162 -            cr.cpMin = GetStartSelectionPos();
 276.163 -            cr.cpMax = GetEndSelectionPos();
 276.164 -            EditSetSel(cr);
 276.165 -
 276.166 -            delete msg;
 276.167 -            return mrConsume;
 276.168 -        } else if (msg->message == WM_LBUTTONUP) {
 276.169 -
 276.170 -            /*
 276.171 -             * If the left mouse button is pressed on the selected region
 276.172 -             * we don't clear the current selection. We clear it on button
 276.173 -             * release instead. This is to allow dnd of the current selection.
 276.174 -             */
 276.175 -            if (GetStartSelectionPos() == -1 && GetEndSelectionPos() == -1) {
 276.176 -                CHARRANGE cr;
 276.177 -
 276.178 -                LONG lCurPos = EditGetCharFromPos(msg->pt);
 276.179 -
 276.180 -                cr.cpMin = lCurPos;
 276.181 -                cr.cpMax = lCurPos;
 276.182 -                EditSetSel(cr);
 276.183 -            }
 276.184 -
 276.185 -            /*
 276.186 -             * Cleanup the state variables when left mouse button is released.
 276.187 -             * These state variables are designed to reflect the selection state
 276.188 -             * while the left mouse button is pressed and be set to -1 otherwise.
 276.189 -             */
 276.190 -            SetStartSelectionPos(-1);
 276.191 -            SetEndSelectionPos(-1);
 276.192 -            SetLastSelectionPos(-1);
 276.193 -
 276.194 -            delete msg;
 276.195 -            return mrConsume;
 276.196 -        } else if (msg->message == WM_MOUSEMOVE && (msg->wParam & MK_LBUTTON)) {
 276.197 -
 276.198 -            /*
 276.199 -             * We consume WM_MOUSEMOVE while the left mouse button is pressed,
 276.200 -             * so we have to simulate autoscrolling when mouse is moved outside
 276.201 -             * of the client area.
 276.202 -             */
 276.203 -            POINT p;
 276.204 -            RECT r;
 276.205 -            BOOL bScrollLeft = FALSE;
 276.206 -            BOOL bScrollRight = FALSE;
 276.207 -            BOOL bScrollUp = FALSE;
 276.208 -            BOOL bScrollDown = FALSE;
 276.209 -
 276.210 -            p.x = msg->pt.x;
 276.211 -            p.y = msg->pt.y;
 276.212 -            VERIFY(::GetClientRect(GetHWnd(), &r));
 276.213 -
 276.214 -            if (p.x < 0) {
 276.215 -                bScrollLeft = TRUE;
 276.216 -                p.x = 0;
 276.217 -            } else if (p.x > r.right) {
 276.218 -                bScrollRight = TRUE;
 276.219 -                p.x = r.right - 1;
 276.220 -            }
 276.221 -            LONG lCurPos = EditGetCharFromPos(p);
 276.222 -
 276.223 -            if (GetStartSelectionPos() != -1 &&
 276.224 -                GetEndSelectionPos() != -1 &&
 276.225 -                lCurPos != GetLastSelectionPos()) {
 276.226 -
 276.227 -                CHARRANGE cr;
 276.228 -
 276.229 -                SetLastSelectionPos(lCurPos);
 276.230 -
 276.231 -                cr.cpMin = GetStartSelectionPos();
 276.232 -                cr.cpMax = GetLastSelectionPos();
 276.233 -
 276.234 -                EditSetSel(cr);
 276.235 -            }
 276.236 -
 276.237 -            if (bScrollLeft == TRUE || bScrollRight == TRUE) {
 276.238 -                SCROLLINFO si;
 276.239 -                memset(&si, 0, sizeof(si));
 276.240 -                si.cbSize = sizeof(si);
 276.241 -                si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
 276.242 -
 276.243 -                VERIFY(::GetScrollInfo(GetHWnd(), SB_HORZ, &si));
 276.244 -                if (bScrollLeft == TRUE) {
 276.245 -                    si.nPos = si.nPos - si.nPage / 2;
 276.246 -                    si.nPos = max(si.nMin, si.nPos);
 276.247 -                } else if (bScrollRight == TRUE) {
 276.248 -                    si.nPos = si.nPos + si.nPage / 2;
 276.249 -                    si.nPos = min(si.nPos, si.nMax);
 276.250 -                }
 276.251 -                /*
 276.252 -                 * Okay to use 16-bit position since RichEdit control adjusts
 276.253 -                 * its scrollbars so that their range is always 16-bit.
 276.254 -                 */
 276.255 -                DASSERT(abs(si.nPos) < 0x8000);
 276.256 -                SendMessage(WM_HSCROLL,
 276.257 -                            MAKEWPARAM(SB_THUMBPOSITION, LOWORD(si.nPos)));
 276.258 -            }
 276.259 -            delete msg;
 276.260 -            return mrConsume;
 276.261 +            DASSERT(abs(si.nPos) < 0x8000);
 276.262 +            SendMessage(WM_HSCROLL,
 276.263 +                        MAKEWPARAM(SB_THUMBPOSITION, LOWORD(si.nPos)));
 276.264          }
 276.265 +        delete msg;
 276.266 +        return mrConsume;
 276.267      }
 276.268      /*
 276.269       * Store the 'synthetic' parameter so that the WM_PASTE security check
   277.1 --- a/src/windows/native/sun/windows/awt_Toolkit.cpp	Thu Apr 16 17:42:00 2009 +0100
   277.2 +++ b/src/windows/native/sun/windows/awt_Toolkit.cpp	Thu Apr 16 19:10:32 2009 -0700
   277.3 @@ -56,6 +56,7 @@
   277.4  #include "debug_mem.h"
   277.5  
   277.6  #include "ComCtl32Util.h"
   277.7 +#include "DllUtil.h"
   277.8  
   277.9  #include "D3DPipelineManager.h"
  277.10  
  277.11 @@ -334,6 +335,8 @@
  277.12      m_mouseDown = FALSE;
  277.13  
  277.14      m_hGetMessageHook = 0;
  277.15 +    m_hMouseLLHook = 0;
  277.16 +    m_lastWindowUnderMouse = NULL;
  277.17      m_timer = 0;
  277.18  
  277.19      m_cmdIDs = new AwtCmdIDList();
  277.20 @@ -483,6 +486,7 @@
  277.21      tk.UnregisterClass();
  277.22  
  277.23      ::UnhookWindowsHookEx(tk.m_hGetMessageHook);
  277.24 +    UninstallMouseLowLevelHook();
  277.25  
  277.26      tk.m_mainThreadId = 0;
  277.27  
  277.28 @@ -960,6 +964,79 @@
  277.29      CATCH_BAD_ALLOC_RET(0);
  277.30  }
  277.31  
  277.32 +void AwtToolkit::InstallMouseLowLevelHook()
  277.33 +{
  277.34 +    // We need the low-level hook since we need to process mouse move
  277.35 +    // messages outside of our windows.
  277.36 +    m_hMouseLLHook = ::SetWindowsHookEx(WH_MOUSE_LL,
  277.37 +            (HOOKPROC)MouseLowLevelHook,
  277.38 +            GetModuleHandle(), NULL);
  277.39 +
  277.40 +    // Reset the old value
  277.41 +    m_lastWindowUnderMouse = NULL;
  277.42 +}
  277.43 +
  277.44 +void AwtToolkit::UninstallMouseLowLevelHook()
  277.45 +{
  277.46 +    if (m_hMouseLLHook != 0) {
  277.47 +        ::UnhookWindowsHookEx(m_hMouseLLHook);
  277.48 +        m_hMouseLLHook = 0;
  277.49 +    }
  277.50 +}
  277.51 +
  277.52 +LRESULT CALLBACK AwtToolkit::MouseLowLevelHook(int code,
  277.53 +        WPARAM wParam, LPARAM lParam)
  277.54 +{
  277.55 +    TRY;
  277.56 +
  277.57 +    if (code >= 0 && wParam == WM_MOUSEMOVE) {
  277.58 +        POINT pt = ((MSLLHOOKSTRUCT*)lParam)->pt;
  277.59 +
  277.60 +        // We can't use GA_ROOTOWNER since in this case we'll go up to
  277.61 +        // the root Java toplevel, not the actual owned toplevel.
  277.62 +        HWND hwnd = ::GetAncestor(::WindowFromPoint(pt), GA_ROOT);
  277.63 +
  277.64 +        AwtToolkit& tk = AwtToolkit::GetInstance();
  277.65 +
  277.66 +        if (tk.m_lastWindowUnderMouse != hwnd) {
  277.67 +            AwtWindow *fw = NULL, *tw = NULL;
  277.68 +
  277.69 +            if (tk.m_lastWindowUnderMouse) {
  277.70 +                fw = (AwtWindow*)
  277.71 +                    AwtComponent::GetComponent(tk.m_lastWindowUnderMouse);
  277.72 +            }
  277.73 +            if (hwnd) {
  277.74 +                tw = (AwtWindow*)AwtComponent::GetComponent(hwnd);
  277.75 +            }
  277.76 +
  277.77 +            tk.m_lastWindowUnderMouse = hwnd;
  277.78 +
  277.79 +            if (fw) {
  277.80 +                fw->UpdateSecurityWarningVisibility();
  277.81 +            }
  277.82 +            // ... however, because we use GA_ROOT, we may find the warningIcon
  277.83 +            // which is not a Java windows.
  277.84 +            if (AwtWindow::IsWarningWindow(hwnd)) {
  277.85 +                hwnd = ::GetParent(hwnd);
  277.86 +                if (hwnd) {
  277.87 +                    tw = (AwtWindow*)AwtComponent::GetComponent(hwnd);
  277.88 +                }
  277.89 +                tk.m_lastWindowUnderMouse = hwnd;
  277.90 +            }
  277.91 +            if (tw) {
  277.92 +                tw->UpdateSecurityWarningVisibility();
  277.93 +            }
  277.94 +
  277.95 +
  277.96 +        }
  277.97 +    }
  277.98 +
  277.99 +    return ::CallNextHookEx(AwtToolkit::GetInstance().m_hMouseLLHook, code,
 277.100 +            wParam, lParam);
 277.101 +
 277.102 +    CATCH_BAD_ALLOC_RET(0);
 277.103 +}
 277.104 +
 277.105  /*
 277.106   * The main message loop
 277.107   */
 277.108 @@ -1376,6 +1453,47 @@
 277.109      return defaultIconSm;
 277.110  }
 277.111  
 277.112 +HICON AwtToolkit::GetSecurityWarningIcon(UINT index, UINT w, UINT h)
 277.113 +{
 277.114 +    //Note: should not exceed 10 because of the current implementation.
 277.115 +    static const int securityWarningIconCounter = 3;
 277.116 +
 277.117 +    static HICON securityWarningIcon[securityWarningIconCounter]      = {NULL, NULL, NULL};;
 277.118 +    static UINT securityWarningIconWidth[securityWarningIconCounter]  = {0, 0, 0};
 277.119 +    static UINT securityWarningIconHeight[securityWarningIconCounter] = {0, 0, 0};
 277.120 +
 277.121 +    index = AwtToolkit::CalculateWave(index, securityWarningIconCounter);
 277.122 +
 277.123 +    if (securityWarningIcon[index] == NULL ||
 277.124 +            w != securityWarningIconWidth[index] ||
 277.125 +            h != securityWarningIconHeight[index])
 277.126 +    {
 277.127 +        if (securityWarningIcon[index] != NULL)
 277.128 +        {
 277.129 +            ::DestroyIcon(securityWarningIcon[index]);
 277.130 +        }
 277.131 +
 277.132 +        static const wchar_t securityWarningIconName[] = L"SECURITY_WARNING_";
 277.133 +        wchar_t iconResourceName[sizeof(securityWarningIconName) + 2];
 277.134 +        ::ZeroMemory(iconResourceName, sizeof(iconResourceName));
 277.135 +        wcscpy(iconResourceName, securityWarningIconName);
 277.136 +
 277.137 +        wchar_t strIndex[2];
 277.138 +        ::ZeroMemory(strIndex, sizeof(strIndex));
 277.139 +        strIndex[0] = L'0' + index;
 277.140 +
 277.141 +        wcscat(iconResourceName, strIndex);
 277.142 +
 277.143 +        securityWarningIcon[index] = (HICON)::LoadImage(GetModuleHandle(),
 277.144 +                iconResourceName,
 277.145 +                IMAGE_ICON, w, h, LR_DEFAULTCOLOR);
 277.146 +        securityWarningIconWidth[index] = w;
 277.147 +        securityWarningIconHeight[index] = h;
 277.148 +    }
 277.149 +
 277.150 +    return securityWarningIcon[index];
 277.151 +}
 277.152 +
 277.153  void AwtToolkit::SetHeapCheck(long flag) {
 277.154      if (flag) {
 277.155          printf("heap checking not supported with this build\n");
 277.156 @@ -1428,6 +1546,49 @@
 277.157          (JNIEnv*)JNU_GetEnv(jvm, JNI_VERSION_1_2) : m_env;
 277.158  }
 277.159  
 277.160 +BOOL AwtToolkit::GetScreenInsets(int screenNum, RECT * rect)
 277.161 +{
 277.162 +    /* if primary display */
 277.163 +    if (screenNum == 0) {
 277.164 +        RECT rRW;
 277.165 +        if (::SystemParametersInfo(SPI_GETWORKAREA,0,(void *) &rRW,0) == TRUE) {
 277.166 +            rect->top = rRW.top;
 277.167 +            rect->left = rRW.left;
 277.168 +            rect->bottom = ::GetSystemMetrics(SM_CYSCREEN) - rRW.bottom;
 277.169 +            rect->right = ::GetSystemMetrics(SM_CXSCREEN) - rRW.right;
 277.170 +            return TRUE;
 277.171 +        }
 277.172 +    }
 277.173 +    /* if additional display */
 277.174 +    else {
 277.175 +        MONITORINFO *miInfo;
 277.176 +        miInfo = AwtWin32GraphicsDevice::GetMonitorInfo(screenNum);
 277.177 +        if (miInfo) {
 277.178 +            rect->top = miInfo->rcWork.top    - miInfo->rcMonitor.top;
 277.179 +            rect->left = miInfo->rcWork.left   - miInfo->rcMonitor.left;
 277.180 +            rect->bottom = miInfo->rcMonitor.bottom - miInfo->rcWork.bottom;
 277.181 +            rect->right = miInfo->rcMonitor.right - miInfo->rcWork.right;
 277.182 +            return TRUE;
 277.183 +        }
 277.184 +    }
 277.185 +    return FALSE;
 277.186 +}
 277.187 +
 277.188 +
 277.189 +void AwtToolkit::GetWindowRect(HWND hWnd, LPRECT lpRect)
 277.190 +{
 277.191 +    try {
 277.192 +        if (S_OK == DwmAPI::DwmGetWindowAttribute(hWnd,
 277.193 +                DwmAPI::DWMWA_EXTENDED_FRAME_BOUNDS,
 277.194 +                lpRect, sizeof(*lpRect)))
 277.195 +        {
 277.196 +            return;
 277.197 +        }
 277.198 +    } catch (const DllUtil::Exception &) {}
 277.199 +
 277.200 +    ::GetWindowRect(hWnd, lpRect);
 277.201 +}
 277.202 +
 277.203  /************************************************************************
 277.204   * Toolkit native methods
 277.205   */
 277.206 @@ -1756,7 +1917,6 @@
 277.207      CATCH_BAD_ALLOC_RET(0);
 277.208  }
 277.209  
 277.210 -
 277.211  /*
 277.212   * Class:     sun_awt_windows_WToolkit
 277.213   * Method:    getSreenInsets
 277.214 @@ -1768,34 +1928,17 @@
 277.215                                                jint screen)
 277.216  {
 277.217      jobject insets = NULL;
 277.218 -    RECT rRW;
 277.219 -    LPMONITORINFO miInfo;
 277.220 +    RECT rect;
 277.221  
 277.222      TRY;
 277.223  
 277.224 -/* if primary display */
 277.225 -   if (screen == 0) {
 277.226 -      if (::SystemParametersInfo(SPI_GETWORKAREA,0,(void *) &rRW,0) == TRUE) {
 277.227 -          insets = env->NewObject(env->FindClass("java/awt/Insets"),
 277.228 -             AwtToolkit::insetsMID,
 277.229 -             rRW.top,
 277.230 -             rRW.left,
 277.231 -             ::GetSystemMetrics(SM_CYSCREEN) - rRW.bottom,
 277.232 -             ::GetSystemMetrics(SM_CXSCREEN) - rRW.right);
 277.233 -      }
 277.234 -    }
 277.235 -
 277.236 -/* if additional display */
 277.237 -    else {
 277.238 -        miInfo = AwtWin32GraphicsDevice::GetMonitorInfo(screen);
 277.239 -        if (miInfo) {
 277.240 -            insets = env->NewObject(env->FindClass("java/awt/Insets"),
 277.241 +    if (AwtToolkit::GetScreenInsets(screen, &rect)) {
 277.242 +        insets = env->NewObject(env->FindClass("java/awt/Insets"),
 277.243                  AwtToolkit::insetsMID,
 277.244 -                miInfo->rcWork.top - miInfo->rcMonitor.top,
 277.245 -                miInfo->rcWork.left - miInfo->rcMonitor.left,
 277.246 -                miInfo->rcMonitor.bottom - miInfo->rcWork.bottom,
 277.247 -                miInfo->rcMonitor.right - miInfo->rcWork.right);
 277.248 -        }
 277.249 +                rect.top,
 277.250 +                rect.left,
 277.251 +                rect.bottom,
 277.252 +                rect.right);
 277.253      }
 277.254  
 277.255      if (safe_ExceptionOccurred(env)) {
   278.1 --- a/src/windows/native/sun/windows/awt_Toolkit.h	Thu Apr 16 17:42:00 2009 +0100
   278.2 +++ b/src/windows/native/sun/windows/awt_Toolkit.h	Thu Apr 16 19:10:32 2009 -0700
   278.3 @@ -210,6 +210,8 @@
   278.4                                               LPARAM lParam);
   278.5      static LRESULT CALLBACK ForegroundIdleFilter(int code, WPARAM wParam,
   278.6                                                   LPARAM lParam);
   278.7 +    static LRESULT CALLBACK MouseLowLevelHook(int code, WPARAM wParam,
   278.8 +            LPARAM lParam);
   278.9  
  278.10      INLINE static AwtToolkit& GetInstance() { return theInstance; }
  278.11      INLINE void SetPeer(JNIEnv *env, jobject wToolkit) {
  278.12 @@ -311,6 +313,30 @@
  278.13      HICON GetAwtIcon();
  278.14      HICON GetAwtIconSm();
  278.15  
  278.16 +    // Calculate a wave-like value out of the integer 'value' and
  278.17 +    // the specified period.
  278.18 +    // The argument 'value' is an integer 0, 1, 2, ... *infinity*.
  278.19 +    //
  278.20 +    // Examples:
  278.21 +    //    Period == 3
  278.22 +    //    Generated sequence: 0 1 2 1 0 .....
  278.23 +    //
  278.24 +    //    Period == 4
  278.25 +    //    Generated sequence: 0 1 2 3 2 1 0 .....
  278.26 +    static inline UINT CalculateWave(UINT value, const UINT period) {
  278.27 +        if (period < 2) {
  278.28 +            return 0;
  278.29 +        }
  278.30 +        // -2 is necessary to avoid repeating extreme values (0 and period-1)
  278.31 +        value %= period * 2 -2;
  278.32 +        if (value >= period) {
  278.33 +            value = period * 2 -2 - value;
  278.34 +        }
  278.35 +        return value;
  278.36 +    }
  278.37 +
  278.38 +    HICON GetSecurityWarningIcon(UINT index, UINT w, UINT h);
  278.39 +
  278.40      /* Turns on/off dialog modality for the system. */
  278.41      INLINE AwtDialog* SetModal(AwtDialog* frame) {
  278.42          AwtDialog* previousDialog = m_pModalDialog;
  278.43 @@ -368,6 +394,7 @@
  278.44      BOOL                m_mouseDown;
  278.45  
  278.46      HHOOK m_hGetMessageHook;
  278.47 +    HHOOK m_hMouseLLHook;
  278.48      UINT_PTR  m_timer;
  278.49  
  278.50      class AwtCmdIDList* m_cmdIDs;
  278.51 @@ -411,6 +438,24 @@
  278.52   public:
  278.53      static void SetEnv(JNIEnv *env);
  278.54      static JNIEnv* GetEnv();
  278.55 +
  278.56 +    static BOOL GetScreenInsets(int screenNum, RECT * rect);
  278.57 +
  278.58 +    // If the DWM is active, this function uses
  278.59 +    // DwmGetWindowAttribute()/DWMWA_EXTENDED_FRAME_BOUNDS.
  278.60 +    // Otherwise, fall back to regular ::GetWindowRect().
  278.61 +    // See 6711576 for more details.
  278.62 +    static void GetWindowRect(HWND hWnd, LPRECT lpRect);
  278.63 +
  278.64 + private:
  278.65 +    // The window handle of a toplevel window last seen under the mouse cursor.
  278.66 +    // See MouseLowLevelHook() for details.
  278.67 +    HWND m_lastWindowUnderMouse;
  278.68 + public:
  278.69 +    HWND GetWindowUnderMouse() { return m_lastWindowUnderMouse; }
  278.70 +
  278.71 +    void InstallMouseLowLevelHook();
  278.72 +    void UninstallMouseLowLevelHook();
  278.73  };
  278.74  
  278.75  /*
   279.1 --- a/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp	Thu Apr 16 17:42:00 2009 +0100
   279.2 +++ b/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp	Thu Apr 16 19:10:32 2009 -0700
   279.3 @@ -29,6 +29,7 @@
   279.4  #include "awt_Win32GraphicsDevice.h"
   279.5  #include "Devices.h"
   279.6  #include "WindowsFlags.h"
   279.7 +#include "DllUtil.h"
   279.8  
   279.9  BOOL DWMIsCompositionEnabled();
  279.10  
  279.11 @@ -89,13 +90,8 @@
  279.12  /**
  279.13   * Returns true if dwm composition is enabled, false if it is not applicable
  279.14   * (if the OS is not Vista) or dwm composition is disabled.
  279.15 - *
  279.16 - * Note: since DWM composition state changes are very rare we load/unload the
  279.17 - * dll on every change.
  279.18   */
  279.19  BOOL DWMIsCompositionEnabled() {
  279.20 -    typedef HRESULT (WINAPI DwmIsCompositionEnabledFunc)(BOOL*);
  279.21 -
  279.22      // cheaper to check than whether it's vista or not
  279.23      if (dwmIsCompositionEnabled != DWM_COMP_UNDEFINED) {
  279.24          return (BOOL)dwmIsCompositionEnabled;
  279.25 @@ -107,32 +103,22 @@
  279.26      }
  279.27  
  279.28      BOOL bRes = FALSE;
  279.29 -    HMODULE hDwmApiDll = ::LoadLibrary(TEXT("dwmapi.dll"));
  279.30  
  279.31 -    if (hDwmApiDll != NULL) {
  279.32 -        DwmIsCompositionEnabledFunc *lpDwmIsCompEnabled =
  279.33 -            (DwmIsCompositionEnabledFunc*)
  279.34 -                GetProcAddress(hDwmApiDll, "DwmIsCompositionEnabled");
  279.35 -        if (lpDwmIsCompEnabled != NULL) {
  279.36 -            BOOL bEnabled;
  279.37 -            HRESULT res = lpDwmIsCompEnabled(&bEnabled);
  279.38 -            if (SUCCEEDED(res)) {
  279.39 -                bRes = bEnabled;
  279.40 -                J2dTraceLn1(J2D_TRACE_VERBOSE, " composition enabled: %d",bRes);
  279.41 -            } else {
  279.42 -                J2dTraceLn1(J2D_TRACE_ERROR,
  279.43 -                            "IsDWMCompositionEnabled: error %x when detecting"\
  279.44 -                            "if composition is enabled", res);
  279.45 -            }
  279.46 +    try {
  279.47 +        BOOL bEnabled;
  279.48 +        HRESULT res = DwmAPI::DwmIsCompositionEnabled(&bEnabled);
  279.49 +        if (SUCCEEDED(res)) {
  279.50 +            bRes = bEnabled;
  279.51 +            J2dTraceLn1(J2D_TRACE_VERBOSE, " composition enabled: %d",bRes);
  279.52          } else {
  279.53 -            J2dTraceLn(J2D_TRACE_ERROR,
  279.54 -                       "IsDWMCompositionEnabled: no DwmIsCompositionEnabled() "\
  279.55 -                       "in dwmapi.dll");
  279.56 +            J2dTraceLn1(J2D_TRACE_ERROR,
  279.57 +                    "IsDWMCompositionEnabled: error %x when detecting"\
  279.58 +                    "if composition is enabled", res);
  279.59          }
  279.60 -        ::FreeLibrary(hDwmApiDll);
  279.61 -    } else {
  279.62 +    } catch (const DllUtil::Exception &) {
  279.63          J2dTraceLn(J2D_TRACE_ERROR,
  279.64 -                   "IsDWMCompositionEnabled: error opening dwmapi.dll");
  279.65 +                "IsDWMCompositionEnabled: no DwmIsCompositionEnabled() "\
  279.66 +                "in dwmapi.dll or dwmapi.dll cannot be loaded");
  279.67      }
  279.68  
  279.69      dwmIsCompositionEnabled = bRes;
   280.1 --- a/src/windows/native/sun/windows/awt_Window.cpp	Thu Apr 16 17:42:00 2009 +0100
   280.2 +++ b/src/windows/native/sun/windows/awt_Window.cpp	Thu Apr 16 19:10:32 2009 -0700
   280.3 @@ -1,5 +1,5 @@
   280.4  /*
   280.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   280.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   280.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   280.8   *
   280.9   * This code is free software; you can redistribute it and/or modify it
  280.10 @@ -25,9 +25,12 @@
  280.11  
  280.12  #include "awt.h"
  280.13  
  280.14 +#include <jlong.h>
  280.15 +
  280.16  #include "awt_Component.h"
  280.17  #include "awt_Container.h"
  280.18  #include "awt_Frame.h"
  280.19 +#include "awt_Dialog.h"
  280.20  #include "awt_Insets.h"
  280.21  #include "awt_Panel.h"
  280.22  #include "awt_Toolkit.h"
  280.23 @@ -35,6 +38,7 @@
  280.24  #include "awt_Win32GraphicsDevice.h"
  280.25  #include "awt_BitmapUtil.h"
  280.26  #include "awt_IconCursor.h"
  280.27 +#include "ComCtl32Util.h"
  280.28  
  280.29  #include "java_awt_Insets.h"
  280.30  #include <java_awt_Container.h>
  280.31 @@ -88,7 +92,6 @@
  280.32      jint x, y;
  280.33      jint w, h;
  280.34  };
  280.35 -
  280.36  // struct for _SetIconImagesData
  280.37  struct SetIconImagesDataStruct {
  280.38      jobject window;
  280.39 @@ -97,7 +100,6 @@
  280.40      jintArray smallIconRaster;
  280.41      jint smw, smh;
  280.42  };
  280.43 -
  280.44  // struct for _SetMinSize() method
  280.45  // and other methods setting sizes
  280.46  struct SizeStruct {
  280.47 @@ -114,6 +116,34 @@
  280.48      jobject window;
  280.49      jlong blockerHWnd;
  280.50  };
  280.51 +// struct for _SetOpacity() method
  280.52 +struct OpacityStruct {
  280.53 +    jobject window;
  280.54 +    jint iOpacity;
  280.55 +};
  280.56 +// struct for _SetOpaque() method
  280.57 +struct OpaqueStruct {
  280.58 +    jobject window;
  280.59 +    jboolean isOpaque;
  280.60 +};
  280.61 +// struct for _UpdateWindow() method
  280.62 +struct UpdateWindowStruct {
  280.63 +    jobject window;
  280.64 +    jintArray data;
  280.65 +    HBITMAP hBitmap;
  280.66 +    jint width, height;
  280.67 +};
  280.68 +// Struct for _RequestWindowFocus() method
  280.69 +struct RequestWindowFocusStruct {
  280.70 +    jobject component;
  280.71 +    jboolean isMouseEventCause;
  280.72 +};
  280.73 +// struct for _RepositionSecurityWarning() method
  280.74 +struct RepositionSecurityWarningStruct {
  280.75 +    jobject window;
  280.76 +};
  280.77 +
  280.78 +
  280.79  /************************************************************************
  280.80   * AwtWindow fields
  280.81   */
  280.82 @@ -121,17 +151,23 @@
  280.83  jfieldID AwtWindow::warningStringID;
  280.84  jfieldID AwtWindow::locationByPlatformID;
  280.85  jfieldID AwtWindow::autoRequestFocusID;
  280.86 +jfieldID AwtWindow::securityWarningWidthID;
  280.87 +jfieldID AwtWindow::securityWarningHeightID;
  280.88  
  280.89  jfieldID AwtWindow::sysXID;
  280.90  jfieldID AwtWindow::sysYID;
  280.91  jfieldID AwtWindow::sysWID;
  280.92  jfieldID AwtWindow::sysHID;
  280.93  
  280.94 +jmethodID AwtWindow::getWarningStringMID;
  280.95 +jmethodID AwtWindow::calculateSecurityWarningPositionMID;
  280.96 +
  280.97  int AwtWindow::ms_instanceCounter = 0;
  280.98  HHOOK AwtWindow::ms_hCBTFilter;
  280.99  AwtWindow * AwtWindow::m_grabbedWindow = NULL;
 280.100  HWND AwtWindow::sm_retainingHierarchyZOrderInShow = NULL;
 280.101  BOOL AwtWindow::sm_resizing = FALSE;
 280.102 +UINT AwtWindow::untrustedWindowsCounter = 0;
 280.103  
 280.104  /************************************************************************
 280.105   * AwtWindow class methods
 280.106 @@ -162,10 +198,34 @@
 280.107              ::SetWindowsHookEx(WH_CBT, (HOOKPROC)AwtWindow::CBTFilter,
 280.108                                 0, AwtToolkit::MainThread());
 280.109      }
 280.110 +
 280.111 +    m_opaque = TRUE;
 280.112 +    m_opacity = 0xff;
 280.113 +
 280.114 +
 280.115 +    warningString = NULL;
 280.116 +    warningWindow = NULL;
 280.117 +    securityTooltipWindow = NULL;
 280.118 +    securityWarningAnimationStage = 0;
 280.119 +    currentWmSizeState = SIZE_RESTORED;
 280.120 +
 280.121 +    hContentBitmap = NULL;
 280.122 +
 280.123 +    ::InitializeCriticalSection(&contentBitmapCS);
 280.124  }
 280.125  
 280.126  AwtWindow::~AwtWindow()
 280.127  {
 280.128 +    if (warningString != NULL) {
 280.129 +        delete [] warningString;
 280.130 +    }
 280.131 +    ::EnterCriticalSection(&contentBitmapCS);
 280.132 +    if (hContentBitmap != NULL) {
 280.133 +        ::DeleteObject(hContentBitmap);
 280.134 +        hContentBitmap = NULL;
 280.135 +    }
 280.136 +    ::LeaveCriticalSection(&contentBitmapCS);
 280.137 +    ::DeleteCriticalSection(&contentBitmapCS);
 280.138  }
 280.139  
 280.140  void AwtWindow::Dispose()
 280.141 @@ -204,10 +264,10 @@
 280.142      }
 280.143      m_grabbed = TRUE;
 280.144      m_grabbedWindow = this;
 280.145 -    if (sm_focusedWindow == NULL && IsFocusableWindow()) {
 280.146 +    if (AwtComponent::GetFocusedWindow() == NULL && IsFocusableWindow()) {
 280.147          // we shouldn't perform grab in this case (see 4841881 & 6539458)
 280.148          Ungrab();
 280.149 -    } else if (GetHWnd() != sm_focusedWindow) {
 280.150 +    } else if (GetHWnd() != AwtComponent::GetFocusedWindow()) {
 280.151          _ToFront(env->NewGlobalRef(GetPeer(env)));
 280.152          // Global ref was deleted in _ToFront
 280.153      }
 280.154 @@ -301,12 +361,40 @@
 280.155      return mrDoDefault;
 280.156  }
 280.157  
 280.158 +void AwtWindow::RepositionSecurityWarning(JNIEnv *env)
 280.159 +{
 280.160 +    RECT rect;
 280.161 +    CalculateWarningWindowBounds(env, &rect);
 280.162 +
 280.163 +    ::SetWindowPos(warningWindow, HWND_NOTOPMOST,
 280.164 +            rect.left, rect.top,
 280.165 +            rect.right - rect.left, rect.bottom - rect.top,
 280.166 +            SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOZORDER
 280.167 +            );
 280.168 +}
 280.169 +
 280.170  MsgRouting AwtWindow::WmWindowPosChanged(LPARAM windowPos) {
 280.171 -    if (IsRetainingHierarchyZOrder() && ((WINDOWPOS *)windowPos)->flags & SWP_SHOWWINDOW) {
 280.172 +    WINDOWPOS * wp = (WINDOWPOS *)windowPos;
 280.173 +
 280.174 +    if (IsRetainingHierarchyZOrder() && wp->flags & SWP_SHOWWINDOW) {
 280.175          // By this time all the windows from the hierarchy are already notified about z-order change.
 280.176          // Thus we may and we should reset the trigger in order not to affect other changes.
 280.177          sm_retainingHierarchyZOrderInShow = NULL;
 280.178      }
 280.179 +
 280.180 +    // Reposition the warning window
 280.181 +    if (IsUntrusted() && warningWindow != NULL) {
 280.182 +        if (wp->flags & SWP_HIDEWINDOW) {
 280.183 +            UpdateSecurityWarningVisibility();
 280.184 +        }
 280.185 +
 280.186 +        RepositionSecurityWarning((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2));
 280.187 +
 280.188 +        if (wp->flags & SWP_SHOWWINDOW) {
 280.189 +            UpdateSecurityWarningVisibility();
 280.190 +        }
 280.191 +    }
 280.192 +
 280.193      return mrDoDefault;
 280.194  }
 280.195  
 280.196 @@ -326,21 +414,597 @@
 280.197      lpwc->cbWndExtra = DLGWINDOWEXTRA;
 280.198  }
 280.199  
 280.200 +bool AwtWindow::IsWarningWindow(HWND hWnd)
 280.201 +{
 280.202 +    const UINT len = 128;
 280.203 +    TCHAR windowClassName[len];
 280.204 +
 280.205 +    ::RealGetWindowClass(hWnd, windowClassName, len);
 280.206 +    return 0 == _tcsncmp(windowClassName,
 280.207 +            AwtWindow::GetWarningWindowClassName(), len);
 280.208 +}
 280.209 +
 280.210  LRESULT CALLBACK AwtWindow::CBTFilter(int nCode, WPARAM wParam, LPARAM lParam)
 280.211  {
 280.212      if (nCode == HCBT_ACTIVATE || nCode == HCBT_SETFOCUS) {
 280.213 -        AwtComponent *comp = AwtComponent::GetComponent((HWND)wParam);
 280.214 -
 280.215 -        if (comp != NULL && comp->IsTopLevel()) {
 280.216 -            AwtWindow* win = (AwtWindow*)comp;
 280.217 -            if (!win->IsFocusableWindow() || win->m_filterFocusAndActivation) {
 280.218 -                return 1; // Don't change focus/activation.
 280.219 +        HWND hWnd = (HWND)wParam;
 280.220 +        AwtComponent *comp = AwtComponent::GetComponent(hWnd);
 280.221 +
 280.222 +        if (comp == NULL) {
 280.223 +            // Check if it's a security warning icon
 280.224 +            // See: 5091224, 6181725, 6732583
 280.225 +            if (AwtWindow::IsWarningWindow(hWnd)) {
 280.226 +                return 1;
 280.227 +            }
 280.228 +        } else {
 280.229 +            if (comp->IsTopLevel()) {
 280.230 +                AwtWindow* win = (AwtWindow*)comp;
 280.231 +
 280.232 +                if (!win->IsFocusableWindow() ||
 280.233 +                        win->m_filterFocusAndActivation)
 280.234 +                {
 280.235 +                    return 1; // Don't change focus/activation.
 280.236 +                }
 280.237              }
 280.238          }
 280.239      }
 280.240      return ::CallNextHookEx(AwtWindow::ms_hCBTFilter, nCode, wParam, lParam);
 280.241  }
 280.242  
 280.243 +void AwtWindow::InitSecurityWarningSize(JNIEnv *env)
 280.244 +{
 280.245 +    warningWindowWidth = ::GetSystemMetrics(SM_CXSMICON);
 280.246 +    warningWindowHeight = ::GetSystemMetrics(SM_CYSMICON);
 280.247 +
 280.248 +    jobject target = GetTarget(env);
 280.249 +
 280.250 +    env->SetIntField(target, AwtWindow::securityWarningWidthID,
 280.251 +            warningWindowWidth);
 280.252 +    env->SetIntField(target, AwtWindow::securityWarningHeightID,
 280.253 +            warningWindowHeight);
 280.254 +
 280.255 +    env->DeleteLocalRef(target);
 280.256 +}
 280.257 +
 280.258 +void AwtWindow::CreateHWnd(JNIEnv *env, LPCWSTR title,
 280.259 +        DWORD windowStyle,
 280.260 +        DWORD windowExStyle,
 280.261 +        int x, int y, int w, int h,
 280.262 +        HWND hWndParent, HMENU hMenu,
 280.263 +        COLORREF colorForeground,
 280.264 +        COLORREF colorBackground,
 280.265 +        jobject peer)
 280.266 +{
 280.267 +    // Retrieve the warning string
 280.268 +    // Note: we need to get it before CreateHWnd() happens because
 280.269 +    // the isUntrusted() method may be invoked while the HWND
 280.270 +    // is being created in response to some window messages.
 280.271 +    jobject target = env->GetObjectField(peer, AwtObject::targetID);
 280.272 +    jstring javaWarningString =
 280.273 +        (jstring)env->CallObjectMethod(target, AwtWindow::getWarningStringMID);
 280.274 +
 280.275 +    if (javaWarningString != NULL) {
 280.276 +        size_t length = env->GetStringLength(javaWarningString) + 1;
 280.277 +        warningString = new WCHAR[length];
 280.278 +        env->GetStringRegion(javaWarningString, 0,
 280.279 +                static_cast<jsize>(length - 1), warningString);
 280.280 +        warningString[length-1] = L'\0';
 280.281 +
 280.282 +        env->DeleteLocalRef(javaWarningString);
 280.283 +    }
 280.284 +    env->DeleteLocalRef(target);
 280.285 +
 280.286 +    AwtCanvas::CreateHWnd(env, title,
 280.287 +            windowStyle,
 280.288 +            windowExStyle,
 280.289 +            x, y, w, h,
 280.290 +            hWndParent, hMenu,
 280.291 +            colorForeground,
 280.292 +            colorBackground,
 280.293 +            peer);
 280.294 +
 280.295 +    // Now we need to create the warning window.
 280.296 +    CreateWarningWindow(env);
 280.297 +}
 280.298 +
 280.299 +void AwtWindow::CreateWarningWindow(JNIEnv *env)
 280.300 +{
 280.301 +    if (!IsUntrusted()) {
 280.302 +        return;
 280.303 +    }
 280.304 +
 280.305 +    if (++AwtWindow::untrustedWindowsCounter == 1) {
 280.306 +        AwtToolkit::GetInstance().InstallMouseLowLevelHook();
 280.307 +    }
 280.308 +
 280.309 +    InitSecurityWarningSize(env);
 280.310 +
 280.311 +    RECT rect;
 280.312 +    CalculateWarningWindowBounds(env, &rect);
 280.313 +
 280.314 +    RegisterWarningWindowClass();
 280.315 +    warningWindow = ::CreateWindowEx(
 280.316 +            WS_EX_NOACTIVATE | WS_EX_LAYERED,
 280.317 +            GetWarningWindowClassName(),
 280.318 +            warningString,
 280.319 +            WS_POPUP,
 280.320 +            rect.left, rect.top,
 280.321 +            rect.right - rect.left, rect.bottom - rect.top,
 280.322 +            GetHWnd(), // owner
 280.323 +            NULL, // menu
 280.324 +            AwtToolkit::GetInstance().GetModuleHandle(),
 280.325 +            NULL // lParam
 280.326 +            );
 280.327 +    if (warningWindow == NULL) {
 280.328 +        //XXX: actually this is bad... We didn't manage to create the widow.
 280.329 +        return;
 280.330 +    }
 280.331 +
 280.332 +    HICON hIcon = GetSecurityWarningIcon();
 280.333 +
 280.334 +    ICONINFO ii;
 280.335 +    ::GetIconInfo(hIcon, &ii);
 280.336 +
 280.337 +    //Note: we assume that every security icon has exactly the same shape.
 280.338 +    HRGN rgn = BitmapUtil::BitmapToRgn(ii.hbmColor);
 280.339 +    if (rgn) {
 280.340 +        ::SetWindowRgn(warningWindow, rgn, TRUE);
 280.341 +    }
 280.342 +
 280.343 +    // Now we need to create the tooltip control for this window.
 280.344 +    if (!ComCtl32Util::GetInstance().IsToolTipControlInitialized()) {
 280.345 +        return;
 280.346 +    }
 280.347 +
 280.348 +    securityTooltipWindow = ::CreateWindowEx(
 280.349 +            WS_EX_TOPMOST,
 280.350 +            TOOLTIPS_CLASS,
 280.351 +            NULL,
 280.352 +            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
 280.353 +            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
 280.354 +            warningWindow,
 280.355 +            NULL,
 280.356 +            AwtToolkit::GetInstance().GetModuleHandle(),
 280.357 +            NULL
 280.358 +            );
 280.359 +
 280.360 +    ::SetWindowPos(securityTooltipWindow,
 280.361 +            HWND_TOPMOST, 0, 0, 0, 0,
 280.362 +            SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
 280.363 +
 280.364 +
 280.365 +    // We currently don't expect changing the size of the window,
 280.366 +    // hence we may not care of updating the TOOL position/size.
 280.367 +    ::GetClientRect(warningWindow, &rect);
 280.368 +
 280.369 +    TOOLINFO ti;
 280.370 +
 280.371 +    ti.cbSize = sizeof(ti);
 280.372 +    ti.uFlags = TTF_SUBCLASS;
 280.373 +    ti.hwnd = warningWindow;
 280.374 +    ti.hinst = AwtToolkit::GetInstance().GetModuleHandle();
 280.375 +    ti.uId = 0;
 280.376 +    ti.lpszText = warningString;
 280.377 +    ti.rect.left = rect.left;
 280.378 +    ti.rect.top = rect.top;
 280.379 +    ti.rect.right = rect.right;
 280.380 +    ti.rect.bottom = rect.bottom;
 280.381 +
 280.382 +    ::SendMessage(securityTooltipWindow, TTM_ADDTOOL,
 280.383 +            0, (LPARAM) (LPTOOLINFO) &ti);
 280.384 +}
 280.385 +
 280.386 +void AwtWindow::DestroyWarningWindow()
 280.387 +{
 280.388 +    if (!IsUntrusted()) {
 280.389 +        return;
 280.390 +    }
 280.391 +    if (--AwtWindow::untrustedWindowsCounter == 0) {
 280.392 +        AwtToolkit::GetInstance().UninstallMouseLowLevelHook();
 280.393 +    }
 280.394 +    if (warningWindow != NULL) {
 280.395 +        // Note that the warningWindow is an owned window, and hence
 280.396 +        // it would be destroyed automatically. However, the window
 280.397 +        // class may only be unregistered if there's no any single
 280.398 +        // window left using this class. Thus, we're destroying the
 280.399 +        // warning window manually. Note that the tooltip window
 280.400 +        // will be destroyed automatically because it's an owned
 280.401 +        // window as well.
 280.402 +        ::DestroyWindow(warningWindow);
 280.403 +        warningWindow = NULL;
 280.404 +        securityTooltipWindow = NULL;
 280.405 +        UnregisterWarningWindowClass();
 280.406 +    }
 280.407 +}
 280.408 +
 280.409 +void AwtWindow::DestroyHWnd()
 280.410 +{
 280.411 +    DestroyWarningWindow();
 280.412 +    AwtCanvas::DestroyHWnd();
 280.413 +}
 280.414 +
 280.415 +LPCTSTR AwtWindow::GetWarningWindowClassName()
 280.416 +{
 280.417 +    return TEXT("SunAwtWarningWindow");
 280.418 +}
 280.419 +
 280.420 +void AwtWindow::FillWarningWindowClassInfo(WNDCLASS *lpwc)
 280.421 +{
 280.422 +    lpwc->style         = 0L;
 280.423 +    lpwc->lpfnWndProc   = (WNDPROC)WarningWindowProc;
 280.424 +    lpwc->cbClsExtra    = 0;
 280.425 +    lpwc->cbWndExtra    = 0;
 280.426 +    lpwc->hInstance     = AwtToolkit::GetInstance().GetModuleHandle(),
 280.427 +    lpwc->hIcon         = AwtToolkit::GetInstance().GetAwtIcon();
 280.428 +    lpwc->hCursor       = ::LoadCursor(NULL, IDC_ARROW);
 280.429 +    lpwc->hbrBackground = NULL;
 280.430 +    lpwc->lpszMenuName  = NULL;
 280.431 +    lpwc->lpszClassName = AwtWindow::GetWarningWindowClassName();
 280.432 +}
 280.433 +
 280.434 +void AwtWindow::RegisterWarningWindowClass()
 280.435 +{
 280.436 +    WNDCLASS  wc;
 280.437 +
 280.438 +    ::ZeroMemory(&wc, sizeof(wc));
 280.439 +
 280.440 +    if (!::GetClassInfo(AwtToolkit::GetInstance().GetModuleHandle(),
 280.441 +                        AwtWindow::GetWarningWindowClassName(), &wc))
 280.442 +    {
 280.443 +        AwtWindow::FillWarningWindowClassInfo(&wc);
 280.444 +        ATOM atom = ::RegisterClass(&wc);
 280.445 +        DASSERT(atom != 0);
 280.446 +    }
 280.447 +}
 280.448 +
 280.449 +void AwtWindow::UnregisterWarningWindowClass()
 280.450 +{
 280.451 +    ::UnregisterClass(AwtWindow::GetWarningWindowClassName(), AwtToolkit::GetInstance().GetModuleHandle());
 280.452 +}
 280.453 +
 280.454 +HICON AwtWindow::GetSecurityWarningIcon()
 280.455 +{
 280.456 +    HICON ico = AwtToolkit::GetInstance().GetSecurityWarningIcon(securityWarningAnimationStage,
 280.457 +            warningWindowWidth, warningWindowHeight);
 280.458 +    return ico;
 280.459 +}
 280.460 +
 280.461 +// This function calculates the bounds of the warning window and stores them
 280.462 +// into the RECT structure pointed by the argument rect.
 280.463 +void AwtWindow::CalculateWarningWindowBounds(JNIEnv *env, LPRECT rect)
 280.464 +{
 280.465 +    RECT windowBounds;
 280.466 +    AwtToolkit::GetWindowRect(GetHWnd(), &windowBounds);
 280.467 +
 280.468 +    jobject target = GetTarget(env);
 280.469 +    jobject point2D = env->CallObjectMethod(target,
 280.470 +            calculateSecurityWarningPositionMID,
 280.471 +            (jdouble)windowBounds.left, (jdouble)windowBounds.top,
 280.472 +            (jdouble)(windowBounds.right - windowBounds.left),
 280.473 +            (jdouble)(windowBounds.bottom - windowBounds.top));
 280.474 +    env->DeleteLocalRef(target);
 280.475 +
 280.476 +    static jclass point2DClassID = NULL;
 280.477 +    static jmethodID point2DGetXMID = NULL;
 280.478 +    static jmethodID point2DGetYMID = NULL;
 280.479 +
 280.480 +    if (point2DClassID == NULL) {
 280.481 +        jclass point2DClassIDLocal = env->FindClass("java/awt/geom/Point2D");
 280.482 +        point2DClassID = (jclass)env->NewGlobalRef(point2DClassIDLocal);
 280.483 +        env->DeleteLocalRef(point2DClassIDLocal);
 280.484 +    }
 280.485 +
 280.486 +    if (point2DGetXMID == NULL) {
 280.487 +        point2DGetXMID = env->GetMethodID(point2DClassID, "getX", "()D");
 280.488 +    }
 280.489 +    if (point2DGetYMID == NULL) {
 280.490 +        point2DGetYMID = env->GetMethodID(point2DClassID, "getY", "()D");
 280.491 +    }
 280.492 +
 280.493 +
 280.494 +    int x = (int)env->CallDoubleMethod(point2D, point2DGetXMID);
 280.495 +    int y = (int)env->CallDoubleMethod(point2D, point2DGetYMID);
 280.496 +
 280.497 +    env->DeleteLocalRef(point2D);
 280.498 +
 280.499 +    //Make sure the warning is not far from the window bounds
 280.500 +    x = max(x, windowBounds.left - (int)warningWindowWidth - 2);
 280.501 +    x = min(x, windowBounds.right + (int)warningWindowWidth + 2);
 280.502 +
 280.503 +    y = max(y, windowBounds.top - (int)warningWindowHeight - 2);
 280.504 +    y = min(y, windowBounds.bottom + (int)warningWindowHeight + 2);
 280.505 +
 280.506 +    // Now make sure the warning window is visible on the screen
 280.507 +    HMONITOR hmon = MonitorFromWindow(GetHWnd(), MONITOR_DEFAULTTOPRIMARY);
 280.508 +    DASSERT(hmon != NULL);
 280.509 +
 280.510 +    RECT monitorBounds;
 280.511 +    RECT monitorInsets;
 280.512 +
 280.513 +    MonitorBounds(hmon, &monitorBounds);
 280.514 +    if (!AwtToolkit::GetScreenInsets(m_screenNum, &monitorInsets)) {
 280.515 +        ::ZeroMemory(&monitorInsets, sizeof(monitorInsets));
 280.516 +    }
 280.517 +
 280.518 +    x = max(x, monitorBounds.left + monitorInsets.left);
 280.519 +    x = min(x, monitorBounds.right - monitorInsets.right - (int)warningWindowWidth);
 280.520 +
 280.521 +    y = max(y, monitorBounds.top + monitorInsets.top);
 280.522 +    y = min(y, monitorBounds.bottom - monitorInsets.bottom - (int)warningWindowHeight);
 280.523 +
 280.524 +    rect->left = x;
 280.525 +    rect->top = y;
 280.526 +    rect->right = rect->left + warningWindowWidth;
 280.527 +    rect->bottom = rect->top + warningWindowHeight;
 280.528 +}
 280.529 +
 280.530 +LRESULT CALLBACK AwtWindow::WarningWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 280.531 +{
 280.532 +    switch (uMsg) {
 280.533 +        case WM_PAINT:
 280.534 +            PaintWarningWindow(hwnd);
 280.535 +            return 0;
 280.536 +
 280.537 +        case WM_MOUSEACTIVATE:
 280.538 +            {
 280.539 +                // Retrive the owner of the warning window.
 280.540 +                HWND javaWindow = ::GetParent(hwnd);
 280.541 +                if (javaWindow) {
 280.542 +                    // If the window is blocked by a modal dialog, substitute
 280.543 +                    // its handle with the topmost blocker.
 280.544 +                    HWND topmostBlocker = GetTopmostModalBlocker(javaWindow);
 280.545 +                    if (::IsWindow(topmostBlocker)) {
 280.546 +                        javaWindow = topmostBlocker;
 280.547 +                    }
 280.548 +
 280.549 +                    ::BringWindowToTop(javaWindow);
 280.550 +
 280.551 +                    AwtWindow * window =
 280.552 +                        (AwtWindow*)AwtComponent::GetComponent(javaWindow);
 280.553 +                    if (window == NULL) {
 280.554 +                        // Quite unlikely to go into here, but it's way better
 280.555 +                        // than getting a crash.
 280.556 +                        ::SetForegroundWindow(javaWindow);
 280.557 +                    } else {
 280.558 +                        // Activate the window if it is focusable and inactive
 280.559 +                        if (window->IsFocusableWindow() &&
 280.560 +                                javaWindow != ::GetActiveWindow()) {
 280.561 +                            ::SetForegroundWindow(javaWindow);
 280.562 +                        } else {
 280.563 +                            // ...otherwise just start the animation.
 280.564 +                            window->StartSecurityAnimation(akShow);
 280.565 +                        }
 280.566 +                    }
 280.567 +
 280.568 +                    // In every case if there's a top-most blocker, we need to
 280.569 +                    // enable modal animation.
 280.570 +                    if (::IsWindow(topmostBlocker)) {
 280.571 +                        AwtDialog::AnimateModalBlocker(topmostBlocker);
 280.572 +                    }
 280.573 +                }
 280.574 +                return MA_NOACTIVATEANDEAT;
 280.575 +            }
 280.576 +    }
 280.577 +    return ::DefWindowProc(hwnd, uMsg, wParam, lParam);
 280.578 +}
 280.579 +
 280.580 +void AwtWindow::PaintWarningWindow(HWND warningWindow)
 280.581 +{
 280.582 +    RECT updateRect;
 280.583 +
 280.584 +    if (!::GetUpdateRect(warningWindow, &updateRect, FALSE)) {
 280.585 +        // got nothing to update
 280.586 +        return;
 280.587 +    }
 280.588 +
 280.589 +    PAINTSTRUCT ps;
 280.590 +    HDC hdc = ::BeginPaint(warningWindow, &ps);
 280.591 +    if (hdc == NULL) {
 280.592 +        // indicates an error
 280.593 +        return;
 280.594 +    }
 280.595 +
 280.596 +    PaintWarningWindow(warningWindow, hdc);
 280.597 +
 280.598 +    ::EndPaint(warningWindow, &ps);
 280.599 +}
 280.600 +
 280.601 +void AwtWindow::PaintWarningWindow(HWND warningWindow, HDC hdc)
 280.602 +{
 280.603 +    HWND javaWindow = ::GetParent(warningWindow);
 280.604 +
 280.605 +    AwtWindow * window = (AwtWindow*)AwtComponent::GetComponent(javaWindow);
 280.606 +    if (window == NULL) {
 280.607 +        return;
 280.608 +    }
 280.609 +
 280.610 +    ::DrawIconEx(hdc, 0, 0, window->GetSecurityWarningIcon(),
 280.611 +            window->warningWindowWidth, window->warningWindowHeight,
 280.612 +            0, NULL, DI_NORMAL);
 280.613 +}
 280.614 +
 280.615 +static const UINT_PTR IDT_AWT_SECURITYANIMATION = 0x102;
 280.616 +
 280.617 +// Approximately 6 times a second. 0.75 seconds total.
 280.618 +static const UINT securityAnimationTimerElapse = 150;
 280.619 +static const UINT securityAnimationMaxIterations = 5;
 280.620 +
 280.621 +void AwtWindow::RepaintWarningWindow()
 280.622 +{
 280.623 +    HDC hdc = ::GetDC(warningWindow);
 280.624 +    PaintWarningWindow(warningWindow, hdc);
 280.625 +    ::ReleaseDC(warningWindow, hdc);
 280.626 +}
 280.627 +
 280.628 +void AwtWindow::StartSecurityAnimation(AnimationKind kind)
 280.629 +{
 280.630 +    if (!IsUntrusted()) {
 280.631 +        return;
 280.632 +    }
 280.633 +    if (warningWindow == NULL) {
 280.634 +        return;
 280.635 +    }
 280.636 +
 280.637 +    securityAnimationKind = kind;
 280.638 +
 280.639 +    securityWarningAnimationStage = 1;
 280.640 +    ::SetTimer(GetHWnd(), IDT_AWT_SECURITYANIMATION,
 280.641 +            securityAnimationTimerElapse, NULL);
 280.642 +
 280.643 +    if (securityAnimationKind == akShow) {
 280.644 +        ::SetWindowPos(warningWindow, HWND_NOTOPMOST, 0, 0, 0, 0,
 280.645 +                SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE |
 280.646 +                SWP_SHOWWINDOW);
 280.647 +
 280.648 +        ::SetLayeredWindowAttributes(warningWindow, RGB(0, 0, 0),
 280.649 +                0xFF, LWA_ALPHA);
 280.650 +        ::RedrawWindow(warningWindow, NULL, NULL,
 280.651 +                RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
 280.652 +    }
 280.653 +}
 280.654 +
 280.655 +void AwtWindow::StopSecurityAnimation()
 280.656 +{
 280.657 +    if (!IsUntrusted()) {
 280.658 +        return;
 280.659 +    }
 280.660 +    if (warningWindow == NULL) {
 280.661 +        return;
 280.662 +    }
 280.663 +
 280.664 +    securityWarningAnimationStage = 0;
 280.665 +    ::KillTimer(GetHWnd(), IDT_AWT_SECURITYANIMATION);
 280.666 +
 280.667 +    switch (securityAnimationKind) {
 280.668 +        case akHide:
 280.669 +        case akPreHide:
 280.670 +            ::SetWindowPos(warningWindow, HWND_NOTOPMOST, 0, 0, 0, 0,
 280.671 +                    SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE |
 280.672 +                    SWP_HIDEWINDOW);
 280.673 +            break;
 280.674 +        case akShow:
 280.675 +            RepaintWarningWindow();
 280.676 +            break;
 280.677 +    }
 280.678 +
 280.679 +    securityAnimationKind = akNone;
 280.680 +}
 280.681 +
 280.682 +MsgRouting AwtWindow::WmTimer(UINT_PTR timerID)
 280.683 +{
 280.684 +    if (timerID != IDT_AWT_SECURITYANIMATION) {
 280.685 +        return mrPassAlong;
 280.686 +    }
 280.687 +
 280.688 +    if (securityWarningAnimationStage == 0) {
 280.689 +        return mrConsume;
 280.690 +    }
 280.691 +
 280.692 +    securityWarningAnimationStage++;
 280.693 +    if (securityWarningAnimationStage >= securityAnimationMaxIterations) {
 280.694 +        if (securityAnimationKind == akPreHide) {
 280.695 +            // chain real hiding
 280.696 +            StartSecurityAnimation(akHide);
 280.697 +        } else {
 280.698 +            StopSecurityAnimation();
 280.699 +        }
 280.700 +    } else {
 280.701 +        switch (securityAnimationKind) {
 280.702 +            case akHide:
 280.703 +                {
 280.704 +                    BYTE opacity = ((int)0xFF *
 280.705 +                            (securityAnimationMaxIterations -
 280.706 +                             securityWarningAnimationStage)) /
 280.707 +                        securityAnimationMaxIterations;
 280.708 +                    ::SetLayeredWindowAttributes(warningWindow,
 280.709 +                            RGB(0, 0, 0), opacity, LWA_ALPHA);
 280.710 +                }
 280.711 +                break;
 280.712 +            case akShow:
 280.713 +            case akNone: // quite unlikely, but quite safe
 280.714 +                RepaintWarningWindow();
 280.715 +                break;
 280.716 +        }
 280.717 +    }
 280.718 +
 280.719 +    return mrConsume;
 280.720 +}
 280.721 +
 280.722 +// The security warning is visible if:
 280.723 +//    1. The window has the keyboard window focus, OR
 280.724 +//    2. The mouse pointer is located within the window bounds,
 280.725 +//       or within the security warning icon.
 280.726 +void AwtWindow::UpdateSecurityWarningVisibility()
 280.727 +{
 280.728 +    if (!IsUntrusted()) {
 280.729 +        return;
 280.730 +    }
 280.731 +    if (warningWindow == NULL) {
 280.732 +        return;
 280.733 +    }
 280.734 +
 280.735 +    bool show = false;
 280.736 +
 280.737 +    if (IsVisible() && currentWmSizeState != SIZE_MINIMIZED) {
 280.738 +        if (AwtComponent::GetFocusedWindow() == GetHWnd()) {
 280.739 +            show = true;
 280.740 +        }
 280.741 +
 280.742 +        HWND hwnd = AwtToolkit::GetInstance().GetWindowUnderMouse();
 280.743 +        if (hwnd == GetHWnd()) {
 280.744 +            show = true;
 280.745 +        }
 280.746 +        if (hwnd == warningWindow) {
 280.747 +            show = true;
 280.748 +        }
 280.749 +    }
 280.750 +
 280.751 +    if (show && (!::IsWindowVisible(warningWindow) ||
 280.752 +                securityAnimationKind == akHide ||
 280.753 +                securityAnimationKind == akPreHide)) {
 280.754 +        StartSecurityAnimation(akShow);
 280.755 +    }
 280.756 +    if (!show && ::IsWindowVisible(warningWindow)) {
 280.757 +        StartSecurityAnimation(akPreHide);
 280.758 +    }
 280.759 +}
 280.760 +
 280.761 +void AwtWindow::FocusedWindowChanged(HWND from, HWND to)
 280.762 +{
 280.763 +    AwtWindow * fw = (AwtWindow *)AwtComponent::GetComponent(from);
 280.764 +    AwtWindow * tw = (AwtWindow *)AwtComponent::GetComponent(to);
 280.765 +
 280.766 +    if (fw != NULL) {
 280.767 +        fw->UpdateSecurityWarningVisibility();
 280.768 +    }
 280.769 +    if (tw != NULL) {
 280.770 +        tw->UpdateSecurityWarningVisibility();
 280.771 +
 280.772 +        // Flash on receiving the keyboard focus even if the warning
 280.773 +        // has already been shown (e.g. by hovering with the mouse)
 280.774 +        tw->StartSecurityAnimation(akShow);
 280.775 +    }
 280.776 +}
 280.777 +
 280.778 +void AwtWindow::_RepositionSecurityWarning(void* param)
 280.779 +{
 280.780 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 280.781 +
 280.782 +    RepositionSecurityWarningStruct *rsws =
 280.783 +        (RepositionSecurityWarningStruct *)param;
 280.784 +    jobject self = rsws->window;
 280.785 +
 280.786 +    PDATA pData;
 280.787 +    JNI_CHECK_PEER_GOTO(self, ret);
 280.788 +    AwtWindow *window = (AwtWindow *)pData;
 280.789 +
 280.790 +    window->RepositionSecurityWarning(env);
 280.791 +
 280.792 +  ret:
 280.793 +    env->DeleteGlobalRef(self);
 280.794 +    delete rsws;
 280.795 +}
 280.796 +
 280.797  /* Create a new AwtWindow object and window.   */
 280.798  AwtWindow* AwtWindow::Create(jobject self, jobject parent)
 280.799  {
 280.800 @@ -372,7 +1036,7 @@
 280.801                  window->m_isRetainingHierarchyZOrder = TRUE;
 280.802              }
 280.803              DWORD style = WS_CLIPCHILDREN | WS_POPUP;
 280.804 -            DWORD exStyle = 0;
 280.805 +            DWORD exStyle = WS_EX_NOACTIVATE;
 280.806              if (GetRTL()) {
 280.807                  exStyle |= WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR;
 280.808                  if (GetRTLReadingOrder())
 280.809 @@ -620,23 +1284,6 @@
 280.810      ::GetClientRect(GetHWnd(), &inside);
 280.811      ::GetWindowRect(GetHWnd(), &outside);
 280.812  
 280.813 -    jobject target = GetTarget(env);
 280.814 -    jstring warningString =
 280.815 -      (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID);
 280.816 -    if (warningString != NULL) {
 280.817 -        ::CopyRect(&inside, &outside);
 280.818 -        DefWindowProc(WM_NCCALCSIZE, FALSE, (LPARAM)&inside);
 280.819 -        /*
 280.820 -         * Fix for BugTraq ID 4304024.
 280.821 -         * Calculate client rectangle in client coordinates.
 280.822 -         */
 280.823 -        VERIFY(::OffsetRect(&inside, -inside.left, -inside.top));
 280.824 -        extraBottomInsets = ::GetSystemMetrics(SM_CYCAPTION) +
 280.825 -            ((GetStyle() & WS_THICKFRAME) ? 2 : -2);
 280.826 -    }
 280.827 -    env->DeleteLocalRef(target);
 280.828 -    env->DeleteLocalRef(warningString);
 280.829 -
 280.830      /* Update our inset member */
 280.831      if (outside.right - outside.left > 0 && outside.bottom - outside.top > 0) {
 280.832          ::MapWindowPoints(GetHWnd(), 0, (LPPOINT)&inside, 2);
 280.833 @@ -863,45 +1510,93 @@
 280.834      env->DeleteLocalRef(event);
 280.835  }
 280.836  
 280.837 +BOOL AwtWindow::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest)
 280.838 +{
 280.839 +    // Fix for 6458497.
 280.840 +    // Retreat if current foreground window is out of both our and embedder process.
 280.841 +    // The exception is when activation is requested due to a mouse event.
 280.842 +    if (!isMouseEventCause) {
 280.843 +        HWND fgWindow = ::GetForegroundWindow();
 280.844 +        if (NULL != fgWindow) {
 280.845 +            DWORD fgProcessID;
 280.846 +            ::GetWindowThreadProcessId(fgWindow, &fgProcessID);
 280.847 +            if (fgProcessID != ::GetCurrentProcessId()
 280.848 +                && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID))
 280.849 +            {
 280.850 +                return FALSE;
 280.851 +            }
 280.852 +        }
 280.853 +    }
 280.854 +
 280.855 +    HWND proxyContainerHWnd = GetProxyToplevelContainer();
 280.856 +    HWND proxyHWnd = GetProxyFocusOwner();
 280.857 +
 280.858 +    if (proxyContainerHWnd == NULL || proxyHWnd == NULL) {
 280.859 +        return FALSE;
 280.860 +    }
 280.861 +
 280.862 +    // Activate the proxy toplevel container
 280.863 +    if (::GetActiveWindow() != proxyContainerHWnd) {
 280.864 +        sm_suppressFocusAndActivation = TRUE;
 280.865 +        ::BringWindowToTop(proxyContainerHWnd);
 280.866 +        ::SetForegroundWindow(proxyContainerHWnd);
 280.867 +        sm_suppressFocusAndActivation = FALSE;
 280.868 +
 280.869 +        if (::GetActiveWindow() != proxyContainerHWnd) {
 280.870 +            return FALSE; // activation has been rejected
 280.871 +        }
 280.872 +    }
 280.873 +
 280.874 +    // Focus the proxy itself
 280.875 +    if (::GetFocus() != proxyHWnd) {
 280.876 +        sm_suppressFocusAndActivation = TRUE;
 280.877 +        ::SetFocus(proxyHWnd);
 280.878 +        sm_suppressFocusAndActivation = FALSE;
 280.879 +
 280.880 +        if (::GetFocus() != proxyHWnd) {
 280.881 +            return FALSE; // focus has been rejected (that is unlikely)
 280.882 +        }
 280.883 +    }
 280.884 +
 280.885 +    const HWND focusedWindow = AwtComponent::GetFocusedWindow();
 280.886 +    if (focusedWindow != GetHWnd()) {
 280.887 +        if (focusedWindow != NULL) {
 280.888 +            // Deactivate the old focused window
 280.889 +            AwtWindow::SynthesizeWmActivate(FALSE, focusedWindow, GetHWnd());
 280.890 +        }
 280.891 +        // Activate the new focused window.
 280.892 +        AwtWindow::SynthesizeWmActivate(TRUE, GetHWnd(), focusedWindow);
 280.893 +    }
 280.894 +    return TRUE;
 280.895 +}
 280.896 +
 280.897  MsgRouting AwtWindow::WmActivate(UINT nState, BOOL fMinimized, HWND opposite)
 280.898  {
 280.899      jint type;
 280.900  
 280.901      if (nState != WA_INACTIVE) {
 280.902 -        ::SetFocus((sm_focusOwner == NULL ||
 280.903 -                    AwtComponent::GetTopLevelParentForWindow(sm_focusOwner) !=
 280.904 -                    GetHWnd()) ? NULL : sm_focusOwner);
 280.905          type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS;
 280.906 -        AwtToolkit::GetInstance().
 280.907 -            InvokeFunctionLater(BounceActivation, this);
 280.908 -        sm_focusedWindow = GetHWnd();
 280.909 +        AwtComponent::SetFocusedWindow(GetHWnd());
 280.910      } else {
 280.911 +        // The owner is not necassarily getting WM_ACTIVATE(WA_INACTIVE).
 280.912 +        // So, initiate retaining the actualFocusedWindow.
 280.913 +        AwtFrame *owner = GetOwningFrameOrDialog();
 280.914 +        if (owner) {
 280.915 +            owner->CheckRetainActualFocusedWindow(opposite);
 280.916 +        }
 280.917 +
 280.918          if (m_grabbedWindow != NULL && !m_grabbedWindow->IsOneOfOwnersOf(this)) {
 280.919              m_grabbedWindow->Ungrab();
 280.920          }
 280.921          type = java_awt_event_WindowEvent_WINDOW_LOST_FOCUS;
 280.922 -        sm_focusedWindow = NULL;
 280.923 +        AwtComponent::SetFocusedWindow(NULL);
 280.924 +        sm_focusOwner = NULL;
 280.925      }
 280.926  
 280.927      SendWindowEvent(type, opposite);
 280.928      return mrConsume;
 280.929  }
 280.930  
 280.931 -void AwtWindow::BounceActivation(void *self) {
 280.932 -    AwtWindow *wSelf = (AwtWindow *)self;
 280.933 -
 280.934 -    if (::GetActiveWindow() == wSelf->GetHWnd()) {
 280.935 -        AwtFrame *owner = wSelf->GetOwningFrameOrDialog();
 280.936 -
 280.937 -        if (owner != NULL) {
 280.938 -            sm_suppressFocusAndActivation = TRUE;
 280.939 -            ::SetActiveWindow(owner->GetHWnd());
 280.940 -            ::SetFocus(owner->GetProxyFocusOwner());
 280.941 -            sm_suppressFocusAndActivation = FALSE;
 280.942 -        }
 280.943 -    }
 280.944 -}
 280.945 -
 280.946  MsgRouting AwtWindow::WmCreate()
 280.947  {
 280.948      return mrDoDefault;
 280.949 @@ -925,17 +1620,20 @@
 280.950  {
 280.951      /*
 280.952       * Original fix for 4810575. Modified for 6386592.
 280.953 -     * If an owned window (not frame/dialog) gets disposed we should synthesize
 280.954 +     * If a simple window gets disposed we should synthesize
 280.955       * WM_ACTIVATE for its nearest owner. This is not performed by default because
 280.956       * the owner frame/dialog is natively active.
 280.957       */
 280.958      HWND hwndSelf = GetHWnd();
 280.959 -    HWND hwndParent = ::GetParent(hwndSelf);
 280.960 -
 280.961 -    if (!show && IsSimpleWindow() && hwndSelf == sm_focusedWindow &&
 280.962 -        hwndParent != NULL && ::IsWindowVisible(hwndParent))
 280.963 +    HWND hwndOwner = ::GetParent(hwndSelf);
 280.964 +
 280.965 +    if (!show && IsSimpleWindow() && hwndSelf == AwtComponent::GetFocusedWindow() &&
 280.966 +        hwndOwner != NULL && ::IsWindowVisible(hwndOwner))
 280.967      {
 280.968 -        ::PostMessage(hwndParent, WM_ACTIVATE, (WPARAM)WA_ACTIVE, (LPARAM)hwndSelf);
 280.969 +        AwtFrame *owner = (AwtFrame*)AwtComponent::GetComponent(hwndOwner);
 280.970 +        if (owner != NULL) {
 280.971 +            owner->AwtSetActiveWindow();
 280.972 +        }
 280.973      }
 280.974  
 280.975      //Fixed 4842599: REGRESSION: JPopupMenu not Hidden Properly After Iconified and Deiconified
 280.976 @@ -1034,7 +1732,10 @@
 280.977   */
 280.978  MsgRouting AwtWindow::WmSize(UINT type, int w, int h)
 280.979  {
 280.980 +    currentWmSizeState = type;
 280.981 +
 280.982      if (type == SIZE_MINIMIZED) {
 280.983 +        UpdateSecurityWarningVisibility();
 280.984          return mrDoDefault;
 280.985      }
 280.986  
 280.987 @@ -1098,103 +1799,18 @@
 280.988      if (env->EnsureLocalCapacity(2) < 0) {
 280.989          return mrConsume;
 280.990      }
 280.991 -    jobject target = GetTarget(env);
 280.992 -    jstring warningString =
 280.993 -      (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID);
 280.994 -    if (warningString != NULL) {
 280.995 -        RECT r;
 280.996 -        ::CopyRect(&r, &lpncsp->rgrc[0]);
 280.997 -        retVal = static_cast<UINT>(DefWindowProc(WM_NCCALCSIZE, fCalcValidRects,
 280.998 -        reinterpret_cast<LPARAM>(lpncsp)));
 280.999 -
280.1000 -        /* Adjust non-client area for warning banner space. */
280.1001 -        m_warningRect.left = lpncsp->rgrc[0].left;
280.1002 -        m_warningRect.right = lpncsp->rgrc[0].right;
280.1003 -        m_warningRect.bottom = lpncsp->rgrc[0].bottom;
280.1004 -        m_warningRect.top =
280.1005 -            m_warningRect.bottom - ::GetSystemMetrics(SM_CYCAPTION);
280.1006 -        if (GetStyle() & WS_THICKFRAME) {
280.1007 -            m_warningRect.top -= 2;
280.1008 -        } else {
280.1009 -            m_warningRect.top += 2;
280.1010 -        }
280.1011 -
280.1012 -        lpncsp->rgrc[0].bottom = (m_warningRect.top >= lpncsp->rgrc[0].top)
280.1013 -            ? m_warningRect.top
280.1014 -            : lpncsp->rgrc[0].top;
280.1015 -
280.1016 -        /* Convert to window-relative coordinates. */
280.1017 -        ::OffsetRect(&m_warningRect, -r.left, -r.top);
280.1018 -
280.1019 -        /* Notify target of Insets change. */
280.1020 -        if (HasValidRect()) {
280.1021 -            UpdateInsets(NULL);
280.1022 -        }
280.1023 -
280.1024 -        mrRetVal = mrConsume;
280.1025 -    } else {
280.1026 -        // WM_NCCALCSIZE is usually in response to a resize, but
280.1027 -        // also can be triggered by SetWindowPos(SWP_FRAMECHANGED),
280.1028 -        // which means the insets will have changed - rnk 4/7/1998
280.1029 -        retVal = static_cast<UINT>(DefWindowProc(
280.1030 -        WM_NCCALCSIZE, fCalcValidRects, reinterpret_cast<LPARAM>(lpncsp)));
280.1031 -        if (HasValidRect()) {
280.1032 -            UpdateInsets(NULL);
280.1033 -        }
280.1034 -        mrRetVal = mrConsume;
280.1035 +    // WM_NCCALCSIZE is usually in response to a resize, but
280.1036 +    // also can be triggered by SetWindowPos(SWP_FRAMECHANGED),
280.1037 +    // which means the insets will have changed - rnk 4/7/1998
280.1038 +    retVal = static_cast<UINT>(DefWindowProc(
280.1039 +                WM_NCCALCSIZE, fCalcValidRects, reinterpret_cast<LPARAM>(lpncsp)));
280.1040 +    if (HasValidRect()) {
280.1041 +        UpdateInsets(NULL);
280.1042      }
280.1043 -    env->DeleteLocalRef(target);
280.1044 -    env->DeleteLocalRef(warningString);
280.1045 +    mrRetVal = mrConsume;
280.1046      return mrRetVal;
280.1047  }
280.1048  
280.1049 -MsgRouting AwtWindow::WmNcPaint(HRGN hrgn)
280.1050 -{
280.1051 -    DefWindowProc(WM_NCPAINT, (WPARAM)hrgn, 0);
280.1052 -
280.1053 -    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1054 -    if (env->EnsureLocalCapacity(2) < 0) {
280.1055 -        return mrConsume;
280.1056 -    }
280.1057 -    jobject target = GetTarget(env);
280.1058 -    jstring warningString =
280.1059 -      (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID);
280.1060 -    if (warningString != NULL) {
280.1061 -        RECT r;
280.1062 -        ::CopyRect(&r, &m_warningRect);
280.1063 -        HDC hDC = ::GetWindowDC(GetHWnd());
280.1064 -        DASSERT(hDC);
280.1065 -        int iSaveDC = ::SaveDC(hDC);
280.1066 -        VERIFY(::SelectClipRgn(hDC, NULL) != NULL);
280.1067 -        VERIFY(::FillRect(hDC, &m_warningRect, (HBRUSH)::GetStockObject(BLACK_BRUSH)));
280.1068 -
280.1069 -        if (GetStyle() & WS_THICKFRAME) {
280.1070 -            /* draw edge */
280.1071 -            VERIFY(::DrawEdge(hDC, &r, EDGE_RAISED, BF_TOP));
280.1072 -            r.top += 2;
280.1073 -            VERIFY(::DrawEdge(hDC, &r, EDGE_SUNKEN, BF_RECT));
280.1074 -            ::InflateRect(&r, -2, -2);
280.1075 -        }
280.1076 -
280.1077 -        /* draw warning text */
280.1078 -        LPCWSTR text = JNU_GetStringPlatformChars(env, warningString, NULL);
280.1079 -        VERIFY(::SetBkColor(hDC, ::GetSysColor(COLOR_BTNFACE)) != CLR_INVALID);
280.1080 -        VERIFY(::SetTextColor(hDC, ::GetSysColor(COLOR_BTNTEXT)) != CLR_INVALID);
280.1081 -        VERIFY(::SelectObject(hDC, ::GetStockObject(DEFAULT_GUI_FONT)) != NULL);
280.1082 -        VERIFY(::SetTextAlign(hDC, TA_LEFT | TA_BOTTOM) != GDI_ERROR);
280.1083 -        VERIFY(::ExtTextOut(hDC, r.left+2, r.bottom-1,
280.1084 -                             ETO_CLIPPED | ETO_OPAQUE,
280.1085 -                             &r, text, static_cast<UINT>(wcslen(text)), NULL));
280.1086 -        VERIFY(::RestoreDC(hDC, iSaveDC));
280.1087 -        ::ReleaseDC(GetHWnd(), hDC);
280.1088 -        JNU_ReleaseStringPlatformChars(env, warningString, text);
280.1089 -    }
280.1090 -
280.1091 -    env->DeleteLocalRef(target);
280.1092 -    env->DeleteLocalRef(warningString);
280.1093 -    return mrConsume;
280.1094 -}
280.1095 -
280.1096  MsgRouting AwtWindow::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
280.1097  {
280.1098      // If this window is blocked by modal dialog, return HTCLIENT for any point of it.
280.1099 @@ -1420,6 +2036,19 @@
280.1100      }
280.1101  }
280.1102  
280.1103 +HWND AwtWindow::GetTopmostModalBlocker(HWND window)
280.1104 +{
280.1105 +    HWND ret, blocker = NULL;
280.1106 +
280.1107 +    do {
280.1108 +        ret = blocker;
280.1109 +        blocker = AwtWindow::GetModalBlocker(window);
280.1110 +        window = blocker;
280.1111 +    } while (::IsWindow(blocker));
280.1112 +
280.1113 +    return ret;
280.1114 +}
280.1115 +
280.1116  void AwtWindow::FlashWindowEx(HWND hWnd, UINT count, DWORD timeout, DWORD flags) {
280.1117      FLASHWINFO fi;
280.1118      fi.cbSize = sizeof(fi);
280.1119 @@ -1430,6 +2059,38 @@
280.1120      ::FlashWindowEx(&fi);
280.1121  }
280.1122  
280.1123 +jboolean
280.1124 +AwtWindow::_RequestWindowFocus(void *param)
280.1125 +{
280.1126 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1127 +
280.1128 +    RequestWindowFocusStruct *rfs = (RequestWindowFocusStruct *)param;
280.1129 +    jobject self = rfs->component;
280.1130 +    jboolean isMouseEventCause = rfs->isMouseEventCause;
280.1131 +
280.1132 +    jboolean result = JNI_FALSE;
280.1133 +    AwtWindow *window = NULL;
280.1134 +
280.1135 +    PDATA pData;
280.1136 +    JNI_CHECK_NULL_GOTO(self, "peer", ret);
280.1137 +    pData = JNI_GET_PDATA(self);
280.1138 +    if (pData == NULL) {
280.1139 +        // do nothing just return false
280.1140 +        goto ret;
280.1141 +    }
280.1142 +
280.1143 +    window = (AwtWindow *)pData;
280.1144 +    if (::IsWindow(window->GetHWnd())) {
280.1145 +        result = (jboolean)window->SendMessage(WM_AWT_WINDOW_SETACTIVE, (WPARAM)isMouseEventCause, 0);
280.1146 +    }
280.1147 +ret:
280.1148 +    env->DeleteGlobalRef(self);
280.1149 +
280.1150 +    delete rfs;
280.1151 +
280.1152 +    return result;
280.1153 +}
280.1154 +
280.1155  void AwtWindow::_ToFront(void *param)
280.1156  {
280.1157      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1158 @@ -1839,6 +2500,216 @@
280.1159      //Does nothing for windows, is overriden for frames and dialogs
280.1160  }
280.1161  
280.1162 +void AwtWindow::RedrawWindow()
280.1163 +{
280.1164 +    if (isOpaque()) {
280.1165 +        ::RedrawWindow(GetHWnd(), NULL, NULL,
280.1166 +                RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
280.1167 +    } else {
280.1168 +        ::EnterCriticalSection(&contentBitmapCS);
280.1169 +        if (hContentBitmap != NULL) {
280.1170 +            UpdateWindowImpl(contentWidth, contentHeight, hContentBitmap);
280.1171 +        }
280.1172 +        ::LeaveCriticalSection(&contentBitmapCS);
280.1173 +    }
280.1174 +}
280.1175 +
280.1176 +void AwtWindow::SetTranslucency(BYTE opacity, BOOL opaque)
280.1177 +{
280.1178 +    BYTE old_opacity = getOpacity();
280.1179 +    BOOL old_opaque = isOpaque();
280.1180 +
280.1181 +    if (opacity == old_opacity && opaque == old_opaque) {
280.1182 +        return;
280.1183 +    }
280.1184 +
280.1185 +    setOpacity(opacity);
280.1186 +    setOpaque(opaque);
280.1187 +
280.1188 +    HWND hwnd = GetHWnd();
280.1189 +
280.1190 +    LONG ex_style = ::GetWindowLong(hwnd, GWL_EXSTYLE);
280.1191 +
280.1192 +    if (opaque != old_opaque) {
280.1193 +        ::EnterCriticalSection(&contentBitmapCS);
280.1194 +        if (hContentBitmap != NULL) {
280.1195 +            ::DeleteObject(hContentBitmap);
280.1196 +            hContentBitmap = NULL;
280.1197 +        }
280.1198 +        ::LeaveCriticalSection(&contentBitmapCS);
280.1199 +    }
280.1200 +
280.1201 +    if (opaque && opacity == 0xff) {
280.1202 +        // Turn off all the effects
280.1203 +        ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style & ~WS_EX_LAYERED);
280.1204 +        // Ask the window to repaint itself and all the children
280.1205 +        RedrawWindow();
280.1206 +    } else {
280.1207 +        // We're going to enable some effects
280.1208 +        if (!(ex_style & WS_EX_LAYERED)) {
280.1209 +            ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style | WS_EX_LAYERED);
280.1210 +        } else {
280.1211 +            if ((opaque && opacity < 0xff) ^ (old_opaque && old_opacity < 0xff)) {
280.1212 +                // _One_ of the modes uses the SetLayeredWindowAttributes.
280.1213 +                // Need to reset the style in this case.
280.1214 +                // If both modes are simple (i.e. just changing the opacity level),
280.1215 +                // no need to reset the style.
280.1216 +                ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style & ~WS_EX_LAYERED);
280.1217 +                ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style | WS_EX_LAYERED);
280.1218 +            }
280.1219 +        }
280.1220 +
280.1221 +        if (opaque) {
280.1222 +            // Simple opacity mode
280.1223 +            ::SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), opacity, LWA_ALPHA);
280.1224 +        }
280.1225 +    }
280.1226 +}
280.1227 +
280.1228 +static HBITMAP CreateBitmapFromRaster(JNIEnv* env, jintArray raster, jint w, jint h)
280.1229 +{
280.1230 +    HBITMAP image = NULL;
280.1231 +    if (raster != NULL) {
280.1232 +        int* rasterBuffer = NULL;
280.1233 +        try {
280.1234 +            rasterBuffer = (int *)env->GetPrimitiveArrayCritical(raster, 0);
280.1235 +            JNI_CHECK_NULL_GOTO(rasterBuffer, "raster data", done);
280.1236 +            image = BitmapUtil::CreateBitmapFromARGBPre(w, h, w*4, rasterBuffer);
280.1237 +        } catch (...) {
280.1238 +            if (rasterBuffer != NULL) {
280.1239 +                env->ReleasePrimitiveArrayCritical(raster, rasterBuffer, 0);
280.1240 +            }
280.1241 +            throw;
280.1242 +        }
280.1243 +        if (rasterBuffer != NULL) {
280.1244 +            env->ReleasePrimitiveArrayCritical(raster, rasterBuffer, 0);
280.1245 +        }
280.1246 +    }
280.1247 +done:
280.1248 +    return image;
280.1249 +}
280.1250 +
280.1251 +void AwtWindow::UpdateWindowImpl(int width, int height, HBITMAP hBitmap)
280.1252 +{
280.1253 +    if (isOpaque()) {
280.1254 +        return;
280.1255 +    }
280.1256 +
280.1257 +    HWND hWnd = GetHWnd();
280.1258 +    HDC hdcDst = ::GetDC(NULL);
280.1259 +    HDC hdcSrc = ::CreateCompatibleDC(NULL);
280.1260 +    HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hdcSrc, hBitmap);
280.1261 +
280.1262 +    //XXX: this code doesn't paint the children (say, the java.awt.Button)!
280.1263 +    //So, if we ever want to support HWs here, we need to repaint them
280.1264 +    //in some other way...
280.1265 +    //::SendMessage(hWnd, WM_PRINT, (WPARAM)hdcSrc, /*PRF_CHECKVISIBLE |*/
280.1266 +    //      PRF_CHILDREN /*| PRF_CLIENT | PRF_NONCLIENT*/);
280.1267 +
280.1268 +    POINT ptSrc;
280.1269 +    ptSrc.x = ptSrc.y = 0;
280.1270 +
280.1271 +    RECT rect;
280.1272 +    POINT ptDst;
280.1273 +    SIZE size;
280.1274 +
280.1275 +    ::GetWindowRect(hWnd, &rect);
280.1276 +    ptDst.x = rect.left;
280.1277 +    ptDst.y = rect.top;
280.1278 +    size.cx = width;
280.1279 +    size.cy = height;
280.1280 +
280.1281 +    BLENDFUNCTION bf;
280.1282 +
280.1283 +    bf.SourceConstantAlpha = getOpacity();
280.1284 +    bf.AlphaFormat = AC_SRC_ALPHA;
280.1285 +    bf.BlendOp = AC_SRC_OVER;
280.1286 +    bf.BlendFlags = 0;
280.1287 +
280.1288 +    ::UpdateLayeredWindow(hWnd, hdcDst, &ptDst, &size, hdcSrc, &ptSrc,
280.1289 +            RGB(0, 0, 0), &bf, ULW_ALPHA);
280.1290 +
280.1291 +    ::ReleaseDC(NULL, hdcDst);
280.1292 +    ::SelectObject(hdcSrc, hOldBitmap);
280.1293 +    ::DeleteDC(hdcSrc);
280.1294 +}
280.1295 +
280.1296 +void AwtWindow::UpdateWindow(JNIEnv* env, jintArray data, int width, int height,
280.1297 +                             HBITMAP hNewBitmap)
280.1298 +{
280.1299 +    if (isOpaque()) {
280.1300 +        return;
280.1301 +    }
280.1302 +
280.1303 +    HBITMAP hBitmap;
280.1304 +    if (hNewBitmap == NULL) {
280.1305 +        if (data == NULL) {
280.1306 +            return;
280.1307 +        }
280.1308 +        hBitmap = CreateBitmapFromRaster(env, data, width, height);
280.1309 +        if (hBitmap == NULL) {
280.1310 +            return;
280.1311 +        }
280.1312 +    } else {
280.1313 +        hBitmap = hNewBitmap;
280.1314 +    }
280.1315 +
280.1316 +    ::EnterCriticalSection(&contentBitmapCS);
280.1317 +    if (hContentBitmap != NULL) {
280.1318 +        ::DeleteObject(hContentBitmap);
280.1319 +    }
280.1320 +    hContentBitmap = hBitmap;
280.1321 +    contentWidth = width;
280.1322 +    contentHeight = height;
280.1323 +    UpdateWindowImpl(width, height, hBitmap);
280.1324 +    ::LeaveCriticalSection(&contentBitmapCS);
280.1325 +}
280.1326 +
280.1327 +void AwtWindow::FillBackground(HDC hMemoryDC, SIZE &size)
280.1328 +{
280.1329 +    if (isOpaque()) {
280.1330 +        AwtCanvas::FillBackground(hMemoryDC, size);
280.1331 +    }
280.1332 +}
280.1333 +
280.1334 +void AwtWindow::FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha)
280.1335 +{
280.1336 +    if (isOpaque()) {
280.1337 +        AwtCanvas::FillAlpha(bitmapBits, size, alpha);
280.1338 +    }
280.1339 +}
280.1340 +
280.1341 +/*
280.1342 + * Fixed 6353381: it's improved fix for 4792958
280.1343 + * which was backed-out to avoid 5059656
280.1344 + */
280.1345 +BOOL AwtWindow::HasValidRect()
280.1346 +{
280.1347 +    RECT inside;
280.1348 +    RECT outside;
280.1349 +
280.1350 +    if (::IsIconic(GetHWnd())) {
280.1351 +        return FALSE;
280.1352 +    }
280.1353 +
280.1354 +    ::GetClientRect(GetHWnd(), &inside);
280.1355 +    ::GetWindowRect(GetHWnd(), &outside);
280.1356 +
280.1357 +    BOOL isZeroClientArea = (inside.right == 0 && inside.bottom == 0);
280.1358 +    BOOL isInvalidLocation = ((outside.left == -32000 && outside.top == -32000) || // Win2k && WinXP
280.1359 +                              (outside.left == 32000 && outside.top == 32000) || // Win95 && Win98
280.1360 +                              (outside.left == 3000 && outside.top == 3000)); // Win95 && Win98
280.1361 +
280.1362 +    // the bounds correspond to iconic state
280.1363 +    if (isZeroClientArea && isInvalidLocation)
280.1364 +    {
280.1365 +        return FALSE;
280.1366 +    }
280.1367 +
280.1368 +    return TRUE;
280.1369 +}
280.1370 +
280.1371 +
280.1372  void AwtWindow::_SetIconImagesData(void * param)
280.1373  {
280.1374      JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1375 @@ -1940,11 +2811,14 @@
280.1376  
280.1377      window->m_isFocusableWindow = isFocusableWindow;
280.1378  
280.1379 -    if (!window->m_isFocusableWindow) {
280.1380 -        LONG isPopup = window->GetStyle() & WS_POPUP;
280.1381 -        window->SetStyleEx(window->GetStyleEx() | (isPopup ? 0 : WS_EX_APPWINDOW) | AWT_WS_EX_NOACTIVATE);
280.1382 -    } else {
280.1383 -        window->SetStyleEx(window->GetStyleEx() & ~WS_EX_APPWINDOW & ~AWT_WS_EX_NOACTIVATE);
280.1384 +    // A simple window is permanently set to WS_EX_NOACTIVATE
280.1385 +    if (!window->IsSimpleWindow()) {
280.1386 +        if (!window->m_isFocusableWindow) {
280.1387 +            LONG isPopup = window->GetStyle() & WS_POPUP;
280.1388 +            window->SetStyleEx(window->GetStyleEx() | (isPopup ? 0 : WS_EX_APPWINDOW) | WS_EX_NOACTIVATE);
280.1389 +        } else {
280.1390 +            window->SetStyleEx(window->GetStyleEx() & ~WS_EX_APPWINDOW & ~WS_EX_NOACTIVATE);
280.1391 +        }
280.1392      }
280.1393  
280.1394    ret:
280.1395 @@ -2009,36 +2883,68 @@
280.1396      env->DeleteGlobalRef(self);
280.1397  }
280.1398  
280.1399 -/*
280.1400 - * Fixed 6353381: it's improved fix for 4792958
280.1401 - * which was backed-out to avoid 5059656
280.1402 - */
280.1403 -BOOL AwtWindow::HasValidRect()
280.1404 +void AwtWindow::_SetOpacity(void* param)
280.1405  {
280.1406 -    RECT inside;
280.1407 -    RECT outside;
280.1408 -
280.1409 -    if (::IsIconic(GetHWnd())) {
280.1410 -        return FALSE;
280.1411 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1412 +
280.1413 +    OpacityStruct *os = (OpacityStruct *)param;
280.1414 +    jobject self = os->window;
280.1415 +    BYTE iOpacity = (BYTE)os->iOpacity;
280.1416 +
280.1417 +    PDATA pData;
280.1418 +    JNI_CHECK_PEER_GOTO(self, ret);
280.1419 +    AwtWindow *window = (AwtWindow *)pData;
280.1420 +
280.1421 +    window->SetTranslucency(iOpacity, window->isOpaque());
280.1422 +
280.1423 +  ret:
280.1424 +    env->DeleteGlobalRef(self);
280.1425 +    delete os;
280.1426 +}
280.1427 +
280.1428 +void AwtWindow::_SetOpaque(void* param)
280.1429 +{
280.1430 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1431 +
280.1432 +    OpaqueStruct *os = (OpaqueStruct *)param;
280.1433 +    jobject self = os->window;
280.1434 +    BOOL isOpaque = (BOOL)os->isOpaque;
280.1435 +
280.1436 +    PDATA pData;
280.1437 +    JNI_CHECK_PEER_GOTO(self, ret);
280.1438 +    AwtWindow *window = (AwtWindow *)pData;
280.1439 +
280.1440 +    window->SetTranslucency(window->getOpacity(), isOpaque);
280.1441 +
280.1442 +  ret:
280.1443 +    env->DeleteGlobalRef(self);
280.1444 +    delete os;
280.1445 +}
280.1446 +
280.1447 +void AwtWindow::_UpdateWindow(void* param)
280.1448 +{
280.1449 +    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1450 +
280.1451 +    UpdateWindowStruct *uws = (UpdateWindowStruct *)param;
280.1452 +    jobject self = uws->window;
280.1453 +    jintArray data = uws->data;
280.1454 +
280.1455 +    PDATA pData;
280.1456 +    JNI_CHECK_PEER_GOTO(self, ret);
280.1457 +    AwtWindow *window = (AwtWindow *)pData;
280.1458 +
280.1459 +    window->UpdateWindow(env, data, (int)uws->width, (int)uws->height,
280.1460 +                         uws->hBitmap);
280.1461 +
280.1462 +  ret:
280.1463 +    env->DeleteGlobalRef(self);
280.1464 +    if (data != NULL) {
280.1465 +        env->DeleteGlobalRef(data);
280.1466      }
280.1467 -
280.1468 -    ::GetClientRect(GetHWnd(), &inside);
280.1469 -    ::GetWindowRect(GetHWnd(), &outside);
280.1470 -
280.1471 -    BOOL isZeroClientArea = (inside.right == 0 && inside.bottom == 0);
280.1472 -    BOOL isInvalidLocation = ((outside.left == -32000 && outside.top == -32000) || // Win2k && WinXP
280.1473 -                              (outside.left == 32000 && outside.top == 32000) || // Win95 && Win98
280.1474 -                              (outside.left == 3000 && outside.top == 3000)); // Win95 && Win98
280.1475 -
280.1476 -    // the bounds correspond to iconic state
280.1477 -    if (isZeroClientArea && isInvalidLocation)
280.1478 -    {
280.1479 -        return FALSE;
280.1480 -    }
280.1481 -
280.1482 -    return TRUE;
280.1483 +    delete uws;
280.1484  }
280.1485  
280.1486 +
280.1487  extern "C" {
280.1488  
280.1489  /*
280.1490 @@ -2055,8 +2961,16 @@
280.1491          env->GetFieldID(cls, "warningString", "Ljava/lang/String;");
280.1492      AwtWindow::locationByPlatformID =
280.1493          env->GetFieldID(cls, "locationByPlatform", "Z");
280.1494 +    AwtWindow::securityWarningWidthID =
280.1495 +        env->GetFieldID(cls, "securityWarningWidth", "I");
280.1496 +    AwtWindow::securityWarningHeightID =
280.1497 +        env->GetFieldID(cls, "securityWarningHeight", "I");
280.1498 +    AwtWindow::getWarningStringMID =
280.1499 +        env->GetMethodID(cls, "getWarningString", "()Ljava/lang/String;");
280.1500      AwtWindow::autoRequestFocusID =
280.1501          env->GetFieldID(cls, "autoRequestFocus", "Z");
280.1502 +    AwtWindow::calculateSecurityWarningPositionMID =
280.1503 +        env->GetMethodID(cls, "calculateSecurityWarningPosition", "(DDDD)Ljava/awt/geom/Point2D;");
280.1504  
280.1505      CATCH_BAD_ALLOC;
280.1506  }
280.1507 @@ -2489,4 +3403,138 @@
280.1508      CATCH_BAD_ALLOC;
280.1509  }
280.1510  
280.1511 +/*
280.1512 + * Class:     sun_awt_windows_WWindowPeer
280.1513 + * Method:    setOpacity
280.1514 + * Signature: (I)V
280.1515 + */
280.1516 +JNIEXPORT void JNICALL
280.1517 +Java_sun_awt_windows_WWindowPeer_setOpacity(JNIEnv *env, jobject self,
280.1518 +                                              jint iOpacity)
280.1519 +{
280.1520 +    TRY;
280.1521 +
280.1522 +    OpacityStruct *os = new OpacityStruct;
280.1523 +    os->window = env->NewGlobalRef(self);
280.1524 +    os->iOpacity = iOpacity;
280.1525 +
280.1526 +    AwtToolkit::GetInstance().SyncCall(AwtWindow::_SetOpacity, os);
280.1527 +    // global refs and mds are deleted in _SetMinSize
280.1528 +
280.1529 +    CATCH_BAD_ALLOC;
280.1530 +}
280.1531 +
280.1532 +/*
280.1533 + * Class:     sun_awt_windows_WWindowPeer
280.1534 + * Method:    setOpaqueImpl
280.1535 + * Signature: (Z)V
280.1536 + */
280.1537 +JNIEXPORT void JNICALL
280.1538 +Java_sun_awt_windows_WWindowPeer_setOpaqueImpl(JNIEnv *env, jobject self,
280.1539 +                                              jboolean isOpaque)
280.1540 +{
280.1541 +    TRY;
280.1542 +
280.1543 +    OpaqueStruct *os = new OpaqueStruct;
280.1544 +    os->window = env->NewGlobalRef(self);
280.1545 +    os->isOpaque = isOpaque;
280.1546 +
280.1547 +    AwtToolkit::GetInstance().SyncCall(AwtWindow::_SetOpaque, os);
280.1548 +    // global refs and mds are deleted in _SetMinSize
280.1549 +
280.1550 +    CATCH_BAD_ALLOC;
280.1551 +}
280.1552 +
280.1553 +/*
280.1554 + * Class:     sun_awt_windows_WWindowPeer
280.1555 + * Method:    updateWindowImpl
280.1556 + * Signature: ([III)V
280.1557 + */
280.1558 +JNIEXPORT void JNICALL
280.1559 +Java_sun_awt_windows_WWindowPeer_updateWindowImpl(JNIEnv *env, jobject self,
280.1560 +                                                  jintArray data,
280.1561 +                                                  jint width, jint height)
280.1562 +{
280.1563 +    TRY;
280.1564 +
280.1565 +    UpdateWindowStruct *uws = new UpdateWindowStruct;
280.1566 +    uws->window = env->NewGlobalRef(self);
280.1567 +    uws->data = (jintArray)env->NewGlobalRef(data);
280.1568 +    uws->hBitmap = NULL;
280.1569 +    uws->width = width;
280.1570 +    uws->height = height;
280.1571 +
280.1572 +    AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws);
280.1573 +    // global refs and mds are deleted in _UpdateWindow
280.1574 +
280.1575 +    CATCH_BAD_ALLOC;
280.1576 +}
280.1577 +
280.1578 +/**
280.1579 + * This method is called from the WGL pipeline when it needs to update
280.1580 + * the layered window WindowPeer's C++ level object.
280.1581 + */
280.1582 +void AwtWindow_UpdateWindow(JNIEnv *env, jobject peer,
280.1583 +                            jint width, jint height, HBITMAP hBitmap)
280.1584 +{
280.1585 +    TRY;
280.1586 +
280.1587 +    UpdateWindowStruct *uws = new UpdateWindowStruct;
280.1588 +    uws->window = env->NewGlobalRef(peer);
280.1589 +    uws->data = NULL;
280.1590 +    uws->hBitmap = hBitmap;
280.1591 +    uws->width = width;
280.1592 +    uws->height = height;
280.1593 +
280.1594 +    AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws);
280.1595 +    // global refs and mds are deleted in _UpdateWindow
280.1596 +
280.1597 +    CATCH_BAD_ALLOC;
280.1598 +}
280.1599 +
280.1600 +/*
280.1601 + * Class:     sun_awt_windows_WComponentPeer
280.1602 + * Method:    requestFocus
280.1603 + * Signature: (Z)Z
280.1604 + */
280.1605 +JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WWindowPeer_requestWindowFocus
280.1606 +    (JNIEnv *env, jobject self, jboolean isMouseEventCause)
280.1607 +{
280.1608 +    TRY;
280.1609 +
280.1610 +    jobject selfGlobalRef = env->NewGlobalRef(self);
280.1611 +
280.1612 +    RequestWindowFocusStruct *rfs = new RequestWindowFocusStruct;
280.1613 +    rfs->component = selfGlobalRef;
280.1614 +    rfs->isMouseEventCause = isMouseEventCause;
280.1615 +
280.1616 +    return (jboolean)AwtToolkit::GetInstance().SyncCall(
280.1617 +        (void*(*)(void*))AwtWindow::_RequestWindowFocus, rfs);
280.1618 +    // global refs and rfs are deleted in _RequestWindowFocus
280.1619 +
280.1620 +    CATCH_BAD_ALLOC_RET(JNI_FALSE);
280.1621 +}
280.1622 +
280.1623 +/*
280.1624 + * Class:     sun_awt_windows_WWindowPeer
280.1625 + * Method:    repositionSecurityWarning
280.1626 + * Signature: ()V
280.1627 + */
280.1628 +JNIEXPORT void JNICALL
280.1629 +Java_sun_awt_windows_WWindowPeer_repositionSecurityWarning(JNIEnv *env,
280.1630 +        jobject self)
280.1631 +{
280.1632 +    TRY;
280.1633 +
280.1634 +    RepositionSecurityWarningStruct *rsws =
280.1635 +        new RepositionSecurityWarningStruct;
280.1636 +    rsws->window = env->NewGlobalRef(self);
280.1637 +
280.1638 +    AwtToolkit::GetInstance().InvokeFunction(
280.1639 +            AwtWindow::_RepositionSecurityWarning, rsws);
280.1640 +    // global refs and mds are deleted in _RepositionSecurityWarning
280.1641 +
280.1642 +    CATCH_BAD_ALLOC;
280.1643 +}
280.1644 +
280.1645  } /* extern "C" */
   281.1 --- a/src/windows/native/sun/windows/awt_Window.h	Thu Apr 16 17:42:00 2009 +0100
   281.2 +++ b/src/windows/native/sun/windows/awt_Window.h	Thu Apr 16 19:10:32 2009 -0700
   281.3 @@ -1,5 +1,5 @@
   281.4  /*
   281.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   281.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   281.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   281.8   *
   281.9   * This code is free software; you can redistribute it and/or modify it
  281.10 @@ -34,14 +34,12 @@
  281.11  // property name tagging windows disabled by modality
  281.12  static LPCTSTR ModalBlockerProp = TEXT("SunAwtModalBlockerProp");
  281.13  static LPCTSTR ModalDialogPeerProp = TEXT("SunAwtModalDialogPeerProp");
  281.14 +static LPCTSTR NativeDialogWndProcProp = TEXT("SunAwtNativeDialogWndProcProp");
  281.15  
  281.16  #ifndef WH_MOUSE_LL
  281.17  #define WH_MOUSE_LL 14
  281.18  #endif
  281.19  
  281.20 -// WS_EX_NOACTIVATE is not defined in the headers we build with
  281.21 -#define AWT_WS_EX_NOACTIVATE        0x08000000L
  281.22 -
  281.23  class AwtFrame;
  281.24  
  281.25  /************************************************************************
  281.26 @@ -56,6 +54,8 @@
  281.27      static jfieldID locationByPlatformID;
  281.28      static jfieldID screenID; /* screen number passed over from WindowPeer */
  281.29      static jfieldID autoRequestFocusID;
  281.30 +    static jfieldID securityWarningWidthID;
  281.31 +    static jfieldID securityWarningHeightID;
  281.32  
  281.33      // The coordinates at the peer.
  281.34      static jfieldID sysXID;
  281.35 @@ -63,6 +63,9 @@
  281.36      static jfieldID sysWID;
  281.37      static jfieldID sysHID;
  281.38  
  281.39 +    static jmethodID getWarningStringMID;
  281.40 +    static jmethodID calculateSecurityWarningPositionMID;
  281.41 +
  281.42      AwtWindow();
  281.43      virtual ~AwtWindow();
  281.44  
  281.45 @@ -152,11 +155,12 @@
  281.46      static void SetModalBlocker(HWND window, HWND blocker);
  281.47      static void SetAndActivateModalBlocker(HWND window, HWND blocker);
  281.48  
  281.49 +    static HWND GetTopmostModalBlocker(HWND window);
  281.50 +
  281.51      /*
  281.52       * Windows message handler functions
  281.53       */
  281.54      virtual MsgRouting WmActivate(UINT nState, BOOL fMinimized, HWND opposite);
  281.55 -    static void BounceActivation(void *self); // used by WmActivate
  281.56      virtual MsgRouting WmCreate();
  281.57      virtual MsgRouting WmClose();
  281.58      virtual MsgRouting WmDestroy();
  281.59 @@ -169,19 +173,36 @@
  281.60      virtual MsgRouting WmSettingChange(UINT wFlag, LPCTSTR pszSection);
  281.61      virtual MsgRouting WmNcCalcSize(BOOL fCalcValidRects,
  281.62                                      LPNCCALCSIZE_PARAMS lpncsp, LRESULT& retVal);
  281.63 -    virtual MsgRouting WmNcPaint(HRGN hrgn);
  281.64      virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal);
  281.65      virtual MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button);
  281.66      virtual MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal);
  281.67      virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  281.68      virtual MsgRouting WmWindowPosChanging(LPARAM windowPos);
  281.69      virtual MsgRouting WmWindowPosChanged(LPARAM windowPos);
  281.70 +    virtual MsgRouting WmTimer(UINT_PTR timerID);
  281.71  
  281.72      virtual MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
  281.73      virtual void WindowResized();
  281.74  
  281.75 +    static jboolean _RequestWindowFocus(void *param);
  281.76 +
  281.77 +    virtual BOOL AwtSetActiveWindow(BOOL isMouseEventCause = FALSE, UINT hittest = HTCLIENT);
  281.78 +
  281.79 +    // Execute on Toolkit only.
  281.80 +    INLINE static LRESULT SynthesizeWmActivate(BOOL doActivate, HWND targetHWnd, HWND oppositeHWnd) {
  281.81 +        if (::IsWindowVisible(targetHWnd)) {
  281.82 +            return ::SendMessage(targetHWnd, WM_ACTIVATE,
  281.83 +                                 MAKEWPARAM(doActivate ? WA_ACTIVE : WA_INACTIVE, FALSE),
  281.84 +                                 (LPARAM) oppositeHWnd);
  281.85 +        }
  281.86 +        return 1; // if not processed
  281.87 +    }
  281.88 +
  281.89      void moveToDefaultLocation(); /* moves Window to X,Y specified by Window Manger */
  281.90  
  281.91 +    void UpdateWindow(JNIEnv* env, jintArray data, int width, int height,
  281.92 +                      HBITMAP hNewBitmap = NULL);
  281.93 +
  281.94      INLINE virtual BOOL IsTopLevel() { return TRUE; }
  281.95      static AwtWindow * GetGrabbedWindow() { return m_grabbedWindow; }
  281.96  
  281.97 @@ -204,11 +225,25 @@
  281.98      static void _SetModalExcludedNativeProp(void *param);
  281.99      static void _ModalDisable(void *param);
 281.100      static void _ModalEnable(void *param);
 281.101 +    static void _SetOpacity(void* param);
 281.102 +    static void _SetOpaque(void* param);
 281.103 +    static void _UpdateWindow(void* param);
 281.104 +    static void _RepositionSecurityWarning(void* param);
 281.105  
 281.106      inline static BOOL IsResizing() {
 281.107          return sm_resizing;
 281.108      }
 281.109  
 281.110 +    virtual void CreateHWnd(JNIEnv *env, LPCWSTR title,
 281.111 +            DWORD windowStyle, DWORD windowExStyle,
 281.112 +            int x, int y, int w, int h,
 281.113 +            HWND hWndParent, HMENU hMenu,
 281.114 +            COLORREF colorForeground, COLORREF colorBackground,
 281.115 +            jobject peer);
 281.116 +    virtual void DestroyHWnd();
 281.117 +
 281.118 +    static void FocusedWindowChanged(HWND from, HWND to);
 281.119 +
 281.120  private:
 281.121      static int ms_instanceCounter;
 281.122      static HHOOK ms_hCBTFilter;
 281.123 @@ -228,6 +263,79 @@
 281.124                                         // from its hierarchy when shown. Currently applied to instances of
 281.125                                         // javax/swing/Popup$HeavyWeightWindow class.
 281.126  
 281.127 +    BYTE m_opacity;         // The opacity level. == 0xff by default (when opacity mode is disabled)
 281.128 +    BOOL m_opaque;          // Whether the window uses the perpixel translucency (false), or not (true).
 281.129 +
 281.130 +    inline BYTE getOpacity() {
 281.131 +        return m_opacity;
 281.132 +    }
 281.133 +    inline void setOpacity(BYTE opacity) {
 281.134 +        m_opacity = opacity;
 281.135 +    }
 281.136 +
 281.137 +    inline BOOL isOpaque() {
 281.138 +        return m_opaque;
 281.139 +    }
 281.140 +    inline void setOpaque(BOOL opaque) {
 281.141 +        m_opaque = opaque;
 281.142 +    }
 281.143 +
 281.144 +    CRITICAL_SECTION contentBitmapCS;
 281.145 +    HBITMAP hContentBitmap;
 281.146 +    UINT contentWidth;
 281.147 +    UINT contentHeight;
 281.148 +
 281.149 +    void SetTranslucency(BYTE opacity, BOOL opaque);
 281.150 +    void UpdateWindow(int width, int height, HBITMAP hBitmap);
 281.151 +    void UpdateWindowImpl(int width, int height, HBITMAP hBitmap);
 281.152 +    void RedrawWindow();
 281.153 +
 281.154 +    static UINT untrustedWindowsCounter;
 281.155 +
 281.156 +    WCHAR * warningString;
 281.157 +
 281.158 +    // The warning icon
 281.159 +    HWND warningWindow;
 281.160 +    // The tooltip that appears when hovering the icon
 281.161 +    HWND securityTooltipWindow;
 281.162 +
 281.163 +    UINT warningWindowWidth;
 281.164 +    UINT warningWindowHeight;
 281.165 +    void InitSecurityWarningSize(JNIEnv *env);
 281.166 +    HICON GetSecurityWarningIcon();
 281.167 +
 281.168 +    void CreateWarningWindow(JNIEnv *env);
 281.169 +    void DestroyWarningWindow();
 281.170 +    static LPCTSTR GetWarningWindowClassName();
 281.171 +    void FillWarningWindowClassInfo(WNDCLASS *lpwc);
 281.172 +    void RegisterWarningWindowClass();
 281.173 +    void UnregisterWarningWindowClass();
 281.174 +    static LRESULT CALLBACK WarningWindowProc(
 281.175 +            HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 281.176 +
 281.177 +    static void PaintWarningWindow(HWND warningWindow);
 281.178 +    static void PaintWarningWindow(HWND warningWindow, HDC hdc);
 281.179 +    void RepaintWarningWindow();
 281.180 +    void CalculateWarningWindowBounds(JNIEnv *env, LPRECT rect);
 281.181 +
 281.182 +    void AnimateSecurityWarning(bool enable);
 281.183 +    UINT securityWarningAnimationStage;
 281.184 +
 281.185 +    enum AnimationKind {
 281.186 +        akNone, akShow, akPreHide, akHide
 281.187 +    };
 281.188 +
 281.189 +    AnimationKind securityAnimationKind;
 281.190 +
 281.191 +    void StartSecurityAnimation(AnimationKind kind);
 281.192 +    void StopSecurityAnimation();
 281.193 +
 281.194 +    void RepositionSecurityWarning(JNIEnv *env);
 281.195 +
 281.196 +public:
 281.197 +    void UpdateSecurityWarningVisibility();
 281.198 +    static bool IsWarningWindow(HWND hWnd);
 281.199 +
 281.200  protected:
 281.201      BOOL m_isResizable;
 281.202      static AwtWindow* m_grabbedWindow; // Current grabbing window
 281.203 @@ -236,6 +344,16 @@
 281.204      BOOL m_iconInherited;     /* TRUE if icon is inherited from the owner */
 281.205      BOOL m_filterFocusAndActivation; /* Used in the WH_CBT hook */
 281.206  
 281.207 +    //These are used in AwtComponent::CreatePrintedPixels. They are overridden
 281.208 +    //here to handle non-opaque windows.
 281.209 +    virtual void FillBackground(HDC hMemoryDC, SIZE &size);
 281.210 +    virtual void FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha);
 281.211 +
 281.212 +    inline BOOL IsUntrusted() {
 281.213 +        return warningString != NULL;
 281.214 +    }
 281.215 +
 281.216 +    UINT currentWmSizeState;
 281.217  
 281.218  private:
 281.219      int m_screenNum;
   282.1 --- a/src/windows/native/sun/windows/awtmsg.h	Thu Apr 16 17:42:00 2009 +0100
   282.2 +++ b/src/windows/native/sun/windows/awtmsg.h	Thu Apr 16 19:10:32 2009 -0700
   282.3 @@ -1,5 +1,5 @@
   282.4  /*
   282.5 - * Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
   282.6 + * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
   282.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   282.8   *
   282.9   * This code is free software; you can redistribute it and/or modify it
  282.10 @@ -194,6 +194,7 @@
  282.11      WM_AWT_COMPONENT_SHOW,
  282.12      WM_AWT_COMPONENT_HIDE,
  282.13      WM_AWT_COMPONENT_SETFOCUS,
  282.14 +    WM_AWT_WINDOW_SETACTIVE,
  282.15      WM_AWT_LIST_SETMULTISELECT,
  282.16      WM_AWT_HANDLE_EVENT,
  282.17      WM_AWT_PRINT_COMPONENT,
   283.1 Binary file src/windows/native/sun/windows/security_warning.ico has changed
   284.1 Binary file src/windows/native/sun/windows/security_warning_bw.ico has changed
   285.1 Binary file src/windows/native/sun/windows/security_warning_int.ico has changed
   286.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   286.2 +++ b/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java	Thu Apr 16 19:10:32 2009 -0700
   286.3 @@ -0,0 +1,392 @@
   286.4 +/*
   286.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   286.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   286.7 + *
   286.8 + * This code is free software; you can redistribute it and/or modify it
   286.9 + * under the terms of the GNU General Public License version 2 only, as
  286.10 + * published by the Free Software Foundation.
  286.11 + *
  286.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  286.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  286.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  286.15 + * version 2 for more details (a copy is included in the LICENSE file that
  286.16 + * accompanied this code).
  286.17 + *
  286.18 + * You should have received a copy of the GNU General Public License version
  286.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  286.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  286.21 + *
  286.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  286.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  286.24 + * have any questions.
  286.25 + */
  286.26 +
  286.27 +/*
  286.28 +  @test %W% %E%
  286.29 +  @bug 6818312
  286.30 +  @summary The size returned by SecurityWarning.getSize() should not be zero
  286.31 +  @author anthony.petrov@sun.com: area=awt.toplevel
  286.32 +  @library ../../../../java/awt/regtesthelpers
  286.33 +  @build Util
  286.34 +  @run main GetSizeShouldNotReturnZero
  286.35 +*/
  286.36 +
  286.37 +/**
  286.38 + * GetSizeShouldNotReturnZero.java
  286.39 + *
  286.40 + * summary: The size returned by SecurityWarning.getSize() should not be zero
  286.41 + */
  286.42 +
  286.43 +import java.awt.*;
  286.44 +import java.awt.event.*;
  286.45 +import java.security.Permission;
  286.46 +import test.java.awt.regtesthelpers.Util;
  286.47 +import com.sun.awt.SecurityWarning;
  286.48 +
  286.49 +public class GetSizeShouldNotReturnZero
  286.50 +{
  286.51 +    private static void init()
  286.52 +    {
  286.53 +        String[] instructions =
  286.54 +        {
  286.55 +            "This is an AUTOMATIC test, simply wait until it is done.",
  286.56 +            "The result (passed or failed) will be shown in the",
  286.57 +            "message window below."
  286.58 +        };
  286.59 +        Sysout.createDialog( );
  286.60 +        Sysout.printInstructions( instructions );
  286.61 +
  286.62 +
  286.63 +        // Install the security manager so that all subsequently created
  286.64 +        // windows display the security warning.
  286.65 +        System.setSecurityManager(new SecurityManager() {
  286.66 +
  286.67 +            @Override
  286.68 +            public void checkPermission(Permission perm) {
  286.69 +            }
  286.70 +
  286.71 +            @Override
  286.72 +            public boolean checkTopLevelWindow(Object window) {
  286.73 +                return false;
  286.74 +            }
  286.75 +        });
  286.76 +
  286.77 +        Frame f = new Frame();
  286.78 +        f.setSize(100, 100);
  286.79 +        f.setVisible(true);
  286.80 +
  286.81 +        Robot robot = Util.createRobot();
  286.82 +        Util.waitForIdle(robot);
  286.83 +
  286.84 +        Dimension size = SecurityWarning.getSize(f);
  286.85 +        if (size.width == 0 || size.height == 0) {
  286.86 +            fail("Reported security warning size: " + size);
  286.87 +            return;
  286.88 +        }
  286.89 +        pass();
  286.90 +    }//End  init()
  286.91 +
  286.92 +
  286.93 +
  286.94 +    /*****************************************************
  286.95 +     * Standard Test Machinery Section
  286.96 +     * DO NOT modify anything in this section -- it's a
  286.97 +     * standard chunk of code which has all of the
  286.98 +     * synchronisation necessary for the test harness.
  286.99 +     * By keeping it the same in all tests, it is easier
 286.100 +     * to read and understand someone else's test, as
 286.101 +     * well as insuring that all tests behave correctly
 286.102 +     * with the test harness.
 286.103 +     * There is a section following this for test-
 286.104 +     * classes
 286.105 +     ******************************************************/
 286.106 +    private static boolean theTestPassed = false;
 286.107 +    private static boolean testGeneratedInterrupt = false;
 286.108 +    private static String failureMessage = "";
 286.109 +
 286.110 +    private static Thread mainThread = null;
 286.111 +
 286.112 +    private static int sleepTime = 300000;
 286.113 +
 286.114 +    // Not sure about what happens if multiple of this test are
 286.115 +    //  instantiated in the same VM.  Being static (and using
 286.116 +    //  static vars), it aint gonna work.  Not worrying about
 286.117 +    //  it for now.
 286.118 +    public static void main( String args[] ) throws InterruptedException
 286.119 +    {
 286.120 +        mainThread = Thread.currentThread();
 286.121 +        try
 286.122 +        {
 286.123 +            init();
 286.124 +        }
 286.125 +        catch( TestPassedException e )
 286.126 +        {
 286.127 +            //The test passed, so just return from main and harness will
 286.128 +            // interepret this return as a pass
 286.129 +            return;
 286.130 +        }
 286.131 +        //At this point, neither test pass nor test fail has been
 286.132 +        // called -- either would have thrown an exception and ended the
 286.133 +        // test, so we know we have multiple threads.
 286.134 +
 286.135 +        //Test involves other threads, so sleep and wait for them to
 286.136 +        // called pass() or fail()
 286.137 +        try
 286.138 +        {
 286.139 +            Thread.sleep( sleepTime );
 286.140 +            //Timed out, so fail the test
 286.141 +            throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
 286.142 +        }
 286.143 +        catch (InterruptedException e)
 286.144 +        {
 286.145 +            //The test harness may have interrupted the test.  If so, rethrow the exception
 286.146 +            // so that the harness gets it and deals with it.
 286.147 +            if( ! testGeneratedInterrupt ) throw e;
 286.148 +
 286.149 +            //reset flag in case hit this code more than once for some reason (just safety)
 286.150 +            testGeneratedInterrupt = false;
 286.151 +
 286.152 +            if ( theTestPassed == false )
 286.153 +            {
 286.154 +                throw new RuntimeException( failureMessage );
 286.155 +            }
 286.156 +        }
 286.157 +
 286.158 +    }//main
 286.159 +
 286.160 +    public static synchronized void setTimeoutTo( int seconds )
 286.161 +    {
 286.162 +        sleepTime = seconds * 1000;
 286.163 +    }
 286.164 +
 286.165 +    public static synchronized void pass()
 286.166 +    {
 286.167 +        Sysout.println( "The test passed." );
 286.168 +        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
 286.169 +        //first check if this is executing in main thread
 286.170 +        if ( mainThread == Thread.currentThread() )
 286.171 +        {
 286.172 +            //Still in the main thread, so set the flag just for kicks,
 286.173 +            // and throw a test passed exception which will be caught
 286.174 +            // and end the test.
 286.175 +            theTestPassed = true;
 286.176 +            throw new TestPassedException();
 286.177 +        }
 286.178 +        theTestPassed = true;
 286.179 +        testGeneratedInterrupt = true;
 286.180 +        mainThread.interrupt();
 286.181 +    }//pass()
 286.182 +
 286.183 +    public static synchronized void fail()
 286.184 +    {
 286.185 +        //test writer didn't specify why test failed, so give generic
 286.186 +        fail( "it just plain failed! :-)" );
 286.187 +    }
 286.188 +
 286.189 +    public static synchronized void fail( String whyFailed )
 286.190 +    {
 286.191 +        Sysout.println( "The test failed: " + whyFailed );
 286.192 +        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
 286.193 +        //check if this called from main thread
 286.194 +        if ( mainThread == Thread.currentThread() )
 286.195 +        {
 286.196 +            //If main thread, fail now 'cause not sleeping
 286.197 +            throw new RuntimeException( whyFailed );
 286.198 +        }
 286.199 +        theTestPassed = false;
 286.200 +        testGeneratedInterrupt = true;
 286.201 +        failureMessage = whyFailed;
 286.202 +        mainThread.interrupt();
 286.203 +    }//fail()
 286.204 +
 286.205 +}// class GetSizeShouldNotReturnZero
 286.206 +
 286.207 +//This exception is used to exit from any level of call nesting
 286.208 +// when it's determined that the test has passed, and immediately
 286.209 +// end the test.
 286.210 +class TestPassedException extends RuntimeException
 286.211 +{
 286.212 +}
 286.213 +
 286.214 +//*********** End Standard Test Machinery Section **********
 286.215 +
 286.216 +
 286.217 +//************ Begin classes defined for the test ****************
 286.218 +
 286.219 +// if want to make listeners, here is the recommended place for them, then instantiate
 286.220 +//  them in init()
 286.221 +
 286.222 +/* Example of a class which may be written as part of a test
 286.223 +class NewClass implements anInterface
 286.224 + {
 286.225 +   static int newVar = 0;
 286.226 +
 286.227 +   public void eventDispatched(AWTEvent e)
 286.228 +    {
 286.229 +      //Counting events to see if we get enough
 286.230 +      eventCount++;
 286.231 +
 286.232 +      if( eventCount == 20 )
 286.233 +       {
 286.234 +         //got enough events, so pass
 286.235 +
 286.236 +         GetSizeShouldNotReturnZero.pass();
 286.237 +       }
 286.238 +      else if( tries == 20 )
 286.239 +       {
 286.240 +         //tried too many times without getting enough events so fail
 286.241 +
 286.242 +         GetSizeShouldNotReturnZero.fail();
 286.243 +       }
 286.244 +
 286.245 +    }// eventDispatched()
 286.246 +
 286.247 + }// NewClass class
 286.248 +
 286.249 +*/
 286.250 +
 286.251 +
 286.252 +//************** End classes defined for the test *******************
 286.253 +
 286.254 +
 286.255 +
 286.256 +
 286.257 +/****************************************************
 286.258 + Standard Test Machinery
 286.259 + DO NOT modify anything below -- it's a standard
 286.260 +  chunk of code whose purpose is to make user
 286.261 +  interaction uniform, and thereby make it simpler
 286.262 +  to read and understand someone else's test.
 286.263 + ****************************************************/
 286.264 +
 286.265 +/**
 286.266 + This is part of the standard test machinery.
 286.267 + It creates a dialog (with the instructions), and is the interface
 286.268 +  for sending text messages to the user.
 286.269 + To print the instructions, send an array of strings to Sysout.createDialog
 286.270 +  WithInstructions method.  Put one line of instructions per array entry.
 286.271 + To display a message for the tester to see, simply call Sysout.println
 286.272 +  with the string to be displayed.
 286.273 + This mimics System.out.println but works within the test harness as well
 286.274 +  as standalone.
 286.275 + */
 286.276 +
 286.277 +class Sysout
 286.278 +{
 286.279 +    private static TestDialog dialog;
 286.280 +
 286.281 +    public static void createDialogWithInstructions( String[] instructions )
 286.282 +    {
 286.283 +        dialog = new TestDialog( new Frame(), "Instructions" );
 286.284 +        dialog.printInstructions( instructions );
 286.285 +        dialog.setVisible(true);
 286.286 +        println( "Any messages for the tester will display here." );
 286.287 +    }
 286.288 +
 286.289 +    public static void createDialog( )
 286.290 +    {
 286.291 +        dialog = new TestDialog( new Frame(), "Instructions" );
 286.292 +        String[] defInstr = { "Instructions will appear here. ", "" } ;
 286.293 +        dialog.printInstructions( defInstr );
 286.294 +        dialog.setVisible(true);
 286.295 +        println( "Any messages for the tester will display here." );
 286.296 +    }
 286.297 +
 286.298 +
 286.299 +    public static void printInstructions( String[] instructions )
 286.300 +    {
 286.301 +        dialog.printInstructions( instructions );
 286.302 +    }
 286.303 +
 286.304 +
 286.305 +    public static void println( String messageIn )
 286.306 +    {
 286.307 +        dialog.displayMessage( messageIn );
 286.308 +        System.out.println(messageIn);
 286.309 +    }
 286.310 +
 286.311 +}// Sysout  class
 286.312 +
 286.313 +/**
 286.314 +  This is part of the standard test machinery.  It provides a place for the
 286.315 +   test instructions to be displayed, and a place for interactive messages
 286.316 +   to the user to be displayed.
 286.317 +  To have the test instructions displayed, see Sysout.
 286.318 +  To have a message to the user be displayed, see Sysout.
 286.319 +  Do not call anything in this dialog directly.
 286.320 +  */
 286.321 +class TestDialog extends Dialog
 286.322 +{
 286.323 +
 286.324 +    TextArea instructionsText;
 286.325 +    TextArea messageText;
 286.326 +    int maxStringLength = 80;
 286.327 +
 286.328 +    //DO NOT call this directly, go through Sysout
 286.329 +    public TestDialog( Frame frame, String name )
 286.330 +    {
 286.331 +        super( frame, name );
 286.332 +        int scrollBoth = TextArea.SCROLLBARS_BOTH;
 286.333 +        instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
 286.334 +        add( "North", instructionsText );
 286.335 +
 286.336 +        messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
 286.337 +        add("Center", messageText);
 286.338 +
 286.339 +        pack();
 286.340 +
 286.341 +        setVisible(true);
 286.342 +    }// TestDialog()
 286.343 +
 286.344 +    //DO NOT call this directly, go through Sysout
 286.345 +    public void printInstructions( String[] instructions )
 286.346 +    {
 286.347 +        //Clear out any current instructions
 286.348 +        instructionsText.setText( "" );
 286.349 +
 286.350 +        //Go down array of instruction strings
 286.351 +
 286.352 +        String printStr, remainingStr;
 286.353 +        for( int i=0; i < instructions.length; i++ )
 286.354 +        {
 286.355 +            //chop up each into pieces maxSringLength long
 286.356 +            remainingStr = instructions[ i ];
 286.357 +            while( remainingStr.length() > 0 )
 286.358 +            {
 286.359 +                //if longer than max then chop off first max chars to print
 286.360 +                if( remainingStr.length() >= maxStringLength )
 286.361 +                {
 286.362 +                    //Try to chop on a word boundary
 286.363 +                    int posOfSpace = remainingStr.
 286.364 +                        lastIndexOf( ' ', maxStringLength - 1 );
 286.365 +
 286.366 +                    if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
 286.367 +
 286.368 +                    printStr = remainingStr.substring( 0, posOfSpace + 1 );
 286.369 +                    remainingStr = remainingStr.substring( posOfSpace + 1 );
 286.370 +                }
 286.371 +                //else just print
 286.372 +                else
 286.373 +                {
 286.374 +                    printStr = remainingStr;
 286.375 +                    remainingStr = "";
 286.376 +                }
 286.377 +
 286.378 +                instructionsText.append( printStr + "\n" );
 286.379 +
 286.380 +            }// while
 286.381 +
 286.382 +        }// for
 286.383 +
 286.384 +    }//printInstructions()
 286.385 +
 286.386 +    //DO NOT call this directly, go through Sysout
 286.387 +    public void displayMessage( String messageIn )
 286.388 +    {
 286.389 +        messageText.append( messageIn + "\n" );
 286.390 +        System.out.println(messageIn);
 286.391 +    }
 286.392 +
 286.393 +}// TestDialog  class
 286.394 +
 286.395 +
   287.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   287.2 +++ b/test/com/sun/awt/Translucency/TranslucentJAppletTest/TranslucentJAppletTest.java	Thu Apr 16 19:10:32 2009 -0700
   287.3 @@ -0,0 +1,103 @@
   287.4 +/*
   287.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   287.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   287.7 + *
   287.8 + * This code is free software; you can redistribute it and/or modify it
   287.9 + * under the terms of the GNU General Public License version 2 only, as
  287.10 + * published by the Free Software Foundation.
  287.11 + *
  287.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  287.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  287.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  287.15 + * version 2 for more details (a copy is included in the LICENSE file that
  287.16 + * accompanied this code).
  287.17 + *
  287.18 + * You should have received a copy of the GNU General Public License version
  287.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  287.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  287.21 + *
  287.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  287.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  287.24 + * have any questions.
  287.25 + */
  287.26 +
  287.27 +/*
  287.28 + * @test %I% %E%
  287.29 + * @bug 6683728
  287.30 + * @summary Tests that a JApplet in a translucent JFrame works properly
  287.31 + * @author Kenneth.Russell@sun.com: area=Graphics
  287.32 + * @compile -XDignore.symbol.file=true TranslucentJAppletTest.java
  287.33 + * @run main/manual/othervm TranslucentJAppletTest
  287.34 + */
  287.35 +
  287.36 +import java.awt.*;
  287.37 +import java.awt.image.*;
  287.38 +
  287.39 +import javax.swing.*;
  287.40 +
  287.41 +public class TranslucentJAppletTest {
  287.42 +
  287.43 +    private static JFrame frame;
  287.44 +    private static volatile boolean paintComponentCalled = false;
  287.45 +
  287.46 +    private static void initAndShowGUI() {
  287.47 +        frame = new JFrame();
  287.48 +        JApplet applet = new JApplet();
  287.49 +        JPanel panel = new JPanel() {
  287.50 +            protected void paintComponent(Graphics g) {
  287.51 +                paintComponentCalled = true;
  287.52 +                g.setColor(Color.RED);
  287.53 +                g.fillOval(0, 0, getWidth(), getHeight());
  287.54 +            }
  287.55 +        };
  287.56 +        panel.setDoubleBuffered(false);
  287.57 +        panel.setOpaque(false);
  287.58 +        applet.add(panel);
  287.59 +        frame.add(applet);
  287.60 +        frame.setBounds(100, 100, 200, 200);
  287.61 +        frame.setUndecorated(true);
  287.62 +        com.sun.awt.AWTUtilities.setWindowOpaque(frame, false);
  287.63 +        frame.setVisible(true);
  287.64 +    }
  287.65 +
  287.66 +    public static void main(String[] args)
  287.67 +        throws Exception
  287.68 +    {
  287.69 +        sun.awt.SunToolkit tk = (sun.awt.SunToolkit)Toolkit.getDefaultToolkit();
  287.70 +
  287.71 +        Robot r = new Robot();
  287.72 +        Color color1 = r.getPixelColor(100, 100); // (0, 0) in frame coordinates
  287.73 +
  287.74 +        SwingUtilities.invokeAndWait(new Runnable() {
  287.75 +            public void run() {
  287.76 +                initAndShowGUI();
  287.77 +            }
  287.78 +        });
  287.79 +        tk.realSync();
  287.80 +
  287.81 +        if (!paintComponentCalled) {
  287.82 +            throw new RuntimeException("Test FAILED: panel's paintComponent() method is not called");
  287.83 +        }
  287.84 +
  287.85 +        Color newColor1 = r.getPixelColor(100, 100);
  287.86 +        // unfortunately, robot.getPixelColor() doesn't work for some unknown reason
  287.87 +        // Color newColor2 = r.getPixelColor(200, 200);
  287.88 +        BufferedImage bim = r.createScreenCapture(new Rectangle(200, 200, 1, 1));
  287.89 +        Color newColor2 = new Color(bim.getRGB(0, 0));
  287.90 +
  287.91 +        // Frame must be transparent at (100, 100) in screen coords
  287.92 +        if (!color1.equals(newColor1)) {
  287.93 +            System.err.println("color1 = " + color1);
  287.94 +            System.err.println("newColor1 = " + newColor1);
  287.95 +            throw new RuntimeException("Test FAILED: frame pixel at (0, 0) is not transparent");
  287.96 +        }
  287.97 +
  287.98 +        // Frame must be RED at (200, 200) in screen coords
  287.99 +        if (!newColor2.equals(Color.RED)) {
 287.100 +            System.err.println("newColor2 = " + newColor2);
 287.101 +            throw new RuntimeException("Test FAILED: frame pixel at (100, 100) is not red (transparent?)");
 287.102 +        }
 287.103 +
 287.104 +        System.out.println("Test PASSED");
 287.105 +    }
 287.106 +}
   288.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   288.2 +++ b/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TSFrame.java	Thu Apr 16 19:10:32 2009 -0700
   288.3 @@ -0,0 +1,306 @@
   288.4 +/*
   288.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   288.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   288.7 + *
   288.8 + * This code is free software; you can redistribute it and/or modify it
   288.9 + * under the terms of the GNU General Public License version 2 only, as
  288.10 + * published by the Free Software Foundation.  Sun designates this
  288.11 + * particular file as subject to the "Classpath" exception as provided
  288.12 + * by Sun in the LICENSE file that accompanied this code.
  288.13 + *
  288.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  288.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  288.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  288.17 + * version 2 for more details (a copy is included in the LICENSE file that
  288.18 + * accompanied this code).
  288.19 + *
  288.20 + * You should have received a copy of the GNU General Public License version
  288.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  288.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  288.23 + *
  288.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  288.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  288.26 + * have any questions.
  288.27 + */
  288.28 +
  288.29 +import com.sun.awt.AWTUtilities;
  288.30 +import static com.sun.awt.AWTUtilities.Translucency.*;
  288.31 +import java.awt.BorderLayout;
  288.32 +import java.awt.Color;
  288.33 +import java.awt.Dimension;
  288.34 +import java.awt.Frame;
  288.35 +import java.awt.Graphics;
  288.36 +import java.awt.GraphicsConfiguration;
  288.37 +import java.awt.GraphicsEnvironment;
  288.38 +import java.awt.RenderingHints;
  288.39 +import java.awt.event.MouseAdapter;
  288.40 +import java.awt.event.MouseEvent;
  288.41 +import java.awt.event.WindowAdapter;
  288.42 +import java.awt.event.WindowEvent;
  288.43 +import java.awt.Canvas;
  288.44 +import java.awt.Component;
  288.45 +import java.awt.GradientPaint;
  288.46 +import java.awt.Graphics2D;
  288.47 +import java.awt.Paint;
  288.48 +import java.util.Random;
  288.49 +import java.awt.geom.Ellipse2D;
  288.50 +import javax.swing.JApplet;
  288.51 +import javax.swing.JButton;
  288.52 +import javax.swing.JComponent;
  288.53 +import javax.swing.JFrame;
  288.54 +import javax.swing.JPanel;
  288.55 +import javax.swing.SwingUtilities;
  288.56 +
  288.57 +public class TSFrame {
  288.58 +
  288.59 +    static volatile boolean done = false;
  288.60 +
  288.61 +    static final boolean useSwing = System.getProperty("useswing") != null;
  288.62 +    static final boolean useShape = System.getProperty("useshape") != null;
  288.63 +    static final boolean useTransl = System.getProperty("usetransl") != null;
  288.64 +    static final boolean useNonOpaque = System.getProperty("usenonop") != null;
  288.65 +
  288.66 +    static final Random rnd = new Random();
  288.67 +    private static void render(Graphics g, int w, int h, boolean useNonOpaque) {
  288.68 +        if (useNonOpaque) {
  288.69 +            Graphics2D g2d = (Graphics2D)g;
  288.70 +            GradientPaint p =
  288.71 +                new GradientPaint(0.0f, 0.0f,
  288.72 +                                  new Color(rnd.nextInt(0xffffff)),
  288.73 +                                  w, h,
  288.74 +                                  new Color(rnd.nextInt(0xff),
  288.75 +                                            rnd.nextInt(0xff),
  288.76 +                                            rnd.nextInt(0xff), 0),
  288.77 +                                  true);
  288.78 +            g2d.setPaint(p);
  288.79 +            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
  288.80 +                                 RenderingHints.VALUE_ANTIALIAS_ON);
  288.81 +            g2d.fillOval(0, 0, w, h);
  288.82 +        } else {
  288.83 +            g.setColor(new Color(rnd.nextInt(0xffffff)));
  288.84 +            g.fillRect(0, 0, w, h);
  288.85 +        }
  288.86 +    }
  288.87 +
  288.88 +    private static class MyCanvas extends Canvas {
  288.89 +        @Override
  288.90 +        public void paint(Graphics g) {
  288.91 +            render(g, getWidth(), getHeight(), false);
  288.92 +        }
  288.93 +        @Override
  288.94 +        public Dimension getPreferredSize() {
  288.95 +            return new Dimension(200, 100);
  288.96 +        }
  288.97 +    }
  288.98 +    private static class NonOpaqueJFrame extends JFrame {
  288.99 +        NonOpaqueJFrame(GraphicsConfiguration gc) {
 288.100 +            super("NonOpaque Swing JFrame", gc);
 288.101 +            JPanel p = new JPanel() {
 288.102 +                public void paintComponent(Graphics g) {
 288.103 +                    super.paintComponent(g);
 288.104 +                    render(g, getWidth(), getHeight(), true);
 288.105 +                    g.setColor(Color.red);
 288.106 +                    g.drawString("Non-Opaque Swing JFrame", 10, 15);
 288.107 +                }
 288.108 +            };
 288.109 +            p.setDoubleBuffered(false);
 288.110 +            p.setOpaque(false);
 288.111 +            add(p);
 288.112 +            setUndecorated(true);
 288.113 +        }
 288.114 +    }
 288.115 +    private static class NonOpaqueJAppletFrame extends JFrame {
 288.116 +        JPanel p;
 288.117 +        NonOpaqueJAppletFrame(GraphicsConfiguration gc) {
 288.118 +            super("NonOpaque Swing JAppletFrame", gc);
 288.119 +            JApplet ja = new JApplet() {
 288.120 +                public void paint(Graphics g) {
 288.121 +                    super.paint(g);
 288.122 +                    System.err.println("JAppletFrame paint called");
 288.123 +                }
 288.124 +            };
 288.125 +            p = new JPanel() {
 288.126 +                public void paintComponent(Graphics g) {
 288.127 +                    super.paintComponent(g);
 288.128 +                    render(g, getWidth(), getHeight(), true);
 288.129 +                    g.setColor(Color.red);
 288.130 +                    g.drawString("Non-Opaque Swing JFrame", 10, 15);
 288.131 +                }
 288.132 +            };
 288.133 +            p.setDoubleBuffered(false);
 288.134 +            p.setOpaque(false);
 288.135 +            ja.add(p);
 288.136 +            add(ja);
 288.137 +            setUndecorated(true);
 288.138 +        }
 288.139 +    }
 288.140 +    private static class NonOpaqueFrame extends Frame {
 288.141 +        NonOpaqueFrame(GraphicsConfiguration gc) {
 288.142 +            super("NonOpaque AWT Frame", gc);
 288.143 +            // uncomment to test with hw child
 288.144 +//            setLayout(null);
 288.145 +//            Component c = new Panel() {
 288.146 +//                public void paint(Graphics g) {
 288.147 +//                    g.setColor(new Color(1.0f, 1.0f, 1.0f, 0.5f));
 288.148 +//                    g.fillRect(0, 0, getWidth(), getHeight());
 288.149 +//                }
 288.150 +//            };
 288.151 +//            c.setSize(100, 100);
 288.152 +//            c.setBackground(Color.red);
 288.153 +//            c.setForeground(Color.red);
 288.154 +//            add(c);
 288.155 +//            c.setLocation(130, 130);
 288.156 +        }
 288.157 +        @Override
 288.158 +        public void paint(Graphics g) {
 288.159 +            render(g, getWidth(), getHeight(), true);
 288.160 +            g.setColor(Color.red);
 288.161 +            g.drawString("Non-Opaque AWT Frame", 10, 15);
 288.162 +        }
 288.163 +    }
 288.164 +
 288.165 +    private static class MyJPanel extends JPanel {
 288.166 +        @Override
 288.167 +        public void paintComponent(Graphics g) {
 288.168 +            render(g, getWidth(), getHeight(), false);
 288.169 +        }
 288.170 +    }
 288.171 +
 288.172 +    public static Frame createGui(GraphicsConfiguration gc,
 288.173 +                                  final boolean useSwing,
 288.174 +                                  final boolean useShape,
 288.175 +                                  final boolean useTransl,
 288.176 +                                  final boolean useNonOpaque,
 288.177 +                                  final float factor)
 288.178 +    {
 288.179 +        Frame frame;
 288.180 +        done = false;
 288.181 +
 288.182 +        if (gc == null) {
 288.183 +            gc = GraphicsEnvironment.getLocalGraphicsEnvironment().
 288.184 +                    getDefaultScreenDevice().getDefaultConfiguration();
 288.185 +        }
 288.186 +
 288.187 +        if (useNonOpaque) {
 288.188 +            if (useSwing) {
 288.189 +                frame = new NonOpaqueJFrame(gc);
 288.190 +//                frame = new NonOpaqueJAppletFrame(gc);
 288.191 +            } else {
 288.192 +                frame = new NonOpaqueFrame(gc);
 288.193 +            }
 288.194 +            animateComponent(frame);
 288.195 +        } else if (useSwing) {
 288.196 +            frame = new JFrame("Swing Frame", gc);
 288.197 +            JComponent p = new JButton("Swing!");
 288.198 +            p.setPreferredSize(new Dimension(200, 100));
 288.199 +            frame.add("North", p);
 288.200 +            p = new MyJPanel();
 288.201 +            animateComponent(p);
 288.202 +            frame.add("Center", p);
 288.203 +        } else {
 288.204 +            frame = new Frame("AWT Frame", gc) {
 288.205 +                public void paint(Graphics g) {
 288.206 +                    g.setColor(Color.red);
 288.207 +                    g.fillRect(0, 0, 100, 100);
 288.208 +                }
 288.209 +            };
 288.210 +            frame.setLayout(new BorderLayout());
 288.211 +            Canvas c = new MyCanvas();
 288.212 +            frame.add("North", c);
 288.213 +            animateComponent(c);
 288.214 +            c = new MyCanvas();
 288.215 +            frame.add("Center", c);
 288.216 +            animateComponent(c);
 288.217 +            c = new MyCanvas();
 288.218 +            frame.add("South", c);
 288.219 +            animateComponent(c);
 288.220 +        }
 288.221 +        final Frame finalFrame = frame;
 288.222 +        frame.addWindowListener(new WindowAdapter() {
 288.223 +            @Override
 288.224 +            public void windowClosing(WindowEvent e) {
 288.225 +                finalFrame.dispose();
 288.226 +                done = true;
 288.227 +            }
 288.228 +        });
 288.229 +        frame.addMouseListener(new MouseAdapter() {
 288.230 +            @Override
 288.231 +            public void mouseClicked(MouseEvent e) {
 288.232 +                finalFrame.dispose();
 288.233 +                done = true;
 288.234 +            }
 288.235 +        });
 288.236 +        frame.setPreferredSize(new Dimension(800, 600));
 288.237 +
 288.238 +        if (useShape) {
 288.239 +            frame.setUndecorated(true);
 288.240 +        }
 288.241 +
 288.242 +        frame.setLocation(450, 10);
 288.243 +        frame.pack();
 288.244 +
 288.245 +        if (useShape) {
 288.246 +            if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSPARENT)) {
 288.247 +                System.out.println("applying PERPIXEL_TRANSPARENT");
 288.248 +                AWTUtilities.setWindowShape(frame,
 288.249 +                    new Ellipse2D.Double(0, 0, frame.getWidth(),
 288.250 +                                               frame.getHeight()/3));
 288.251 +                frame.setTitle("PERPIXEL_TRANSPARENT");
 288.252 +            } else {
 288.253 +                System.out.println("Passed: PERPIXEL_TRANSPARENT unsupported");
 288.254 +            }
 288.255 +        }
 288.256 +        if (useTransl) {
 288.257 +            if (AWTUtilities.isTranslucencySupported(TRANSLUCENT)) {
 288.258 +                System.out.println("applying TRANSLUCENT");
 288.259 +                AWTUtilities.setWindowOpacity(frame, factor);
 288.260 +                frame.setTitle("TRANSLUCENT");
 288.261 +            } else {
 288.262 +                System.out.println("Passed: TRANSLUCENT unsupported");
 288.263 +            }
 288.264 +        }
 288.265 +        if (useNonOpaque) {
 288.266 +            if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSLUCENT) &&
 288.267 +                AWTUtilities.isTranslucencyCapable(gc))
 288.268 +            {
 288.269 +                System.out.println("applying PERPIXEL_TRANSLUCENT");
 288.270 +                AWTUtilities.setWindowOpaque(frame, false);
 288.271 +                frame.setTitle("PERPIXEL_TRANSLUCENT");
 288.272 +            } else {
 288.273 +                System.out.println("Passed: PERPIXEL_TRANSLUCENT unsupported");
 288.274 +            }
 288.275 +        }
 288.276 +        frame.setVisible(true);
 288.277 +        return frame;
 288.278 +    }
 288.279 +
 288.280 +    public static void stopThreads() {
 288.281 +        done = true;
 288.282 +    }
 288.283 +
 288.284 +    private static void animateComponent(final Component comp) {
 288.285 +        Thread t = new Thread(new Runnable() {
 288.286 +            public void run() {
 288.287 +                do {
 288.288 +                    try {
 288.289 +                        Thread.sleep(50);
 288.290 +                    } catch (InterruptedException ex) {}
 288.291 +                    comp.repaint();
 288.292 +                } while (!done);
 288.293 +            }
 288.294 +        });
 288.295 +        t.start();
 288.296 +    }
 288.297 +
 288.298 +    public static void main(String[] args) throws Exception {
 288.299 +        SwingUtilities.invokeLater(new Runnable() {
 288.300 +            public void run() {
 288.301 +                TSFrame.createGui(null, useSwing,
 288.302 +                                  useShape,
 288.303 +                                  useTransl,
 288.304 +                                  useNonOpaque,
 288.305 +                                  0.7f);
 288.306 +            }
 288.307 +        });
 288.308 +    }
 288.309 +}
   289.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   289.2 +++ b/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.form	Thu Apr 16 19:10:32 2009 -0700
   289.3 @@ -0,0 +1,230 @@
   289.4 +<?xml version="1.0" encoding="UTF-8" ?>
   289.5 +
   289.6 +<Form version="1.3" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
   289.7 +  <NonVisualComponents>
   289.8 +    <Component class="javax.swing.ButtonGroup" name="createDisposeGrp">
   289.9 +    </Component>
  289.10 +  </NonVisualComponents>
  289.11 +  <Properties>
  289.12 +    <Property name="defaultCloseOperation" type="int" value="3"/>
  289.13 +    <Property name="title" type="java.lang.String" value="TranslucentShapedFrameTest"/>
  289.14 +  </Properties>
  289.15 +  <SyntheticProperties>
  289.16 +    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
  289.17 +  </SyntheticProperties>
  289.18 +  <AuxValues>
  289.19 +    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
  289.20 +    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
  289.21 +    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
  289.22 +    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
  289.23 +    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
  289.24 +    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
  289.25 +  </AuxValues>
  289.26 +
  289.27 +  <Layout>
  289.28 +    <DimensionLayout dim="0">
  289.29 +      <Group type="103" groupAlignment="0" attributes="0">
  289.30 +          <Group type="102" attributes="0">
  289.31 +              <EmptySpace max="-2" attributes="0"/>
  289.32 +              <Group type="103" groupAlignment="0" attributes="0">
  289.33 +                  <Group type="102" alignment="0" attributes="0">
  289.34 +                      <Component id="transparencySld" pref="375" max="32767" attributes="0"/>
  289.35 +                      <EmptySpace max="-2" attributes="0"/>
  289.36 +                  </Group>
  289.37 +                  <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
  289.38 +                  <Group type="102" alignment="0" attributes="0">
  289.39 +                      <Component id="shapedCb" min="-2" max="-2" attributes="0"/>
  289.40 +                      <EmptySpace max="-2" attributes="0"/>
  289.41 +                      <Component id="nonOpaqueChb" min="-2" max="-2" attributes="0"/>
  289.42 +                      <EmptySpace max="-2" attributes="0"/>
  289.43 +                      <Component id="useSwingCb" min="-2" max="-2" attributes="0"/>
  289.44 +                      <EmptySpace pref="102" max="32767" attributes="0"/>
  289.45 +                  </Group>
  289.46 +                  <Group type="102" alignment="0" attributes="0">
  289.47 +                      <Group type="103" groupAlignment="0" attributes="0">
  289.48 +                          <Group type="102" alignment="0" attributes="0">
  289.49 +                              <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
  289.50 +                              <EmptySpace pref="314" max="-2" attributes="0"/>
  289.51 +                          </Group>
  289.52 +                          <Group type="102" alignment="0" attributes="0">
  289.53 +                              <Component id="passedBtn" min="-2" max="-2" attributes="0"/>
  289.54 +                              <EmptySpace max="-2" attributes="0"/>
  289.55 +                              <Component id="failedBtn" min="-2" max="-2" attributes="0"/>
  289.56 +                              <EmptySpace pref="241" max="-2" attributes="0"/>
  289.57 +                          </Group>
  289.58 +                          <Component id="jScrollPane1" alignment="1" pref="375" max="32767" attributes="0"/>
  289.59 +                          <Group type="102" alignment="0" attributes="0">
  289.60 +                              <Component id="createFrameBtn" min="-2" pref="187" max="-2" attributes="0"/>
  289.61 +                              <EmptySpace max="-2" attributes="0"/>
  289.62 +                              <Component id="disposeFrameBtn" min="-2" pref="182" max="-2" attributes="0"/>
  289.63 +                          </Group>
  289.64 +                      </Group>
  289.65 +                      <EmptySpace max="-2" attributes="0"/>
  289.66 +                  </Group>
  289.67 +              </Group>
  289.68 +          </Group>
  289.69 +      </Group>
  289.70 +    </DimensionLayout>
  289.71 +    <DimensionLayout dim="1">
  289.72 +      <Group type="103" groupAlignment="0" attributes="0">
  289.73 +          <Group type="102" alignment="0" attributes="0">
  289.74 +              <EmptySpace max="-2" attributes="0"/>
  289.75 +              <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
  289.76 +              <EmptySpace max="-2" attributes="0"/>
  289.77 +              <Component id="transparencySld" min="-2" max="-2" attributes="0"/>
  289.78 +              <EmptySpace max="-2" attributes="0"/>
  289.79 +              <Group type="103" groupAlignment="3" attributes="0">
  289.80 +                  <Component id="shapedCb" alignment="3" min="-2" max="-2" attributes="0"/>
  289.81 +                  <Component id="nonOpaqueChb" alignment="3" min="-2" max="-2" attributes="0"/>
  289.82 +                  <Component id="useSwingCb" alignment="3" min="-2" max="-2" attributes="0"/>
  289.83 +              </Group>
  289.84 +              <EmptySpace max="-2" attributes="0"/>
  289.85 +              <Group type="103" groupAlignment="3" attributes="0">
  289.86 +                  <Component id="disposeFrameBtn" alignment="3" min="-2" max="-2" attributes="0"/>
  289.87 +                  <Component id="createFrameBtn" alignment="3" min="-2" max="-2" attributes="0"/>
  289.88 +              </Group>
  289.89 +              <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
  289.90 +              <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
  289.91 +              <EmptySpace max="-2" attributes="0"/>
  289.92 +              <Component id="jScrollPane1" min="-2" pref="148" max="-2" attributes="0"/>
  289.93 +              <EmptySpace max="-2" attributes="0"/>
  289.94 +              <Group type="103" groupAlignment="3" attributes="0">
  289.95 +                  <Component id="passedBtn" alignment="3" min="-2" max="-2" attributes="0"/>
  289.96 +                  <Component id="failedBtn" alignment="3" min="-2" max="-2" attributes="0"/>
  289.97 +              </Group>
  289.98 +              <EmptySpace max="32767" attributes="0"/>
  289.99 +          </Group>
 289.100 +      </Group>
 289.101 +    </DimensionLayout>
 289.102 +  </Layout>
 289.103 +  <SubComponents>
 289.104 +    <Component class="javax.swing.JLabel" name="jLabel1">
 289.105 +      <Properties>
 289.106 +        <Property name="text" type="java.lang.String" value="Frame Opacity:"/>
 289.107 +      </Properties>
 289.108 +    </Component>
 289.109 +    <Component class="javax.swing.JSlider" name="transparencySld">
 289.110 +      <Properties>
 289.111 +        <Property name="majorTickSpacing" type="int" value="10"/>
 289.112 +        <Property name="minorTickSpacing" type="int" value="5"/>
 289.113 +        <Property name="paintLabels" type="boolean" value="true"/>
 289.114 +        <Property name="paintTicks" type="boolean" value="true"/>
 289.115 +        <Property name="value" type="int" value="100"/>
 289.116 +      </Properties>
 289.117 +      <Events>
 289.118 +        <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="transparencySldStateChanged"/>
 289.119 +      </Events>
 289.120 +    </Component>
 289.121 +    <Component class="javax.swing.JCheckBox" name="shapedCb">
 289.122 +      <Properties>
 289.123 +        <Property name="text" type="java.lang.String" value="Shaped Frame"/>
 289.124 +        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
 289.125 +          <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
 289.126 +            <EmptyBorder bottom="0" left="0" right="0" top="0"/>
 289.127 +          </Border>
 289.128 +        </Property>
 289.129 +        <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
 289.130 +          <Insets value="[0, 0, 0, 0]"/>
 289.131 +        </Property>
 289.132 +      </Properties>
 289.133 +      <Events>
 289.134 +        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="shapedCbActionPerformed"/>
 289.135 +      </Events>
 289.136 +    </Component>
 289.137 +    <Component class="javax.swing.JCheckBox" name="nonOpaqueChb">
 289.138 +      <Properties>
 289.139 +        <Property name="text" type="java.lang.String" value="Non Opaque Frame"/>
 289.140 +        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
 289.141 +          <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
 289.142 +            <EmptyBorder bottom="0" left="0" right="0" top="0"/>
 289.143 +          </Border>
 289.144 +        </Property>
 289.145 +        <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
 289.146 +          <Insets value="[0, 0, 0, 0]"/>
 289.147 +        </Property>
 289.148 +      </Properties>
 289.149 +      <Events>
 289.150 +        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="nonOpaqueChbActionPerformed"/>
 289.151 +      </Events>
 289.152 +    </Component>
 289.153 +    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
 289.154 +      <AuxValues>
 289.155 +        <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
 289.156 +      </AuxValues>
 289.157 +
 289.158 +      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
 289.159 +      <SubComponents>
 289.160 +        <Component class="javax.swing.JTextArea" name="jTextArea1">
 289.161 +          <Properties>
 289.162 +            <Property name="columns" type="int" value="20"/>
 289.163 +            <Property name="rows" type="int" value="5"/>
 289.164 +            <Property name="text" type="java.lang.String" value="Create translucent and/or shaped, or&#xa;non-opaque frame. Make sure it behaves&#xa;correctly (no artifacts left on the screen&#xa;when dragging - if dragging is possible).&#xa;Click &quot;Passed&quot; if the test behaves correctly,&#xa;&quot;Falied&quot; otherwise."/>
 289.165 +          </Properties>
 289.166 +        </Component>
 289.167 +      </SubComponents>
 289.168 +    </Container>
 289.169 +    <Component class="javax.swing.JLabel" name="jLabel2">
 289.170 +      <Properties>
 289.171 +        <Property name="text" type="java.lang.String" value="Instructions:"/>
 289.172 +      </Properties>
 289.173 +    </Component>
 289.174 +    <Component class="javax.swing.JButton" name="passedBtn">
 289.175 +      <Properties>
 289.176 +        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
 289.177 +          <Color blue="64" green="ff" red="81" type="rgb"/>
 289.178 +        </Property>
 289.179 +        <Property name="text" type="java.lang.String" value="Passed"/>
 289.180 +      </Properties>
 289.181 +      <Events>
 289.182 +        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="passedBtnActionPerformed"/>
 289.183 +      </Events>
 289.184 +    </Component>
 289.185 +    <Component class="javax.swing.JButton" name="failedBtn">
 289.186 +      <Properties>
 289.187 +        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
 289.188 +          <Color blue="0" green="0" id="red" palette="1" red="ff" type="palette"/>
 289.189 +        </Property>
 289.190 +        <Property name="text" type="java.lang.String" value="Failed"/>
 289.191 +      </Properties>
 289.192 +      <Events>
 289.193 +        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="failedBtnActionPerformed"/>
 289.194 +      </Events>
 289.195 +    </Component>
 289.196 +    <Component class="javax.swing.JToggleButton" name="createFrameBtn">
 289.197 +      <Properties>
 289.198 +        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
 289.199 +          <ComponentRef name="createDisposeGrp"/>
 289.200 +        </Property>
 289.201 +        <Property name="text" type="java.lang.String" value="Create Frame"/>
 289.202 +      </Properties>
 289.203 +      <Events>
 289.204 +        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="createFrameBtnActionPerformed"/>
 289.205 +      </Events>
 289.206 +    </Component>
 289.207 +    <Component class="javax.swing.JToggleButton" name="disposeFrameBtn">
 289.208 +      <Properties>
 289.209 +        <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
 289.210 +          <ComponentRef name="createDisposeGrp"/>
 289.211 +        </Property>
 289.212 +        <Property name="selected" type="boolean" value="true"/>
 289.213 +        <Property name="text" type="java.lang.String" value="Dispose Frame"/>
 289.214 +      </Properties>
 289.215 +      <Events>
 289.216 +        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="disposeFrameBtnActionPerformed"/>
 289.217 +      </Events>
 289.218 +    </Component>
 289.219 +    <Component class="javax.swing.JCheckBox" name="useSwingCb">
 289.220 +      <Properties>
 289.221 +        <Property name="text" type="java.lang.String" value="Use JFrame"/>
 289.222 +        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
 289.223 +          <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
 289.224 +            <EmptyBorder bottom="0" left="0" right="0" top="0"/>
 289.225 +          </Border>
 289.226 +        </Property>
 289.227 +        <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
 289.228 +          <Insets value="[0, 0, 0, 0]"/>
 289.229 +        </Property>
 289.230 +      </Properties>
 289.231 +    </Component>
 289.232 +  </SubComponents>
 289.233 +</Form>
   290.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   290.2 +++ b/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.java	Thu Apr 16 19:10:32 2009 -0700
   290.3 @@ -0,0 +1,359 @@
   290.4 +/*
   290.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   290.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   290.7 + *
   290.8 + * This code is free software; you can redistribute it and/or modify it
   290.9 + * under the terms of the GNU General Public License version 2 only, as
  290.10 + * published by the Free Software Foundation.  Sun designates this
  290.11 + * particular file as subject to the "Classpath" exception as provided
  290.12 + * by Sun in the LICENSE file that accompanied this code.
  290.13 + *
  290.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  290.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  290.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  290.17 + * version 2 for more details (a copy is included in the LICENSE file that
  290.18 + * accompanied this code).
  290.19 + *
  290.20 + * You should have received a copy of the GNU General Public License version
  290.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  290.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  290.23 + *
  290.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  290.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  290.26 + * have any questions.
  290.27 + */
  290.28 +
  290.29 +/*
  290.30 + * @test %I% %E%
  290.31 + * @bug 6655001 6670649 6687141
  290.32 + * @summary Tests that hw acceleration doesn't affect translucent/shaped windows
  290.33 + * @author Dmitri.Trembovetski@sun.com: area=Graphics
  290.34 + * @compile -XDignore.symbol.file=true TranslucentShapedFrameTest.java
  290.35 + * @compile -XDignore.symbol.file=true TSFrame.java
  290.36 + * @run main/manual/othervm TranslucentShapedFrameTest
  290.37 + * @run main/manual/othervm -Dsun.java2d.noddraw=true TranslucentShapedFrameTest
  290.38 + * @run main/manual/othervm -Dsun.java2d.opengl=True TranslucentShapedFrameTest
  290.39 + */
  290.40 +import com.sun.awt.AWTUtilities;
  290.41 +import static com.sun.awt.AWTUtilities.Translucency.*;
  290.42 +import java.awt.Frame;
  290.43 +import java.awt.GraphicsConfiguration;
  290.44 +import java.awt.GraphicsDevice;
  290.45 +import java.awt.GraphicsEnvironment;
  290.46 +import java.awt.Shape;
  290.47 +import java.awt.geom.Ellipse2D;
  290.48 +import java.util.concurrent.CountDownLatch;
  290.49 +import javax.swing.JSlider;
  290.50 +import javax.swing.SwingUtilities;
  290.51 +import javax.swing.UIManager;
  290.52 +import javax.swing.UnsupportedLookAndFeelException;
  290.53 +
  290.54 +public class TranslucentShapedFrameTest extends javax.swing.JFrame {
  290.55 +    Frame testFrame;
  290.56 +    static CountDownLatch done;
  290.57 +    static volatile boolean failed = false;
  290.58 +    GraphicsConfiguration gcToUse = null;
  290.59 +
  290.60 +    /**
  290.61 +     * Creates new form TranslucentShapedFrameTest
  290.62 +     */
  290.63 +    public TranslucentShapedFrameTest() {
  290.64 +        // not necessary, but we just look nicer
  290.65 +        try {
  290.66 +            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  290.67 +        } catch (Exception ex) {}
  290.68 +
  290.69 +        initComponents();
  290.70 +        checkEffects();
  290.71 +
  290.72 +        SwingUtilities.updateComponentTreeUI(this);
  290.73 +    }
  290.74 +
  290.75 +    /** This method is called from within the constructor to
  290.76 +     * initialize the form.
  290.77 +     * WARNING: Do NOT modify this code. The content of this method is
  290.78 +     * always regenerated by the Form Editor.
  290.79 +     */
  290.80 +    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
  290.81 +    private void initComponents() {
  290.82 +        createDisposeGrp = new javax.swing.ButtonGroup();
  290.83 +        jLabel1 = new javax.swing.JLabel();
  290.84 +        transparencySld = new javax.swing.JSlider();
  290.85 +        shapedCb = new javax.swing.JCheckBox();
  290.86 +        nonOpaqueChb = new javax.swing.JCheckBox();
  290.87 +        jScrollPane1 = new javax.swing.JScrollPane();
  290.88 +        jTextArea1 = new javax.swing.JTextArea();
  290.89 +        jLabel2 = new javax.swing.JLabel();
  290.90 +        passedBtn = new javax.swing.JButton();
  290.91 +        failedBtn = new javax.swing.JButton();
  290.92 +        createFrameBtn = new javax.swing.JToggleButton();
  290.93 +        disposeFrameBtn = new javax.swing.JToggleButton();
  290.94 +        useSwingCb = new javax.swing.JCheckBox();
  290.95 +
  290.96 +        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  290.97 +        setTitle("TranslucentShapedFrameTest");
  290.98 +        jLabel1.setText("Frame Opacity:");
  290.99 +
 290.100 +        transparencySld.setMajorTickSpacing(10);
 290.101 +        transparencySld.setMinorTickSpacing(5);
 290.102 +        transparencySld.setPaintLabels(true);
 290.103 +        transparencySld.setPaintTicks(true);
 290.104 +        transparencySld.setValue(100);
 290.105 +        transparencySld.addChangeListener(new javax.swing.event.ChangeListener() {
 290.106 +            public void stateChanged(javax.swing.event.ChangeEvent evt) {
 290.107 +                transparencySldStateChanged(evt);
 290.108 +            }
 290.109 +        });
 290.110 +
 290.111 +        shapedCb.setText("Shaped Frame");
 290.112 +        shapedCb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 290.113 +        shapedCb.setMargin(new java.awt.Insets(0, 0, 0, 0));
 290.114 +        shapedCb.addActionListener(new java.awt.event.ActionListener() {
 290.115 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
 290.116 +                shapedCbActionPerformed(evt);
 290.117 +            }
 290.118 +        });
 290.119 +
 290.120 +        nonOpaqueChb.setText("Non Opaque Frame");
 290.121 +        nonOpaqueChb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 290.122 +        nonOpaqueChb.setMargin(new java.awt.Insets(0, 0, 0, 0));
 290.123 +        nonOpaqueChb.addActionListener(new java.awt.event.ActionListener() {
 290.124 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
 290.125 +                nonOpaqueChbActionPerformed(evt);
 290.126 +            }
 290.127 +        });
 290.128 +
 290.129 +        jTextArea1.setColumns(20);
 290.130 +        jTextArea1.setRows(5);
 290.131 +        jTextArea1.setText("Create translucent and/or shaped, or\nnon-opaque frame. Make sure it behaves\ncorrectly (no artifacts left on the screen\nwhen dragging - if dragging is possible).\nClick \"Passed\" if the test behaves correctly,\n\"Falied\" otherwise.");
 290.132 +        jScrollPane1.setViewportView(jTextArea1);
 290.133 +
 290.134 +        jLabel2.setText("Instructions:");
 290.135 +
 290.136 +        passedBtn.setBackground(new java.awt.Color(129, 255, 100));
 290.137 +        passedBtn.setText("Passed");
 290.138 +        passedBtn.addActionListener(new java.awt.event.ActionListener() {
 290.139 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
 290.140 +                passedBtnActionPerformed(evt);
 290.141 +            }
 290.142 +        });
 290.143 +
 290.144 +        failedBtn.setBackground(java.awt.Color.red);
 290.145 +        failedBtn.setText("Failed");
 290.146 +        failedBtn.addActionListener(new java.awt.event.ActionListener() {
 290.147 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
 290.148 +                failedBtnActionPerformed(evt);
 290.149 +            }
 290.150 +        });
 290.151 +
 290.152 +        createDisposeGrp.add(createFrameBtn);
 290.153 +        createFrameBtn.setText("Create Frame");
 290.154 +        createFrameBtn.addActionListener(new java.awt.event.ActionListener() {
 290.155 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
 290.156 +                createFrameBtnActionPerformed(evt);
 290.157 +            }
 290.158 +        });
 290.159 +
 290.160 +        createDisposeGrp.add(disposeFrameBtn);
 290.161 +        disposeFrameBtn.setSelected(true);
 290.162 +        disposeFrameBtn.setText("Dispose Frame");
 290.163 +        disposeFrameBtn.addActionListener(new java.awt.event.ActionListener() {
 290.164 +            public void actionPerformed(java.awt.event.ActionEvent evt) {
 290.165 +                disposeFrameBtnActionPerformed(evt);
 290.166 +            }
 290.167 +        });
 290.168 +
 290.169 +        useSwingCb.setText("Use JFrame");
 290.170 +        useSwingCb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 290.171 +        useSwingCb.setMargin(new java.awt.Insets(0, 0, 0, 0));
 290.172 +
 290.173 +        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 290.174 +        getContentPane().setLayout(layout);
 290.175 +        layout.setHorizontalGroup(
 290.176 +            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 290.177 +            .addGroup(layout.createSequentialGroup()
 290.178 +                .addContainerGap()
 290.179 +                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 290.180 +                    .addGroup(layout.createSequentialGroup()
 290.181 +                        .addComponent(transparencySld, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE)
 290.182 +                        .addContainerGap())
 290.183 +                    .addComponent(jLabel1)
 290.184 +                    .addGroup(layout.createSequentialGroup()
 290.185 +                        .addComponent(shapedCb)
 290.186 +                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.187 +                        .addComponent(nonOpaqueChb)
 290.188 +                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.189 +                        .addComponent(useSwingCb)
 290.190 +                        .addContainerGap(102, Short.MAX_VALUE))
 290.191 +                    .addGroup(layout.createSequentialGroup()
 290.192 +                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 290.193 +                            .addGroup(layout.createSequentialGroup()
 290.194 +                                .addComponent(jLabel2)
 290.195 +                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 314, javax.swing.GroupLayout.PREFERRED_SIZE))
 290.196 +                            .addGroup(layout.createSequentialGroup()
 290.197 +                                .addComponent(passedBtn)
 290.198 +                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.199 +                                .addComponent(failedBtn)
 290.200 +                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 241, javax.swing.GroupLayout.PREFERRED_SIZE))
 290.201 +                            .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE)
 290.202 +                            .addGroup(layout.createSequentialGroup()
 290.203 +                                .addComponent(createFrameBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
 290.204 +                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.205 +                                .addComponent(disposeFrameBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)))
 290.206 +                        .addContainerGap())))
 290.207 +        );
 290.208 +        layout.setVerticalGroup(
 290.209 +            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 290.210 +            .addGroup(layout.createSequentialGroup()
 290.211 +                .addContainerGap()
 290.212 +                .addComponent(jLabel1)
 290.213 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.214 +                .addComponent(transparencySld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 290.215 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.216 +                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 290.217 +                    .addComponent(shapedCb)
 290.218 +                    .addComponent(nonOpaqueChb)
 290.219 +                    .addComponent(useSwingCb))
 290.220 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.221 +                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 290.222 +                    .addComponent(disposeFrameBtn)
 290.223 +                    .addComponent(createFrameBtn))
 290.224 +                .addGap(17, 17, 17)
 290.225 +                .addComponent(jLabel2)
 290.226 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.227 +                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)
 290.228 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 290.229 +                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 290.230 +                    .addComponent(passedBtn)
 290.231 +                    .addComponent(failedBtn))
 290.232 +                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 290.233 +        );
 290.234 +        pack();
 290.235 +    }// </editor-fold>//GEN-END:initComponents
 290.236 +
 290.237 +    private void nonOpaqueChbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nonOpaqueChbActionPerformed
 290.238 +        if (testFrame != null) {
 290.239 +            // REMIND: this path in the test doesn't work well (test bug)
 290.240 +//            AWTUtilities.setWindowOpaque(testFrame, !nonOpaqueChb.isSelected());
 290.241 +        }
 290.242 +    }//GEN-LAST:event_nonOpaqueChbActionPerformed
 290.243 +
 290.244 +    private void shapedCbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_shapedCbActionPerformed
 290.245 +        if (testFrame != null) {
 290.246 +            Shape s = null;
 290.247 +            if (shapedCb.isSelected()) {
 290.248 +                s = new Ellipse2D.Double(0, 0,
 290.249 +                                         testFrame.getWidth(),
 290.250 +                                         testFrame.getHeight());
 290.251 +            }
 290.252 +            AWTUtilities.setWindowShape(testFrame, s);
 290.253 +        }
 290.254 +    }//GEN-LAST:event_shapedCbActionPerformed
 290.255 +
 290.256 +    private void transparencySldStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_transparencySldStateChanged
 290.257 +        JSlider source = (JSlider)evt.getSource();
 290.258 +            int transl = transparencySld.getValue();
 290.259 +            if (testFrame != null) {
 290.260 +                AWTUtilities.setWindowOpacity(testFrame, (float)transl/100f);
 290.261 +            }
 290.262 +    }//GEN-LAST:event_transparencySldStateChanged
 290.263 +
 290.264 +    private void failedBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_failedBtnActionPerformed
 290.265 +        disposeFrameBtnActionPerformed(evt);
 290.266 +        dispose();
 290.267 +        failed = true;
 290.268 +        done.countDown();
 290.269 +    }//GEN-LAST:event_failedBtnActionPerformed
 290.270 +
 290.271 +    private void disposeFrameBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_disposeFrameBtnActionPerformed
 290.272 +        TSFrame.stopThreads();
 290.273 +        if (testFrame != null) {
 290.274 +            testFrame.dispose();
 290.275 +            testFrame = null;
 290.276 +        }
 290.277 +    }//GEN-LAST:event_disposeFrameBtnActionPerformed
 290.278 +
 290.279 +    private void createFrameBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createFrameBtnActionPerformed
 290.280 +        disposeFrameBtnActionPerformed(evt);
 290.281 +        int transl = transparencySld.getValue();
 290.282 +        testFrame = TSFrame.createGui(gcToUse,
 290.283 +                useSwingCb.isSelected(), shapedCb.isSelected(),
 290.284 +                (transl < 100), nonOpaqueChb.isSelected(),
 290.285 +                (float)transl/100f);
 290.286 +    }//GEN-LAST:event_createFrameBtnActionPerformed
 290.287 +
 290.288 +    private void passedBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_passedBtnActionPerformed
 290.289 +        disposeFrameBtnActionPerformed(evt);
 290.290 +        dispose();
 290.291 +        done.countDown();
 290.292 +    }//GEN-LAST:event_passedBtnActionPerformed
 290.293 +
 290.294 +    /**
 290.295 +     * @param args the command line arguments
 290.296 +     */
 290.297 +    public static void main(String args[]) {
 290.298 +        done = new CountDownLatch(1);
 290.299 +        java.awt.EventQueue.invokeLater(new Runnable() {
 290.300 +            public void run() {
 290.301 +                new TranslucentShapedFrameTest().setVisible(true);
 290.302 +            }
 290.303 +        });
 290.304 +        try {
 290.305 +            done.await();
 290.306 +        } catch (InterruptedException ex) {}
 290.307 +        if (failed) {
 290.308 +            throw new RuntimeException("Test FAILED");
 290.309 +        }
 290.310 +        System.out.println("Test PASSED");
 290.311 +    }
 290.312 +
 290.313 +    private void checkEffects() {
 290.314 +        if (!AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSPARENT)) {
 290.315 +            shapedCb.setEnabled(false);
 290.316 +        }
 290.317 +
 290.318 +        if (!AWTUtilities.isTranslucencySupported(TRANSLUCENT)) {
 290.319 +            transparencySld.setEnabled(false);
 290.320 +        }
 290.321 +
 290.322 +        GraphicsConfiguration gc = null;
 290.323 +        if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSLUCENT)) {
 290.324 +            gc = findGraphicsConfig();
 290.325 +            if (gc == null) {
 290.326 +                nonOpaqueChb.setEnabled(false);
 290.327 +            }
 290.328 +        }
 290.329 +
 290.330 +        gcToUse = gc;
 290.331 +    }
 290.332 +
 290.333 +    private GraphicsConfiguration findGraphicsConfig() {
 290.334 +        GraphicsDevice gd =
 290.335 +            GraphicsEnvironment.getLocalGraphicsEnvironment().
 290.336 +                getDefaultScreenDevice();
 290.337 +        GraphicsConfiguration gcs[] = gd.getConfigurations();
 290.338 +        for (GraphicsConfiguration gc : gcs) {
 290.339 +            if (AWTUtilities.isTranslucencyCapable(gc)) {
 290.340 +                return gc;
 290.341 +            }
 290.342 +        }
 290.343 +        return null;
 290.344 +    }
 290.345 +
 290.346 +    // Variables declaration - do not modify//GEN-BEGIN:variables
 290.347 +    private javax.swing.ButtonGroup createDisposeGrp;
 290.348 +    private javax.swing.JToggleButton createFrameBtn;
 290.349 +    private javax.swing.JToggleButton disposeFrameBtn;
 290.350 +    private javax.swing.JButton failedBtn;
 290.351 +    private javax.swing.JLabel jLabel1;
 290.352 +    private javax.swing.JLabel jLabel2;
 290.353 +    private javax.swing.JScrollPane jScrollPane1;
 290.354 +    private javax.swing.JTextArea jTextArea1;
 290.355 +    private javax.swing.JCheckBox nonOpaqueChb;
 290.356 +    private javax.swing.JButton passedBtn;
 290.357 +    private javax.swing.JCheckBox shapedCb;
 290.358 +    private javax.swing.JSlider transparencySld;
 290.359 +    private javax.swing.JCheckBox useSwingCb;
 290.360 +    // End of variables declaration//GEN-END:variables
 290.361 +
 290.362 +}
   291.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   291.2 +++ b/test/com/sun/awt/Translucency/WindowOpacity.java	Thu Apr 16 19:10:32 2009 -0700
   291.3 @@ -0,0 +1,461 @@
   291.4 +/*
   291.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   291.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   291.7 + *
   291.8 + * This code is free software; you can redistribute it and/or modify it
   291.9 + * under the terms of the GNU General Public License version 2 only, as
  291.10 + * published by the Free Software Foundation.
  291.11 + *
  291.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  291.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  291.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  291.15 + * version 2 for more details (a copy is included in the LICENSE file that
  291.16 + * accompanied this code).
  291.17 + *
  291.18 + * You should have received a copy of the GNU General Public License version
  291.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  291.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  291.21 + *
  291.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  291.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  291.24 + * have any questions.
  291.25 + */
  291.26 +
  291.27 +/*
  291.28 +  @test %W% %E%
  291.29 +  @bug 6594131
  291.30 +  @summary Tests the AWTUtilities.get/setWindowOpacity() methods
  291.31 +  @author anthony.petrov@...: area=awt.toplevel
  291.32 +  @run main WindowOpacity
  291.33 +*/
  291.34 +
  291.35 +import java.awt.*;
  291.36 +import java.awt.event.*;
  291.37 +
  291.38 +import com.sun.awt.AWTUtilities;
  291.39 +import sun.awt.SunToolkit;
  291.40 +
  291.41 +public class WindowOpacity
  291.42 +{
  291.43 +    //*** test-writer defined static variables go here ***
  291.44 +
  291.45 +    private static void realSync() {
  291.46 +        ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
  291.47 +    }
  291.48 +
  291.49 +
  291.50 +    private static void init()
  291.51 +    {
  291.52 +        //*** Create instructions for the user here ***
  291.53 +        String[] instructions =
  291.54 +        {
  291.55 +            "This is an AUTOMATIC test, simply wait until it is done.",
  291.56 +            "The result (passed or failed) will be shown in the",
  291.57 +            "message window below."
  291.58 +        };
  291.59 +        Sysout.createDialog( );
  291.60 +        Sysout.printInstructions( instructions );
  291.61 +
  291.62 +        if (!AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT)) {
  291.63 +            System.out.println("Either the Toolkit or the native system does not support controlling the window opacity level.");
  291.64 +            pass();
  291.65 +        }
  291.66 +
  291.67 +        boolean passed;
  291.68 +
  291.69 +        Frame f = new Frame("Opacity test");
  291.70 +
  291.71 +        passed = false;
  291.72 +        try {
  291.73 +            AWTUtilities.getWindowOpacity(null);
  291.74 +        } catch (NullPointerException e) {
  291.75 +            passed = true;
  291.76 +        }
  291.77 +        if (!passed) {
  291.78 +            fail("getWindowOpacity() allows passing null.");
  291.79 +        }
  291.80 +
  291.81 +
  291.82 +        passed = false;
  291.83 +        try {
  291.84 +            AWTUtilities.setWindowOpacity(null, 0.5f);
  291.85 +        } catch (NullPointerException e) {
  291.86 +            passed = true;
  291.87 +        }
  291.88 +        if (!passed) {
  291.89 +            fail("setWindowOpacity() allows passing null.");
  291.90 +        }
  291.91 +
  291.92 +
  291.93 +        float curOpacity = AWTUtilities.getWindowOpacity(f);
  291.94 +        if (curOpacity < 1.0f || curOpacity > 1.0f) {
  291.95 +            fail("getWindowOpacity() reports the initial opacity level other than 1.0: " + curOpacity);
  291.96 +        }
  291.97 +
  291.98 +
  291.99 +
 291.100 +        passed = false;
 291.101 +        try {
 291.102 +            AWTUtilities.setWindowOpacity(f, -0.5f);
 291.103 +        } catch (IllegalArgumentException e) {
 291.104 +            passed = true;
 291.105 +        }
 291.106 +        if (!passed) {
 291.107 +            fail("setWindowOpacity() allows passing negative opacity level.");
 291.108 +        }
 291.109 +
 291.110 +
 291.111 +
 291.112 +        passed = false;
 291.113 +        try {
 291.114 +            AWTUtilities.setWindowOpacity(f, 1.5f);
 291.115 +        } catch (IllegalArgumentException e) {
 291.116 +            passed = true;
 291.117 +        }
 291.118 +        if (!passed) {
 291.119 +            fail("setWindowOpacity() allows passing opacity level greater than 1.0.");
 291.120 +        }
 291.121 +
 291.122 +
 291.123 +        AWTUtilities.setWindowOpacity(f, 0.5f);
 291.124 +
 291.125 +        curOpacity = AWTUtilities.getWindowOpacity(f);
 291.126 +        if (curOpacity < 0.5f || curOpacity > 0.5f) {
 291.127 +            fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity: " + curOpacity);
 291.128 +        }
 291.129 +
 291.130 +
 291.131 +        AWTUtilities.setWindowOpacity(f, 0.75f);
 291.132 +
 291.133 +        curOpacity = AWTUtilities.getWindowOpacity(f);
 291.134 +        if (curOpacity < 0.75f || curOpacity > 0.75f) {
 291.135 +            fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity the second time: " + curOpacity);
 291.136 +        }
 291.137 +
 291.138 +
 291.139 +        f.setBounds(100, 100, 300, 200);
 291.140 +        f.setVisible(true);
 291.141 +
 291.142 +        realSync();
 291.143 +
 291.144 +        curOpacity = AWTUtilities.getWindowOpacity(f);
 291.145 +        if (curOpacity < 0.75f || curOpacity > 0.75f) {
 291.146 +            fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity before showing the frame: " + curOpacity);
 291.147 +        }
 291.148 +
 291.149 +
 291.150 +
 291.151 +        AWTUtilities.setWindowOpacity(f, 0.5f);
 291.152 +        realSync();
 291.153 +
 291.154 +        curOpacity = AWTUtilities.getWindowOpacity(f);
 291.155 +        if (curOpacity < 0.5f || curOpacity > 0.5f) {
 291.156 +            fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity after showing the frame: " + curOpacity);
 291.157 +        }
 291.158 +
 291.159 +        WindowOpacity.pass();
 291.160 +
 291.161 +    }//End  init()
 291.162 +
 291.163 +
 291.164 +
 291.165 +    /*****************************************************
 291.166 +     * Standard Test Machinery Section
 291.167 +     * DO NOT modify anything in this section -- it's a
 291.168 +     * standard chunk of code which has all of the
 291.169 +     * synchronisation necessary for the test harness.
 291.170 +     * By keeping it the same in all tests, it is easier
 291.171 +     * to read and understand someone else's test, as
 291.172 +     * well as insuring that all tests behave correctly
 291.173 +     * with the test harness.
 291.174 +     * There is a section following this for test-
 291.175 +     * classes
 291.176 +     ******************************************************/
 291.177 +    private static boolean theTestPassed = false;
 291.178 +    private static boolean testGeneratedInterrupt = false;
 291.179 +    private static String failureMessage = "";
 291.180 +
 291.181 +    private static Thread mainThread = null;
 291.182 +
 291.183 +    private static int sleepTime = 300000;
 291.184 +
 291.185 +    // Not sure about what happens if multiple of this test are
 291.186 +    //  instantiated in the same VM.  Being static (and using
 291.187 +    //  static vars), it aint gonna work.  Not worrying about
 291.188 +    //  it for now.
 291.189 +    public static void main( String args[] ) throws InterruptedException
 291.190 +    {
 291.191 +        mainThread = Thread.currentThread();
 291.192 +        try
 291.193 +        {
 291.194 +            init();
 291.195 +        }
 291.196 +        catch( TestPassedException e )
 291.197 +        {
 291.198 +            //The test passed, so just return from main and harness will
 291.199 +            // interepret this return as a pass
 291.200 +            return;
 291.201 +        }
 291.202 +        //At this point, neither test pass nor test fail has been
 291.203 +        // called -- either would have thrown an exception and ended the
 291.204 +        // test, so we know we have multiple threads.
 291.205 +
 291.206 +        //Test involves other threads, so sleep and wait for them to
 291.207 +        // called pass() or fail()
 291.208 +        try
 291.209 +        {
 291.210 +            Thread.sleep( sleepTime );
 291.211 +            //Timed out, so fail the test
 291.212 +            throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
 291.213 +        }
 291.214 +        catch (InterruptedException e)
 291.215 +        {
 291.216 +            //The test harness may have interrupted the test.  If so, rethrow the exception
 291.217 +            // so that the harness gets it and deals with it.
 291.218 +            if( ! testGeneratedInterrupt ) throw e;
 291.219 +
 291.220 +            //reset flag in case hit this code more than once for some reason (just safety)
 291.221 +            testGeneratedInterrupt = false;
 291.222 +
 291.223 +            if ( theTestPassed == false )
 291.224 +            {
 291.225 +                throw new RuntimeException( failureMessage );
 291.226 +            }
 291.227 +        }
 291.228 +
 291.229 +    }//main
 291.230 +
 291.231 +    public static synchronized void setTimeoutTo( int seconds )
 291.232 +    {
 291.233 +        sleepTime = seconds * 1000;
 291.234 +    }
 291.235 +
 291.236 +    public static synchronized void pass()
 291.237 +    {
 291.238 +        Sysout.println( "The test passed." );
 291.239 +        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
 291.240 +        //first check if this is executing in main thread
 291.241 +        if ( mainThread == Thread.currentThread() )
 291.242 +        {
 291.243 +            //Still in the main thread, so set the flag just for kicks,
 291.244 +            // and throw a test passed exception which will be caught
 291.245 +            // and end the test.
 291.246 +            theTestPassed = true;
 291.247 +            throw new TestPassedException();
 291.248 +        }
 291.249 +        theTestPassed = true;
 291.250 +        testGeneratedInterrupt = true;
 291.251 +        mainThread.interrupt();
 291.252 +    }//pass()
 291.253 +
 291.254 +    public static synchronized void fail()
 291.255 +    {
 291.256 +        //test writer didn't specify why test failed, so give generic
 291.257 +        fail( "it just plain failed! :-)" );
 291.258 +    }
 291.259 +
 291.260 +    public static synchronized void fail( String whyFailed )
 291.261 +    {
 291.262 +        Sysout.println( "The test failed: " + whyFailed );
 291.263 +        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
 291.264 +        //check if this called from main thread
 291.265 +        if ( mainThread == Thread.currentThread() )
 291.266 +        {
 291.267 +            //If main thread, fail now 'cause not sleeping
 291.268 +            throw new RuntimeException( whyFailed );
 291.269 +        }
 291.270 +        theTestPassed = false;
 291.271 +        testGeneratedInterrupt = true;
 291.272 +        failureMessage = whyFailed;
 291.273 +        mainThread.interrupt();
 291.274 +    }//fail()
 291.275 +
 291.276 +}// class WindowOpacity
 291.277 +
 291.278 +//This exception is used to exit from any level of call nesting
 291.279 +// when it's determined that the test has passed, and immediately
 291.280 +// end the test.
 291.281 +class TestPassedException extends RuntimeException
 291.282 +{
 291.283 +}
 291.284 +
 291.285 +//*********** End Standard Test Machinery Section **********
 291.286 +
 291.287 +
 291.288 +//************ Begin classes defined for the test ****************
 291.289 +
 291.290 +// if want to make listeners, here is the recommended place for them, then instantiate
 291.291 +//  them in init()
 291.292 +
 291.293 +/* Example of a class which may be written as part of a test
 291.294 +class NewClass implements anInterface
 291.295 + {
 291.296 +   static int newVar = 0;
 291.297 +
 291.298 +   public void eventDispatched(AWTEvent e)
 291.299 +    {
 291.300 +      //Counting events to see if we get enough
 291.301 +      eventCount++;
 291.302 +
 291.303 +      if( eventCount == 20 )
 291.304 +       {
 291.305 +         //got enough events, so pass
 291.306 +
 291.307 +         WindowOpacity.pass();
 291.308 +       }
 291.309 +      else if( tries == 20 )
 291.310 +       {
 291.311 +         //tried too many times without getting enough events so fail
 291.312 +
 291.313 +         WindowOpacity.fail();
 291.314 +       }
 291.315 +
 291.316 +    }// eventDispatched()
 291.317 +
 291.318 + }// NewClass class
 291.319 +
 291.320 +*/
 291.321 +
 291.322 +
 291.323 +//************** End classes defined for the test *******************
 291.324 +
 291.325 +
 291.326 +
 291.327 +
 291.328 +/****************************************************
 291.329 + Standard Test Machinery
 291.330 + DO NOT modify anything below -- it's a standard
 291.331 +  chunk of code whose purpose is to make user
 291.332 +  interaction uniform, and thereby make it simpler
 291.333 +  to read and understand someone else's test.
 291.334 + ****************************************************/
 291.335 +
 291.336 +/**
 291.337 + This is part of the standard test machinery.
 291.338 + It creates a dialog (with the instructions), and is the interface
 291.339 +  for sending text messages to the user.
 291.340 + To print the instructions, send an array of strings to Sysout.createDialog
 291.341 +  WithInstructions method.  Put one line of instructions per array entry.
 291.342 + To display a message for the tester to see, simply call Sysout.println
 291.343 +  with the string to be displayed.
 291.344 + This mimics System.out.println but works within the test harness as well
 291.345 +  as standalone.
 291.346 + */
 291.347 +
 291.348 +class Sysout
 291.349 +{
 291.350 +    private static TestDialog dialog;
 291.351 +
 291.352 +    public static void createDialogWithInstructions( String[] instructions )
 291.353 +    {
 291.354 +        dialog = new TestDialog( new Frame(), "Instructions" );
 291.355 +        dialog.printInstructions( instructions );
 291.356 +        dialog.setVisible(true);
 291.357 +        println( "Any messages for the tester will display here." );
 291.358 +    }
 291.359 +
 291.360 +    public static void createDialog( )
 291.361 +    {
 291.362 +        dialog = new TestDialog( new Frame(), "Instructions" );
 291.363 +        String[] defInstr = { "Instructions will appear here. ", "" } ;
 291.364 +        dialog.printInstructions( defInstr );
 291.365 +        dialog.setVisible(true);
 291.366 +        println( "Any messages for the tester will display here." );
 291.367 +    }
 291.368 +
 291.369 +
 291.370 +    public static void printInstructions( String[] instructions )
 291.371 +    {
 291.372 +        dialog.printInstructions( instructions );
 291.373 +    }
 291.374 +
 291.375 +
 291.376 +    public static void println( String messageIn )
 291.377 +    {
 291.378 +        dialog.displayMessage( messageIn );
 291.379 +        System.out.println(messageIn);
 291.380 +    }
 291.381 +
 291.382 +}// Sysout  class
 291.383 +
 291.384 +/**
 291.385 +  This is part of the standard test machinery.  It provides a place for the
 291.386 +   test instructions to be displayed, and a place for interactive messages
 291.387 +   to the user to be displayed.
 291.388 +  To have the test instructions displayed, see Sysout.
 291.389 +  To have a message to the user be displayed, see Sysout.
 291.390 +  Do not call anything in this dialog directly.
 291.391 +  */
 291.392 +class TestDialog extends Dialog
 291.393 +{
 291.394 +
 291.395 +    TextArea instructionsText;
 291.396 +    TextArea messageText;
 291.397 +    int maxStringLength = 80;
 291.398 +
 291.399 +    //DO NOT call this directly, go through Sysout
 291.400 +    public TestDialog( Frame frame, String name )
 291.401 +    {
 291.402 +        super( frame, name );
 291.403 +        int scrollBoth = TextArea.SCROLLBARS_BOTH;
 291.404 +        instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
 291.405 +        add( "North", instructionsText );
 291.406 +
 291.407 +        messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
 291.408 +        add("Center", messageText);
 291.409 +
 291.410 +        pack();
 291.411 +
 291.412 +        setVisible(true);
 291.413 +    }// TestDialog()
 291.414 +
 291.415 +    //DO NOT call this directly, go through Sysout
 291.416 +    public void printInstructions( String[] instructions )
 291.417 +    {
 291.418 +        //Clear out any current instructions
 291.419 +        instructionsText.setText( "" );
 291.420 +
 291.421 +        //Go down array of instruction strings
 291.422 +
 291.423 +        String printStr, remainingStr;
 291.424 +        for( int i=0; i < instructions.length; i++ )
 291.425 +        {
 291.426 +            //chop up each into pieces maxSringLength long
 291.427 +            remainingStr = instructions[ i ];
 291.428 +            while( remainingStr.length() > 0 )
 291.429 +            {
 291.430 +                //if longer than max then chop off first max chars to print
 291.431 +                if( remainingStr.length() >= maxStringLength )
 291.432 +                {
 291.433 +                    //Try to chop on a word boundary
 291.434 +                    int posOfSpace = remainingStr.
 291.435 +                        lastIndexOf( ' ', maxStringLength - 1 );
 291.436 +
 291.437 +                    if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
 291.438 +
 291.439 +                    printStr = remainingStr.substring( 0, posOfSpace + 1 );
 291.440 +                    remainingStr = remainingStr.substring( posOfSpace + 1 );
 291.441 +                }
 291.442 +                //else just print
 291.443 +                else
 291.444 +                {
 291.445 +                    printStr = remainingStr;
 291.446 +                    remainingStr = "";
 291.447 +                }
 291.448 +
 291.449 +                instructionsText.append( printStr + "\n" );
 291.450 +
 291.451 +            }// while
 291.452 +
 291.453 +        }// for
 291.454 +
 291.455 +    }//printInstructions()
 291.456 +
 291.457 +    //DO NOT call this directly, go through Sysout
 291.458 +    public void displayMessage( String messageIn )
 291.459 +    {
 291.460 +        messageText.append( messageIn + "\n" );
 291.461 +        System.out.println(messageIn);
 291.462 +    }
 291.463 +
 291.464 +}// TestDialog  class
   292.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   292.2 +++ b/test/com/sun/java/swing/plaf/gtk/Test6635110.java	Thu Apr 16 19:10:32 2009 -0700
   292.3 @@ -0,0 +1,65 @@
   292.4 +/*
   292.5 + * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
   292.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   292.7 + *
   292.8 + * This code is free software; you can redistribute it and/or modify it
   292.9 + * under the terms of the GNU General Public License version 2 only, as
  292.10 + * published by the Free Software Foundation.
  292.11 + *
  292.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  292.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  292.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  292.15 + * version 2 for more details (a copy is included in the LICENSE file that
  292.16 + * accompanied this code).
  292.17 + *
  292.18 + * You should have received a copy of the GNU General Public License version
  292.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  292.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  292.21 + *
  292.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  292.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  292.24 + * have any questions.
  292.25 + */
  292.26 +
  292.27 +/* @test
  292.28 +   @bug 6635110
  292.29 +   @summary GTK icons should not throw NPE when called by non-GTK UI
  292.30 +   @author Peter Zhelezniakov
  292.31 +   @run main Test6635110
  292.32 +*/
  292.33 +
  292.34 +import com.sun.java.swing.plaf.gtk.GTKLookAndFeel;
  292.35 +import javax.swing.*;
  292.36 +import java.awt.*;
  292.37 +import java.awt.image.BufferedImage;
  292.38 +import javax.swing.plaf.basic.*;
  292.39 +
  292.40 +
  292.41 +public class Test6635110 implements Runnable {
  292.42 +
  292.43 +    static final int WIDTH = 160;
  292.44 +    static final int HEIGHT = 80;
  292.45 +    final BufferedImage IMAGE =
  292.46 +            new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
  292.47 +
  292.48 +    @Override public void run() {
  292.49 +        JMenu menu = new JMenu("menu");
  292.50 +        menu.setUI(new BasicMenuUI());
  292.51 +        paint(menu);
  292.52 +
  292.53 +        JToolBar tb = new JToolBar();
  292.54 +        tb.setFloatable(true);
  292.55 +        tb.setUI(new BasicToolBarUI());
  292.56 +        paint(tb);
  292.57 +    }
  292.58 +
  292.59 +    void paint(Component c) {
  292.60 +        c.setSize(WIDTH, HEIGHT);
  292.61 +        c.paint(IMAGE.getGraphics());
  292.62 +    }
  292.63 +
  292.64 +    public static void main(String[] args) throws Exception {
  292.65 +        UIManager.setLookAndFeel(new GTKLookAndFeel());
  292.66 +        SwingUtilities.invokeAndWait(new Test6635110());
  292.67 +    }
  292.68 +}
   293.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   293.2 +++ b/test/java/awt/Component/NoUpdateUponShow/NoUpdateUponShow.java	Thu Apr 16 19:10:32 2009 -0700
   293.3 @@ -0,0 +1,381 @@
   293.4 +/*
   293.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   293.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   293.7 + *
   293.8 + * This code is free software; you can redistribute it and/or modify it
   293.9 + * under the terms of the GNU General Public License version 2 only, as
  293.10 + * published by the Free Software Foundation.
  293.11 + *
  293.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  293.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  293.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  293.15 + * version 2 for more details (a copy is included in the LICENSE file that
  293.16 + * accompanied this code).
  293.17 + *
  293.18 + * You should have received a copy of the GNU General Public License version
  293.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  293.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  293.21 + *
  293.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  293.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  293.24 + * have any questions.
  293.25 + */
  293.26 +
  293.27 +/*
  293.28 +  @test
  293.29 +  @bug 6774258
  293.30 +  @summary  api/java_awt/Component/index.html#PaintUpdate fails randomly
  293.31 +  @author dmitry.cherepanov@...: area=awt.painting
  293.32 +  @run main NoUpdateUponShow
  293.33 +*/
  293.34 +
  293.35 +/**
  293.36 + * NoUpdateUponShow.java
  293.37 + *
  293.38 + * summary:  System-level painting operations shouldn't make call to update()
  293.39 + */
  293.40 +
  293.41 +import java.awt.*;
  293.42 +import sun.awt.SunToolkit;
  293.43 +
  293.44 +public class NoUpdateUponShow
  293.45 +{
  293.46 +
  293.47 +    static volatile boolean wasUpdate = false;
  293.48 +
  293.49 +    private static void init()
  293.50 +    {
  293.51 +        //*** Create instructions for the user here ***
  293.52 +
  293.53 +        String[] instructions =
  293.54 +        {
  293.55 +            "This is an AUTOMATIC test, simply wait until it is done.",
  293.56 +            "The result (passed or failed) will be shown in the",
  293.57 +            "message window below."
  293.58 +        };
  293.59 +        Sysout.createDialog( );
  293.60 +        Sysout.printInstructions( instructions );
  293.61 +
  293.62 +
  293.63 +        // Create the frame and the button
  293.64 +        Frame f = new Frame();
  293.65 +        f.setBounds(100, 100, 200, 200);
  293.66 +        f.setLayout(new FlowLayout());
  293.67 +        f.add(new Button() {
  293.68 +            @Override
  293.69 +            public void update(Graphics g) {
  293.70 +                wasUpdate = true;
  293.71 +                super.update(g);
  293.72 +            }
  293.73 +        });
  293.74 +        f.setVisible(true);
  293.75 +
  293.76 +        ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
  293.77 +
  293.78 +        if (wasUpdate) {
  293.79 +            fail(" Unexpected update. ");
  293.80 +        } else {
  293.81 +            pass();
  293.82 +        }
  293.83 +    }//End  init()
  293.84 +
  293.85 +    /*****************************************************
  293.86 +     * Standard Test Machinery Section
  293.87 +     * DO NOT modify anything in this section -- it's a
  293.88 +     * standard chunk of code which has all of the
  293.89 +     * synchronisation necessary for the test harness.
  293.90 +     * By keeping it the same in all tests, it is easier
  293.91 +     * to read and understand someone else's test, as
  293.92 +     * well as insuring that all tests behave correctly
  293.93 +     * with the test harness.
  293.94 +     * There is a section following this for test-
  293.95 +     * classes
  293.96 +     ******************************************************/
  293.97 +    private static boolean theTestPassed = false;
  293.98 +    private static boolean testGeneratedInterrupt = false;
  293.99 +    private static String failureMessage = "";
 293.100 +
 293.101 +    private static Thread mainThread = null;
 293.102 +
 293.103 +    private static int sleepTime = 300000;
 293.104 +
 293.105 +    // Not sure about what happens if multiple of this test are
 293.106 +    //  instantiated in the same VM.  Being static (and using
 293.107 +    //  static vars), it aint gonna work.  Not worrying about
 293.108 +    //  it for now.
 293.109 +    public static void main( String args[] ) throws InterruptedException
 293.110 +    {
 293.111 +        mainThread = Thread.currentThread();
 293.112 +        try
 293.113 +        {
 293.114 +            init();
 293.115 +        }
 293.116 +        catch( TestPassedException e )
 293.117 +        {
 293.118 +            //The test passed, so just return from main and harness will
 293.119 +            // interepret this return as a pass
 293.120 +            return;
 293.121 +        }
 293.122 +        //At this point, neither test pass nor test fail has been
 293.123 +        // called -- either would have thrown an exception and ended the
 293.124 +        // test, so we know we have multiple threads.
 293.125 +
 293.126 +        //Test involves other threads, so sleep and wait for them to
 293.127 +        // called pass() or fail()
 293.128 +        try
 293.129 +        {
 293.130 +            Thread.sleep( sleepTime );
 293.131 +            //Timed out, so fail the test
 293.132 +            throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
 293.133 +        }
 293.134 +        catch (InterruptedException e)
 293.135 +        {
 293.136 +            //The test harness may have interrupted the test.  If so, rethrow the exception
 293.137 +            // so that the harness gets it and deals with it.
 293.138 +            if( ! testGeneratedInterrupt ) throw e;
 293.139 +
 293.140 +            //reset flag in case hit this code more than once for some reason (just safety)
 293.141 +            testGeneratedInterrupt = false;
 293.142 +
 293.143 +            if ( theTestPassed == false )
 293.144 +            {
 293.145 +                throw new RuntimeException( failureMessage );
 293.146 +            }
 293.147 +        }
 293.148 +
 293.149 +    }//main
 293.150 +
 293.151 +    public static synchronized void setTimeoutTo( int seconds )
 293.152 +    {
 293.153 +        sleepTime = seconds * 1000;
 293.154 +    }
 293.155 +
 293.156 +    public static synchronized void pass()
 293.157 +    {
 293.158 +        Sysout.println( "The test passed." );
 293.159 +        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
 293.160 +        //first check if this is executing in main thread
 293.161 +        if ( mainThread == Thread.currentThread() )
 293.162 +        {
 293.163 +            //Still in the main thread, so set the flag just for kicks,
 293.164 +            // and throw a test passed exception which will be caught
 293.165 +            // and end the test.
 293.166 +            theTestPassed = true;
 293.167 +            throw new TestPassedException();
 293.168 +        }
 293.169 +        theTestPassed = true;
 293.170 +        testGeneratedInterrupt = true;
 293.171 +        mainThread.interrupt();
 293.172 +    }//pass()
 293.173 +
 293.174 +    public static synchronized void fail()
 293.175 +    {
 293.176 +        //test writer didn't specify why test failed, so give generic
 293.177 +        fail( "it just plain failed! :-)" );
 293.178 +    }
 293.179 +
 293.180 +    public static synchronized void fail( String whyFailed )
 293.181 +    {
 293.182 +        Sysout.println( "The test failed: " + whyFailed );
 293.183 +        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
 293.184 +        //check if this called from main thread
 293.185 +        if ( mainThread == Thread.currentThread() )
 293.186 +        {
 293.187 +            //If main thread, fail now 'cause not sleeping
 293.188 +            throw new RuntimeException( whyFailed );
 293.189 +        }
 293.190 +        theTestPassed = false;
 293.191 +        testGeneratedInterrupt = true;
 293.192 +        failureMessage = whyFailed;
 293.193 +        mainThread.interrupt();
 293.194 +    }//fail()
 293.195 +
 293.196 +}// class ValidBounds
 293.197 +
 293.198 +//This exception is used to exit from any level of call nesting
 293.199 +// when it's determined that the test has passed, and immediately
 293.200 +// end the test.
 293.201 +class TestPassedException extends RuntimeException
 293.202 +{
 293.203 +}
 293.204 +
 293.205 +//*********** End Standard Test Machinery Section **********
 293.206 +
 293.207 +
 293.208 +//************ Begin classes defined for the test ****************
 293.209 +
 293.210 +// if want to make listeners, here is the recommended place for them, then instantiate
 293.211 +//  them in init()
 293.212 +
 293.213 +/* Example of a class which may be written as part of a test
 293.214 +class NewClass implements anInterface
 293.215 + {
 293.216 +   static int newVar = 0;
 293.217 +
 293.218 +   public void eventDispatched(AWTEvent e)
 293.219 +    {
 293.220 +      //Counting events to see if we get enough
 293.221 +      eventCount++;
 293.222 +
 293.223 +      if( eventCount == 20 )
 293.224 +       {
 293.225 +         //got enough events, so pass
 293.226 +
 293.227 +         ValidBounds.pass();
 293.228 +       }
 293.229 +      else if( tries == 20 )
 293.230 +       {
 293.231 +         //tried too many times without getting enough events so fail
 293.232 +
 293.233 +         ValidBounds.fail();
 293.234 +       }
 293.235 +
 293.236 +    }// eventDispatched()
 293.237 +
 293.238 + }// NewClass class
 293.239 +
 293.240 +*/
 293.241 +
 293.242 +
 293.243 +//************** End classes defined for the test *******************
 293.244 +
 293.245 +
 293.246 +
 293.247 +
 293.248 +/****************************************************
 293.249 + Standard Test Machinery
 293.250 + DO NOT modify anything below -- it's a standard
 293.251 +  chunk of code whose purpose is to make user
 293.252 +  interaction uniform, and thereby make it simpler
 293.253 +  to read and understand someone else's test.
 293.254 + ****************************************************/
 293.255 +
 293.256 +/**
 293.257 + This is part of the standard test machinery.
 293.258 + It creates a dialog (with the instructions), and is the interface
 293.259 +  for sending text messages to the user.
 293.260 + To print the instructions, send an array of strings to Sysout.createDialog
 293.261 +  WithInstructions method.  Put one line of instructions per array entry.
 293.262 + To display a message for the tester to see, simply call Sysout.println
 293.263 +  with the string to be displayed.
 293.264 + This mimics System.out.println but works within the test harness as well
 293.265 +  as standalone.
 293.266 + */
 293.267 +
 293.268 +class Sysout
 293.269 +{
 293.270 +    private static TestDialog dialog;
 293.271 +
 293.272 +    public static void createDialogWithInstructions( String[] instructions )
 293.273 +    {
 293.274 +        dialog = new TestDialog( new Frame(), "Instructions" );
 293.275 +        dialog.printInstructions( instructions );
 293.276 +        dialog.setVisible(true);
 293.277 +        println( "Any messages for the tester will display here." );
 293.278 +    }
 293.279 +
 293.280 +    public static void createDialog( )
 293.281 +    {
 293.282 +        dialog = new TestDialog( new Frame(), "Instructions" );
 293.283 +        String[] defInstr = { "Instructions will appear here. ", "" } ;
 293.284 +        dialog.printInstructions( defInstr );
 293.285 +        dialog.setVisible(true);
 293.286 +        println( "Any messages for the tester will display here." );
 293.287 +    }
 293.288 +
 293.289 +
 293.290 +    public static void printInstructions( String[] instructions )
 293.291 +    {
 293.292 +        dialog.printInstructions( instructions );
 293.293 +    }
 293.294 +
 293.295 +
 293.296 +    public static void println( String messageIn )
 293.297 +    {
 293.298 +        dialog.displayMessage( messageIn );
 293.299 +        System.out.println(messageIn);
 293.300 +    }
 293.301 +
 293.302 +}// Sysout  class
 293.303 +
 293.304 +/**
 293.305 +  This is part of the standard test machinery.  It provides a place for the
 293.306 +   test instructions to be displayed, and a place for interactive messages
 293.307 +   to the user to be displayed.
 293.308 +  To have the test instructions displayed, see Sysout.
 293.309 +  To have a message to the user be displayed, see Sysout.
 293.310 +  Do not call anything in this dialog directly.
 293.311 +  */
 293.312 +class TestDialog extends Dialog
 293.313 +{
 293.314 +
 293.315 +    TextArea instructionsText;
 293.316 +    TextArea messageText;
 293.317 +    int maxStringLength = 80;
 293.318 +
 293.319 +    //DO NOT call this directly, go through Sysout
 293.320 +    public TestDialog( Frame frame, String name )
 293.321 +    {
 293.322 +        super( frame, name );
 293.323 +        int scrollBoth = TextArea.SCROLLBARS_BOTH;
 293.324 +        instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
 293.325 +        add( "North", instructionsText );
 293.326 +
 293.327 +        messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
 293.328 +        add("Center", messageText);
 293.329 +
 293.330 +        pack();
 293.331 +
 293.332 +        setVisible(true);
 293.333 +    }// TestDialog()
 293.334 +
 293.335 +    //DO NOT call this directly, go through Sysout
 293.336 +    public void printInstructions( String[] instructions )
 293.337 +    {
 293.338 +        //Clear out any current instructions
 293.339 +        instructionsText.setText( "" );
 293.340 +
 293.341 +        //Go down array of instruction strings
 293.342 +
 293.343 +        String printStr, remainingStr;
 293.344 +        for( int i=0; i < instructions.length; i++ )
 293.345 +        {
 293.346 +            //chop up each into pieces maxSringLength long
 293.347 +            remainingStr = instructions[ i ];
 293.348 +            while( remainingStr.length() > 0 )
 293.349 +            {
 293.350 +                //if longer than max then chop off first max chars to print
 293.351 +                if( remainingStr.length() >= maxStringLength )
 293.352 +                {
 293.353 +                    //Try to chop on a word boundary
 293.354 +                    int posOfSpace = remainingStr.
 293.355 +                        lastIndexOf( ' ', maxStringLength - 1 );
 293.356 +
 293.357 +                    if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
 293.358 +
 293.359 +                    printStr = remainingStr.substring( 0, posOfSpace + 1 );
 293.360 +                    remainingStr = remainingStr.substring( posOfSpace + 1 );
 293.361 +                }
 293.362 +                //else just print
 293.363 +                else
 293.364 +                {
 293.365 +                    printStr = remainingStr;
 293.366 +                    remainingStr = "";
 293.367 +                }
 293.368 +
 293.369 +                instructionsText.append( printStr + "\n" );
 293.370 +
 293.371 +            }// while
 293.372 +
 293.373 +        }// for
 293.374 +
 293.375 +    }//printInstructions()
 293.376 +
 293.377 +    //DO NOT call this directly, go through Sysout
 293.378 +    public void displayMessage( String messageIn )
 293.379 +    {
 293.380 +        messageText.append( messageIn + "\n" );
 293.381 +        System.out.println(messageIn);
 293.382 +    }
 293.383 +
 293.384 +}// TestDialog  class
   294.1 --- a/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java	Thu Apr 16 17:42:00 2009 +0100
   294.2 +++ b/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java	Thu Apr 16 19:10:32 2009 -0700
   294.3 @@ -118,7 +118,7 @@
   294.4      public boolean     handlesWheelScrolling(){return true;};
   294.5      public void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException{};
   294.6      public Image getBackBuffer(){return null;};
   294.7 -    public void flip(BufferCapabilities.FlipContents flipAction){};
   294.8 +    public void flip(int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction){};
   294.9      public void destroyBuffers(){};
  294.10  
  294.11      /**
   295.1 --- a/test/java/awt/EventQueue/6638195/bug6638195.java	Thu Apr 16 17:42:00 2009 +0100
   295.2 +++ b/test/java/awt/EventQueue/6638195/bug6638195.java	Thu Apr 16 19:10:32 2009 -0700
   295.3 @@ -76,8 +76,13 @@
   295.4          Callable<Void> afterDispatchCallable =
   295.5              new Callable<Void>() {
   295.6                  public Void call() {
   295.7 -                    delegate.afterDispatch(afterDispatchEventArgument[0],
   295.8 -                                           afterDispatchHandleArgument[0]);
   295.9 +                    try {
  295.10 +                        delegate.afterDispatch(afterDispatchEventArgument[0],
  295.11 +                                afterDispatchHandleArgument[0]);
  295.12 +                    }
  295.13 +                    catch (InterruptedException e) {
  295.14 +                        throw new RuntimeException("afterDispatch interrupted", e);
  295.15 +                    }
  295.16                      return null;
  295.17                  }
  295.18              };
  295.19 @@ -91,8 +96,13 @@
  295.20          Callable<Object> beforeDispatchCallable =
  295.21              new Callable<Object>() {
  295.22                  public Object call() {
  295.23 -                    return delegate.beforeDispatch(
  295.24 -                        beforeDispatchEventArgument[0]);
  295.25 +                    try {
  295.26 +                        return delegate.beforeDispatch(
  295.27 +                                beforeDispatchEventArgument[0]);
  295.28 +                    }
  295.29 +                    catch (InterruptedException e) {
  295.30 +                        throw new RuntimeException("beforeDispatch interrupted", e);
  295.31 +                    }
  295.32                  }
  295.33              };
  295.34          methodMap = new HashMap<String, Object>();
   296.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   296.2 +++ b/test/java/awt/Focus/ClearGlobalFocusOwnerTest/ClearGlobalFocusOwnerTest.java	Thu Apr 16 19:10:32 2009 -0700
   296.3 @@ -0,0 +1,95 @@
   296.4 +/*
   296.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   296.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   296.7 + *
   296.8 + * This code is free software; you can redistribute it and/or modify it
   296.9 + * under the terms of the GNU General Public License version 2 only, as
  296.10 + * published by the Free Software Foundation.
  296.11 + *
  296.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  296.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  296.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  296.15 + * version 2 for more details (a copy is included in the LICENSE file that
  296.16 + * accompanied this code).
  296.17 + *
  296.18 + * You should have received a copy of the GNU General Public License version
  296.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  296.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  296.21 + *
  296.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  296.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  296.24 + * have any questions.
  296.25 + */
  296.26 +
  296.27 +/*
  296.28 +  @test
  296.29 +  @bug 4390555
  296.30 +  @summary Synopsis: clearGlobalFocusOwner() is not trigerring permanent FOCUS_LOST event
  296.31 +  @author son@sparc.spb.su, anton.tarasov: area=awt.focus
  296.32 +  @library   ../../regtesthelpers
  296.33 +  @build Util
  296.34 +  @run main ClearGlobalFocusOwnerTest
  296.35 +*/
  296.36 +
  296.37 +import java.awt.*;
  296.38 +import java.awt.event.*;
  296.39 +import test.java.awt.regtesthelpers.Util;
  296.40 +
  296.41 +public class ClearGlobalFocusOwnerTest {
  296.42 +    static volatile boolean isFocusLost = false;
  296.43 +    static Frame frame = new Frame("Test frame");
  296.44 +    static Button button = new Button("Test button");
  296.45 +
  296.46 +    public static void main(String[] args) {
  296.47 +        button.addFocusListener(new FocusAdapter() {
  296.48 +                public void focusLost(FocusEvent fe) {
  296.49 +                    if (fe.isTemporary()) {
  296.50 +                        throw new TestFailedException("the FocusLost event is temporary: " + fe);
  296.51 +                    }
  296.52 +                    isFocusLost = true;
  296.53 +                }
  296.54 +            });
  296.55 +
  296.56 +        frame.add(button);
  296.57 +        frame.pack();
  296.58 +        frame.setVisible(true);
  296.59 +
  296.60 +        Util.waitForIdle(null);
  296.61 +
  296.62 +        if (!button.hasFocus()) {
  296.63 +            button.requestFocus();
  296.64 +            Util.waitForIdle(null);
  296.65 +            if (!button.hasFocus()) {
  296.66 +                throw new TestErrorException("couldn't focus " + button);
  296.67 +            }
  296.68 +        }
  296.69 +
  296.70 +        KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
  296.71 +
  296.72 +        Util.waitForIdle(null);
  296.73 +
  296.74 +        if (!isFocusLost) {
  296.75 +            throw new TestFailedException("no FocusLost event happened on clearGlobalFocusOwner");
  296.76 +        }
  296.77 +
  296.78 +        System.out.println("Test passed.");
  296.79 +    }
  296.80 +}
  296.81 +
  296.82 +/**
  296.83 + * Thrown when the behavior being verified is found wrong.
  296.84 + */
  296.85 +class TestFailedException extends RuntimeException {
  296.86 +    TestFailedException(String msg) {
  296.87 +        super("Test failed: " + msg);
  296.88 +    }
  296.89 +}
  296.90 +
  296.91 +/**
  296.92 + * Thrown when an error not related to the behavior being verified is encountered.
  296.93 + */
  296.94 +class TestErrorException extends RuntimeException {
  296.95 +    TestErrorException(String msg) {
  296.96 +        super("Unexpected error: " + msg);
  296.97 +    }
  296.98 +}
   297.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   297.2 +++ b/test/java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java	Thu Apr 16 19:10:32 2009 -0700
   297.3 @@ -0,0 +1,114 @@
   297.4 +/*
   297.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   297.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   297.7 + *
   297.8 + * This code is free software; you can redistribute it and/or modify it
   297.9 + * under the terms of the GNU General Public License version 2 only, as
  297.10 + * published by the Free Software Foundation.
  297.11 + *
  297.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  297.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  297.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  297.15 + * version 2 for more details (a copy is included in the LICENSE file that
  297.16 + * accompanied this code).
  297.17 + *
  297.18 + * You should have received a copy of the GNU General Public License version
  297.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  297.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  297.21 + *
  297.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  297.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  297.24 + * have any questions.
  297.25 + */
  297.26 +
  297.27 +/*
  297.28 +  @test
  297.29 +  @bug       6785058
  297.30 +  @summary   Tests that an owner is activated on closing its owned dialog with the warning icon.
  297.31 +  @author    Anton Tarasov: area=awt.focus
  297.32 +  @library   ../../regtesthelpers
  297.33 +  @build     Util
  297.34 +  @run       main/othervm/policy=java.policy -Djava.security.manager CloseDialogActivateOwnerTest
  297.35 +*/
  297.36 +
  297.37 +import java.awt.*;
  297.38 +import java.awt.event.*;
  297.39 +import java.applet.Applet;
  297.40 +import java.util.concurrent.atomic.AtomicBoolean;
  297.41 +import java.lang.reflect.InvocationTargetException;
  297.42 +import test.java.awt.regtesthelpers.Util;
  297.43 +
  297.44 +public class CloseDialogActivateOwnerTest extends Applet {
  297.45 +    Robot robot;
  297.46 +
  297.47 +    public static void main(String[] args) {
  297.48 +        CloseDialogActivateOwnerTest app = new CloseDialogActivateOwnerTest();
  297.49 +        app.init();
  297.50 +        app.start();
  297.51 +    }
  297.52 +
  297.53 +    public void init() {
  297.54 +        robot = Util.createRobot();
  297.55 +    }
  297.56 +
  297.57 +    public void start() {
  297.58 +        final Frame frame = new Frame("Owner Frame");
  297.59 +        final Dialog dialog = new Dialog(frame, "Owned Dialog");
  297.60 +
  297.61 +        frame.setSize(100, 100);
  297.62 +        dialog.setSize(100, 100);
  297.63 +
  297.64 +        // Show the owner. Check that it's focused.
  297.65 +        if (!Util.trackWindowGainedFocus(frame, new Runnable() {
  297.66 +                public void run() {
  297.67 +                    frame.setVisible(true);
  297.68 +                }
  297.69 +            }, 2000, false))
  297.70 +        {
  297.71 +            throw new TestErrorException("the owner frame hasn't been activated on show");
  297.72 +        }
  297.73 +
  297.74 +        // Show the owned dialog. Check that it's focused.
  297.75 +        if (!Util.trackWindowGainedFocus(dialog, new Runnable() {
  297.76 +                public void run() {
  297.77 +                    dialog.setVisible(true);
  297.78 +                }
  297.79 +            }, 2000, true))
  297.80 +        {
  297.81 +            throw new TestErrorException("the owned dialog hasn't been activated on show");
  297.82 +        }
  297.83 +
  297.84 +        robot.delay(2000); // wait for the warning icon is shown
  297.85 +
  297.86 +        // Close the dialog. Check that the owner is activated.
  297.87 +        if (!Util.trackWindowGainedFocus(frame, new Runnable() {
  297.88 +                public void run() {
  297.89 +                    dialog.dispose();
  297.90 +                }
  297.91 +            }, 2000, false))
  297.92 +        {
  297.93 +            throw new TestFailedException("the owner hasn't been activated on closing the owned dialog");
  297.94 +        }
  297.95 +
  297.96 +        System.out.println("Test passed.");
  297.97 +    }
  297.98 +}
  297.99 +
 297.100 +/**
 297.101 + * Thrown when the behavior being verified is found wrong.
 297.102 + */
 297.103 +class TestFailedException extends RuntimeException {
 297.104 +    TestFailedException(String msg) {
 297.105 +        super("Test failed: " + msg);
 297.106 +    }
 297.107 +}
 297.108 +
 297.109 +/**
 297.110 + * Thrown when an error not related to the behavior being verified is encountered.
 297.111 + */
 297.112 +class TestErrorException extends Error {
 297.113 +    TestErrorException(String msg) {
 297.114 +        super("Unexpected error: " + msg);
 297.115 +    }
 297.116 +}
 297.117 +
   298.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   298.2 +++ b/test/java/awt/Focus/CloseDialogActivateOwnerTest/java.policy	Thu Apr 16 19:10:32 2009 -0700
   298.3 @@ -0,0 +1,3 @@
   298.4 +grant {
   298.5 +	permission java.awt.AWTPermission "createRobot";
   298.6 +};
   299.1 --- a/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java	Thu Apr 16 17:42:00 2009 +0100
   299.2 +++ b/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java	Thu Apr 16 19:10:32 2009 -0700
   299.3 @@ -71,8 +71,14 @@
   299.4          testFrame.setVisible(true);
   299.5          Util.waitForIdle(robot);
   299.6  
   299.7 +        robot.delay(1000); // additional delay is required
   299.8 +
   299.9          if (!testButton.hasFocus()) {
  299.10 -            throw new TestErrorException("wrong initial focus");
  299.11 +            testButton.requestFocus();
  299.12 +            Util.waitForIdle(robot);
  299.13 +            if (!testButton.hasFocus()) {
  299.14 +                throw new TestErrorException("couldn't focus " + testButton);
  299.15 +            }
  299.16          }
  299.17  
  299.18          /*
   300.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   300.2 +++ b/test/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java	Thu Apr 16 19:10:32 2009 -0700
   300.3 @@ -0,0 +1,88 @@
   300.4 +/*
   300.5 + * Copyright 2008-2009 Sun Microsystems, Inc.  All Rights Reserved.
   300.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   300.7 + *
   300.8 + * This code is free software; you can redistribute it and/or modify it
   300.9 + * under the terms of the GNU General Public License version 2 only, as
  300.10 + * published by the Free Software Foundation.
  300.11 + *
  300.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  300.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  300.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  300.15 + * version 2 for more details (a copy is included in the LICENSE file that
  300.16 + * accompanied this code).
  300.17 + *
  300.18 + * You should have received a copy of the GNU General Public License version
  300.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  300.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  300.21 + *
  300.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  300.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  300.24 + * have any questions.
  300.25 + */
  300.26 +
  300.27 +/*
  300.28 +  @test
  300.29 +  @bug       6542975
  300.30 +  @summary   Tests that switching focus from an owned window doesn't crash.
  300.31 +  @author    anton.tarasov@sun.com: area=awt-focus
  300.32 +  @library    ../../regtesthelpers
  300.33 +  @build     Util
  300.34 +  @run       main OwnedWindowFocusIMECrashTest
  300.35 +*/
  300.36 +
  300.37 +import java.awt.*;
  300.38 +import javax.swing.*;
  300.39 +import test.java.awt.regtesthelpers.Util;
  300.40 +
  300.41 +public class OwnedWindowFocusIMECrashTest {
  300.42 +    Robot robot;
  300.43 +    JFrame owner = new JFrame("Owner Frame");
  300.44 +    JFrame frame = new JFrame("Other Frame");
  300.45 +    JWindow window = new JWindow(owner);
  300.46 +    JButton button = new JButton("Button");
  300.47 +
  300.48 +    public static void main(String[] args) {
  300.49 +        OwnedWindowFocusIMECrashTest app = new OwnedWindowFocusIMECrashTest();
  300.50 +        app.init();
  300.51 +        app.start();
  300.52 +    }
  300.53 +
  300.54 +    public void init() {
  300.55 +        robot = Util.createRobot();
  300.56 +    }
  300.57 +
  300.58 +    public void start() {
  300.59 +        owner.setBounds(100, 100, 200, 100);
  300.60 +        window.setBounds(100, 250, 200, 100);
  300.61 +        frame.setBounds(350, 100, 200, 100);
  300.62 +        window.add(button);
  300.63 +
  300.64 +        owner.setVisible(true);
  300.65 +        frame.setVisible(true);
  300.66 +        window.setVisible(true);
  300.67 +
  300.68 +        Util.waitForIdle(robot);
  300.69 +
  300.70 +        test();
  300.71 +
  300.72 +        System.out.println("Test passed");
  300.73 +    }
  300.74 +
  300.75 +    void test() {
  300.76 +        Util.clickOnComp(button, robot);
  300.77 +        if (!button.hasFocus()) {
  300.78 +            throw new TestErrorException("the button couldn't be focused by click");
  300.79 +        }
  300.80 +        Util.clickOnTitle(frame, robot); // here there was a crash
  300.81 +    }
  300.82 +}
  300.83 +
  300.84 +/**
  300.85 + * Thrown when an error not related to the behavior being verified is encountered.
  300.86 + */
  300.87 +class TestErrorException extends RuntimeException {
  300.88 +    TestErrorException(String msg) {
  300.89 +        super("Unexpected error: " + msg);
  300.90 +    }
  300.91 +}
   301.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   301.2 +++ b/test/java/awt/Focus/RemoveAfterRequest/RemoveAfterRequest.java	Thu Apr 16 19:10:32 2009 -0700
   301.3 @@ -0,0 +1,102 @@
   301.4 +/*
   301.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   301.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   301.7 + *
   301.8 + * This code is free software; you can redistribute it and/or modify it
   301.9 + * under the terms of the GNU General Public License version 2 only, as
  301.10 + * published by the Free Software Foundation.
  301.11 + *
  301.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  301.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  301.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  301.15 + * version 2 for more details (a copy is included in the LICENSE file that
  301.16 + * accompanied this code).
  301.17 + *
  301.18 + * You should have received a copy of the GNU General Public License version
  301.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  301.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  301.21 + *
  301.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  301.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  301.24 + * have any questions.
  301.25 + */
  301.26 +
  301.27 +/*
  301.28 +  @test
  301.29 +  @bug 6411406
  301.30 +  @summary Components automatically transfer focus on removal, even if developer requests focus elsewhere first
  301.31 +  @author oleg.sukhodolsky, anton.tarasov: area=awt.focus
  301.32 +  @library   ../../regtesthelpers
  301.33 +  @build Util
  301.34 +  @run main RemoveAfterRequest
  301.35 +*/
  301.36 +
  301.37 +/**
  301.38 + * RemoveAfterRequest.java
  301.39 + *
  301.40 + * summary: Components automatically transfer focus on removal, even if developer requests focus elsewhere first
  301.41 + */
  301.42 +
  301.43 +import java.awt.*;
  301.44 +import java.awt.event.*;
  301.45 +import test.java.awt.regtesthelpers.Util;
  301.46 +
  301.47 +public class RemoveAfterRequest {
  301.48 +    final static Frame frame = new Frame("test frame");
  301.49 +    final static Button btn1 = new Button("btn1");
  301.50 +    final static Button btn2 = new Button("btn2");
  301.51 +    final static Button btn3 = new Button("btn3");
  301.52 +
  301.53 +    public static void main(String[] args) {
  301.54 +        frame.setLayout(new GridLayout(3, 1));
  301.55 +        frame.add(btn1);
  301.56 +        frame.add(btn2);
  301.57 +        frame.add(btn3);
  301.58 +        frame.pack();
  301.59 +        frame.setVisible(true);
  301.60 +
  301.61 +        Util.waitForIdle(null);
  301.62 +
  301.63 +        if (!btn1.hasFocus()) {
  301.64 +            btn1.requestFocus();
  301.65 +            Util.waitForIdle(null);
  301.66 +            if (!btn1.hasFocus()) {
  301.67 +                throw new TestErrorException("couldn't focus " + btn1);
  301.68 +            }
  301.69 +        }
  301.70 +
  301.71 +        if (!Util.trackFocusGained(btn3, new Runnable() {
  301.72 +                public void run() {
  301.73 +                    btn3.requestFocus();
  301.74 +                    frame.remove(btn1);
  301.75 +                    frame.invalidate();
  301.76 +                                frame.validate();
  301.77 +                                frame.repaint();
  301.78 +                }
  301.79 +            }, 2000, true))
  301.80 +        {
  301.81 +            throw new TestFailedException("focus request on removal failed");
  301.82 +        }
  301.83 +
  301.84 +        System.out.println("Test passed.");
  301.85 +    }
  301.86 +}
  301.87 +
  301.88 +/**
  301.89 + * Thrown when the behavior being verified is found wrong.
  301.90 + */
  301.91 +class TestFailedException extends RuntimeException {
  301.92 +    TestFailedException(String msg) {
  301.93 +        super("Test failed: " + msg);
  301.94 +    }
  301.95 +}
  301.96 +
  301.97 +/**
  301.98 + * Thrown when an error not related to the behavior being verified is encountered.
  301.99 + */
 301.100 +class TestErrorException extends RuntimeException {
 301.101 +    TestErrorException(String msg) {
 301.102 +        super("Unexpected error: " + msg);
 301.103 +    }
 301.104 +}
 301.105 +
   302.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   302.2 +++ b/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html	Thu Apr 16 19:10:32 2009 -0700
   302.3 @@ -0,0 +1,20 @@
   302.4 +<html>
   302.5 +<!--
   302.6 +  @test
   302.7 +  @bug 6680988
   302.8 +  @summary verify that various shortcuts and accelerators work
   302.9 +  @author yuri.nesterenko : area=awt.keyboard
  302.10 +  @run applet/manual=yesno AcceleratorTest.html
  302.11 +  -->
  302.12 +<head>
  302.13 +<title> AcceleratorTest </title>
  302.14 +</head>
  302.15 +<body>
  302.16 +
  302.17 +<h1>AcceleratorTest<br>Bug ID: </h1>
  302.18 +
  302.19 +<p> See the dialog box (usually in upper left corner) for instructions</p>
  302.20 +
  302.21 +<APPLET CODE="AcceleratorTest.class" WIDTH=200 HEIGHT=200></APPLET>
  302.22 +</body>
  302.23 +</html>
   303.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   303.2 +++ b/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java	Thu Apr 16 19:10:32 2009 -0700
   303.3 @@ -0,0 +1,305 @@
   303.4 +/*
   303.5 +  test
   303.6 +  @bug 6680988
   303.7 +  @summary verify that various shortcuts and accelerators work
   303.8 +  @author yuri.nesterenko : area=awt.keyboard
   303.9 +  @run applet/manual=yesno AcceleratorTest.html
  303.10 +*/
  303.11 +
  303.12 +/**
  303.13 + * AcceleratorTest.java
  303.14 + *
  303.15 + * summary:
  303.16 + */
  303.17 +
  303.18 +//import java.applet.Applet;
  303.19 +import javax.swing.*;
  303.20 +import java.awt.*;
  303.21 +import java.awt.event.*;
  303.22 +import java.util.Hashtable;
  303.23 +
  303.24 +
  303.25 +public class AcceleratorTest extends JApplet
  303.26 +{
  303.27 +    //Declare things used in the test, like buttons and labels here
  303.28 +    static int pressed = 0;
  303.29 +    Hashtable<String, Integer> cmdHash = new Hashtable<String, Integer>();
  303.30 +    String[] CMD = {
  303.31 +        "\u042E, keep me in focus",
  303.32 +        "Item Cyrl Be",
  303.33 +        "Item English Period",
  303.34 +        "Item English N",
  303.35 +        "\u0436"
  303.36 +    };
  303.37 +
  303.38 +    JFrame jfr;
  303.39 +
  303.40 +    public void init()
  303.41 +    {
  303.42 +        //Create instructions for the user here, as well as set up
  303.43 +        // the environment -- set the layout manager, add buttons,
  303.44 +        // etc.
  303.45 +        this.setLayout (new BorderLayout ());
  303.46 +
  303.47 +        String[] instructions =
  303.48 +        {
  303.49 +            " Ensure you have Russian keyboard layout as a currently active.",
  303.50 +            "(1) Press Ctrl+\u0411 (a key with \",<\" on it) ",
  303.51 +            "(2) Find a . (period) in this layout (perhaps \"/?\" or \"7&\" key).",
  303.52 +            "Press Ctrl+.",
  303.53 +            "(3) Press Crtl+ regular English . (period) key (on \".>\" )",
  303.54 +            "(4) Press Ctrl+ key with English N.",
  303.55 +            "(5) Press Alt+\u042E (key with \".>\")",
  303.56 +            "(6) Press Alt+\u0436 (key with \";:\")",
  303.57 +            "If all expected commands will be fired, look for message",
  303.58 +            "\"All tests passed\""
  303.59 +        };
  303.60 +        Sysout.createDialogWithInstructions( instructions );
  303.61 +        for(int i = 0; i < CMD.length; i++) {
  303.62 +            cmdHash.put(CMD[i], 0);
  303.63 +        }
  303.64 +
  303.65 +        jfr = new JFrame();
  303.66 +        JButton jbu;
  303.67 +        jfr.add((jbu = new JButton(CMD[0])));
  303.68 +        jbu.setMnemonic(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u042E'));
  303.69 +        jbu.addActionListener( new ALi(CMD[0]));
  303.70 +
  303.71 +
  303.72 +        JMenuBar menuBar = new JMenuBar();
  303.73 +        jfr.setJMenuBar(menuBar);
  303.74 +        JMenu menu = new JMenu("Menu");
  303.75 +        menuBar.add(menu);
  303.76 +
  303.77 +        JMenuItem menuItem = new JMenuItem(CMD[1]);
  303.78 +        menuItem.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u0431'),
  303.79 +                        InputEvent.CTRL_DOWN_MASK));
  303.80 +
  303.81 +        JMenuItem menuItemEnglish = new JMenuItem(CMD[2]);
  303.82 +        menuItemEnglish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD,
  303.83 +                        InputEvent.CTRL_DOWN_MASK));
  303.84 +        JMenuItem menuItemE1 = new JMenuItem(CMD[3]);
  303.85 +        menuItemE1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
  303.86 +                        InputEvent.CTRL_DOWN_MASK));
  303.87 +        menuItem.addActionListener( new ALi(CMD[1]));
  303.88 +        menuItemEnglish.addActionListener( new ALi(CMD[2]));
  303.89 +        menuItemE1.addActionListener( new ALi(CMD[3]));
  303.90 +        menu.add(menuItem);
  303.91 +        menu.add(menuItemEnglish);
  303.92 +        menu.add(menuItemE1);
  303.93 +
  303.94 +        KeyStroke ks;
  303.95 +        InputMap im = new InputMap();
  303.96 +        ks = KeyStroke.getKeyStroke(KeyEvent.getExtendedKeyCodeForChar('\u0436'), java.awt.event.InputEvent.ALT_DOWN_MASK);
  303.97 +        im.put(ks, "pushAction");
  303.98 +        im.setParent(jbu.getInputMap(JComponent.WHEN_FOCUSED));
  303.99 +        jbu.setInputMap(JComponent.WHEN_FOCUSED, im);
 303.100 +
 303.101 +        jbu.getActionMap().put("pushAction",
 303.102 +            new AbstractAction("pushAction") {
 303.103 +                  public void actionPerformed(ActionEvent evt) {
 303.104 +                      if( evt.getActionCommand().equals(CMD[4])) {
 303.105 +                          cmdHash.put(CMD[4], 1);
 303.106 +                      }
 303.107 +                      boolean notYet = false;
 303.108 +                      for(int i = 0; i < CMD.length; i++) {
 303.109 +                          if(cmdHash.get(CMD[i]) == 0 ) notYet = true;
 303.110 +                      }
 303.111 +                      Sysout.println("Fired");
 303.112 +                      if( !notYet ) {
 303.113 +                          Sysout.println("All tests passed.");
 303.114 +                      }
 303.115 +                  }
 303.116 +            }
 303.117 +        );
 303.118 +
 303.119 +
 303.120 +        jfr.setBounds(650,0,200,200);
 303.121 +        jfr.setVisible(true);
 303.122 +
 303.123 +    }//End  init()
 303.124 +
 303.125 +    public void start ()
 303.126 +    {
 303.127 +        //Get things going.  Request focus, set size, et cetera
 303.128 +        setSize (200,200);
 303.129 +        setVisible(true);
 303.130 +        validate();
 303.131 +
 303.132 +    }// start()
 303.133 +    public class ALi implements ActionListener {
 303.134 +        String expectedCmd;
 303.135 +        public ALi( String eCmd ) {
 303.136 +            expectedCmd = eCmd;
 303.137 +        }
 303.138 +        public void actionPerformed(ActionEvent ae) {
 303.139 +            if( cmdHash.containsKey(ae.getActionCommand()) ) {
 303.140 +                cmdHash.put(expectedCmd, 1);
 303.141 +            }
 303.142 +            boolean notYet = false;
 303.143 +            for(int i = 0; i < CMD.length; i++) {
 303.144 +                if(cmdHash.get(CMD[i]) == 0 ) notYet = true;
 303.145 +                //Sysout.println(CMD[i]+":"+cmdHash.get(CMD[i]));
 303.146 +            }
 303.147 +            Sysout.println("FIRED");
 303.148 +            if( !notYet ) {
 303.149 +                Sysout.println("All tests passed.");
 303.150 +            }
 303.151 +        }
 303.152 +    }
 303.153 +
 303.154 +
 303.155 +}// class AcceleratorTest
 303.156 +
 303.157 +/* Place other classes related to the test after this line */
 303.158 +
 303.159 +
 303.160 +
 303.161 +
 303.162 +
 303.163 +/****************************************************
 303.164 + Standard Test Machinery
 303.165 + DO NOT modify anything below -- it's a standard
 303.166 +  chunk of code whose purpose is to make user
 303.167 +  interaction uniform, and thereby make it simpler
 303.168 +  to read and understand someone else's test.
 303.169 + ****************************************************/
 303.170 +
 303.171 +/**
 303.172 + This is part of the standard test machinery.
 303.173 + It creates a dialog (with the instructions), and is the interface
 303.174 +  for sending text messages to the user.
 303.175 + To print the instructions, send an array of strings to Sysout.createDialog
 303.176 +  WithInstructions method.  Put one line of instructions per array entry.
 303.177 + To display a message for the tester to see, simply call Sysout.println
 303.178 +  with the string to be displayed.
 303.179 + This mimics System.out.println but works within the test harness as well
 303.180 +  as standalone.
 303.181 + */
 303.182 +
 303.183 +class Sysout
 303.184 +{
 303.185 +    private static TestDialog dialog;
 303.186 +    private static boolean numbering = false;
 303.187 +    private static int messageNumber = 0;
 303.188 +
 303.189 +    public static void createDialogWithInstructions( String[] instructions )
 303.190 +    {
 303.191 +        dialog = new TestDialog( new Frame(), "Instructions" );
 303.192 +        dialog.printInstructions( instructions );
 303.193 +        dialog.setVisible(true);
 303.194 +        println( "Any messages for the tester will display here." );
 303.195 +    }
 303.196 +
 303.197 +    public static void createDialog( )
 303.198 +    {
 303.199 +        dialog = new TestDialog( new Frame(), "Instructions" );
 303.200 +        String[] defInstr = { "Instructions will appear here. ", "" } ;
 303.201 +        dialog.printInstructions( defInstr );
 303.202 +        dialog.setVisible(true);
 303.203 +        println( "Any messages for the tester will display here." );
 303.204 +    }
 303.205 +
 303.206 +    /* Enables message counting for the tester. */
 303.207 +    public static void enableNumbering(boolean enable){
 303.208 +        numbering = enable;
 303.209 +    }
 303.210 +
 303.211 +    public static void printInstructions( String[] instructions )
 303.212 +    {
 303.213 +        dialog.printInstructions( instructions );
 303.214 +    }
 303.215 +
 303.216 +
 303.217 +    public static void println( String messageIn )
 303.218 +    {
 303.219 +        if (numbering) {
 303.220 +            messageIn = "" + messageNumber + " " + messageIn;
 303.221 +            messageNumber++;
 303.222 +        }
 303.223 +        dialog.displayMessage( messageIn );
 303.224 +    }
 303.225 +
 303.226 +}// Sysout  class
 303.227 +
 303.228 +/**
 303.229 +  This is part of the standard test machinery.  It provides a place for the
 303.230 +   test instructions to be displayed, and a place for interactive messages
 303.231 +   to the user to be displayed.
 303.232 +  To have the test instructions displayed, see Sysout.
 303.233 +  To have a message to the user be displayed, see Sysout.
 303.234 +  Do not call anything in this dialog directly.
 303.235 +  */
 303.236 +class TestDialog extends Dialog
 303.237 +{
 303.238 +
 303.239 +    TextArea instructionsText;
 303.240 +    TextArea messageText;
 303.241 +    int maxStringLength = 80;
 303.242 +
 303.243 +    //DO NOT call this directly, go through Sysout
 303.244 +    public TestDialog( Frame frame, String name )
 303.245 +    {
 303.246 +        super( frame, name );
 303.247 +        int scrollBoth = TextArea.SCROLLBARS_BOTH;
 303.248 +        instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
 303.249 +        add( "North", instructionsText );
 303.250 +
 303.251 +        messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
 303.252 +        add("Center", messageText);
 303.253 +
 303.254 +        pack();
 303.255 +
 303.256 +        setVisible(true);
 303.257 +    }// TestDialog()
 303.258 +
 303.259 +    //DO NOT call this directly, go through Sysout
 303.260 +    public void printInstructions( String[] instructions )
 303.261 +    {
 303.262 +        //Clear out any current instructions
 303.263 +        instructionsText.setText( "" );
 303.264 +
 303.265 +        //Go down array of instruction strings
 303.266 +
 303.267 +        String printStr, remainingStr;
 303.268 +        for( int i=0; i < instructions.length; i++ )
 303.269 +        {
 303.270 +            //chop up each into pieces maxSringLength long
 303.271 +            remainingStr = instructions[ i ];
 303.272 +            while( remainingStr.length() > 0 )
 303.273 +            {
 303.274 +                //if longer than max then chop off first max chars to print
 303.275 +                if( remainingStr.length() >= maxStringLength )
 303.276 +                {
 303.277 +                    //Try to chop on a word boundary
 303.278 +                    int posOfSpace = remainingStr.
 303.279 +                        lastIndexOf( ' ', maxStringLength - 1 );
 303.280 +
 303.281 +                    if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
 303.282 +
 303.283 +                    printStr = remainingStr.substring( 0, posOfSpace + 1 );
 303.284 +                    remainingStr = remainingStr.substring( posOfSpace + 1 );
 303.285 +                }
 303.286 +                //else just print
 303.287 +                else
 303.288 +                {
 303.289 +                    printStr = remainingStr;
 303.290 +                    remainingStr = "";
 303.291 +                }
 303.292 +
 303.293 +                instructionsText.append( printStr + "\n" );
 303.294 +
 303.295 +            }// while
 303.296 +
 303.297 +        }// for
 303.298 +
 303.299 +    }//printInstructions()
 303.300 +
 303.301 +    //DO NOT call this directly, go through Sysout
 303.302 +    public void displayMessage( String messageIn )
 303.303 +    {
 303.304 +        messageText.append( messageIn + "\n" );
 303.305 +        System.out.println(messageIn);
 303.306 +    }
 303.307 +
 303.308 +}// TestDialog  class
   304.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   304.2 +++ b/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.html	Thu Apr 16 19:10:32 2009 -0700
   304.3 @@ -0,0 +1,20 @@
   304.4 +<html>
   304.5 +<!--  
   304.6 +  @test
   304.7 +  @bug 6730447
   304.8 +  @summary  Support for high resolution mouse wheel is still incomplete. AWT panel needs to be supported
   304.9 +  @author dmitry.cherepanov@...: area=awt.mouse
  304.10 +  @run applet/manual=yesno AWTPanelSmoothWheel.html
  304.11 +  -->
  304.12 +<head>
  304.13 +<title> AWTPanelSmoothWheel </title>
  304.14 +</head>
  304.15 +<body>
  304.16 +
  304.17 +<h1> AWTPanelSmoothWheel <br>Bug ID: 6730447</h1>
  304.18 +
  304.19 +<p> See the dialog box (usually in upper left corner) for instructions</p>
  304.20 +
  304.21 +<APPLET CODE="AWTPanelSmoothWheel.class" WIDTH=200 HEIGHT=200></APPLET>
  304.22 +</body>
  304.23 +</html>
   305.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   305.2 +++ b/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.java	Thu Apr 16 19:10:32 2009 -0700
   305.3 @@ -0,0 +1,251 @@
   305.4 +/*
   305.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   305.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   305.7 + *
   305.8 + * This code is free software; you can redistribute it and/or modify it
   305.9 + * under the terms of the GNU General Public License version 2 only, as
  305.10 + * published by the Free Software Foundation.
  305.11 + *
  305.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  305.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  305.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  305.15 + * version 2 for more details (a copy is included in the LICENSE file that
  305.16 + * accompanied this code).
  305.17 + *
  305.18 + * You should have received a copy of the GNU General Public License version
  305.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  305.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  305.21 + *
  305.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  305.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  305.24 + * have any questions.
  305.25 + */
  305.26 +
  305.27 +/*
  305.28 +  test
  305.29 +  @bug 6730447
  305.30 +  @summary Support for high resolution mouse wheel is still incomplete. AWT panel needs to be supported
  305.31 +  @author dmitry.cherepanov@...: area=awt.mouse
  305.32 +  @run applet/manual=yesno AWTPanelSmoothWheel.html
  305.33 +*/
  305.34 +
  305.35 +/**
  305.36 + * AWTPanelSmoothWheel.java
  305.37 + *
  305.38 + * summary:
  305.39 + */
  305.40 +
  305.41 +import java.applet.Applet;
  305.42 +import java.awt.*;
  305.43 +import java.awt.event.*;
  305.44 +
  305.45 +//Manual tests should run as applet tests if possible because they
  305.46 +// get their environments cleaned up, including AWT threads, any
  305.47 +// test created threads, and any system resources used by the test
  305.48 +// such as file descriptors.  (This is normally not a problem as
  305.49 +// main tests usually run in a separate VM, however on some platforms
  305.50 +// such as the Mac, separate VMs are not possible and non-applet
  305.51 +// tests will cause problems).  Also, you don't have to worry about
  305.52 +// synchronisation stuff in Applet tests the way you do in main
  305.53 +// tests...
  305.54 +
  305.55 +
  305.56 +public class AWTPanelSmoothWheel extends Applet
  305.57 +{
  305.58 +    //Declare things used in the test, like buttons and labels here
  305.59 +
  305.60 +    public void init()
  305.61 +    {
  305.62 +        //Create instructions for the user here, as well as set up
  305.63 +        // the environment -- set the layout manager, add buttons,
  305.64 +        // etc.
  305.65 +        this.setLayout (new BorderLayout ());
  305.66 +
  305.67 +        String[] instructions =
  305.68 +        {
  305.69 +            " the test is relevant for windows platforms and ",
  305.70 +            " mouses with high-resolution wheel, please just press pass if it's not the case ",
  305.71 +            " place the mouse cursor above the green panel and rotate the mouse wheel " ,
  305.72 +            " the test will print all mouse wheel messages into the logging panel, ",
  305.73 +            " please make sure that some of the messages have non-zero 'wheelRotation' value ",
  305.74 +            " in this case the test passes, otherwise it fails, ",
  305.75 +            " please make sure the test works OK if the mouse wheel is rotated very slow  "
  305.76 +        };
  305.77 +        Sysout.createDialogWithInstructions( instructions );
  305.78 +
  305.79 +    }//End  init()
  305.80 +
  305.81 +    public void start ()
  305.82 +    {
  305.83 +        Panel panel = new Panel();
  305.84 +        panel.setBackground(Color.green);
  305.85 +        panel.addMouseWheelListener(new MouseWheelListener() {
  305.86 +            public void mouseWheelMoved(MouseWheelEvent e) {
  305.87 +                Sysout.println(e.toString());
  305.88 +            }
  305.89 +        });
  305.90 +
  305.91 +        //Get things going.  Request focus, set size, et cetera
  305.92 +        setSize (200,200);
  305.93 +        setLayout(new BorderLayout());
  305.94 +        add(panel, BorderLayout.CENTER);
  305.95 +        setVisible(true);
  305.96 +        validate();
  305.97 +
  305.98 +        //What would normally go into main() will probably go here.
  305.99 +        //Use System.out.println for diagnostic messages that you want
 305.100 +        // to read after the test is done.
 305.101 +        //Use Sysout.println for messages you want the tester to read.
 305.102 +
 305.103 +    }// start()
 305.104 +
 305.105 +    //The rest of this class is the actions which perform the test...
 305.106 +
 305.107 +    //Use Sysout.println to communicate with the user NOT System.out!!
 305.108 +    //Sysout.println ("Something Happened!");
 305.109 +
 305.110 +}// class ManualYesNoTest
 305.111 +
 305.112 +/* Place other classes related to the test after this line */
 305.113 +
 305.114 +
 305.115 +
 305.116 +
 305.117 +
 305.118 +/****************************************************
 305.119 + Standard Test Machinery
 305.120 + DO NOT modify anything below -- it's a standard
 305.121 +  chunk of code whose purpose is to make user
 305.122 +  interaction uniform, and thereby make it simpler
 305.123 +  to read and understand someone else's test.
 305.124 + ****************************************************/
 305.125 +
 305.126 +/**
 305.127 + This is part of the standard test machinery.
 305.128 + It creates a dialog (with the instructions), and is the interface
 305.129 +  for sending text messages to the user.
 305.130 + To print the instructions, send an array of strings to Sysout.createDialog
 305.131 +  WithInstructions method.  Put one line of instructions per array entry.
 305.132 + To display a message for the tester to see, simply call Sysout.println
 305.133 +  with the string to be displayed.
 305.134 + This mimics System.out.println but works within the test harness as well
 305.135 +  as standalone.
 305.136 + */
 305.137 +
 305.138 +class Sysout
 305.139 +{
 305.140 +    private static TestDialog dialog;
 305.141 +
 305.142 +    public static void createDialogWithInstructions( String[] instructions )
 305.143 +    {
 305.144 +        dialog = new TestDialog( new Frame(), "Instructions" );
 305.145 +        dialog.printInstructions( instructions );
 305.146 +        dialog.setVisible(true);
 305.147 +        println( "Any messages for the tester will display here." );
 305.148 +    }
 305.149 +
 305.150 +    public static void createDialog( )
 305.151 +    {
 305.152 +        dialog = new TestDialog( new Frame(), "Instructions" );
 305.153 +        String[] defInstr = { "Instructions will appear here. ", "" } ;
 305.154 +        dialog.printInstructions( defInstr );
 305.155 +        dialog.setVisible(true);
 305.156 +        println( "Any messages for the tester will display here." );
 305.157 +    }
 305.158 +
 305.159 +
 305.160 +    public static void printInstructions( String[] instructions )
 305.161 +    {
 305.162 +        dialog.printInstructions( instructions );
 305.163 +    }
 305.164 +
 305.165 +
 305.166 +    public static void println( String messageIn )
 305.167 +    {
 305.168 +        dialog.displayMessage( messageIn );
 305.169 +    }
 305.170 +
 305.171 +}// Sysout  class
 305.172 +
 305.173 +/**
 305.174 +  This is part of the standard test machinery.  It provides a place for the
 305.175 +   test instructions to be displayed, and a place for interactive messages
 305.176 +   to the user to be displayed.
 305.177 +  To have the test instructions displayed, see Sysout.
 305.178 +  To have a message to the user be displayed, see Sysout.
 305.179 +  Do not call anything in this dialog directly.
 305.180 +  */
 305.181 +class TestDialog extends Dialog
 305.182 +{
 305.183 +
 305.184 +    TextArea instructionsText;
 305.185 +    TextArea messageText;
 305.186 +    int maxStringLength = 80;
 305.187 +
 305.188 +    //DO NOT call this directly, go through Sysout
 305.189 +    public TestDialog( Frame frame, String name )
 305.190 +    {
 305.191 +        super( frame, name );
 305.192 +        int scrollBoth = TextArea.SCROLLBARS_BOTH;
 305.193 +        instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
 305.194 +        add( "North", instructionsText );
 305.195 +
 305.196 +        messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
 305.197 +        add("Center", messageText);
 305.198 +
 305.199 +        pack();
 305.200 +
 305.201 +        setVisible(true);
 305.202 +    }// TestDialog()
 305.203 +
 305.204 +    //DO NOT call this directly, go through Sysout
 305.205 +    public void printInstructions( String[] instructions )
 305.206 +    {
 305.207 +        //Clear out any current instructions
 305.208 +        instructionsText.setText( "" );
 305.209 +
 305.210 +        //Go down array of instruction strings
 305.211 +
 305.212 +        String printStr, remainingStr;
 305.213 +        for( int i=0; i < instructions.length; i++ )
 305.214 +        {
 305.215 +            //chop up each into pieces maxSringLength long
 305.216 +            remainingStr = instructions[ i ];
 305.217 +            while( remainingStr.length() > 0 )
 305.218 +            {
 305.219 +                //if longer than max then chop off first max chars to print
 305.220 +                if( remainingStr.length() >= maxStringLength )
 305.221 +                {
 305.222 +                    //Try to chop on a word boundary
 305.223 +                    int posOfSpace = remainingStr.
 305.224 +                        lastIndexOf( ' ', maxStringLength - 1 );
 305.225 +
 305.226 +                    if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
 305.227 +
 305.228 +                    printStr = remainingStr.substring( 0, posOfSpace + 1 );
 305.229 +                    remainingStr = remainingStr.substring( posOfSpace + 1 );
 305.230 +                }
 305.231 +                //else just print
 305.232 +                else
 305.233 +                {
 305.234 +                    printStr = remainingStr;
 305.235 +                    remainingStr = "";
 305.236 +                }
 305.237 +
 305.238 +                instructionsText.append( printStr + "\n" );
 305.239 +
 305.240 +            }// while
 305.241 +
 305.242 +        }// for
 305.243 +
 305.244 +    }//printInstructions()
 305.245 +
 305.246 +    //DO NOT call this directly, go through Sysout
 305.247 +    public void displayMessage( String messageIn )
 305.248 +    {
 305.249 +        messageText.append( messageIn + "\n" );
 305.250 +        System.out.println(messageIn);
 305.251 +    }
 305.252 +
 305.253 +}// TestDialog  class
 305.254 +
   306.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   306.2 +++ b/test/java/beans/Beans/6669869/TestDesignTime.java	Thu Apr 16 19:10:32 2009 -0700
   306.3 @@ -0,0 +1,52 @@
   306.4 +/*
   306.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   306.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   306.7 + *
   306.8 + * This code is free software; you can redistribute it and/or modify it
   306.9 + * under the terms of the GNU General Public License version 2 only, as
  306.10 + * published by the Free Software Foundation.
  306.11 + *
  306.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  306.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  306.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  306.15 + * version 2 for more details (a copy is included in the LICENSE file that
  306.16 + * accompanied this code).
  306.17 + *
  306.18 + * You should have received a copy of the GNU General Public License version
  306.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  306.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  306.21 + *
  306.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  306.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  306.24 + * have any questions.
  306.25 + */
  306.26 +
  306.27 +/*
  306.28 + * @test
  306.29 + * @bug 6669869
  306.30 + * @summary Tests DesignTime property in different application contexts
  306.31 + * @author Sergey Malenkov
  306.32 + */
  306.33 +
  306.34 +import java.beans.Beans;
  306.35 +import sun.awt.SunToolkit;
  306.36 +
  306.37 +public class TestDesignTime implements Runnable {
  306.38 +    public static void main(String[] args) throws InterruptedException {
  306.39 +        if (Beans.isDesignTime()) {
  306.40 +            throw new Error("unexpected DesignTime property");
  306.41 +        }
  306.42 +        Beans.setDesignTime(!Beans.isDesignTime());
  306.43 +        ThreadGroup group = new ThreadGroup("$$$");
  306.44 +        Thread thread = new Thread(group, new TestDesignTime());
  306.45 +        thread.start();
  306.46 +        thread.join();
  306.47 +    }
  306.48 +
  306.49 +    public void run() {
  306.50 +        SunToolkit.createNewAppContext();
  306.51 +        if (Beans.isDesignTime()) {
  306.52 +            throw new Error("shared DesignTime property");
  306.53 +        }
  306.54 +    }
  306.55 +}
   307.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   307.2 +++ b/test/java/beans/Beans/6669869/TestGuiAvailable.java	Thu Apr 16 19:10:32 2009 -0700
   307.3 @@ -0,0 +1,53 @@
   307.4 +/*
   307.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   307.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   307.7 + *
   307.8 + * This code is free software; you can redistribute it and/or modify it
   307.9 + * under the terms of the GNU General Public License version 2 only, as
  307.10 + * published by the Free Software Foundation.
  307.11 + *
  307.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  307.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  307.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  307.15 + * version 2 for more details (a copy is included in the LICENSE file that
  307.16 + * accompanied this code).
  307.17 + *
  307.18 + * You should have received a copy of the GNU General Public License version
  307.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  307.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  307.21 + *
  307.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  307.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  307.24 + * have any questions.
  307.25 + */
  307.26 +
  307.27 +/*
  307.28 + * @test
  307.29 + * @bug 6669869
  307.30 + * @summary Tests GuiAvailable property in different application contexts
  307.31 + * @author Sergey Malenkov
  307.32 + */
  307.33 +
  307.34 +import java.awt.GraphicsEnvironment;
  307.35 +import java.beans.Beans;
  307.36 +import sun.awt.SunToolkit;
  307.37 +
  307.38 +public class TestGuiAvailable implements Runnable {
  307.39 +    public static void main(String[] args) throws InterruptedException {
  307.40 +        if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
  307.41 +            throw new Error("unexpected GuiAvailable property");
  307.42 +        }
  307.43 +        Beans.setGuiAvailable(!Beans.isGuiAvailable());
  307.44 +        ThreadGroup group = new ThreadGroup("$$$");
  307.45 +        Thread thread = new Thread(group, new TestGuiAvailable());
  307.46 +        thread.start();
  307.47 +        thread.join();
  307.48 +    }
  307.49 +
  307.50 +    public void run() {
  307.51 +        SunToolkit.createNewAppContext();
  307.52 +        if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
  307.53 +            throw new Error("shared GuiAvailable property");
  307.54 +        }
  307.55 +    }
  307.56 +}
   308.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   308.2 +++ b/test/java/lang/ClassLoader/deadlock/Alice.java	Thu Apr 16 19:10:32 2009 -0700
   308.3 @@ -0,0 +1,29 @@
   308.4 +/*
   308.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   308.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   308.7 + *
   308.8 + * This code is free software; you can redistribute it and/or modify it
   308.9 + * under the terms of the GNU General Public License version 2 only, as
  308.10 + * published by the Free Software Foundation.
  308.11 + *
  308.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  308.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  308.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  308.15 + * version 2 for more details (a copy is included in the LICENSE file that
  308.16 + * accompanied this code).
  308.17 + *
  308.18 + * You should have received a copy of the GNU General Public License version
  308.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  308.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  308.21 + *
  308.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  308.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  308.24 + * have any questions.
  308.25 + */
  308.26 +package comSA;
  308.27 +
  308.28 +public class Alice extends comSB.SupAlice {
  308.29 +    static {
  308.30 +        System.out.println("comSA.Alice loaded");
  308.31 +    }
  308.32 +}
   309.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   309.2 +++ b/test/java/lang/ClassLoader/deadlock/Bob.java	Thu Apr 16 19:10:32 2009 -0700
   309.3 @@ -0,0 +1,29 @@
   309.4 +/*
   309.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   309.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   309.7 + *
   309.8 + * This code is free software; you can redistribute it and/or modify it
   309.9 + * under the terms of the GNU General Public License version 2 only, as
  309.10 + * published by the Free Software Foundation.
  309.11 + *
  309.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  309.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  309.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  309.15 + * version 2 for more details (a copy is included in the LICENSE file that
  309.16 + * accompanied this code).
  309.17 + *
  309.18 + * You should have received a copy of the GNU General Public License version
  309.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  309.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  309.21 + *
  309.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  309.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  309.24 + * have any questions.
  309.25 + */
  309.26 +package comSB;
  309.27 +
  309.28 +public class Bob extends comSA.SupBob {
  309.29 +    static {
  309.30 +        System.out.println("comSB.Bob loaded");
  309.31 +    }
  309.32 +}
   310.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   310.2 +++ b/test/java/lang/ClassLoader/deadlock/DelegatingLoader.java	Thu Apr 16 19:10:32 2009 -0700
   310.3 @@ -0,0 +1,93 @@
   310.4 +/*
   310.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   310.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   310.7 + *
   310.8 + * This code is free software; you can redistribute it and/or modify it
   310.9 + * under the terms of the GNU General Public License version 2 only, as
  310.10 + * published by the Free Software Foundation.
  310.11 + *
  310.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  310.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  310.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  310.15 + * version 2 for more details (a copy is included in the LICENSE file that
  310.16 + * accompanied this code).
  310.17 + *
  310.18 + * You should have received a copy of the GNU General Public License version
  310.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  310.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  310.21 + *
  310.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  310.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  310.24 + * have any questions.
  310.25 + */
  310.26 +
  310.27 +import java.net.MalformedURLException;
  310.28 +import java.net.URL;
  310.29 +import java.net.URLClassLoader;
  310.30 +import java.util.concurrent.ConcurrentHashMap;
  310.31 +import java.util.concurrent.locks.*;
  310.32 +import java.lang.reflect.*;
  310.33 +
  310.34 +public class DelegatingLoader extends URLClassLoader {
  310.35 +
  310.36 +    private DelegatingLoader delLoader;
  310.37 +    private String[] delClasses;
  310.38 +
  310.39 +    static {
  310.40 +        boolean supportParallel = false;
  310.41 +        try {
  310.42 +            Class c = Class.forName("java.lang.ClassLoader");
  310.43 +            Method m = c.getDeclaredMethod("registerAsParallelCapable",
  310.44 +                    new Class[0]);
  310.45 +            m.setAccessible(true);
  310.46 +            Object result = (Boolean) m.invoke(null);
  310.47 +            if (result instanceof Boolean) {
  310.48 +                supportParallel = ((Boolean) result).booleanValue();
  310.49 +            } else {
  310.50 +                // Should never happen
  310.51 +                System.out.println("Error: ClassLoader.registerAsParallelCapable() did not return a boolean!");
  310.52 +                System.exit(1);
  310.53 +            }
  310.54 +        } catch (NoSuchMethodException nsme) {
  310.55 +            System.out.println("No ClassLoader.registerAsParallelCapable() API");
  310.56 +        } catch (NoSuchMethodError nsme2) {
  310.57 +            System.out.println("No ClassLoader.registerAsParallelCapable() API");
  310.58 +        } catch (Exception ex) {
  310.59 +            ex.printStackTrace();
  310.60 +            // Exit immediately to indicate an error
  310.61 +            System.exit(1);
  310.62 +        }
  310.63 +        System.out.println("Parallel ClassLoader registration: " +
  310.64 +                    supportParallel);
  310.65 +    }
  310.66 +
  310.67 +    public DelegatingLoader(URL urls[]) {
  310.68 +        super(urls);
  310.69 +        System.out.println("DelegatingLoader using URL " + urls[0]);
  310.70 +    }
  310.71 +
  310.72 +    public void setDelegate(String[] delClasses, DelegatingLoader delLoader) {
  310.73 +        this.delClasses = delClasses;
  310.74 +        this.delLoader = delLoader;
  310.75 +    }
  310.76 +
  310.77 +    public Class loadClass(String className, boolean resolve)
  310.78 +            throws ClassNotFoundException {
  310.79 +        for (int i = 0; i < delClasses.length; i++) {
  310.80 +            if (delClasses[i].equals(className)) {
  310.81 +                Starter.log("Delegating class loading for " + className);
  310.82 +                try {
  310.83 +                    Thread.sleep(500);
  310.84 +                } catch (InterruptedException ie) {
  310.85 +                    return null;
  310.86 +                }
  310.87 +                return delLoader.loadClass(className, resolve);
  310.88 +            }
  310.89 +        }
  310.90 +
  310.91 +        Starter.log("Loading local class " + className);
  310.92 +//        synchronized (getClassLoadingLock(className)) {
  310.93 +            return super.loadClass(className, resolve);
  310.94 +//        }
  310.95 +    }
  310.96 +}
   311.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   311.2 +++ b/test/java/lang/ClassLoader/deadlock/Starter.java	Thu Apr 16 19:10:32 2009 -0700
   311.3 @@ -0,0 +1,105 @@
   311.4 +/*
   311.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   311.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   311.7 + *
   311.8 + * This code is free software; you can redistribute it and/or modify it
   311.9 + * under the terms of the GNU General Public License version 2 only, as
  311.10 + * published by the Free Software Foundation.
  311.11 + *
  311.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  311.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  311.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  311.15 + * version 2 for more details (a copy is included in the LICENSE file that
  311.16 + * accompanied this code).
  311.17 + *
  311.18 + * You should have received a copy of the GNU General Public License version
  311.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  311.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  311.21 + *
  311.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  311.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  311.24 + * have any questions.
  311.25 + */
  311.26 +
  311.27 +import java.net.MalformedURLException;
  311.28 +import java.net.URL;
  311.29 +
  311.30 +public class Starter implements Runnable {
  311.31 +
  311.32 +    private String id;
  311.33 +    private DelegatingLoader dl;
  311.34 +    private String startClass;
  311.35 +
  311.36 +    private static DelegatingLoader saLoader, sbLoader;
  311.37 +
  311.38 +    public static void log(String line) {
  311.39 +        System.out.println(line);
  311.40 +    }
  311.41 +
  311.42 +    public static void main(String[] args) {
  311.43 +        URL[] urlsa = new URL[1];
  311.44 +        URL[] urlsb = new URL[1];
  311.45 +        try {
  311.46 +            String testDir = System.getProperty("test.classes", ".");
  311.47 +            String sep = System.getProperty("file.separator");
  311.48 +            urlsa[0] = new URL("file://" + testDir + sep + "SA" + sep);
  311.49 +            urlsb[0] = new URL("file://" + testDir + sep + "SB" + sep);
  311.50 +        } catch (MalformedURLException e) {
  311.51 +            e.printStackTrace();
  311.52 +        }
  311.53 +        // Set up Classloader delegation hierarchy
  311.54 +        saLoader = new DelegatingLoader(urlsa);
  311.55 +        sbLoader = new DelegatingLoader(urlsb);
  311.56 +
  311.57 +        String[] saClasses = { "comSA.SupBob", "comSA.Alice" };
  311.58 +        String[] sbClasses = { "comSB.SupAlice", "comSB.Bob" };
  311.59 +
  311.60 +        saLoader.setDelegate(sbClasses, sbLoader);
  311.61 +        sbLoader.setDelegate(saClasses, saLoader);
  311.62 +
  311.63 +        // test one-way delegate
  311.64 +        String testType = args[0];
  311.65 +        if (testType.equals("one-way")) {
  311.66 +            test("comSA.Alice", "comSA.SupBob");
  311.67 +        } else if (testType.equals("cross")) {
  311.68 +            // test cross delegate
  311.69 +            test("comSA.Alice", "comSB.Bob");
  311.70 +        } else {
  311.71 +            System.out.println("ERROR: unsupported - " + testType);
  311.72 +        }
  311.73 +    }
  311.74 +
  311.75 +    private static void test(String clsForSA, String clsForSB) {
  311.76 +        Starter ia = new Starter("SA", saLoader, clsForSA);
  311.77 +        Starter ib = new Starter("SB", sbLoader, clsForSB);
  311.78 +        new Thread(ia).start();
  311.79 +        new Thread(ib).start();
  311.80 +    }
  311.81 +
  311.82 +    public static void sleep() {
  311.83 +        try {
  311.84 +            Thread.sleep(500);
  311.85 +        } catch (InterruptedException e) {
  311.86 +            e.printStackTrace();
  311.87 +            log("Thread interrupted");
  311.88 +        }
  311.89 +    }
  311.90 +
  311.91 +    private Starter(String id, DelegatingLoader dl, String startClass) {
  311.92 +        this.id = id;
  311.93 +        this.dl = dl;
  311.94 +        this.startClass = startClass;
  311.95 +    }
  311.96 +
  311.97 +    public void run() {
  311.98 +        log("Spawned thread " + id + " running");
  311.99 +        try {
 311.100 +            // To mirror the WAS deadlock, need to ensure class load
 311.101 +            // is routed via the VM.
 311.102 +            Class.forName(startClass, true, dl);
 311.103 +        } catch (ClassNotFoundException e) {
 311.104 +            e.printStackTrace();
 311.105 +        }
 311.106 +        log("Thread " + id + " terminating");
 311.107 +    }
 311.108 +}
   312.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   312.2 +++ b/test/java/lang/ClassLoader/deadlock/SupAlice.java	Thu Apr 16 19:10:32 2009 -0700
   312.3 @@ -0,0 +1,29 @@
   312.4 +/*
   312.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   312.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   312.7 + *
   312.8 + * This code is free software; you can redistribute it and/or modify it
   312.9 + * under the terms of the GNU General Public License version 2 only, as
  312.10 + * published by the Free Software Foundation.
  312.11 + *
  312.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  312.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  312.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  312.15 + * version 2 for more details (a copy is included in the LICENSE file that
  312.16 + * accompanied this code).
  312.17 + *
  312.18 + * You should have received a copy of the GNU General Public License version
  312.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  312.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  312.21 + *
  312.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  312.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  312.24 + * have any questions.
  312.25 + */
  312.26 +package comSB;
  312.27 +
  312.28 +public class SupAlice {
  312.29 +    static {
  312.30 +        System.out.println("comSB.SupAlice loaded");
  312.31 +    }
  312.32 +}
   313.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   313.2 +++ b/test/java/lang/ClassLoader/deadlock/SupBob.java	Thu Apr 16 19:10:32 2009 -0700
   313.3 @@ -0,0 +1,29 @@
   313.4 +/*
   313.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   313.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   313.7 + *
   313.8 + * This code is free software; you can redistribute it and/or modify it
   313.9 + * under the terms of the GNU General Public License version 2 only, as
  313.10 + * published by the Free Software Foundation.
  313.11 + *
  313.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  313.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  313.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  313.15 + * version 2 for more details (a copy is included in the LICENSE file that
  313.16 + * accompanied this code).
  313.17 + *
  313.18 + * You should have received a copy of the GNU General Public License version
  313.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  313.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  313.21 + *
  313.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  313.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  313.24 + * have any questions.
  313.25 + */
  313.26 +package comSA;
  313.27 +
  313.28 +public class SupBob {
  313.29 +    static {
  313.30 +        System.out.println("comSA.SupBob loaded");
  313.31 +    }
  313.32 +}
   314.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   314.2 +++ b/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh	Thu Apr 16 19:10:32 2009 -0700
   314.3 @@ -0,0 +1,105 @@
   314.4 +#
   314.5 +# Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   314.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   314.7 +#
   314.8 +# This code is free software; you can redistribute it and/or modify it
   314.9 +# under the terms of the GNU General Public License version 2 only, as
  314.10 +# published by the Free Software Foundation.
  314.11 +#
  314.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
  314.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  314.14 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  314.15 +# version 2 for more details (a copy is included in the LICENSE file that
  314.16 +# accompanied this code).
  314.17 +#
  314.18 +# You should have received a copy of the GNU General Public License version
  314.19 +# 2 along with this work; if not, write to the Free Software Foundation,
  314.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  314.21 +#
  314.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  314.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
  314.24 +# have any questions.
  314.25 +#
  314.26 +# @test
  314.27 +# @bug 4735126
  314.28 +# @summary (cl) ClassLoader.loadClass locks all instances in chain 
  314.29 +#          when delegating
  314.30 +# 
  314.31 +# @run shell/timeout=10 TestCrossDelegate.sh
  314.32 +
  314.33 +# if running by hand on windows, change TESTSRC and TESTCLASSES to "."
  314.34 +if [ "${TESTSRC}" = "" ] ; then
  314.35 +    TESTSRC=`pwd`
  314.36 +fi
  314.37 +if [ "${TESTCLASSES}" = "" ] ; then
  314.38 +    TESTCLASSES=`pwd`
  314.39 +fi
  314.40 +
  314.41 +# if running by hand on windows, change this to appropriate value
  314.42 +if [ "${TESTJAVA}" = "" ] ; then
  314.43 +    echo "TESTJAVA not set.  Test cannot execute."
  314.44 +    echo "FAILED!!!"
  314.45 +    exit 1
  314.46 +fi
  314.47 +echo TESTSRC=${TESTSRC}
  314.48 +echo TESTCLASSES=${TESTCLASSES}
  314.49 +echo TESTJAVA=${TESTJAVA}
  314.50 +echo ""
  314.51 +
  314.52 +# set platform-specific variables
  314.53 +OS=`uname -s`
  314.54 +case "$OS" in
  314.55 +  SunOS )
  314.56 +    FS="/"
  314.57 +    ;;
  314.58 +  Linux )
  314.59 +    FS="/"
  314.60 +    ;;
  314.61 +  Windows* )
  314.62 +    FS="\\"
  314.63 +    ;;
  314.64 +esac
  314.65 +
  314.66 +# compile test
  314.67 +${TESTJAVA}${FS}bin${FS}javac \
  314.68 +        -d ${TESTCLASSES} \
  314.69 +        ${TESTSRC}${FS}Starter.java ${TESTSRC}${FS}DelegatingLoader.java
  314.70 +
  314.71 +STATUS=$?
  314.72 +if [ ${STATUS} -ne 0 ]
  314.73 +then
  314.74 +    exit ${STATUS}
  314.75 +fi
  314.76 +
  314.77 +# set up test
  314.78 +${TESTJAVA}${FS}bin${FS}javac \
  314.79 +        -d ${TESTCLASSES}${FS} \
  314.80 +        ${TESTSRC}${FS}Alice.java ${TESTSRC}${FS}SupBob.java \
  314.81 +        ${TESTSRC}${FS}Bob.java ${TESTSRC}${FS}SupAlice.java
  314.82 +
  314.83 +cd ${TESTCLASSES}
  314.84 +DIRS="SA SB"
  314.85 +for dir in $DIRS
  314.86 +do
  314.87 +    if [ -d ${dir} ]; then
  314.88 +        rm -rf ${dir}
  314.89 +    fi
  314.90 +    mkdir ${dir}
  314.91 +    mv com${dir} ${dir}
  314.92 +done
  314.93 +
  314.94 +# run test
  314.95 +${TESTJAVA}${FS}bin${FS}java \
  314.96 +        -verbose:class -XX:+TraceClassLoading -cp . \
  314.97 +        -Dtest.classes=${TESTCLASSES} \
  314.98 +        Starter cross
  314.99 +# -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass \
 314.100 +
 314.101 +# save error status
 314.102 +STATUS=$?
 314.103 +
 314.104 +# clean up
 314.105 +rm -rf ${TESTCLASSES}${FS}SA ${TESTCLASSES}${FS}SB
 314.106 +
 314.107 +# return
 314.108 +exit ${STATUS}
   315.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   315.2 +++ b/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh	Thu Apr 16 19:10:32 2009 -0700
   315.3 @@ -0,0 +1,105 @@
   315.4 +#
   315.5 +# Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   315.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   315.7 +#
   315.8 +# This code is free software; you can redistribute it and/or modify it
   315.9 +# under the terms of the GNU General Public License version 2 only, as
  315.10 +# published by the Free Software Foundation.
  315.11 +#
  315.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
  315.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  315.14 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  315.15 +# version 2 for more details (a copy is included in the LICENSE file that
  315.16 +# accompanied this code).
  315.17 +#
  315.18 +# You should have received a copy of the GNU General Public License version
  315.19 +# 2 along with this work; if not, write to the Free Software Foundation,
  315.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  315.21 +#
  315.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  315.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
  315.24 +# have any questions.
  315.25 +#
  315.26 +# @test
  315.27 +# @bug 4735126
  315.28 +# @summary (cl) ClassLoader.loadClass locks all instances in chain 
  315.29 +#          when delegating
  315.30 +# 
  315.31 +# @run shell/timeout=10 TestOneWayDelegate.sh
  315.32 +
  315.33 +# if running by hand on windows, change TESTSRC and TESTCLASSES to "."
  315.34 +if [ "${TESTSRC}" = "" ] ; then
  315.35 +    TESTSRC=`pwd`
  315.36 +fi
  315.37 +if [ "${TESTCLASSES}" = "" ] ; then
  315.38 +    TESTCLASSES=`pwd`
  315.39 +fi
  315.40 +
  315.41 +# if running by hand on windows, change this to appropriate value
  315.42 +if [ "${TESTJAVA}" = "" ] ; then
  315.43 +    echo "TESTJAVA not set.  Test cannot execute."
  315.44 +    echo "FAILED!!!"
  315.45 +    exit 1
  315.46 +fi
  315.47 +echo TESTSRC=${TESTSRC}
  315.48 +echo TESTCLASSES=${TESTCLASSES}
  315.49 +echo TESTJAVA=${TESTJAVA}
  315.50 +echo ""
  315.51 +
  315.52 +# set platform-specific variables
  315.53 +OS=`uname -s`
  315.54 +case "$OS" in
  315.55 +  SunOS )
  315.56 +    FS="/"
  315.57 +    ;;
  315.58 +  Linux )
  315.59 +    FS="/"
  315.60 +    ;;
  315.61 +  Windows* )
  315.62 +    FS="\\"
  315.63 +    ;;
  315.64 +esac
  315.65 +
  315.66 +# compile test
  315.67 +${TESTJAVA}${FS}bin${FS}javac \
  315.68 +        -d ${TESTCLASSES} \
  315.69 +        ${TESTSRC}${FS}Starter.java ${TESTSRC}${FS}DelegatingLoader.java
  315.70 +
  315.71 +STATUS=$?
  315.72 +if [ ${STATUS} -ne 0 ]
  315.73 +then
  315.74 +    exit ${STATUS}
  315.75 +fi
  315.76 +
  315.77 +# set up test
  315.78 +${TESTJAVA}${FS}bin${FS}javac \
  315.79 +        -d ${TESTCLASSES}${FS} \
  315.80 +        ${TESTSRC}${FS}Alice.java ${TESTSRC}${FS}SupBob.java \
  315.81 +        ${TESTSRC}${FS}Bob.java ${TESTSRC}${FS}SupAlice.java
  315.82 +
  315.83 +cd ${TESTCLASSES}
  315.84 +DIRS="SA SB"
  315.85 +for dir in $DIRS
  315.86 +do
  315.87 +    if [ -d ${dir} ]; then
  315.88 +        rm -rf ${dir}
  315.89 +    fi
  315.90 +    mkdir ${dir}
  315.91 +    mv com${dir} ${dir}
  315.92 +done
  315.93 +
  315.94 +# run test
  315.95 +${TESTJAVA}${FS}bin${FS}java \
  315.96 +        -verbose:class -XX:+TraceClassLoading -cp . \
  315.97 +        -Dtest.classes=${TESTCLASSES} \
  315.98 +        Starter one-way
  315.99 +# -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass \
 315.100 +
 315.101 +# save error status
 315.102 +STATUS=$?
 315.103 +
 315.104 +# clean up
 315.105 +rm -rf ${TESTCLASSES}${FS}SA ${TESTCLASSES}${FS}SB
 315.106 +
 315.107 +# return
 315.108 +exit ${STATUS}
   316.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   316.2 +++ b/test/java/lang/Integer/ValueOf.java	Thu Apr 16 19:10:32 2009 -0700
   316.3 @@ -0,0 +1,55 @@
   316.4 +/*
   316.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   316.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   316.7 + *
   316.8 + * This code is free software; you can redistribute it and/or modify it
   316.9 + * under the terms of the GNU General Public License version 2 only, as
  316.10 + * published by the Free Software Foundation.
  316.11 + *
  316.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  316.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  316.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  316.15 + * version 2 for more details (a copy is included in the LICENSE file that
  316.16 + * accompanied this code).
  316.17 + *
  316.18 + * You should have received a copy of the GNU General Public License version
  316.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  316.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  316.21 + *
  316.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  316.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  316.24 + * have any questions.
  316.25 + */
  316.26 +
  316.27 +/**
  316.28 + * @test
  316.29 + * @bug 6807702
  316.30 + * @summary Basic test for Integer.valueOf
  316.31 + * @run main ValueOf
  316.32 + * @run main/othervm -esa -XX:+AggressiveOpts ValueOf
  316.33 + */
  316.34 +
  316.35 +public class ValueOf {
  316.36 +
  316.37 +    // test Integer.valueOf over this range (inclusive)
  316.38 +    private static final int TEST_LOW  = -1024;
  316.39 +    private static final int TEST_HIGH = 24576;
  316.40 +
  316.41 +    public static void main(String[] args) {
  316.42 +        int i = TEST_LOW;
  316.43 +        while (i <= TEST_HIGH) {
  316.44 +            // check that valueOf stores i
  316.45 +            if (Integer.valueOf(i).intValue() != i)
  316.46 +                throw new RuntimeException();
  316.47 +
  316.48 +            // check that the same object is returned for integral values
  316.49 +            // in the range -128 to 127 (inclusive)
  316.50 +            if (i >= -128 && i <= 127) {
  316.51 +                if (Integer.valueOf(i) != Integer.valueOf(i))
  316.52 +                    throw new RuntimeException();
  316.53 +            }
  316.54 +
  316.55 +            i++;
  316.56 +        }
  316.57 +    }
  316.58 +}
   317.1 --- a/test/java/lang/String/ToLowerCase.java	Thu Apr 16 17:42:00 2009 +0100
   317.2 +++ b/test/java/lang/String/ToLowerCase.java	Thu Apr 16 19:10:32 2009 -0700
   317.3 @@ -72,7 +72,7 @@
   317.4          // I-dot tests (Turkish and Azeri)
   317.5          test("\u0130", turkish, "i");
   317.6          test("\u0130", az, "i");
   317.7 -        test("\u0130", Locale.US, "i");
   317.8 +        test("\u0130", Locale.US, "i\u0307");
   317.9  
  317.10          // Remove dot_above in the sequence I + dot_above (Turkish and Azeri)
  317.11          test("I\u0307", turkish, "i");
   318.1 --- a/test/java/nio/channels/AsyncCloseAndInterrupt.java	Thu Apr 16 17:42:00 2009 +0100
   318.2 +++ b/test/java/nio/channels/AsyncCloseAndInterrupt.java	Thu Apr 16 19:10:32 2009 -0700
   318.3 @@ -22,7 +22,7 @@
   318.4   */
   318.5  
   318.6  /* @test
   318.7 - * @bug 4460583 4470470 4840199 6419424 6710579 6596323
   318.8 + * @bug 4460583 4470470 4840199 6419424 6710579 6596323 6824135
   318.9   * @summary Comprehensive test of asynchronous closing and interruption
  318.10   * @author Mark Reinhold
  318.11   */
   319.1 --- a/test/java/nio/channels/DatagramChannel/NotBound.java	Thu Apr 16 17:42:00 2009 +0100
   319.2 +++ b/test/java/nio/channels/DatagramChannel/NotBound.java	Thu Apr 16 19:10:32 2009 -0700
   319.3 @@ -22,27 +22,110 @@
   319.4   */
   319.5  
   319.6  /* @test
   319.7 - * @bug 4512723
   319.8 - * @summary Unit test for datagram-socket-channel adaptors
   319.9 + * @bug 4512723 6621689
  319.10 + * @summary Test that connect/send/receive with unbound DatagramChannel causes
  319.11 + *     the channel's socket to be bound to a local address
  319.12   */
  319.13  
  319.14  import java.net.*;
  319.15 -import java.nio.*;
  319.16 -import java.nio.channels.*;
  319.17 +import java.nio.ByteBuffer;
  319.18 +import java.nio.channels.DatagramChannel;
  319.19 +import java.io.IOException;
  319.20  
  319.21 -class NotBound {
  319.22 -    public static void main(String[] args) throws Exception {
  319.23 -        test1(false);
  319.24 -        test1(true);
  319.25 +public class NotBound {
  319.26 +
  319.27 +    static void checkBound(DatagramChannel dc) throws IOException {
  319.28 +        if (dc.getLocalAddress() == null)
  319.29 +            throw new RuntimeException("Not bound??");
  319.30      }
  319.31  
  319.32 -    static void test1(boolean blocking) throws Exception {
  319.33 -        ByteBuffer bb = ByteBuffer.allocateDirect(256);
  319.34 -        DatagramChannel dc1 = DatagramChannel.open();
  319.35 -        dc1.configureBlocking(false);
  319.36 -        SocketAddress isa = dc1.receive(bb);
  319.37 -        if (isa != null)
  319.38 -            throw new Exception("Unbound dc returned non-null");
  319.39 -        dc1.close();
  319.40 +    // starts a thread to send a datagram to the given channel once the channel
  319.41 +    // is bound to a local address
  319.42 +    static void wakeupWhenBound(final DatagramChannel dc) {
  319.43 +        Runnable wakeupTask = new Runnable() {
  319.44 +            public void run() {
  319.45 +                try {
  319.46 +                    // poll for local address
  319.47 +                    InetSocketAddress local;
  319.48 +                    do {
  319.49 +                        Thread.sleep(50);
  319.50 +                        local = (InetSocketAddress)dc.getLocalAddress();
  319.51 +                    } while (local == null);
  319.52 +
  319.53 +                    // send message to channel to wakeup receiver
  319.54 +                    DatagramChannel sender = DatagramChannel.open();
  319.55 +                    try {
  319.56 +                        ByteBuffer bb = ByteBuffer.wrap("hello".getBytes());
  319.57 +                        InetAddress lh = InetAddress.getLocalHost();
  319.58 +                        SocketAddress target =
  319.59 +                            new InetSocketAddress(lh, local.getPort());
  319.60 +                        sender.send(bb, target);
  319.61 +                    } finally {
  319.62 +                        sender.close();
  319.63 +                    }
  319.64 +
  319.65 +                } catch (Exception x) {
  319.66 +                    x.printStackTrace();
  319.67 +                }
  319.68 +            }};
  319.69 +        new Thread(wakeupTask).start();
  319.70 +    }
  319.71 +
  319.72 +    public static void main(String[] args) throws IOException {
  319.73 +        DatagramChannel dc;
  319.74 +
  319.75 +        // connect
  319.76 +        dc = DatagramChannel.open();
  319.77 +        try {
  319.78 +            DatagramChannel peer = DatagramChannel.open()
  319.79 +                .bind(new InetSocketAddress(0));
  319.80 +            int peerPort = ((InetSocketAddress)(peer.getLocalAddress())).getPort();
  319.81 +            try {
  319.82 +                dc.connect(new InetSocketAddress(InetAddress.getLocalHost(), peerPort));
  319.83 +                checkBound(dc);
  319.84 +            } finally {
  319.85 +                peer.close();
  319.86 +            }
  319.87 +        } finally {
  319.88 +            dc.close();
  319.89 +        }
  319.90 +
  319.91 +        // send
  319.92 +        dc = DatagramChannel.open();
  319.93 +        try {
  319.94 +            ByteBuffer bb = ByteBuffer.wrap("ignore this".getBytes());
  319.95 +            SocketAddress target =
  319.96 +                new InetSocketAddress(InetAddress.getLocalHost(), 5000);
  319.97 +            dc.send(bb, target);
  319.98 +            checkBound(dc);
  319.99 +        } finally {
 319.100 +            dc.close();
 319.101 +        }
 319.102 +
 319.103 +        // receive (blocking)
 319.104 +        dc = DatagramChannel.open();
 319.105 +        try {
 319.106 +            ByteBuffer bb = ByteBuffer.allocateDirect(128);
 319.107 +            wakeupWhenBound(dc);
 319.108 +            SocketAddress sender = dc.receive(bb);
 319.109 +            if (sender == null)
 319.110 +                throw new RuntimeException("Sender should not be null");
 319.111 +            checkBound(dc);
 319.112 +        } finally {
 319.113 +            dc.close();
 319.114 +        }
 319.115 +
 319.116 +        // receive (non-blocking)
 319.117 +        dc = DatagramChannel.open();
 319.118 +        try {
 319.119 +            dc.configureBlocking(false);
 319.120 +            ByteBuffer bb = ByteBuffer.allocateDirect(128);
 319.121 +            SocketAddress sender = dc.receive(bb);
 319.122 +            if (sender != null)
 319.123 +                throw new RuntimeException("Sender should be null");
 319.124 +            checkBound(dc);
 319.125 +        } finally {
 319.126 +            dc.close();
 319.127 +        }
 319.128      }
 319.129  }
   320.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   320.2 +++ b/test/java/nio/channels/Selector/HelperSlowToDie.java	Thu Apr 16 19:10:32 2009 -0700
   320.3 @@ -0,0 +1,75 @@
   320.4 +/*
   320.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   320.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   320.7 + *
   320.8 + * This code is free software; you can redistribute it and/or modify it
   320.9 + * under the terms of the GNU General Public License version 2 only, as
  320.10 + * published by the Free Software Foundation.
  320.11 + *
  320.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  320.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  320.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  320.15 + * version 2 for more details (a copy is included in the LICENSE file that
  320.16 + * accompanied this code).
  320.17 + *
  320.18 + * You should have received a copy of the GNU General Public License version
  320.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  320.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  320.21 + *
  320.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  320.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  320.24 + * have any questions.
  320.25 + */
  320.26 +
  320.27 +/*
  320.28 + * @test
  320.29 + * @bug 6823609
  320.30 + * @summary Selector.select can hangs on Windows for cases where a helper thread
  320.31 + *   becomes redudant but a new helper is immediately needed.
  320.32 + */
  320.33 +
  320.34 +import java.nio.channels.*;
  320.35 +import java.io.IOException;
  320.36 +
  320.37 +public class HelperSlowToDie {
  320.38 +    private static final int CHANNELS_PER_THREAD = 1023;
  320.39 +    private static volatile boolean done;
  320.40 +
  320.41 +    public static void main(String[] args) throws IOException {
  320.42 +        Selector sel = Selector.open();
  320.43 +
  320.44 +        // register channels
  320.45 +        SocketChannel[] channels = new SocketChannel[CHANNELS_PER_THREAD];
  320.46 +        for (int i=0; i<CHANNELS_PER_THREAD; i++) {
  320.47 +            SocketChannel sc = SocketChannel.open();
  320.48 +            sc.configureBlocking(false);
  320.49 +            sc.register(sel, SelectionKey.OP_CONNECT);
  320.50 +            channels[i] = sc;
  320.51 +        }
  320.52 +        sel.selectNow();
  320.53 +
  320.54 +        // Start threads to swamp all cores but one. This improves the chances
  320.55 +        // of duplicating the bug.
  320.56 +        Runnable busy = new Runnable() {
  320.57 +            public void run() {
  320.58 +                while (!done) ;  // no nothing
  320.59 +            }
  320.60 +        };
  320.61 +        int ncores = Runtime.getRuntime().availableProcessors();
  320.62 +        for (int i=0; i<ncores-1; i++)
  320.63 +            new Thread(busy).start();
  320.64 +
  320.65 +        // Loop changing the number of channels from 1023 to 1024 and back.
  320.66 +        for (int i=0; i<1000; i++) {
  320.67 +            SocketChannel sc = SocketChannel.open();
  320.68 +            sc.configureBlocking(false);
  320.69 +            sc.register(sel, SelectionKey.OP_CONNECT);
  320.70 +            sel.selectNow();   // cause helper to spin up
  320.71 +            sc.close();
  320.72 +            sel.selectNow();  // cause helper to retire
  320.73 +        }
  320.74 +
  320.75 +        // terminate busy threads
  320.76 +        done = true;
  320.77 +    }
  320.78 +}
   321.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   321.2 +++ b/test/java/nio/channels/Selector/LotsOfUpdates.java	Thu Apr 16 19:10:32 2009 -0700
   321.3 @@ -0,0 +1,38 @@
   321.4 +/*
   321.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   321.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   321.7 + *
   321.8 + * This code is free software; you can redistribute it and/or modify it
   321.9 + * under the terms of the GNU General Public License version 2 only, as
  321.10 + * published by the Free Software Foundation.
  321.11 + *
  321.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  321.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  321.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  321.15 + * version 2 for more details (a copy is included in the LICENSE file that
  321.16 + * accompanied this code).
  321.17 + *
  321.18 + * You should have received a copy of the GNU General Public License version
  321.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  321.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  321.21 + *
  321.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  321.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  321.24 + * have any questions.
  321.25 + */
  321.26 +
  321.27 +import java.nio.channels.*;
  321.28 +import java.io.IOException;
  321.29 +
  321.30 +public class LotsOfUpdates {
  321.31 +    public static void main(String[] args) throws IOException {
  321.32 +        Selector sel = Selector.open();
  321.33 +        SocketChannel sc = SocketChannel.open();
  321.34 +        sc.configureBlocking(false);
  321.35 +        SelectionKey key = sc.register(sel, 0);
  321.36 +        for (int i=0; i<50000; i++) {
  321.37 +            key.interestOps(0);
  321.38 +        }
  321.39 +        sel.selectNow();
  321.40 +    }
  321.41 +}
   322.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   322.2 +++ b/test/java/nio/channels/Selector/RegAfterPreClose.java	Thu Apr 16 19:10:32 2009 -0700
   322.3 @@ -0,0 +1,127 @@
   322.4 +/*
   322.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   322.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   322.7 + *
   322.8 + * This code is free software; you can redistribute it and/or modify it
   322.9 + * under the terms of the GNU General Public License version 2 only, as
  322.10 + * published by the Free Software Foundation.
  322.11 + *
  322.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  322.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  322.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  322.15 + * version 2 for more details (a copy is included in the LICENSE file that
  322.16 + * accompanied this code).
  322.17 + *
  322.18 + * You should have received a copy of the GNU General Public License version
  322.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  322.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  322.21 + *
  322.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  322.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  322.24 + * have any questions.
  322.25 + */
  322.26 +
  322.27 +/* @test
  322.28 + * @bug 6693490
  322.29 + * @summary Pre-close file descriptor may inadvertently get registered with
  322.30 + *     epoll during close
  322.31 + */
  322.32 +
  322.33 +import java.net.*;
  322.34 +import java.nio.channels.*;
  322.35 +import java.util.concurrent.*;
  322.36 +import java.util.*;
  322.37 +import java.io.IOException;
  322.38 +
  322.39 +public class RegAfterPreClose {
  322.40 +
  322.41 +    static volatile boolean done;
  322.42 +
  322.43 +    /**
  322.44 +     * A task that continuously connects to a given address and immediately
  322.45 +     * closes the connection.
  322.46 +     */
  322.47 +    static class Connector implements Runnable {
  322.48 +        private final SocketAddress sa;
  322.49 +        Connector(int port) throws IOException {
  322.50 +            InetAddress lh = InetAddress.getLocalHost();
  322.51 +            this.sa = new InetSocketAddress(lh, port);
  322.52 +        }
  322.53 +        public void run() {
  322.54 +            while (!done) {
  322.55 +                try {
  322.56 +                    SocketChannel.open(sa).close();
  322.57 +                } catch (IOException x) {
  322.58 +                    // back-off as probably resource related
  322.59 +                    try {
  322.60 +                        Thread.sleep(10);
  322.61 +                    } catch (InterruptedException  ignore) { }
  322.62 +                }
  322.63 +            }
  322.64 +        }
  322.65 +    }
  322.66 +
  322.67 +    /**
  322.68 +     * A task that closes a channel.
  322.69 +     */
  322.70 +    static class Closer implements Runnable {
  322.71 +        private final Channel channel;
  322.72 +        Closer(Channel sc) {
  322.73 +            this.channel = sc;
  322.74 +        }
  322.75 +        public void run() {
  322.76 +            try {
  322.77 +                channel.close();
  322.78 +            } catch (IOException ignore) { }
  322.79 +        }
  322.80 +    }
  322.81 +
  322.82 +    public static void main(String[] args) throws Exception {
  322.83 +        // create listener
  322.84 +        InetSocketAddress isa = new InetSocketAddress(0);
  322.85 +        ServerSocketChannel ssc = ServerSocketChannel.open();
  322.86 +        ssc.socket().bind(isa);
  322.87 +
  322.88 +        // register with Selector
  322.89 +        final Selector sel = Selector.open();
  322.90 +        ssc.configureBlocking(false);
  322.91 +        SelectionKey key = ssc.register(sel, SelectionKey.OP_ACCEPT);
  322.92 +
  322.93 +        ThreadFactory factory = new ThreadFactory() {
  322.94 +            @Override
  322.95 +            public Thread newThread(Runnable r) {
  322.96 +                Thread t = new Thread(r);
  322.97 +                t.setDaemon(true);
  322.98 +                return t;
  322.99 +            }
 322.100 +        };
 322.101 +
 322.102 +        // schedule test to run for 1 minute
 322.103 +        Executors.newScheduledThreadPool(1, factory).schedule(new Runnable() {
 322.104 +            public void run() {
 322.105 +                done = true;
 322.106 +                sel.wakeup();
 322.107 +            }}, 1, TimeUnit.MINUTES);
 322.108 +
 322.109 +        // create Executor that handles tasks that closes channels
 322.110 +        // "asynchronously" - this creates the conditions to provoke the bug.
 322.111 +        Executor executor = Executors.newFixedThreadPool(2, factory);
 322.112 +
 322.113 +        // submit task that connects to listener
 322.114 +        executor.execute(new Connector(ssc.socket().getLocalPort()));
 322.115 +
 322.116 +        // loop accepting connections until done (or an IOException is thrown)
 322.117 +        while (!done) {
 322.118 +            sel.select();
 322.119 +            if (key.isAcceptable()) {
 322.120 +                SocketChannel sc = ssc.accept();
 322.121 +                if (sc != null) {
 322.122 +                    sc.configureBlocking(false);
 322.123 +                    sc.register(sel, SelectionKey.OP_READ);
 322.124 +                    executor.execute(new Closer(sc));
 322.125 +                }
 322.126 +            }
 322.127 +            sel.selectedKeys().clear();
 322.128 +        }
 322.129 +    }
 322.130 +}
   323.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   323.2 +++ b/test/java/nio/channels/Selector/lots_of_updates.sh	Thu Apr 16 19:10:32 2009 -0700
   323.3 @@ -0,0 +1,49 @@
   323.4 +#
   323.5 +# Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   323.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   323.7 +#
   323.8 +# This code is free software; you can redistribute it and/or modify it
   323.9 +# under the terms of the GNU General Public License version 2 only, as
  323.10 +# published by the Free Software Foundation.
  323.11 +#
  323.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
  323.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  323.14 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  323.15 +# version 2 for more details (a copy is included in the LICENSE file that
  323.16 +# accompanied this code).
  323.17 +#
  323.18 +# You should have received a copy of the GNU General Public License version
  323.19 +# 2 along with this work; if not, write to the Free Software Foundation,
  323.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  323.21 +#
  323.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  323.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
  323.24 +# have any questions.
  323.25 +#
  323.26 +
  323.27 +# @test
  323.28 +# @bug 6824477
  323.29 +# @summary Selector.select can fail with IOException "Invalid argument" on
  323.30 +#     Solaris if maximum number of file descriptors is less than 10000
  323.31 +# @build LotsOfUpdates
  323.32 +# @run shell lots_of_updates.sh
  323.33 +
  323.34 +OS=`uname -s`
  323.35 +case "$OS" in
  323.36 +    Windows_* )
  323.37 +        echo "ulimit not on Windows"
  323.38 +        exit 0
  323.39 +        ;;
  323.40 +    * )
  323.41 +        CLASSPATH=${TESTCLASSES}:${TESTSRC}
  323.42 +        ;;
  323.43 +esac
  323.44 +export CLASSPATH
  323.45 +
  323.46 +# hard limit needs to be less than 10000 for this bug
  323.47 +NOFILES=`ulimit -n -H`
  323.48 +if [ "$NOFILES" = "unlimited" ] || [ $NOFILES -ge 10000 ]; then
  323.49 +    ulimit -n 2048
  323.50 +fi
  323.51 +
  323.52 +${TESTJAVA}/bin/java LotsOfUpdates
   324.1 --- a/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java	Thu Apr 16 17:42:00 2009 +0100
   324.2 +++ b/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java	Thu Apr 16 19:10:32 2009 -0700
   324.3 @@ -22,7 +22,7 @@
   324.4   */
   324.5  
   324.6  /* @test
   324.7 - * @bug 6261402
   324.8 + * @bug 6261402 6824141
   324.9   * @summary If rmid has an inherited channel that is not a server
  324.10   * socket (such as it if was started using rsh/rcmd), then it should
  324.11   * function normally.
  324.12 @@ -37,6 +37,7 @@
  324.13  
  324.14  import java.io.IOException;
  324.15  import java.net.Socket;
  324.16 +import java.net.ProtocolFamily;
  324.17  import java.nio.channels.Channel;
  324.18  import java.nio.channels.DatagramChannel;
  324.19  import java.nio.channels.Pipe;
  324.20 @@ -137,6 +138,12 @@
  324.21              return provider.openDatagramChannel();
  324.22          }
  324.23  
  324.24 +        public DatagramChannel openDatagramChannel(ProtocolFamily family)
  324.25 +            throws IOException
  324.26 +        {
  324.27 +            return provider.openDatagramChannel(family);
  324.28 +        }
  324.29 +
  324.30          public Pipe openPipe() throws IOException {
  324.31              return provider.openPipe();
  324.32          }
   325.1 --- a/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java	Thu Apr 16 17:42:00 2009 +0100
   325.2 +++ b/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java	Thu Apr 16 19:10:32 2009 -0700
   325.3 @@ -22,7 +22,7 @@
   325.4   */
   325.5  
   325.6  /* @test
   325.7 - * @bug 4295885
   325.8 + * @bug 4295885 6824141
   325.9   * @summary rmid should be startable from inetd
  325.10   * @author Ann Wollrath
  325.11   *
  325.12 @@ -36,6 +36,7 @@
  325.13  import java.net.InetAddress;
  325.14  import java.net.InetSocketAddress;
  325.15  import java.net.ServerSocket;
  325.16 +import java.net.ProtocolFamily;
  325.17  import java.nio.channels.*;
  325.18  import java.nio.channels.spi.*;
  325.19  import java.rmi.Remote;
  325.20 @@ -126,6 +127,12 @@
  325.21              return provider.openDatagramChannel();
  325.22          }
  325.23  
  325.24 +        public DatagramChannel openDatagramChannel(ProtocolFamily family)
  325.25 +            throws IOException
  325.26 +        {
  325.27 +            return provider.openDatagramChannel(family);
  325.28 +        }
  325.29 +
  325.30          public Pipe openPipe()
  325.31              throws IOException
  325.32          {
   326.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   326.2 +++ b/test/java/security/Security/ClassLoaderDeadlock/CreateSerialized.java	Thu Apr 16 19:10:32 2009 -0700
   326.3 @@ -0,0 +1,35 @@
   326.4 +/*
   326.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   326.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   326.7 + *
   326.8 + * This code is free software; you can redistribute it and/or modify it
   326.9 + * under the terms of the GNU General Public License version 2 only, as
  326.10 + * published by the Free Software Foundation.
  326.11 + *
  326.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  326.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  326.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  326.15 + * version 2 for more details (a copy is included in the LICENSE file that
  326.16 + * accompanied this code).
  326.17 + *
  326.18 + * You should have received a copy of the GNU General Public License version
  326.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  326.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  326.21 + *
  326.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  326.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  326.24 + * have any questions.
  326.25 + */
  326.26 +import java.io.*;
  326.27 +import sun.misc.*;
  326.28 +
  326.29 +public class CreateSerialized {
  326.30 +    public static void main(String[] args) throws Exception {
  326.31 +        Object o = new com.sun.crypto.provider.SunJCE();
  326.32 +
  326.33 +        FileOutputStream fos = new FileOutputStream("object.tmp");
  326.34 +        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fos);
  326.35 +        objectOutputStream.writeObject(o);
  326.36 +        fos.close();
  326.37 +    }
  326.38 +}
   327.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   327.2 +++ b/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.java	Thu Apr 16 19:10:32 2009 -0700
   327.3 @@ -0,0 +1,70 @@
   327.4 +/*
   327.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   327.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   327.7 + *
   327.8 + * This code is free software; you can redistribute it and/or modify it
   327.9 + * under the terms of the GNU General Public License version 2 only, as
  327.10 + * published by the Free Software Foundation.
  327.11 + *
  327.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  327.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  327.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  327.15 + * version 2 for more details (a copy is included in the LICENSE file that
  327.16 + * accompanied this code).
  327.17 + *
  327.18 + * You should have received a copy of the GNU General Public License version
  327.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  327.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  327.21 + *
  327.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  327.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  327.24 + * have any questions.
  327.25 + */
  327.26 +import java.io.*;
  327.27 +import javax.xml.parsers.DocumentBuilderFactory;
  327.28 +import java.security.*;
  327.29 +
  327.30 +public class Deadlock2 {
  327.31 +    public static void main(String[] args) throws Exception {
  327.32 +        File file = new File("object.tmp");
  327.33 +        final byte[] bytes = new byte[(int) file.length()];
  327.34 +        FileInputStream fileInputStream = new FileInputStream(file);
  327.35 +        int read = fileInputStream.read(bytes);
  327.36 +        if (read != file.length()) {
  327.37 +            throw new Exception("Didn't read all");
  327.38 +        }
  327.39 +        Thread.sleep(1000);
  327.40 +
  327.41 +        Runnable xmlRunnable = new Runnable() {
  327.42 +                public void run() {
  327.43 +                    try {
  327.44 +                        DocumentBuilderFactory.newInstance();
  327.45 +                    } catch (Exception e) {
  327.46 +                        e.printStackTrace();
  327.47 +                    }
  327.48 +                }
  327.49 +            };
  327.50 +
  327.51 +        Runnable readObjectRunnable = new Runnable() {
  327.52 +                public void run() {
  327.53 +                    try {
  327.54 +                        ObjectInputStream objectInputStream =
  327.55 +                            new ObjectInputStream(new ByteArrayInputStream(bytes));
  327.56 +                        Object o = objectInputStream.readObject();
  327.57 +                        System.out.println(o.getClass());
  327.58 +                    } catch (Exception e) {
  327.59 +                        e.printStackTrace();
  327.60 +                    }
  327.61 +                }
  327.62 +            }
  327.63 +
  327.64 +        Thread thread1 = new Thread(readObjectRunnable, "Read Object");
  327.65 +        Thread thread2 = new Thread(xmlRunnable, "XML");
  327.66 +
  327.67 +        thread1.start();
  327.68 +        thread2.start();
  327.69 +
  327.70 +        thread1.join();
  327.71 +        thread2.join();
  327.72 +    }
  327.73 +}
   328.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   328.2 +++ b/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh	Thu Apr 16 19:10:32 2009 -0700
   328.3 @@ -0,0 +1,99 @@
   328.4 +#!/bin/sh
   328.5 +
   328.6 +#
   328.7 +# Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   328.8 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   328.9 +#
  328.10 +# This code is free software; you can redistribute it and/or modify it
  328.11 +# under the terms of the GNU General Public License version 2 only, as
  328.12 +# published by the Free Software Foundation.
  328.13 +#
  328.14 +# This code is distributed in the hope that it will be useful, but WITHOUT
  328.15 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  328.16 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  328.17 +# version 2 for more details (a copy is included in the LICENSE file that
  328.18 +# accompanied this code).
  328.19 +#
  328.20 +# You should have received a copy of the GNU General Public License version
  328.21 +# 2 along with this work; if not, write to the Free Software Foundation,
  328.22 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  328.23 +#
  328.24 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  328.25 +# CA 95054 USA or visit www.sun.com if you need additional information or
  328.26 +# have any questions.
  328.27 +#
  328.28 +
  328.29 +
  328.30 +# @test
  328.31 +# @bug 6440846
  328.32 +# @summary make sure we do not deadlock between ExtClassLoader and AppClassLoader
  328.33 +# @author Valerie Peng
  328.34 +# @run shell/timeout=20 Deadlock2.sh
  328.35 +
  328.36 +# set a few environment variables so that the shell-script can run stand-alone
  328.37 +# in the source directory
  328.38 +
  328.39 +if [ "${TESTSRC}" = "" ] ; then
  328.40 +   TESTSRC="."
  328.41 +fi
  328.42 +
  328.43 +if [ "${TESTCLASSES}" = "" ] ; then
  328.44 +   TESTCLASSES="."
  328.45 +fi
  328.46 +
  328.47 +if [ "${TESTJAVA}" = "" ] ; then
  328.48 +   echo "TESTJAVA not set.  Test cannot execute."
  328.49 +   echo "FAILED!!!"
  328.50 +   exit 1
  328.51 +fi
  328.52 +
  328.53 +# set platform-dependent variables
  328.54 +OS=`uname -s`
  328.55 +case "$OS" in
  328.56 +  SunOS )
  328.57 +    PATHSEP=":"
  328.58 +    FILESEP="/"
  328.59 +    ;;
  328.60 +  Linux )
  328.61 +    PATHSEP=":"
  328.62 +    FILESEP="/"
  328.63 +    ;;
  328.64 +  Windows* )
  328.65 +    PATHSEP=";"
  328.66 +    FILESEP="\\"
  328.67 +    ;;
  328.68 +  * )
  328.69 +    echo "Unrecognized system!"
  328.70 +    exit 1;
  328.71 +    ;;
  328.72 +esac
  328.73 +
  328.74 +# remove old class files
  328.75 +cd ${TESTCLASSES}
  328.76 +rm -f Deadlock2*.class
  328.77 +if [ -d testlib ] ; then
  328.78 +    rm -rf testlib
  328.79 +fi
  328.80 +cp -r ${TESTJAVA}${FILESEP}lib${FILESEP}ext testlib
  328.81 +
  328.82 +# compile and package the test program
  328.83 +${TESTJAVA}${FILESEP}bin${FILESEP}javac \
  328.84 +    -d ${TESTCLASSES} \
  328.85 +    ${TESTSRC}${FILESEP}CreateSerialized.java \
  328.86 +    ${TESTSRC}${FILESEP}Deadlock2.java
  328.87 +
  328.88 +${TESTJAVA}${FILESEP}bin${FILESEP}jar \
  328.89 +    -cvf testlib${FILESEP}Deadlock2.jar \
  328.90 +    Deadlock2*.class
  328.91 +
  328.92 +rm Deadlock2*.class
  328.93 +
  328.94 +# create serialized object and run the test
  328.95 +${TESTJAVA}${FILESEP}bin${FILESEP}java CreateSerialized
  328.96 +${TESTJAVA}${FILESEP}bin${FILESEP}java -Djava.ext.dirs=${TESTCLASSES}${FILESEP}testlib Deadlock2
  328.97 +STATUS=$?
  328.98 +
  328.99 +# clean up
 328.100 +rm object.tmp CreateSerialized.class
 328.101 +rm -rf testlib
 328.102 +exit ${STATUS}
   329.1 --- a/test/java/util/Collection/MOAT.java	Thu Apr 16 17:42:00 2009 +0100
   329.2 +++ b/test/java/util/Collection/MOAT.java	Thu Apr 16 19:10:32 2009 -0700
   329.3 @@ -555,6 +555,7 @@
   329.4  
   329.5              NavigableMap<Integer,Integer> nm =
   329.6                  (NavigableMap<Integer,Integer>) m;
   329.7 +            testNavigableMapRemovers(nm);
   329.8              testNavigableMap(nm);
   329.9              testNavigableMap(nm.headMap(6, false));
  329.10              testNavigableMap(nm.headMap(5, true));
  329.11 @@ -742,6 +743,97 @@
  329.12          equal(it.next(), expected);
  329.13      }
  329.14  
  329.15 +    static void equalMaps(Map m1, Map m2) {
  329.16 +        equal(m1, m2);
  329.17 +        equal(m2, m1);
  329.18 +        equal(m1.size(), m2.size());
  329.19 +        equal(m1.isEmpty(), m2.isEmpty());
  329.20 +        equal(m1.toString(), m2.toString());
  329.21 +        check(Arrays.equals(m1.entrySet().toArray(), m2.entrySet().toArray()));
  329.22 +    }
  329.23 +
  329.24 +    @SuppressWarnings({"unchecked", "rawtypes"})
  329.25 +    static void testNavigableMapRemovers(NavigableMap m)
  329.26 +    {
  329.27 +        final Map emptyMap = new HashMap();
  329.28 +
  329.29 +        final Map singletonMap = new HashMap();
  329.30 +        singletonMap.put(1, 2);
  329.31 +
  329.32 +        abstract class NavigableMapView {
  329.33 +            abstract NavigableMap view(NavigableMap m);
  329.34 +        }
  329.35 +
  329.36 +        NavigableMapView[] views = {
  329.37 +            new NavigableMapView() { NavigableMap view(NavigableMap m) {
  329.38 +                return m; }},
  329.39 +            new NavigableMapView() { NavigableMap view(NavigableMap m) {
  329.40 +                return m.headMap(99, true); }},
  329.41 +            new NavigableMapView() { NavigableMap view(NavigableMap m) {
  329.42 +                return m.tailMap(-99, false); }},
  329.43 +            new NavigableMapView() { NavigableMap view(NavigableMap m) {
  329.44 +                return m.subMap(-99, true, 99, false); }},
  329.45 +        };
  329.46 +
  329.47 +        abstract class Remover {
  329.48 +            abstract void remove(NavigableMap m, Object k, Object v);
  329.49 +        }
  329.50 +
  329.51 +        Remover[] removers = {
  329.52 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.53 +                equal(m.remove(k), v); }},
  329.54 +
  329.55 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.56 +                equal(m.descendingMap().remove(k), v); }},
  329.57 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.58 +                equal(m.descendingMap().headMap(-86, false).remove(k), v); }},
  329.59 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.60 +                equal(m.descendingMap().tailMap(86, true).remove(k), v); }},
  329.61 +
  329.62 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.63 +                equal(m.headMap(86, true).remove(k), v); }},
  329.64 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.65 +                equal(m.tailMap(-86, true).remove(k), v); }},
  329.66 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.67 +                equal(m.subMap(-86, false, 86, true).remove(k), v); }},
  329.68 +
  329.69 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.70 +                check(m.keySet().remove(k)); }},
  329.71 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.72 +                check(m.navigableKeySet().remove(k)); }},
  329.73 +
  329.74 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.75 +                check(m.navigableKeySet().headSet(86, true).remove(k)); }},
  329.76 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.77 +                check(m.navigableKeySet().tailSet(-86, false).remove(k)); }},
  329.78 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.79 +                check(m.navigableKeySet().subSet(-86, true, 86, false)
  329.80 +                      .remove(k)); }},
  329.81 +
  329.82 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.83 +                check(m.descendingKeySet().headSet(-86, false).remove(k)); }},
  329.84 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.85 +                check(m.descendingKeySet().tailSet(86, true).remove(k)); }},
  329.86 +            new Remover() { void remove(NavigableMap m, Object k, Object v) {
  329.87 +                check(m.descendingKeySet().subSet(86, true, -86, false)
  329.88 +                      .remove(k)); }},
  329.89 +        };
  329.90 +
  329.91 +        for (NavigableMapView view : views) {
  329.92 +            for (Remover remover : removers) {
  329.93 +                try {
  329.94 +                    m.clear();
  329.95 +                    equalMaps(m, emptyMap);
  329.96 +                    equal(m.put(1, 2), null);
  329.97 +                    equalMaps(m, singletonMap);
  329.98 +                    NavigableMap v = view.view(m);
  329.99 +                    remover.remove(v, 1, 2);
 329.100 +                    equalMaps(m, emptyMap);
 329.101 +                } catch (Throwable t) { unexpected(t); }
 329.102 +            }
 329.103 +        }
 329.104 +    }
 329.105 +
 329.106      private static void testNavigableMap(NavigableMap<Integer,Integer> m)
 329.107      {
 329.108          clear(m);
   330.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   330.2 +++ b/test/java/util/concurrent/Semaphore/RacingReleases.java	Thu Apr 16 19:10:32 2009 -0700
   330.3 @@ -0,0 +1,116 @@
   330.4 +/*
   330.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   330.6 + *
   330.7 + * This code is free software; you can redistribute it and/or modify it
   330.8 + * under the terms of the GNU General Public License version 2 only, as
   330.9 + * published by the Free Software Foundation.
  330.10 + *
  330.11 + * This code is distributed in the hope that it will be useful, but WITHOUT
  330.12 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  330.13 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  330.14 + * version 2 for more details (a copy is included in the LICENSE file that
  330.15 + * accompanied this code).
  330.16 + *
  330.17 + * You should have received a copy of the GNU General Public License version
  330.18 + * 2 along with this work; if not, write to the Free Software Foundation,
  330.19 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  330.20 + *
  330.21 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  330.22 + * CA 95054 USA or visit www.sun.com if you need additional information or
  330.23 + * have any questions.
  330.24 + */
  330.25 +
  330.26 +/*
  330.27 + * This file is available under and governed by the GNU General Public
  330.28 + * License version 2 only, as published by the Free Software Foundation.
  330.29 + * However, the following notice accompanied the original version of this
  330.30 + * file:
  330.31 + *
  330.32 + * Written by Doug Lea with assistance from members of JCP JSR-166
  330.33 + * Expert Group and released to the public domain, as explained at
  330.34 + * http://creativecommons.org/licenses/publicdomain
  330.35 + */
  330.36 +
  330.37 +/*
  330.38 + * @test
  330.39 + * @bug 6801020 6803402
  330.40 + * @summary Try to tickle race conditions in
  330.41 + * AbstractQueuedSynchronizer "shared" code
  330.42 + */
  330.43 +
  330.44 +import java.util.concurrent.Semaphore;
  330.45 +
  330.46 +public class RacingReleases {
  330.47 +
  330.48 +    /** Increase this for better chance of tickling races */
  330.49 +    static final int iterations = 1000;
  330.50 +
  330.51 +    public static void test(final boolean fair,
  330.52 +                            final boolean interruptibly)
  330.53 +        throws Throwable {
  330.54 +        for (int i = 0; i < iterations; i++) {
  330.55 +            final Semaphore sem = new Semaphore(0, fair);
  330.56 +            final Throwable[] badness = new Throwable[1];
  330.57 +            Runnable blocker = interruptibly ?
  330.58 +                new Runnable() {
  330.59 +                    public void run() {
  330.60 +                        try {
  330.61 +                            sem.acquire();
  330.62 +                        } catch (Throwable t) {
  330.63 +                            badness[0] = t;
  330.64 +                            throw new Error(t);
  330.65 +                        }}}
  330.66 +                :
  330.67 +                new Runnable() {
  330.68 +                    public void run() {
  330.69 +                        try {
  330.70 +                            sem.acquireUninterruptibly();
  330.71 +                        } catch (Throwable t) {
  330.72 +                            badness[0] = t;
  330.73 +                            throw new Error(t);
  330.74 +                        }}};
  330.75 +
  330.76 +            Thread b1 = new Thread(blocker);
  330.77 +            Thread b2 = new Thread(blocker);
  330.78 +            Runnable signaller = new Runnable() {
  330.79 +                public void run() {
  330.80 +                    try {
  330.81 +                        sem.release();
  330.82 +                    } catch (Throwable t) {
  330.83 +                        badness[0] = t;
  330.84 +                        throw new Error(t);
  330.85 +                    }}};
  330.86 +            Thread s1 = new Thread(signaller);
  330.87 +            Thread s2 = new Thread(signaller);
  330.88 +            Thread[] threads = { b1, b2, s1, s2 };
  330.89 +            java.util.Collections.shuffle(java.util.Arrays.asList(threads));
  330.90 +            for (Thread thread : threads)
  330.91 +                thread.start();
  330.92 +            for (Thread thread : threads) {
  330.93 +                thread.join(60 * 1000);
  330.94 +                if (thread.isAlive())
  330.95 +                    throw new Error
  330.96 +                        (String.format
  330.97 +                         ("Semaphore stuck: permits %d, thread waiting %s%n",
  330.98 +                          sem.availablePermits(),
  330.99 +                          sem.hasQueuedThreads() ? "true" : "false"));
 330.100 +            }
 330.101 +            if (badness[0] != null)
 330.102 +                throw new Error(badness[0]);
 330.103 +            if (sem.availablePermits() != 0)
 330.104 +              throw new Error(String.valueOf(sem.availablePermits()));
 330.105 +            if (sem.hasQueuedThreads())
 330.106 +              throw new Error(String.valueOf(sem.hasQueuedThreads()));
 330.107 +            if (sem.getQueueLength() != 0)
 330.108 +              throw new Error(String.valueOf(sem.getQueueLength()));
 330.109 +            if (sem.isFair() != fair)
 330.110 +              throw new Error(String.valueOf(sem.isFair()));
 330.111 +        }
 330.112 +    }
 330.113 +
 330.114 +    public static void main(String[] args) throws Throwable {
 330.115 +        for (boolean fair : new boolean[] { true, false })
 330.116 +            for (boolean interruptibly : new boolean[] { true, false })
 330.117 +                test(fair, interruptibly);
 330.118 +    }
 330.119 +}
   331.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   331.2 +++ b/test/java/util/zip/LargeZip.java	Thu Apr 16 19:10:32 2009 -0700
   331.3 @@ -0,0 +1,193 @@
   331.4 +/*
   331.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   331.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   331.7 + *
   331.8 + * This code is free software; you can redistribute it and/or modify it
   331.9 + * under the terms of the GNU General Public License version 2 only, as
  331.10 + * published by the Free Software Foundation.  Sun designates this
  331.11 + * particular file as subject to the "Classpath" exception as provided
  331.12 + * by Sun in the LICENSE file that accompanied this code.
  331.13 + *
  331.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
  331.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  331.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  331.17 + * version 2 for more details (a copy is included in the LICENSE file that
  331.18 + * accompanied this code).
  331.19 + *
  331.20 + * You should have received a copy of the GNU General Public License version
  331.21 + * 2 along with this work; if not, write to the Free Software Foundation,
  331.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  331.23 + *
  331.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  331.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
  331.26 + * have any questions.
  331.27 + */
  331.28 +
  331.29 +import java.io.*;
  331.30 +import java.nio.*;
  331.31 +import java.util.*;
  331.32 +import java.util.zip.*;
  331.33 +
  331.34 +public class LargeZip {
  331.35 +    // If true, don't delete large ZIP file created for test.
  331.36 +    static final boolean debug = System.getProperty("debug") != null;
  331.37 +
  331.38 +    //static final int DATA_LEN = 1024 * 1024;
  331.39 +    static final int DATA_LEN = 80 * 1024;
  331.40 +    static final int DATA_SIZE = 8;
  331.41 +
  331.42 +    static long fileSize = 6L * 1024L * 1024L * 1024L; // 6GB
  331.43 +
  331.44 +    static boolean userFile = false;
  331.45 +
  331.46 +    static byte[] data;
  331.47 +    static File largeFile;
  331.48 +    static String lastEntryName;
  331.49 +
  331.50 +    /* args can be empty, in which case check a 3 GB file which is created for
  331.51 +     * this test (and then deleted).  Or it can be a number, in which case
  331.52 +     * that designates the size of the file that's created for this test (and
  331.53 +     * then deleted).  Or it can be the name of a file to use for the test, in
  331.54 +     * which case it is *not* deleted.  Note that in this last case, the data
  331.55 +     * comparison might fail.
  331.56 +     */
  331.57 +    static void realMain (String[] args) throws Throwable {
  331.58 +        if (args.length > 0) {
  331.59 +            try {
  331.60 +                fileSize = Long.parseLong(args[0]);
  331.61 +                System.out.println("Testing with file of size " + fileSize);
  331.62 +            } catch (NumberFormatException ex) {
  331.63 +                largeFile = new File(args[0]);
  331.64 +                if (!largeFile.exists()) {
  331.65 +                    throw new Exception("Specified file " + args[0] + " does not exist");
  331.66 +                }
  331.67 +                userFile = true;
  331.68 +                System.out.println("Testing with user-provided file " + largeFile);
  331.69 +            }
  331.70 +        }
  331.71 +        File testDir = null;
  331.72 +        if (largeFile == null) {
  331.73 +            testDir = new File(System.getProperty("test.scratch", "."),
  331.74 +                                    "LargeZip");
  331.75 +            if (testDir.exists()) {
  331.76 +                if (!testDir.delete()) {
  331.77 +                    throw new Exception("Cannot delete already-existing test directory");
  331.78 +                }
  331.79 +            }
  331.80 +            check(!testDir.exists() && testDir.mkdirs());
  331.81 +            largeFile = new File(testDir, "largezip.zip");
  331.82 +            createLargeZip();
  331.83 +        }
  331.84 +
  331.85 +        readLargeZip1();
  331.86 +        readLargeZip2();
  331.87 +
  331.88 +        if (!userFile && !debug) {
  331.89 +            check(largeFile.delete());
  331.90 +            check(testDir.delete());
  331.91 +        }
  331.92 +    }
  331.93 +
  331.94 +    static void createLargeZip() throws Throwable {
  331.95 +        int iterations = DATA_LEN / DATA_SIZE;
  331.96 +        ByteBuffer bb = ByteBuffer.allocate(DATA_SIZE);
  331.97 +        ByteArrayOutputStream baos = new ByteArrayOutputStream();
  331.98 +        for (int i = 0; i < iterations; i++) {
  331.99 +            bb.putDouble(0, Math.random());
 331.100 +            baos.write(bb.array(), 0, DATA_SIZE);
 331.101 +        }
 331.102 +        data = baos.toByteArray();
 331.103 +
 331.104 +        ZipOutputStream zos = new ZipOutputStream(
 331.105 +            new BufferedOutputStream(new FileOutputStream(largeFile)));
 331.106 +        long length = 0;
 331.107 +        while (length < fileSize) {
 331.108 +            ZipEntry ze = new ZipEntry("entry-" + length);
 331.109 +            lastEntryName = ze.getName();
 331.110 +            zos.putNextEntry(ze);
 331.111 +            zos.write(data, 0, data.length);
 331.112 +            zos.closeEntry();
 331.113 +            length = largeFile.length();
 331.114 +        }
 331.115 +        System.out.println("Last entry written is " + lastEntryName);
 331.116 +        zos.close();
 331.117 +    }
 331.118 +
 331.119 +    static void readLargeZip1() throws Throwable {
 331.120 +        ZipFile zipFile = new ZipFile(largeFile);
 331.121 +        ZipEntry entry = null;
 331.122 +        String entryName = null;
 331.123 +        int count = 0;
 331.124 +        Enumeration<? extends ZipEntry> entries = zipFile.entries();
 331.125 +        while (entries.hasMoreElements()) {
 331.126 +            entry = entries.nextElement();
 331.127 +            entryName = entry.getName();
 331.128 +            count++;
 331.129 +        }
 331.130 +        System.out.println("Number of entries read: " + count);
 331.131 +        System.out.println("Last entry read is " + entryName);
 331.132 +        check(!entry.isDirectory());
 331.133 +        if (check(entryName.equals(lastEntryName))) {
 331.134 +            ByteArrayOutputStream baos = new ByteArrayOutputStream();
 331.135 +            InputStream is = zipFile.getInputStream(entry);
 331.136 +            byte buf[] = new byte[4096];
 331.137 +            int len;
 331.138 +            while ((len = is.read(buf)) >= 0) {
 331.139 +                baos.write(buf, 0, len);
 331.140 +            }
 331.141 +            baos.close();
 331.142 +            is.close();
 331.143 +            check(Arrays.equals(data, baos.toByteArray()));
 331.144 +        }
 331.145 +    }
 331.146 +
 331.147 +
 331.148 +    static void readLargeZip2() throws Throwable {
 331.149 +        ZipInputStream zis = new ZipInputStream(
 331.150 +            new BufferedInputStream(new FileInputStream(largeFile)));
 331.151 +        ZipEntry entry = null;
 331.152 +        String entryName = null;
 331.153 +        int count = 0;
 331.154 +        while ((entry = zis.getNextEntry()) != null) {
 331.155 +            entryName = entry.getName();
 331.156 +            if (entryName.equals(lastEntryName)) {
 331.157 +                break;
 331.158 +            }
 331.159 +            count++;
 331.160 +        }
 331.161 +        System.out.println("Number of entries read: " + count);
 331.162 +        System.out.println("Last entry read is " + entryName);
 331.163 +        check(!entry.isDirectory());
 331.164 +
 331.165 +        ByteArrayOutputStream baos = new ByteArrayOutputStream();
 331.166 +
 331.167 +        byte buf[] = new byte[4096];
 331.168 +        int len;
 331.169 +        while ((len = zis.read(buf)) >= 0) {
 331.170 +            baos.write(buf, 0, len);
 331.171 +        }
 331.172 +        baos.close();
 331.173 +        check(Arrays.equals(data, baos.toByteArray()));
 331.174 +        check(zis.getNextEntry() == null);
 331.175 +        zis.close();
 331.176 +    }
 331.177 +
 331.178 +
 331.179 +    //--------------------- Infrastructure ---------------------------
 331.180 +    static volatile int passed = 0, failed = 0;
 331.181 +    static void pass() {passed++;}
 331.182 +    static void pass(String msg) {System.out.println(msg); passed++;}
 331.183 +    static void fail() {failed++; Thread.dumpStack();}
 331.184 +    static void fail(String msg) {System.out.println(msg); fail();}
 331.185 +    static void unexpected(Throwable t) {failed++; t.printStackTrace();}
 331.186 +    static void unexpected(Throwable t, String msg) {
 331.187 +        System.out.println(msg); failed++; t.printStackTrace();}
 331.188 +    static boolean check(boolean cond) {if (cond) pass(); else fail(); return cond;}
 331.189 +    static void equal(Object x, Object y) {
 331.190 +        if (x == null ? y == null : x.equals(y)) pass();
 331.191 +        else fail(x + " not equal to " + y);}
 331.192 +    public static void main(String[] args) throws Throwable {
 331.193 +        try {realMain(args);} catch (Throwable t) {unexpected(t);}
 331.194 +        System.out.println("\nPassed = " + passed + " failed = " + failed);
 331.195 +        if (failed > 0) throw new AssertionError("Some tests failed");}
 331.196 +}
   332.1 --- a/test/java/util/zip/ZipFile/LargeZipFile.java	Thu Apr 16 17:42:00 2009 +0100
   332.2 +++ b/test/java/util/zip/ZipFile/LargeZipFile.java	Thu Apr 16 19:10:32 2009 -0700
   332.3 @@ -158,4 +158,3 @@
   332.4          System.out.println("\nPassed = " + passed + " failed = " + failed);
   332.5          if (failed > 0) throw new AssertionError("Some tests failed");}
   332.6  }
   332.7 -
   333.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   333.2 +++ b/test/javax/swing/JFileChooser/6570445/bug6570445.java	Thu Apr 16 19:10:32 2009 -0700
   333.3 @@ -0,0 +1,20 @@
   333.4 +/*
   333.5 + * @test
   333.6 + * @bug 6570445
   333.7 + * @summary Checks if Win32ShellFolder2's COM-using methods work under a security manager
   333.8 + * @author Leonid Popov
   333.9 + */
  333.10 +
  333.11 +import javax.swing.filechooser.FileSystemView;
  333.12 +
  333.13 +public class bug6570445 {
  333.14 +    public static void main(String[] args) {
  333.15 +        System.setSecurityManager(new SecurityManager());
  333.16 +
  333.17 +        // The next line of code forces FileSystemView to request data from Win32ShellFolder2,
  333.18 +        // what causes an exception if a security manager installed (see the bug 6570445 description)
  333.19 +        FileSystemView.getFileSystemView().getRoots();
  333.20 +
  333.21 +        System.out.println("Passed.");
  333.22 +    }
  333.23 +}
   334.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   334.2 +++ b/test/javax/swing/JFileChooser/6738668/bug6738668.java	Thu Apr 16 19:10:32 2009 -0700
   334.3 @@ -0,0 +1,44 @@
   334.4 +/*
   334.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   334.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   334.7 + *
   334.8 + * This code is free software; you can redistribute it and/or modify it
   334.9 + * under the terms of the GNU General Public License version 2 only, as
  334.10 + * published by the Free Software Foundation.
  334.11 + *
  334.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  334.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  334.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  334.15 + * version 2 for more details (a copy is included in the LICENSE file that
  334.16 + * accompanied this code).
  334.17 + *
  334.18 + * You should have received a copy of the GNU General Public License version
  334.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  334.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  334.21 + *
  334.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  334.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  334.24 + * have any questions.
  334.25 + */
  334.26 +
  334.27 +/* @test
  334.28 +   @bug 6738668
  334.29 +   @summary JFileChooser cannot be created under SecurityManager
  334.30 +   @author Pavel Porvatov
  334.31 +   @run main/othervm/policy=security.policy bug6738668
  334.32 +*/
  334.33 +
  334.34 +import javax.swing.*;
  334.35 +import java.io.File;
  334.36 +
  334.37 +public class bug6738668 {
  334.38 +    public static void main(String[] args) throws Exception {
  334.39 +        for (UIManager.LookAndFeelInfo lookAndFeelInfo : UIManager.getInstalledLookAndFeels()) {
  334.40 +            UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
  334.41 +
  334.42 +            new JFileChooser(new File("c:/temp"));
  334.43 +
  334.44 +            System.out.println("Test passed for LookAndFeel " + lookAndFeelInfo.getClassName());
  334.45 +        }
  334.46 +    }
  334.47 +}
   335.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   335.2 +++ b/test/javax/swing/JFileChooser/6738668/security.policy	Thu Apr 16 19:10:32 2009 -0700
   335.3 @@ -0,0 +1,5 @@
   335.4 +grant {
   335.5 +    permission java.io.FilePermission "C:\\temp\\*", "read";
   335.6 +    permission java.io.FilePermission "C:\\temp", "read";
   335.7 +    permission java.util.PropertyPermission "*", "read";
   335.8 +};
   336.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   336.2 +++ b/test/javax/swing/JFileChooser/6798062/bug6798062.html	Thu Apr 16 19:10:32 2009 -0700
   336.3 @@ -0,0 +1,11 @@
   336.4 +<html>
   336.5 +<body>
   336.6 +<applet  code="bug6798062.class" width=400 height=300></applet>
   336.7 +1. Create a link
   336.8 +2. Copy path to the link into TextField
   336.9 +3. Run the Windows Task Manager. Select the Processes tab and find the java process
  336.10 +4. Press the Start button in the test window
  336.11 +5. Wait several minutes and observe in the Windows Task Manager
  336.12 +that Memory Usage of java process is not increasing 
  336.13 +</body>
  336.14 +</html>
   337.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   337.2 +++ b/test/javax/swing/JFileChooser/6798062/bug6798062.java	Thu Apr 16 19:10:32 2009 -0700
   337.3 @@ -0,0 +1,189 @@
   337.4 +/*
   337.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   337.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   337.7 + *
   337.8 + * This code is free software; you can redistribute it and/or modify it
   337.9 + * under the terms of the GNU General Public License version 2 only, as
  337.10 + * published by the Free Software Foundation.
  337.11 + *
  337.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  337.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  337.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  337.15 + * version 2 for more details (a copy is included in the LICENSE file that
  337.16 + * accompanied this code).
  337.17 + *
  337.18 + * You should have received a copy of the GNU General Public License version
  337.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  337.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  337.21 + *
  337.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  337.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  337.24 + * have any questions.
  337.25 + */
  337.26 +
  337.27 +/* @test %W% %E%
  337.28 +   @bug 6798062
  337.29 +   @summary Memory Leak on using getFiles of FileSystemView
  337.30 +   @author Pavel Porvatov
  337.31 +   @run applet/manual=done bug6798062.html
  337.32 +*/
  337.33 +
  337.34 +import sun.awt.shell.ShellFolder;
  337.35 +
  337.36 +import javax.swing.*;
  337.37 +import java.awt.event.ActionEvent;
  337.38 +import java.awt.event.ActionListener;
  337.39 +import java.awt.*;
  337.40 +import java.io.File;
  337.41 +import java.io.FileNotFoundException;
  337.42 +
  337.43 +public class bug6798062 extends JApplet {
  337.44 +
  337.45 +    private final JSlider slider = new JSlider(0, 100);
  337.46 +
  337.47 +    private final JTextField tfLink = new JTextField();
  337.48 +
  337.49 +    private final JButton btnStart = new JButton("Start");
  337.50 +
  337.51 +    private final JButton btnStop = new JButton("Stop");
  337.52 +
  337.53 +    private final JButton btnGC = new JButton("Run System.gc()");
  337.54 +
  337.55 +    private ShellFolder folder;
  337.56 +
  337.57 +    private Thread thread;
  337.58 +
  337.59 +    public static void main(String[] args) {
  337.60 +        JFrame frame = new JFrame("bug6798062");
  337.61 +
  337.62 +        frame.setSize(400, 300);
  337.63 +        frame.setLocationRelativeTo(null);
  337.64 +        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  337.65 +        frame.add(new bug6798062().initialize());
  337.66 +
  337.67 +        frame.setVisible(true);
  337.68 +    }
  337.69 +
  337.70 +    public void init() {
  337.71 +        add(initialize());
  337.72 +    }
  337.73 +
  337.74 +    private JPanel initialize() {
  337.75 +        File file = new File("c:/");
  337.76 +
  337.77 +        try {
  337.78 +            folder = ShellFolder.getShellFolder(file);
  337.79 +        } catch (FileNotFoundException e) {
  337.80 +            fail("Directory " + file.getPath() + " not found");
  337.81 +        }
  337.82 +
  337.83 +        slider.setMajorTickSpacing(10);
  337.84 +        slider.setPaintTicks(true);
  337.85 +        slider.setPaintLabels(true);
  337.86 +        slider.setSnapToTicks(true);
  337.87 +        slider.setValue(10);
  337.88 +
  337.89 +        btnStart.addActionListener(new ActionListener() {
  337.90 +            public void actionPerformed(ActionEvent e) {
  337.91 +                setEnabledState(false);
  337.92 +
  337.93 +                thread = new MyThread(slider.getValue(), tfLink.getText());
  337.94 +                thread.start();
  337.95 +            }
  337.96 +        });
  337.97 +
  337.98 +        btnStop.setEnabled(false);
  337.99 +
 337.100 +        btnStop.addActionListener(new ActionListener() {
 337.101 +            public void actionPerformed(ActionEvent e) {
 337.102 +                thread.interrupt();
 337.103 +                thread = null;
 337.104 +
 337.105 +                setEnabledState(true);
 337.106 +            }
 337.107 +        });
 337.108 +
 337.109 +        btnGC.addActionListener(new ActionListener() {
 337.110 +            public void actionPerformed(ActionEvent e) {
 337.111 +                System.gc();
 337.112 +            }
 337.113 +        });
 337.114 +
 337.115 +        setEnabledState(true);
 337.116 +
 337.117 +        JPanel pnButtons = new JPanel();
 337.118 +
 337.119 +        pnButtons.setLayout(new BoxLayout(pnButtons, BoxLayout.X_AXIS));
 337.120 +
 337.121 +        pnButtons.add(btnStart);
 337.122 +        pnButtons.add(btnStop);
 337.123 +        pnButtons.add(btnGC);
 337.124 +
 337.125 +        tfLink.setMaximumSize(new Dimension(300, 20));
 337.126 +
 337.127 +        JPanel pnContent = new JPanel();
 337.128 +
 337.129 +        pnContent.setLayout(new BoxLayout(pnContent, BoxLayout.Y_AXIS));
 337.130 +        pnContent.add(new JLabel("Delay between listFiles() invocation (ms):"));
 337.131 +        pnContent.add(slider);
 337.132 +        pnContent.add(new JLabel("Provide link here:"));
 337.133 +        pnContent.add(tfLink);
 337.134 +        pnContent.add(pnButtons);
 337.135 +
 337.136 +        return pnContent;
 337.137 +    }
 337.138 +
 337.139 +    private void setEnabledState(boolean enabled) {
 337.140 +        slider.setEnabled(enabled);
 337.141 +        btnStart.setEnabled(enabled);
 337.142 +        btnStop.setEnabled(!enabled);
 337.143 +    }
 337.144 +
 337.145 +    private static void fail(String msg) {
 337.146 +        throw new RuntimeException(msg);
 337.147 +    }
 337.148 +
 337.149 +    private class MyThread extends Thread {
 337.150 +        private final int delay;
 337.151 +
 337.152 +        private final ShellFolder link;
 337.153 +
 337.154 +        private MyThread(int delay, String link) {
 337.155 +            this.delay = delay;
 337.156 +
 337.157 +            ShellFolder linkFolder;
 337.158 +
 337.159 +            try {
 337.160 +                linkFolder = ShellFolder.getShellFolder(new File(link));
 337.161 +            } catch (FileNotFoundException e) {
 337.162 +                e.printStackTrace();
 337.163 +
 337.164 +                linkFolder = null;
 337.165 +            }
 337.166 +
 337.167 +            this.link = linkFolder;
 337.168 +        }
 337.169 +
 337.170 +        public void run() {
 337.171 +            while (!isInterrupted()) {
 337.172 +                folder.listFiles();
 337.173 +                if (link != null) {
 337.174 +                    try {
 337.175 +                        link.getLinkLocation();
 337.176 +                    } catch (FileNotFoundException e) {
 337.177 +                        e.printStackTrace();
 337.178 +                    }
 337.179 +                }
 337.180 +
 337.181 +                if (delay > 0) {
 337.182 +                    try {
 337.183 +                        Thread.sleep(delay);
 337.184 +                    } catch (InterruptedException e1) {
 337.185 +                        // The thread was interrupted
 337.186 +                        return;
 337.187 +                    }
 337.188 +                }
 337.189 +            }
 337.190 +        }
 337.191 +    }
 337.192 +}
   338.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   338.2 +++ b/test/javax/swing/JSlider/6794831/bug6794831.java	Thu Apr 16 19:10:32 2009 -0700
   338.3 @@ -0,0 +1,105 @@
   338.4 +/*
   338.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   338.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   338.7 + *
   338.8 + * This code is free software; you can redistribute it and/or modify it
   338.9 + * under the terms of the GNU General Public License version 2 only, as
  338.10 + * published by the Free Software Foundation.
  338.11 + *
  338.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  338.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  338.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  338.15 + * version 2 for more details (a copy is included in the LICENSE file that
  338.16 + * accompanied this code).
  338.17 + *
  338.18 + * You should have received a copy of the GNU General Public License version
  338.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  338.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  338.21 + *
  338.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  338.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  338.24 + * have any questions.
  338.25 + */
  338.26 +
  338.27 +/* @test
  338.28 + * @bug 6794831
  338.29 + * @summary Infinite loop while painting ticks on Slider with maximum=MAX_INT
  338.30 + * @author Pavel Porvatov
  338.31 +   @run main bug6794831
  338.32 + */
  338.33 +
  338.34 +import javax.swing.*;
  338.35 +import javax.swing.plaf.basic.BasicSliderUI;
  338.36 +import java.awt.image.BufferedImage;
  338.37 +import java.util.concurrent.CountDownLatch;
  338.38 +import java.util.concurrent.TimeUnit;
  338.39 +
  338.40 +public class bug6794831 {
  338.41 +    private final CountDownLatch countDownLatch = new CountDownLatch(1);
  338.42 +
  338.43 +    public static void main(String args[]) throws InterruptedException {
  338.44 +        new bug6794831().run();
  338.45 +    }
  338.46 +
  338.47 +    private void run() throws InterruptedException {
  338.48 +        SwingUtilities.invokeLater(new Runnable() {
  338.49 +            public void run() {
  338.50 +                for (UIManager.LookAndFeelInfo lookAndFeelInfo : UIManager.getInstalledLookAndFeels()) {
  338.51 +                    try {
  338.52 +                        UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
  338.53 +                    } catch (Exception e) {
  338.54 +                        fail(e.getMessage());
  338.55 +                    }
  338.56 +
  338.57 +                    BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB);
  338.58 +
  338.59 +                    // Test 1
  338.60 +                    JSlider slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
  338.61 +
  338.62 +                    slider.setMajorTickSpacing((Integer.MAX_VALUE - 1) / 4);
  338.63 +                    slider.setPaintTicks(true);
  338.64 +
  338.65 +                    ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
  338.66 +
  338.67 +                    // Test 2
  338.68 +                    slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
  338.69 +
  338.70 +                    slider.setMinorTickSpacing((Integer.MAX_VALUE - 1) / 4);
  338.71 +                    slider.setPaintTicks(true);
  338.72 +
  338.73 +                    ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
  338.74 +
  338.75 +                    // Test 3
  338.76 +                    slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
  338.77 +
  338.78 +                    slider.setOrientation(JSlider.VERTICAL);
  338.79 +                    slider.setMajorTickSpacing((Integer.MAX_VALUE - 1) / 4);
  338.80 +                    slider.setPaintTicks(true);
  338.81 +
  338.82 +                    ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
  338.83 +
  338.84 +                    // Test 4
  338.85 +                    slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
  338.86 +
  338.87 +                    slider.setOrientation(JSlider.VERTICAL);
  338.88 +                    slider.setMinorTickSpacing((Integer.MAX_VALUE - 1) / 4);
  338.89 +                    slider.setPaintTicks(true);
  338.90 +
  338.91 +                    ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
  338.92 +
  338.93 +                    countDownLatch.countDown();
  338.94 +                }
  338.95 +            }
  338.96 +        });
  338.97 +
  338.98 +        if (countDownLatch.await(3000, TimeUnit.MILLISECONDS)) {
  338.99 +            System.out.println("bug6794831 passed");
 338.100 +        } else {
 338.101 +            fail("bug6794831 failed");
 338.102 +        }
 338.103 +    }
 338.104 +
 338.105 +    private static void fail(String msg) {
 338.106 +        throw new RuntimeException(msg);
 338.107 +    }
 338.108 +}
   339.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   339.2 +++ b/test/javax/swing/system/6799345/TestShutdown.java	Thu Apr 16 19:10:32 2009 -0700
   339.3 @@ -0,0 +1,203 @@
   339.4 +/*
   339.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   339.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   339.7 + *
   339.8 + * This code is free software; you can redistribute it and/or modify it
   339.9 + * under the terms of the GNU General Public License version 2 only, as
  339.10 + * published by the Free Software Foundation.
  339.11 + *
  339.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  339.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  339.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  339.15 + * version 2 for more details (a copy is included in the LICENSE file that
  339.16 + * accompanied this code).
  339.17 + *
  339.18 + * You should have received a copy of the GNU General Public License version
  339.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  339.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  339.21 + *
  339.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  339.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  339.24 + * have any questions.
  339.25 + */
  339.26 +
  339.27 +/* @test
  339.28 +   @bug 6799345
  339.29 +   @summary Tests that no exceptions are thrown from TimerQueue and
  339.30 +SwingWorker on AppContext shutdown
  339.31 +   @author art
  339.32 +   @run main TestShutdown
  339.33 +*/
  339.34 +
  339.35 +import java.awt.*;
  339.36 +import java.awt.event.*;
  339.37 +
  339.38 +import java.util.*;
  339.39 +
  339.40 +import javax.swing.*;
  339.41 +
  339.42 +import sun.awt.*;
  339.43 +
  339.44 +public class TestShutdown
  339.45 +{
  339.46 +    private static AppContext targetAppContext;
  339.47 +
  339.48 +    private static JFrame f;
  339.49 +    private static JTextField tf;
  339.50 +
  339.51 +    private static volatile boolean exceptionsOccurred = false;
  339.52 +    private static volatile boolean appcontextInitDone = false;
  339.53 +
  339.54 +    private static int timerValue = 0;
  339.55 +
  339.56 +    public static void main(String[] args)
  339.57 +        throws Exception
  339.58 +    {
  339.59 +        ThreadGroup tg = new TestThreadGroup("TTG");
  339.60 +        Thread t = new Thread(tg, new TestRunnable(), "InitThread");
  339.61 +        t.start();
  339.62 +
  339.63 +        while (!appcontextInitDone)
  339.64 +        {
  339.65 +            Thread.sleep(500);
  339.66 +        }
  339.67 +
  339.68 +        targetAppContext.dispose();
  339.69 +
  339.70 +        if (exceptionsOccurred)
  339.71 +        {
  339.72 +            throw new RuntimeException("Test FAILED: some exceptions occurred");
  339.73 +        }
  339.74 +    }
  339.75 +
  339.76 +    static void initGUI()
  339.77 +    {
  339.78 +        f = new JFrame("F");
  339.79 +        f.setBounds(100, 100, 200, 100);
  339.80 +        tf = new JTextField("Test");
  339.81 +        f.add(tf);
  339.82 +        f.setVisible(true);
  339.83 +    }
  339.84 +
  339.85 +    static void startGUI()
  339.86 +    {
  339.87 +        // caret blink Timer
  339.88 +        tf.requestFocusInWindow();
  339.89 +
  339.90 +        // misc Timer
  339.91 +        ActionListener al = new ActionListener()
  339.92 +        {
  339.93 +            @Override
  339.94 +            public void actionPerformed(ActionEvent ae)
  339.95 +            {
  339.96 +                System.out.println("Timer tick: " + timerValue++);
  339.97 +            }
  339.98 +        };
  339.99 +        new javax.swing.Timer(30, al).start();
 339.100 +    }
 339.101 +
 339.102 +    static class TestThreadGroup extends ThreadGroup
 339.103 +    {
 339.104 +        public TestThreadGroup(String name)
 339.105 +        {
 339.106 +            super(name);
 339.107 +        }
 339.108 +
 339.109 +        @Override
 339.110 +        public synchronized void uncaughtException(Thread thread, Throwable t)
 339.111 +        {
 339.112 +            if (t instanceof ThreadDeath)
 339.113 +            {
 339.114 +                // this one is expected, rethrow
 339.115 +                throw (ThreadDeath)t;
 339.116 +            }
 339.117 +            System.err.println("Test FAILED: an exception is caught in the " +
 339.118 +                               "target thread group on thread " + thread.getName());
 339.119 +            t.printStackTrace(System.err);
 339.120 +            exceptionsOccurred = true;
 339.121 +        }
 339.122 +    }
 339.123 +
 339.124 +    static class TestRunnable implements Runnable
 339.125 +    {
 339.126 +        @Override
 339.127 +        public void run()
 339.128 +        {
 339.129 +            SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit();
 339.130 +            targetAppContext = stk.createNewAppContext();
 339.131 +
 339.132 +            // create and show frame and text field
 339.133 +            SwingUtilities.invokeLater(new Runnable()
 339.134 +            {
 339.135 +                @Override
 339.136 +                public void run()
 339.137 +                {
 339.138 +                    initGUI();
 339.139 +                }
 339.140 +            });
 339.141 +            stk.realSync();
 339.142 +
 339.143 +            // start some Timers
 339.144 +            SwingUtilities.invokeLater(new Runnable()
 339.145 +            {
 339.146 +                @Override
 339.147 +                public void run()
 339.148 +                {
 339.149 +                    startGUI();
 339.150 +                }
 339.151 +            });
 339.152 +            stk.realSync();
 339.153 +
 339.154 +            // start multiple SwingWorkers
 339.155 +            while (!Thread.interrupted())
 339.156 +            {
 339.157 +                try
 339.158 +                {
 339.159 +                    new TestSwingWorker().execute();
 339.160 +                    Thread.sleep(40);
 339.161 +                }
 339.162 +                catch (Exception e)
 339.163 +                {
 339.164 +                    // exception here is expected, skip
 339.165 +                    break;
 339.166 +                }
 339.167 +            }
 339.168 +        }
 339.169 +    }
 339.170 +
 339.171 +    static class TestSwingWorker extends SwingWorker<String, Integer>
 339.172 +    {
 339.173 +        @Override
 339.174 +        public String doInBackground()
 339.175 +        {
 339.176 +            Random r = new Random();
 339.177 +            for (int i = 0; i < 10; i++)
 339.178 +            {
 339.179 +                try
 339.180 +                {
 339.181 +                    int delay = r.nextInt() % 50;
 339.182 +                    Thread.sleep(delay);
 339.183 +                    publish(delay);
 339.184 +                }
 339.185 +                catch (Exception z)
 339.186 +                {
 339.187 +                    break;
 339.188 +                }
 339.189 +            }
 339.190 +            if (!appcontextInitDone)
 339.191 +            {
 339.192 +                appcontextInitDone = true;
 339.193 +            }
 339.194 +            return "Done";
 339.195 +        }
 339.196 +
 339.197 +        @Override
 339.198 +        public void process(java.util.List<Integer> chunks)
 339.199 +        {
 339.200 +            for (Integer i : chunks)
 339.201 +            {
 339.202 +                System.err.println("Processed: " + i);
 339.203 +            }
 339.204 +        }
 339.205 +    }
 339.206 +}
   340.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   340.2 +++ b/test/javax/swing/text/LayoutQueue/Test6588003.java	Thu Apr 16 19:10:32 2009 -0700
   340.3 @@ -0,0 +1,59 @@
   340.4 +/*
   340.5 + * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
   340.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   340.7 + *
   340.8 + * This code is free software; you can redistribute it and/or modify it
   340.9 + * under the terms of the GNU General Public License version 2 only, as
  340.10 + * published by the Free Software Foundation.
  340.11 + *
  340.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  340.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  340.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  340.15 + * version 2 for more details (a copy is included in the LICENSE file that
  340.16 + * accompanied this code).
  340.17 + *
  340.18 + * You should have received a copy of the GNU General Public License version
  340.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  340.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  340.21 + *
  340.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  340.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  340.24 + * have any questions.
  340.25 + */
  340.26 +
  340.27 +/* @test
  340.28 +   @bug 6588003
  340.29 +   @summary LayoutQueue should not share its DefaultQueue across AppContexts
  340.30 +   @author Peter Zhelezniakov
  340.31 +   @run main Test6588003
  340.32 +*/
  340.33 +
  340.34 +import javax.swing.text.LayoutQueue;
  340.35 +import sun.awt.SunToolkit;
  340.36 +
  340.37 +public class Test6588003 implements Runnable {
  340.38 +    private static final LayoutQueue DEFAULT = new LayoutQueue();
  340.39 +
  340.40 +    public static void main(String[] args) throws InterruptedException {
  340.41 +        LayoutQueue.setDefaultQueue(DEFAULT);
  340.42 +
  340.43 +        ThreadGroup group = new ThreadGroup("Test6588003");
  340.44 +        Thread thread = new Thread(group, new Test6588003());
  340.45 +        thread.start();
  340.46 +        thread.join();
  340.47 +
  340.48 +        if (LayoutQueue.getDefaultQueue() != DEFAULT) {
  340.49 +            throw new RuntimeException("Sharing detected");
  340.50 +        }
  340.51 +    }
  340.52 +
  340.53 +    public void run() {
  340.54 +        SunToolkit.createNewAppContext();
  340.55 +
  340.56 +        if (LayoutQueue.getDefaultQueue() == DEFAULT) {
  340.57 +            throw new RuntimeException("Sharing detected");
  340.58 +        }
  340.59 +
  340.60 +        LayoutQueue.setDefaultQueue(new LayoutQueue());
  340.61 +    }
  340.62 +}
   341.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   341.2 +++ b/test/javax/swing/text/html/Test4783068.java	Thu Apr 16 19:10:32 2009 -0700
   341.3 @@ -0,0 +1,93 @@
   341.4 +/*
   341.5 + * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
   341.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   341.7 + *
   341.8 + * This code is free software; you can redistribute it and/or modify it
   341.9 + * under the terms of the GNU General Public License version 2 only, as
  341.10 + * published by the Free Software Foundation.
  341.11 + *
  341.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  341.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  341.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  341.15 + * version 2 for more details (a copy is included in the LICENSE file that
  341.16 + * accompanied this code).
  341.17 + *
  341.18 + * You should have received a copy of the GNU General Public License version
  341.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  341.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  341.21 + *
  341.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  341.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  341.24 + * have any questions.
  341.25 + */
  341.26 +
  341.27 +/* @test
  341.28 +   @bug 4783068
  341.29 +   @summary Disabled components should render grayed-out HTML
  341.30 +   @author Peter Zhelezniakov
  341.31 +   @run main Test4783068
  341.32 +*/
  341.33 +
  341.34 +import java.awt.*;
  341.35 +import java.awt.image.BufferedImage;
  341.36 +import javax.swing.*;
  341.37 +import javax.swing.plaf.metal.MetalLookAndFeel;
  341.38 +
  341.39 +public class Test4783068 {
  341.40 +    final static Color TEST_COLOR = Color.WHITE;
  341.41 +
  341.42 +    final static String html = "<html>" +
  341.43 +                  "This is a <font color='red'>colored</font> <b>text</b>" +
  341.44 +                  "<p>with a <a href='http://ru.sun.com'>link</a>" +
  341.45 +                  "<ul><li>an unordered<li>list</ul>" +
  341.46 +                  "<ol><li>and an ordered<li>list</ol>" +
  341.47 +                  "</html>";
  341.48 +
  341.49 +
  341.50 +    void test() {
  341.51 +        try {
  341.52 +            UIManager.setLookAndFeel(new MetalLookAndFeel());
  341.53 +        } catch (UnsupportedLookAndFeelException e) {
  341.54 +            throw new Error("Cannot set Metal LAF");
  341.55 +        }
  341.56 +        // Render text using background color
  341.57 +        UIManager.put("textInactiveText", TEST_COLOR);
  341.58 +
  341.59 +        test(new JLabel(html));
  341.60 +        test(new JButton(html));
  341.61 +
  341.62 +        JEditorPane pane = new JEditorPane("text/html", html);
  341.63 +        pane.setDisabledTextColor(TEST_COLOR);
  341.64 +        test(pane);
  341.65 +    }
  341.66 +
  341.67 +    void test(JComponent c) {
  341.68 +        c.setEnabled(false);
  341.69 +        c.setOpaque(true);
  341.70 +        c.setBackground(TEST_COLOR);
  341.71 +        c.setBorder(null);
  341.72 +        Dimension size = c.getPreferredSize();
  341.73 +        c.setBounds(0, 0, size.width, size.height);
  341.74 +
  341.75 +        BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
  341.76 +        c.paint(image.getGraphics());
  341.77 +
  341.78 +        int rgb = TEST_COLOR.getRGB();
  341.79 +        for (int i = 0; i < size.height; i++) {
  341.80 +            for (int j = 0; j < size.width; j++) {
  341.81 +                if (image.getRGB(j, i) != rgb) {
  341.82 +                    throw new RuntimeException(
  341.83 +                            String.format("Color mismatch at [%d, %d]", j, i));
  341.84 +                }
  341.85 +            }
  341.86 +        }
  341.87 +    }
  341.88 +
  341.89 +    public static void main(String[] args) throws Exception {
  341.90 +        SwingUtilities.invokeAndWait(new Runnable() {
  341.91 +            @Override public void run() {
  341.92 +                new Test4783068().test();
  341.93 +            }
  341.94 +        });
  341.95 +    }
  341.96 +}
   342.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   342.2 +++ b/test/sun/java2d/pipe/RegionOps.java	Thu Apr 16 19:10:32 2009 -0700
   342.3 @@ -0,0 +1,510 @@
   342.4 +/*
   342.5 + * @test %W% %E%
   342.6 + * @bug 6504874
   342.7 + * @summary This test verifies the operation (and performance) of the
   342.8 + *          various CAG operations on the internal Region class.
   342.9 + * @run main RegionOps
  342.10 + */
  342.11 +
  342.12 +import java.awt.Rectangle;
  342.13 +import java.awt.geom.Area;
  342.14 +import java.awt.geom.AffineTransform;
  342.15 +import java.awt.image.BufferedImage;
  342.16 +import java.util.Random;
  342.17 +import sun.java2d.pipe.Region;
  342.18 +
  342.19 +public class RegionOps {
  342.20 +    public static final int DEFAULT_NUMREGIONS = 50;
  342.21 +    public static final int DEFAULT_MINSUBRECTS = 1;
  342.22 +    public static final int DEFAULT_MAXSUBRECTS = 10;
  342.23 +
  342.24 +    public static final int MINCOORD = -20;
  342.25 +    public static final int MAXCOORD = 20;
  342.26 +
  342.27 +    public static boolean useArea;
  342.28 +
  342.29 +    static int numops;
  342.30 +    static int numErrors;
  342.31 +    static Random rand = new Random();
  342.32 +    static boolean skipCheck;
  342.33 +    static boolean countErrors;
  342.34 +
  342.35 +    static {
  342.36 +        // Instantiating BufferedImage initializes sun.java2d
  342.37 +        BufferedImage bimg =
  342.38 +            new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
  342.39 +    }
  342.40 +
  342.41 +    public static void usage(String error) {
  342.42 +        if (error != null) {
  342.43 +            System.err.println("Error: "+error);
  342.44 +        }
  342.45 +        System.err.println("Usage: java RegionOps "+
  342.46 +                           "[-regions N] [-rects M] "+
  342.47 +                           "[-[min|max]rects M] [-area]");
  342.48 +        System.err.println("                      "+
  342.49 +                           "[-add|union] [-sub|diff] "+
  342.50 +                           "[-int[ersect]] [-xor]");
  342.51 +        System.err.println("                      "+
  342.52 +                           "[-seed S] [-nocheck] [-count[errors]] [-help]");
  342.53 +        System.exit((error != null) ? 1 : 0);
  342.54 +    }
  342.55 +
  342.56 +    public static void error(RectListImpl a, RectListImpl b, String problem) {
  342.57 +        System.err.println("Operating on:  "+a);
  342.58 +        if (b != null) {
  342.59 +            System.err.println("and:  "+b);
  342.60 +        }
  342.61 +        if (countErrors) {
  342.62 +            System.err.println(problem);
  342.63 +            numErrors++;
  342.64 +        } else {
  342.65 +            throw new RuntimeException(problem);
  342.66 +        }
  342.67 +    }
  342.68 +
  342.69 +    public static void main(String argv[]) {
  342.70 +        int numregions = DEFAULT_NUMREGIONS;
  342.71 +        int minsubrects = DEFAULT_MINSUBRECTS;
  342.72 +        int maxsubrects = DEFAULT_MAXSUBRECTS;
  342.73 +        boolean doUnion = false;
  342.74 +        boolean doIntersect = false;
  342.75 +        boolean doSubtract = false;
  342.76 +        boolean doXor = false;
  342.77 +
  342.78 +        for (int i = 0; i < argv.length; i++) {
  342.79 +            String arg = argv[i];
  342.80 +            if (arg.equalsIgnoreCase("-regions")) {
  342.81 +                if (i+1 >= argv.length) {
  342.82 +                    usage("missing arg for -regions");
  342.83 +                }
  342.84 +                numregions = Integer.parseInt(argv[++i]);
  342.85 +            } else if (arg.equalsIgnoreCase("-rects")) {
  342.86 +                if (i+1 >= argv.length) {
  342.87 +                    usage("missing arg for -rects");
  342.88 +                }
  342.89 +                minsubrects = maxsubrects = Integer.parseInt(argv[++i]);
  342.90 +            } else if (arg.equalsIgnoreCase("-minrects")) {
  342.91 +                if (i+1 >= argv.length) {
  342.92 +                    usage("missing arg for -minrects");
  342.93 +                }
  342.94 +                minsubrects = Integer.parseInt(argv[++i]);
  342.95 +            } else if (arg.equalsIgnoreCase("-maxrects")) {
  342.96 +                if (i+1 >= argv.length) {
  342.97 +                    usage("missing arg for -maxrects");
  342.98 +                }
  342.99 +                maxsubrects = Integer.parseInt(argv[++i]);
 342.100 +            } else if (arg.equalsIgnoreCase("-area")) {
 342.101 +                useArea = true;
 342.102 +            } else if (arg.equalsIgnoreCase("-add") ||
 342.103 +                       arg.equalsIgnoreCase("-union"))
 342.104 +            {
 342.105 +                doUnion = true;
 342.106 +            } else if (arg.equalsIgnoreCase("-sub") ||
 342.107 +                       arg.equalsIgnoreCase("-diff"))
 342.108 +            {
 342.109 +                doSubtract = true;
 342.110 +            } else if (arg.equalsIgnoreCase("-int") ||
 342.111 +                       arg.equalsIgnoreCase("-intersect"))
 342.112 +            {
 342.113 +                doIntersect = true;
 342.114 +            } else if (arg.equalsIgnoreCase("-xor")) {
 342.115 +                doXor = true;
 342.116 +            } else if (arg.equalsIgnoreCase("-seed")) {
 342.117 +                if (i+1 >= argv.length) {
 342.118 +                    usage("missing arg for -seed");
 342.119 +                }
 342.120 +                rand.setSeed(Long.decode(argv[++i]).longValue());
 342.121 +            } else if (arg.equalsIgnoreCase("-nocheck")) {
 342.122 +                skipCheck = true;
 342.123 +            } else if (arg.equalsIgnoreCase("-count") ||
 342.124 +                       arg.equalsIgnoreCase("-counterrors"))
 342.125 +            {
 342.126 +                countErrors = true;
 342.127 +            } else if (arg.equalsIgnoreCase("-help")) {
 342.128 +                usage(null);
 342.129 +            } else {
 342.130 +                usage("Unknown argument: "+arg);
 342.131 +            }
 342.132 +        }
 342.133 +
 342.134 +        if (maxsubrects < minsubrects) {
 342.135 +            usage("maximum number of subrectangles less than minimum");
 342.136 +        }
 342.137 +
 342.138 +        if (minsubrects <= 0) {
 342.139 +            usage("minimum number of subrectangles must be positive");
 342.140 +        }
 342.141 +
 342.142 +        if (!doUnion && !doSubtract && !doIntersect && !doXor) {
 342.143 +            doUnion = doSubtract = doIntersect = doXor = true;
 342.144 +        }
 342.145 +
 342.146 +        long start = System.currentTimeMillis();
 342.147 +        RectListImpl rlist[] = new RectListImpl[numregions];
 342.148 +        int totalrects = 0;
 342.149 +        for (int i = 0; i < rlist.length; i++) {
 342.150 +            RectListImpl rli = RectListImpl.getInstance();
 342.151 +            int numsubrects =
 342.152 +                minsubrects + rand.nextInt(maxsubrects - minsubrects + 1);
 342.153 +            for (int j = 0; j < numsubrects; j++) {
 342.154 +                addRectTo(rli);
 342.155 +                totalrects++;
 342.156 +            }
 342.157 +            rlist[i] = rli;
 342.158 +        }
 342.159 +        long end = System.currentTimeMillis();
 342.160 +        System.out.println((end-start)+"ms to create "+
 342.161 +                           rlist.length+" regions containing "+
 342.162 +                           totalrects+" subrectangles");
 342.163 +
 342.164 +        start = System.currentTimeMillis();
 342.165 +        for (int i = 0; i < rlist.length; i++) {
 342.166 +            RectListImpl a = rlist[i];
 342.167 +            testTranslate(a);
 342.168 +            for (int j = i; j < rlist.length; j++) {
 342.169 +                RectListImpl b = rlist[j];
 342.170 +                if (doUnion) testUnion(a, b);
 342.171 +                if (doSubtract) testDifference(a, b);
 342.172 +                if (doIntersect) testIntersection(a, b);
 342.173 +                if (doXor) testExclusiveOr(a, b);
 342.174 +            }
 342.175 +        }
 342.176 +        end = System.currentTimeMillis();
 342.177 +        System.out.println(numops+" ops took "+(end-start)+"ms");
 342.178 +
 342.179 +        if (numErrors > 0) {
 342.180 +            throw new RuntimeException(numErrors+" errors encountered");
 342.181 +        }
 342.182 +    }
 342.183 +
 342.184 +    public static void addRectTo(RectListImpl rli) {
 342.185 +        int lox = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
 342.186 +        int hix = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
 342.187 +        int loy = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
 342.188 +        int hiy = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
 342.189 +        rli.addRect(lox, loy, hix, hiy);
 342.190 +    }
 342.191 +
 342.192 +    public static void checkEqual(RectListImpl a, RectListImpl b,
 342.193 +                                  String optype)
 342.194 +    {
 342.195 +        if (a.hashCode() != b.hashCode()) {
 342.196 +            error(a, b, "hashcode failed for "+optype);
 342.197 +        }
 342.198 +        if (!a.equals(b)) {
 342.199 +            error(a, b, "equals failed for "+optype);
 342.200 +        }
 342.201 +    }
 342.202 +
 342.203 +    public static void testTranslate(RectListImpl a) {
 342.204 +        RectListImpl maxTrans =
 342.205 +            a.getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE)
 342.206 +            .getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE)
 342.207 +            .getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE);
 342.208 +        if (!maxTrans.checkTransEmpty()) {
 342.209 +            error(maxTrans, null, "overflow translated RectList not empty");
 342.210 +        }
 342.211 +        RectListImpl minTrans =
 342.212 +            a.getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE)
 342.213 +            .getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE)
 342.214 +            .getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE);
 342.215 +        if (!minTrans.checkTransEmpty()) {
 342.216 +            error(minTrans, null, "overflow translated RectList not empty");
 342.217 +        }
 342.218 +        testTranslate(a, Integer.MAX_VALUE, Integer.MAX_VALUE, false,
 342.219 +                      MINCOORD, 0, MINCOORD, 0);
 342.220 +        testTranslate(a, Integer.MAX_VALUE, Integer.MIN_VALUE, false,
 342.221 +                      MINCOORD, 0, 0, MAXCOORD);
 342.222 +        testTranslate(a, Integer.MIN_VALUE, Integer.MAX_VALUE, false,
 342.223 +                      0, MAXCOORD, MINCOORD, 0);
 342.224 +        testTranslate(a, Integer.MIN_VALUE, Integer.MIN_VALUE, false,
 342.225 +                      0, MAXCOORD, 0, MAXCOORD);
 342.226 +        for (int dy = -100; dy <= 100; dy += 50) {
 342.227 +            for (int dx = -100; dx <= 100; dx += 50) {
 342.228 +                testTranslate(a, dx, dy, true,
 342.229 +                              MINCOORD, MAXCOORD,
 342.230 +                              MINCOORD, MAXCOORD);
 342.231 +            }
 342.232 +        }
 342.233 +    }
 342.234 +
 342.235 +    public static void testTranslate(RectListImpl a, int dx, int dy,
 342.236 +                                     boolean isNonDestructive,
 342.237 +                                     int xmin, int xmax,
 342.238 +                                     int ymin, int ymax)
 342.239 +    {
 342.240 +        RectListImpl theTrans = a.getTranslation(dx, dy); numops++;
 342.241 +        if (skipCheck) return;
 342.242 +        RectListImpl unTrans = theTrans.getTranslation(-dx, -dy);
 342.243 +        if (isNonDestructive) checkEqual(a, unTrans, "Translate");
 342.244 +        for (int x = xmin; x < xmax; x++) {
 342.245 +            for (int y = ymin; y < ymax; y++) {
 342.246 +                boolean inside = a.contains(x, y);
 342.247 +                if (theTrans.contains(x+dx, y+dy) != inside) {
 342.248 +                    error(a, null, "translation failed for "+
 342.249 +                          dx+", "+dy+" at "+x+", "+y);
 342.250 +                }
 342.251 +            }
 342.252 +        }
 342.253 +    }
 342.254 +
 342.255 +    public static void testUnion(RectListImpl a, RectListImpl b) {
 342.256 +        RectListImpl aUb = a.getUnion(b); numops++;
 342.257 +        RectListImpl bUa = b.getUnion(a); numops++;
 342.258 +        if (skipCheck) return;
 342.259 +        checkEqual(aUb, bUa, "Union");
 342.260 +        testUnion(a, b, aUb);
 342.261 +        testUnion(a, b, bUa);
 342.262 +    }
 342.263 +
 342.264 +    public static void testUnion(RectListImpl a, RectListImpl b,
 342.265 +                                 RectListImpl theUnion)
 342.266 +    {
 342.267 +        for (int x = MINCOORD; x < MAXCOORD; x++) {
 342.268 +            for (int y = MINCOORD; y < MAXCOORD; y++) {
 342.269 +                boolean inside = (a.contains(x, y) || b.contains(x, y));
 342.270 +                if (theUnion.contains(x, y) != inside) {
 342.271 +                    error(a, b, "union failed at "+x+", "+y);
 342.272 +                }
 342.273 +            }
 342.274 +        }
 342.275 +    }
 342.276 +
 342.277 +    public static void testDifference(RectListImpl a, RectListImpl b) {
 342.278 +        RectListImpl aDb = a.getDifference(b); numops++;
 342.279 +        RectListImpl bDa = b.getDifference(a); numops++;
 342.280 +        if (skipCheck) return;
 342.281 +        // Note that difference is not commutative so we cannot check equals
 342.282 +        // checkEqual(a, b, "Difference");
 342.283 +        testDifference(a, b, aDb);
 342.284 +        testDifference(b, a, bDa);
 342.285 +    }
 342.286 +
 342.287 +    public static void testDifference(RectListImpl a, RectListImpl b,
 342.288 +                                      RectListImpl theDifference)
 342.289 +    {
 342.290 +        for (int x = MINCOORD; x < MAXCOORD; x++) {
 342.291 +            for (int y = MINCOORD; y < MAXCOORD; y++) {
 342.292 +                boolean inside = (a.contains(x, y) && !b.contains(x, y));
 342.293 +                if (theDifference.contains(x, y) != inside) {
 342.294 +                    error(a, b, "difference failed at "+x+", "+y);
 342.295 +                }
 342.296 +            }
 342.297 +        }
 342.298 +    }
 342.299 +
 342.300 +    public static void testIntersection(RectListImpl a, RectListImpl b) {
 342.301 +        RectListImpl aIb = a.getIntersection(b); numops++;
 342.302 +        RectListImpl bIa = b.getIntersection(a); numops++;
 342.303 +        if (skipCheck) return;
 342.304 +        checkEqual(aIb, bIa, "Intersection");
 342.305 +        testIntersection(a, b, aIb);
 342.306 +        testIntersection(a, b, bIa);
 342.307 +    }
 342.308 +
 342.309 +    public static void testIntersection(RectListImpl a, RectListImpl b,
 342.310 +                                        RectListImpl theIntersection)
 342.311 +    {
 342.312 +        for (int x = MINCOORD; x < MAXCOORD; x++) {
 342.313 +            for (int y = MINCOORD; y < MAXCOORD; y++) {
 342.314 +                boolean inside = (a.contains(x, y) && b.contains(x, y));
 342.315 +                if (theIntersection.contains(x, y) != inside) {
 342.316 +                    error(a, b, "intersection failed at "+x+", "+y);
 342.317 +                }
 342.318 +            }
 342.319 +        }
 342.320 +    }
 342.321 +
 342.322 +    public static void testExclusiveOr(RectListImpl a, RectListImpl b) {
 342.323 +        RectListImpl aXb = a.getExclusiveOr(b); numops++;
 342.324 +        RectListImpl bXa = b.getExclusiveOr(a); numops++;
 342.325 +        if (skipCheck) return;
 342.326 +        checkEqual(aXb, bXa, "ExclusiveOr");
 342.327 +        testExclusiveOr(a, b, aXb);
 342.328 +        testExclusiveOr(a, b, bXa);
 342.329 +    }
 342.330 +
 342.331 +    public static void testExclusiveOr(RectListImpl a, RectListImpl b,
 342.332 +                                       RectListImpl theExclusiveOr)
 342.333 +    {
 342.334 +        for (int x = MINCOORD; x < MAXCOORD; x++) {
 342.335 +            for (int y = MINCOORD; y < MAXCOORD; y++) {
 342.336 +                boolean inside = (a.contains(x, y) != b.contains(x, y));
 342.337 +                if (theExclusiveOr.contains(x, y) != inside) {
 342.338 +                    error(a, b, "xor failed at "+x+", "+y);
 342.339 +                }
 342.340 +            }
 342.341 +        }
 342.342 +    }
 342.343 +
 342.344 +    public abstract static class RectListImpl {
 342.345 +        public static RectListImpl getInstance() {
 342.346 +            if (useArea) {
 342.347 +                return new AreaImpl();
 342.348 +            } else {
 342.349 +                return new RegionImpl();
 342.350 +            }
 342.351 +        }
 342.352 +
 342.353 +        public abstract void addRect(int lox, int loy, int hix, int hiy);
 342.354 +
 342.355 +        public abstract RectListImpl getTranslation(int dx, int dy);
 342.356 +
 342.357 +        public abstract RectListImpl getIntersection(RectListImpl rli);
 342.358 +        public abstract RectListImpl getExclusiveOr(RectListImpl rli);
 342.359 +        public abstract RectListImpl getDifference(RectListImpl rli);
 342.360 +        public abstract RectListImpl getUnion(RectListImpl rli);
 342.361 +
 342.362 +        // Used for making sure that 3xMAX translates yields an empty region
 342.363 +        public abstract boolean checkTransEmpty();
 342.364 +
 342.365 +        public abstract boolean contains(int x, int y);
 342.366 +
 342.367 +        public abstract int hashCode();
 342.368 +        public abstract boolean equals(RectListImpl other);
 342.369 +    }
 342.370 +
 342.371 +    public static class AreaImpl extends RectListImpl {
 342.372 +        Area theArea;
 342.373 +
 342.374 +        public AreaImpl() {
 342.375 +        }
 342.376 +
 342.377 +        public AreaImpl(Area a) {
 342.378 +            theArea = a;
 342.379 +        }
 342.380 +
 342.381 +        public void addRect(int lox, int loy, int hix, int hiy) {
 342.382 +            Area a2 = new Area(new Rectangle(lox, loy, hix-lox, hiy-loy));
 342.383 +            if (theArea == null) {
 342.384 +                theArea = a2;
 342.385 +            } else {
 342.386 +                theArea.add(a2);
 342.387 +            }
 342.388 +        }
 342.389 +
 342.390 +        public RectListImpl getTranslation(int dx, int dy) {
 342.391 +            AffineTransform at = AffineTransform.getTranslateInstance(dx, dy);
 342.392 +            return new AreaImpl(theArea.createTransformedArea(at));
 342.393 +        }
 342.394 +
 342.395 +        public RectListImpl getIntersection(RectListImpl rli) {
 342.396 +            Area a2 = new Area(theArea);
 342.397 +            a2.intersect(((AreaImpl) rli).theArea);
 342.398 +            return new AreaImpl(a2);
 342.399 +        }
 342.400 +
 342.401 +        public RectListImpl getExclusiveOr(RectListImpl rli) {
 342.402 +            Area a2 = new Area(theArea);
 342.403 +            a2.exclusiveOr(((AreaImpl) rli).theArea);
 342.404 +            return new AreaImpl(a2);
 342.405 +        }
 342.406 +
 342.407 +        public RectListImpl getDifference(RectListImpl rli) {
 342.408 +            Area a2 = new Area(theArea);
 342.409 +            a2.subtract(((AreaImpl) rli).theArea);
 342.410 +            return new AreaImpl(a2);
 342.411 +        }
 342.412 +
 342.413 +        public RectListImpl getUnion(RectListImpl rli) {
 342.414 +            Area a2 = new Area(theArea);
 342.415 +            a2.add(((AreaImpl) rli).theArea);
 342.416 +            return new AreaImpl(a2);
 342.417 +        }
 342.418 +
 342.419 +        // Used for making sure that 3xMAX translates yields an empty region
 342.420 +        public boolean checkTransEmpty() {
 342.421 +            // Area objects will actually survive 3 MAX translates so just
 342.422 +            // pretend that it had the intended effect...
 342.423 +            return true;
 342.424 +        }
 342.425 +
 342.426 +        public boolean contains(int x, int y) {
 342.427 +            return theArea.contains(x, y);
 342.428 +        }
 342.429 +
 342.430 +        public int hashCode() {
 342.431 +            // Area does not override hashCode...
 342.432 +            return 0;
 342.433 +        }
 342.434 +
 342.435 +        public boolean equals(RectListImpl other) {
 342.436 +            return theArea.equals(((AreaImpl) other).theArea);
 342.437 +        }
 342.438 +
 342.439 +        public String toString() {
 342.440 +            return theArea.toString();
 342.441 +        }
 342.442 +    }
 342.443 +
 342.444 +    public static class RegionImpl extends RectListImpl {
 342.445 +        Region theRegion;
 342.446 +
 342.447 +        public RegionImpl() {
 342.448 +        }
 342.449 +
 342.450 +        public RegionImpl(Region r) {
 342.451 +            theRegion = r;
 342.452 +        }
 342.453 +
 342.454 +        public void addRect(int lox, int loy, int hix, int hiy) {
 342.455 +            Region r2 = Region.getInstanceXYXY(lox, loy, hix, hiy);
 342.456 +            if (theRegion == null) {
 342.457 +                theRegion = r2;
 342.458 +            } else {
 342.459 +                theRegion = theRegion.getUnion(r2);
 342.460 +            }
 342.461 +        }
 342.462 +
 342.463 +        public RectListImpl getTranslation(int dx, int dy) {
 342.464 +            return new RegionImpl(theRegion.getTranslatedRegion(dx, dy));
 342.465 +        }
 342.466 +
 342.467 +        public RectListImpl getIntersection(RectListImpl rli) {
 342.468 +            Region r2 = ((RegionImpl) rli).theRegion;
 342.469 +            r2 = theRegion.getIntersection(r2);
 342.470 +            return new RegionImpl(r2);
 342.471 +        }
 342.472 +
 342.473 +        public RectListImpl getExclusiveOr(RectListImpl rli) {
 342.474 +            Region r2 = ((RegionImpl) rli).theRegion;
 342.475 +            r2 = theRegion.getExclusiveOr(r2);
 342.476 +            return new RegionImpl(r2);
 342.477 +        }
 342.478 +
 342.479 +        public RectListImpl getDifference(RectListImpl rli) {
 342.480 +            Region r2 = ((RegionImpl) rli).theRegion;
 342.481 +            r2 = theRegion.getDifference(r2);
 342.482 +            return new RegionImpl(r2);
 342.483 +        }
 342.484 +
 342.485 +        public RectListImpl getUnion(RectListImpl rli) {
 342.486 +            Region r2 = ((RegionImpl) rli).theRegion;
 342.487 +            r2 = theRegion.getUnion(r2);
 342.488 +            return new RegionImpl(r2);
 342.489 +        }
 342.490 +
 342.491 +        // Used for making sure that 3xMAX translates yields an empty region
 342.492 +        public boolean checkTransEmpty() {
 342.493 +            // Region objects should be empty after 3 MAX translates...
 342.494 +            return theRegion.isEmpty();
 342.495 +        }
 342.496 +
 342.497 +        public boolean contains(int x, int y) {
 342.498 +            return theRegion.contains(x, y);
 342.499 +        }
 342.500 +
 342.501 +        public int hashCode() {
 342.502 +            return theRegion.hashCode();
 342.503 +        }
 342.504 +
 342.505 +        public boolean equals(RectListImpl other) {
 342.506 +            return theRegion.equals(((RegionImpl) other).theRegion);
 342.507 +        }
 342.508 +
 342.509 +        public String toString() {
 342.510 +            return theRegion.toString();
 342.511 +        }
 342.512 +    }
 342.513 +}
   343.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   343.2 +++ b/test/sun/net/sdp/ProbeIB.java	Thu Apr 16 19:10:32 2009 -0700
   343.3 @@ -0,0 +1,59 @@
   343.4 +/*
   343.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   343.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   343.7 + *
   343.8 + * This code is free software; you can redistribute it and/or modify it
   343.9 + * under the terms of the GNU General Public License version 2 only, as
  343.10 + * published by the Free Software Foundation.
  343.11 + *
  343.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  343.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  343.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  343.15 + * version 2 for more details (a copy is included in the LICENSE file that
  343.16 + * accompanied this code).
  343.17 + *
  343.18 + * You should have received a copy of the GNU General Public License version
  343.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  343.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  343.21 + *
  343.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  343.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  343.24 + * have any questions.
  343.25 + */
  343.26 +
  343.27 +import java.io.File;
  343.28 +import java.io.IOException;
  343.29 +import java.net.NetworkInterface;
  343.30 +import java.net.InetAddress;
  343.31 +import java.util.Scanner;
  343.32 +import java.util.Enumeration;
  343.33 +
  343.34 +/**
  343.35 + * Probes for InfiniBand devices plumbed with IP addresses.
  343.36 + */
  343.37 +
  343.38 +public class ProbeIB {
  343.39 +    public static void main(String[] args) throws IOException {
  343.40 +        Scanner s = new Scanner(new File("/etc/path_to_inst"));
  343.41 +        try {
  343.42 +            while (s.hasNextLine()) {
  343.43 +                String line = s.nextLine();
  343.44 +                if (line.startsWith("#"))
  343.45 +                    continue;
  343.46 +                String[] fields = line.split("\\s+");
  343.47 +                if (!fields[2].equals("\"ibd\""))
  343.48 +                    continue;
  343.49 +                String name = fields[2].substring(1, fields[2].length()-1) + fields[1];
  343.50 +                NetworkInterface ni = NetworkInterface.getByName(name);
  343.51 +                if (ni != null) {
  343.52 +                    Enumeration<InetAddress> addrs = ni.getInetAddresses();
  343.53 +                    while (addrs.hasMoreElements()) {
  343.54 +                        System.out.println(addrs.nextElement().getHostAddress());
  343.55 +                    }
  343.56 +                }
  343.57 +            }
  343.58 +        } finally {
  343.59 +            s.close();
  343.60 +        }
  343.61 +    }
  343.62 +}
   344.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   344.2 +++ b/test/sun/net/sdp/Sanity.java	Thu Apr 16 19:10:32 2009 -0700
   344.3 @@ -0,0 +1,168 @@
   344.4 +/*
   344.5 + * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   344.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   344.7 + *
   344.8 + * This code is free software; you can redistribute it and/or modify it
   344.9 + * under the terms of the GNU General Public License version 2 only, as
  344.10 + * published by the Free Software Foundation.
  344.11 + *
  344.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
  344.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  344.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  344.15 + * version 2 for more details (a copy is included in the LICENSE file that
  344.16 + * accompanied this code).
  344.17 + *
  344.18 + * You should have received a copy of the GNU General Public License version
  344.19 + * 2 along with this work; if not, write to the Free Software Foundation,
  344.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  344.21 + *
  344.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  344.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
  344.24 + * have any questions.
  344.25 + */
  344.26 +
  344.27 +import java.net.*;
  344.28 +import java.io.*;
  344.29 +import java.nio.channels.*;
  344.30 +import java.util.Enumeration;
  344.31 +
  344.32 +/**
  344.33 + * Sanity check Socket/ServerSocket and each of the stream-oriented channels
  344.34 + * on each IP address plumbed to the network adapters.
  344.35 + */
  344.36 +
  344.37 +public class Sanity {
  344.38 +    public static void main(String[] args) throws Exception {
  344.39 +        Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
  344.40 +        while (nifs.hasMoreElements()) {
  344.41 +            NetworkInterface ni = nifs.nextElement();
  344.42 +            Enumeration<InetAddress> addrs = ni.getInetAddresses();
  344.43 +            while (addrs.hasMoreElements()) {
  344.44 +                InetAddress addr = addrs.nextElement();
  344.45 +                test(addr);
  344.46 +            }
  344.47 +        }
  344.48 +    }
  344.49 +
  344.50 +    static void test(InetAddress addr) throws Exception {
  344.51 +        System.out.println(addr.getHostAddress());
  344.52 +
  344.53 +        // ServerSocketChannel.bind
  344.54 +        ServerSocketChannel ssc = ServerSocketChannel.open();
  344.55 +        try {
  344.56 +            ssc.bind(new InetSocketAddress(addr, 0));
  344.57 +            int port = ((InetSocketAddress)(ssc.getLocalAddress())).getPort();
  344.58 +
  344.59 +            // SocketChannel.connect (implicit bind)
  344.60 +            SocketChannel client = SocketChannel.open();
  344.61 +            try {
  344.62 +                client.connect(new InetSocketAddress(addr, port));
  344.63 +                SocketChannel peer = ssc.accept();
  344.64 +                try {
  344.65 +                    testConnection(Channels.newOutputStream(client),
  344.66 +                                   Channels.newInputStream(peer));
  344.67 +                } finally {
  344.68 +                    peer.close();
  344.69 +                }
  344.70 +            } finally {
  344.71 +                client.close();
  344.72 +            }
  344.73 +
  344.74 +            // SocketChannel.connect (explicit bind)
  344.75 +            client = SocketChannel.open();
  344.76 +            try {
  344.77 +                client.bind(new InetSocketAddress(addr, 0))
  344.78 +                  .connect(new InetSocketAddress(addr, port));
  344.79 +                ssc.accept().close();
  344.80 +            } finally {
  344.81 +                client.close();
  344.82 +            }
  344.83 +        } finally {
  344.84 +            ssc.close();
  344.85 +        }
  344.86 +
  344.87 +        // AsynchronousServerSocketChannel.bind
  344.88 +        AsynchronousServerSocketChannel server =
  344.89 +            AsynchronousServerSocketChannel.open();
  344.90 +        try {
  344.91 +            server.bind(new InetSocketAddress(addr, 0));
  344.92 +            int port = ((InetSocketAddress)(server.getLocalAddress())).getPort();
  344.93 +
  344.94 +            // AsynchronousSocketChannel.connect (implicit bind)
  344.95 +            AsynchronousSocketChannel client = AsynchronousSocketChannel.open();
  344.96 +            try {
  344.97 +                client.connect(new InetSocketAddress(addr, port)).get();
  344.98 +                AsynchronousSocketChannel peer = server.accept().get();
  344.99 +                try {
 344.100 +                    testConnection(Channels.newOutputStream(client),
 344.101 +                                   Channels.newInputStream(peer));
 344.102 +                } finally {
 344.103 +                    peer.close();
 344.104 +                }
 344.105 +            } finally {
 344.106 +                client.close();
 344.107 +            }
 344.108 +
 344.109 +            // AsynchronousSocketChannel.connect (explicit bind)
 344.110 +            client = AsynchronousSocketChannel.open();
 344.111 +            try {
 344.112 +                client.bind(new InetSocketAddress(addr, 0))
 344.113 +                  .connect(new InetSocketAddress(addr, port)).get();
 344.114 +                server.accept().get().close();
 344.115 +            } finally {
 344.116 +                client.close();
 344.117 +            }
 344.118 +        } finally {
 344.119 +            server.close();
 344.120 +        }
 344.121 +
 344.122 +        // ServerSocket.bind
 344.123 +        ServerSocket ss = new ServerSocket();
 344.124 +        try {
 344.125 +            ss.bind(new InetSocketAddress(addr, 0));
 344.126 +            int port = ss.getLocalPort();
 344.127 +
 344.128 +            // Socket.connect (implicit bind)
 344.129 +            Socket s = new Socket();
 344.130 +            try {
 344.131 +                s.connect(new InetSocketAddress(addr, port));
 344.132 +                Socket peer = ss.accept();
 344.133 +                try {
 344.134 +                    testConnection(s.getOutputStream(), peer.getInputStream());
 344.135 +                } finally {
 344.136 +                    peer.close();
 344.137 +                }
 344.138 +            } finally {
 344.139 +                s.close();
 344.140 +            }
 344.141 +
 344.142 +            // Socket.connect (explicit bind)
 344.143 +            s = new Socket();
 344.144 +            try {
 344.145 +                s.bind(new InetSocketAddress(addr, 0));
 344.146 +                s.connect(new InetSocketAddress(addr, port));
 344.147 +                ss.accept().close();
 344.148 +            } finally {
 344.149 +                s.close();
 344.150 +            }
 344.151 +        } finally {
 344.152 +            ss.close();
 344.153 +        }
 344.154 +    }
 344.155 +
 344.156 +    static void testConnection(OutputStream out, InputStream in)
 344.157 +        throws IOException
 344.158 +    {
 344.159 +        byte[] msg = "hello".getBytes();
 344.160 +        out.write(msg);
 344.161 +
 344.162 +        byte[] ba = new byte[100];
 344.163 +        int nread = 0;
 344.164 +        while (nread < msg.length) {
 344.165 +            int n = in.read(ba);
 344.166 +            if (n < 0)
 344.167 +                throw new IOException("EOF not expected!");
 344.168 +            nread += n;
 344.169 +        }
 344.170 +    }
 344.171 +}
   345.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   345.2 +++ b/test/sun/net/sdp/sanity.sh	Thu Apr 16 19:10:32 2009 -0700
   345.3 @@ -0,0 +1,72 @@
   345.4 +#
   345.5 +# Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   345.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   345.7 +#
   345.8 +# This code is free software; you can redistribute it and/or modify it
   345.9 +# under the terms of the GNU General Public License version 2 only, as
  345.10 +# published by the Free Software Foundation.
  345.11 +#
  345.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
  345.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  345.14 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  345.15 +# version 2 for more details (a copy is included in the LICENSE file that
  345.16 +# accompanied this code).
  345.17 +#
  345.18 +# You should have received a copy of the GNU General Public License version
  345.19 +# 2 along with this work; if not, write to the Free Software Foundation,
  345.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  345.21 +#
  345.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  345.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
  345.24 +# have any questions.
  345.25 +#
  345.26 +
  345.27 +# @test
  345.28 +# @bug 4890703
  345.29 +# @summary Unit test for Solaris SDP support
  345.30 +# @build ProbeIB Sanity
  345.31 +# @run shell sanity.sh
  345.32 +
  345.33 +# Check we are on Solaris and that SDP is enabled
  345.34 +OS=`uname -s`
  345.35 +if [ "$OS" != "SunOS" ]; then
  345.36 +    echo "This is a Solaris-only test"
  345.37 +    exit 0
  345.38 +fi
  345.39 +SDPADM=/usr/sbin/sdpadm
  345.40 +if [ ! -f ${SDPADM} ]; then
  345.41 +    echo "SDP not available"
  345.42 +    exit 0
  345.43 +fi
  345.44 +${SDPADM} status|grep Enabled
  345.45 +if [ $? != 0 ]; then 
  345.46 +    echo "SDP not enabled"
  345.47 +    exit 0
  345.48 +fi
  345.49 +
  345.50 +if [ -z "$TESTJAVA" ]; then
  345.51 +    JAVA=java
  345.52 +    TESTCLASSES=.
  345.53 +    TESTSRC=.
  345.54 +else
  345.55 +    JAVA="${TESTJAVA}/bin/java"
  345.56 +fi
  345.57 +
  345.58 +CLASSPATH=${TESTCLASSES}:${TESTSRC}
  345.59 +export CLASSPATH
  345.60 +
  345.61 +# Probe for IP addresses plumbed to IB interfaces
  345.62 +$JAVA -Djava.net.preferIPv4Stack=true ProbeIB > ib_addrs
  345.63 +
  345.64 +# Create sdp.conf
  345.65 +SDPCONF=sdp.conf
  345.66 +rm ${SDPCONF}
  345.67 +touch ${SDPCONF}
  345.68 +cat ib_addrs | while read ADDR
  345.69 +do
  345.70 +   echo "bind ${ADDR} *" > ${SDPCONF}
  345.71 +   echo "connect ${ADDR} *" >> ${SDPCONF}
  345.72 +done
  345.73 +
  345.74 +# Sanity check
  345.75 +$JAVA -Djava.net.preferIPv4Stack=true -Dcom.sun.sdp.conf=${SDPCONF} -Dcom.sun.sdp.debug Sanity
   346.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   346.2 +++ b/test/sun/security/tools/jarsigner/concise_jarsigner.sh	Thu Apr 16 19:10:32 2009 -0700
   346.3 @@ -0,0 +1,200 @@
   346.4 +#
   346.5 +# Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   346.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   346.7 +#
   346.8 +# This code is free software; you can redistribute it and/or modify it
   346.9 +# under the terms of the GNU General Public License version 2 only, as
  346.10 +# published by the Free Software Foundation.
  346.11 +#
  346.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
  346.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  346.14 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  346.15 +# version 2 for more details (a copy is included in the LICENSE file that
  346.16 +# accompanied this code).
  346.17 +#
  346.18 +# You should have received a copy of the GNU General Public License version
  346.19 +# 2 along with this work; if not, write to the Free Software Foundation,
  346.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  346.21 +#
  346.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  346.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
  346.24 +# have any questions.
  346.25 +#
  346.26 +
  346.27 +# @test
  346.28 +# @bug 6802846
  346.29 +# @summary jarsigner needs enhanced cert validation(options)
  346.30 +#
  346.31 +# @run shell concise_jarsigner.sh
  346.32 +#
  346.33 +
  346.34 +if [ "${TESTJAVA}" = "" ] ; then
  346.35 +  JAVAC_CMD=`which javac`
  346.36 +  TESTJAVA=`dirname $JAVAC_CMD`/..
  346.37 +fi
  346.38 +
  346.39 +# set platform-dependent variables
  346.40 +OS=`uname -s`
  346.41 +case "$OS" in
  346.42 +  Windows_* )
  346.43 +    FS="\\"
  346.44 +    ;;
  346.45 +  * )
  346.46 +    FS="/"
  346.47 +    ;;
  346.48 +esac
  346.49 +
  346.50 +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore js.jks"
  346.51 +JAR=$TESTJAVA${FS}bin${FS}jar
  346.52 +JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
  346.53 +JAVAC=$TESTJAVA${FS}bin${FS}javac
  346.54 +
  346.55 +rm js.jks
  346.56 +
  346.57 +echo class A1 {} > A1.java
  346.58 +echo class A2 {} > A2.java
  346.59 +echo class A3 {} > A3.java
  346.60 +echo class A4 {} > A4.java
  346.61 +echo class A5 {} > A5.java
  346.62 +echo class A6 {} > A6.java
  346.63 +
  346.64 +$JAVAC A1.java A2.java A3.java A4.java A5.java A6.java
  346.65 +YEAR=`date +%Y`
  346.66 +
  346.67 +# ==========================================================
  346.68 +# First part: output format
  346.69 +# ==========================================================
  346.70 +
  346.71 +$KT -genkeypair -alias a1 -dname CN=a1 -validity 365
  346.72 +$KT -genkeypair -alias a2 -dname CN=a2 -validity 365
  346.73 +
  346.74 +# a.jar includes 8 unsigned, 2 signed by a1 and a2, 2 signed by a3
  346.75 +$JAR cvf a.jar A1.class A2.class
  346.76 +$JARSIGNER -keystore js.jks -storepass changeit a.jar a1
  346.77 +$JAR uvf a.jar A3.class A4.class
  346.78 +$JARSIGNER -keystore js.jks -storepass changeit a.jar a2
  346.79 +$JAR uvf a.jar A5.class A6.class
  346.80 +
  346.81 +# Verify OK
  346.82 +$JARSIGNER -verify a.jar
  346.83 +[ $? = 0 ] || exit $LINENO
  346.84 +
  346.85 +# 4(chainNotValidated)+16(hasUnsignedEntry)+32(aliasNotInStore)
  346.86 +$JARSIGNER -verify a.jar -strict
  346.87 +[ $? = 52 ] || exit $LINENO
  346.88 +
  346.89 +# 16(hasUnsignedEntry)
  346.90 +$JARSIGNER -verify a.jar -strict -keystore js.jks
  346.91 +[ $? = 16 ] || exit $LINENO
  346.92 +
  346.93 +# 16(hasUnsignedEntry)+32(notSignedByAlias)
  346.94 +$JARSIGNER -verify a.jar a1 -strict -keystore js.jks
  346.95 +[ $? = 48 ] || exit $LINENO
  346.96 +
  346.97 +# 16(hasUnsignedEntry)
  346.98 +$JARSIGNER -verify a.jar a1 a2 -strict -keystore js.jks
  346.99 +[ $? = 16 ] || exit $LINENO
 346.100 +
 346.101 +# 12 entries all together
 346.102 +LINES=`$JARSIGNER -verify a.jar -verbose | grep $YEAR | wc -l`
 346.103 +[ $LINES = 12 ] || exit $LINENO
 346.104 +
 346.105 +# 12 entries all listed
 346.106 +LINES=`$JARSIGNER -verify a.jar -verbose:grouped | grep $YEAR | wc -l`
 346.107 +[ $LINES = 12 ] || exit $LINENO
 346.108 +
 346.109 +# 3 groups: unrelated, signed, unsigned
 346.110 +LINES=`$JARSIGNER -verify a.jar -verbose:summary | grep $YEAR | wc -l`
 346.111 +[ $LINES = 3 ] || exit $LINENO
 346.112 +
 346.113 +# 4 groups: unrelated, signed by a1/a2, signed by a2, unsigned
 346.114 +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep $YEAR | wc -l`
 346.115 +[ $LINES = 4 ] || exit $LINENO
 346.116 +
 346.117 +# 2*2 for A1/A2, 2 for A3/A4
 346.118 +LINES=`$JARSIGNER -verify a.jar -verbose -certs | grep "\[certificate" | wc -l`
 346.119 +[ $LINES = 6 ] || exit $LINENO
 346.120 +
 346.121 +# a1,a2 for A1/A2, a2 for A3/A4
 346.122 +LINES=`$JARSIGNER -verify a.jar -verbose:grouped -certs | grep "\[certificate" | wc -l`
 346.123 +[ $LINES = 3 ] || exit $LINENO
 346.124 +
 346.125 +# a1,a2 for A1/A2, a2 for A3/A4
 346.126 +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "\[certificate" | wc -l`
 346.127 +[ $LINES = 3 ] || exit $LINENO
 346.128 +
 346.129 +# 4 groups
 346.130 +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "more)" | wc -l`
 346.131 +[ $LINES = 4 ] || exit $LINENO
 346.132 +
 346.133 +# ==========================================================
 346.134 +# Second part: exit code 2, 4, 8
 346.135 +# 16 and 32 already covered in the first part
 346.136 +# ==========================================================
 346.137 +
 346.138 +$KT -genkeypair -alias expiring -dname CN=expiring -startdate -1m
 346.139 +$KT -genkeypair -alias expired -dname CN=expired -startdate -10m
 346.140 +$KT -genkeypair -alias notyetvalid -dname CN=notyetvalid -startdate +1m
 346.141 +$KT -genkeypair -alias badku -dname CN=badku -ext KU=cRLSign -validity 365
 346.142 +$KT -genkeypair -alias badeku -dname CN=badeku -ext EKU=sa -validity 365
 346.143 +$KT -genkeypair -alias goodku -dname CN=goodku -ext KU=dig -validity 365
 346.144 +$KT -genkeypair -alias goodeku -dname CN=goodeku -ext EKU=codesign -validity 365
 346.145 +
 346.146 +# badchain signed by ca, but ca is removed later
 346.147 +$KT -genkeypair -alias badchain -dname CN=badchain -validity 365
 346.148 +$KT -genkeypair -alias ca -dname CN=ca -ext bc -validity 365
 346.149 +$KT -certreq -alias badchain | $KT -gencert -alias ca -validity 365 | \
 346.150 +        $KT -importcert -alias badchain
 346.151 +$KT -delete -alias ca
 346.152 +
 346.153 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar expiring
 346.154 +[ $? = 2 ] || exit $LINENO
 346.155 +
 346.156 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar expired
 346.157 +[ $? = 4 ] || exit $LINENO
 346.158 +
 346.159 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar notyetvalid
 346.160 +[ $? = 4 ] || exit $LINENO
 346.161 +
 346.162 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badku
 346.163 +[ $? = 8 ] || exit $LINENO
 346.164 +
 346.165 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badeku
 346.166 +[ $? = 8 ] || exit $LINENO
 346.167 +
 346.168 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar goodku
 346.169 +[ $? = 0 ] || exit $LINENO
 346.170 +
 346.171 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar goodeku
 346.172 +[ $? = 0 ] || exit $LINENO
 346.173 +
 346.174 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badchain
 346.175 +[ $? = 4 ] || exit $LINENO
 346.176 +
 346.177 +$JARSIGNER -verify a.jar
 346.178 +[ $? = 0 ] || exit $LINENO
 346.179 +
 346.180 +# ==========================================================
 346.181 +# Third part: -certchain test
 346.182 +# ==========================================================
 346.183 +
 346.184 +# altchain signed by ca2, but ca2 is removed later
 346.185 +$KT -genkeypair -alias altchain -dname CN=altchain -validity 365
 346.186 +$KT -genkeypair -alias ca2 -dname CN=ca2 -ext bc -validity 365
 346.187 +$KT -certreq -alias altchain | $KT -gencert -alias ca2 -validity 365 -rfc > certchain
 346.188 +$KT -exportcert -alias ca2 -rfc >> certchain
 346.189 +$KT -delete -alias ca2
 346.190 +
 346.191 +# Now altchain is still self-signed
 346.192 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar altchain
 346.193 +[ $? = 0 ] || exit $LINENO
 346.194 +
 346.195 +# If -certchain is used, then it's bad
 346.196 +$JARSIGNER -strict -keystore js.jks -storepass changeit -certchain certchain a.jar altchain
 346.197 +[ $? = 4 ] || exit $LINENO
 346.198 +
 346.199 +$JARSIGNER -verify a.jar
 346.200 +[ $? = 0 ] || exit $LINENO
 346.201 +
 346.202 +echo OK
 346.203 +exit 0
   347.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   347.2 +++ b/test/sun/security/tools/keytool/selfissued.sh	Thu Apr 16 19:10:32 2009 -0700
   347.3 @@ -0,0 +1,69 @@
   347.4 +#
   347.5 +# Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
   347.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   347.7 +#
   347.8 +# This code is free software; you can redistribute it and/or modify it
   347.9 +# under the terms of the GNU General Public License version 2 only, as
  347.10 +# published by the Free Software Foundation.
  347.11 +#
  347.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
  347.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  347.14 +# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  347.15 +# version 2 for more details (a copy is included in the LICENSE file that
  347.16 +# accompanied this code).
  347.17 +#
  347.18 +# You should have received a copy of the GNU General Public License version
  347.19 +# 2 along with this work; if not, write to the Free Software Foundation,
  347.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  347.21 +#
  347.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  347.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
  347.24 +# have any questions.
  347.25 +#
  347.26 +
  347.27 +# @test
  347.28 +# @bug 6825352
  347.29 +# @summary support self-issued certificate in keytool
  347.30 +#
  347.31 +# @run shell selfissued.sh
  347.32 +#
  347.33 +
  347.34 +if [ "${TESTJAVA}" = "" ] ; then
  347.35 +  JAVAC_CMD=`which javac`
  347.36 +  TESTJAVA=`dirname $JAVAC_CMD`/..
  347.37 +fi
  347.38 +
  347.39 +# set platform-dependent variables
  347.40 +OS=`uname -s`
  347.41 +case "$OS" in
  347.42 +  Windows_* )
  347.43 +    FS="\\"
  347.44 +    ;;
  347.45 +  * )
  347.46 +    FS="/"
  347.47 +    ;;
  347.48 +esac
  347.49 +
  347.50 +KS=selfsigned.jks
  347.51 +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
  347.52 +
  347.53 +rm $KS
  347.54 +
  347.55 +$KT -alias ca -dname CN=CA -genkeypair
  347.56 +$KT -alias me -dname CN=CA -genkeypair
  347.57 +$KT -alias e1 -dname CN=E1 -genkeypair
  347.58 +$KT -alias e2 -dname CN=E2 -genkeypair
  347.59 +
  347.60 +# me signed by ca, self-issued
  347.61 +$KT -alias me -certreq | $KT -alias ca -gencert | $KT -alias me -importcert
  347.62 +
  347.63 +# Import e1 signed by me, should add me and ca
  347.64 +$KT -alias e1 -certreq | $KT -alias me -gencert | $KT -alias e1 -importcert
  347.65 +$KT -alias e1 -list -v | grep '\[3\]' || { echo Bad E1; exit 1; }
  347.66 +
  347.67 +# Import (e2 signed by me,ca,me), should reorder to (e2,me,ca)
  347.68 +( $KT -alias e2 -certreq | $KT -alias me -gencert; $KT -exportcert -alias ca; $KT -exportcert -alias me ) | $KT -alias e2 -importcert
  347.69 +$KT -alias e2 -list -v | grep '\[3\]' || { echo Bad E2; exit 1; }
  347.70 +
  347.71 +echo Good
  347.72 +