OSDN Git Service

* java/rmi/activation/Activatable.java,
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Aug 2001 00:03:35 +0000 (00:03 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Aug 2001 00:03:35 +0000 (00:03 +0000)
java/rmi/activation/ActivateFailedException.java,
java/rmi/activation/ActivationDesc.java,
java/rmi/activation/ActivationException.java,
java/rmi/activation/ActivationGroup.java,
java/rmi/activation/ActivationGroupDesc.java,
java/rmi/activation/ActivationGroupID.java,
java/rmi/activation/ActivationID.java,
java/rmi/activation/ActivationInstantiator.java,
java/rmi/activation/ActivationMonitor.java,
java/rmi/activation/ActivationSystem.java,
java/rmi/activation/Activator.java,
java/rmi/activation/UnknownGroupException.java,
java/rmi/activation/UnknownObjectException.java,
java/rmi/AccessException.java,
java/rmi/AlreadyBoundException.java,
java/rmi/ConnectException.java, java/rmi/ConnectIOException.java,
java/rmi/MarshalException.java, java/rmi/MarshalledObject.java,
java/rmi/Naming.java, java/rmi/NoSuchObjectException.java,
java/rmi/NotBoundException.java,
java/rmi/RMISecurityException.java,
java/rmi/RMISecurityManager.java, java/rmi/Remote.java,
java/rmi/RemoteException.java, java/rmi/ServerError.java,
java/rmi/ServerException.java,
java/rmi/ServerRuntimeException.java,
java/rmi/StubNotFoundException.java,
java/rmi/UnexpectedException.java,
java/rmi/UnknownHostException.java,
java/rmi/UnmarshalException.java, java/rmi/dgc/DGC.java,
java/rmi/dgc/Lease.java, java/rmi/dgc/VMID.java,
java/rmi/registry/LocateRegistry.java,
java/rmi/registry/Registry.java,
java/rmi/registry/RegistryHandler.java,
java/rmi/server/ExportException.java,
java/rmi/server/LoaderHandler.java,
java/rmi/server/LogStream.java, java/rmi/server/ObjID.java,
java/rmi/server/Operation.java,
java/rmi/server/RMIClassLoader.java,
java/rmi/server/RMIClientSocketFactory.java,
java/rmi/server/RMIFailureHandler.java,
java/rmi/server/RMIServerSocketFactory.java,
java/rmi/server/RMISocketFactory.java,
java/rmi/server/RemoteCall.java,
java/rmi/server/RemoteObject.java, java/rmi/server/RemoteRef.java,
java/rmi/server/RemoteServer.java,
java/rmi/server/RemoteStub.java,
java/rmi/server/ServerCloneException.java,
java/rmi/server/ServerNotActiveException.java,
java/rmi/server/ServerRef.java, java/rmi/server/Skeleton.java,
java/rmi/server/SkeletonMismatchException.java,
java/rmi/server/SkeletonNotFoundException.java,
java/rmi/server/SocketSecurityException.java,
java/rmi/server/UID.java,
java/rmi/server/UnicastRemoteObject.java,
java/rmi/server/Unreferenced.java, gnu/java/rmi/dgc/DGCImpl.java,
gnu/java/rmi/dgc/DGCImpl_Skel.java,
gnu/java/rmi/dgc/DGCImpl_Stub.java,
gnu/java/rmi/registry/RegistryImpl.java,
gnu/java/rmi/registry/RegistryImpl_Skel.java,
gnu/java/rmi/registry/RegistryImpl_Stub.java,
gnu/java/rmi/rmic/RMIC.java, gnu/java/rmi/rmic/TabbedWriter.java,
gnu/java/rmi/server/ProtocolConstants.java,
gnu/java/rmi/server/RMIDefaultSocketFactory.java,
gnu/java/rmi/server/RMIHashes.java,
gnu/java/rmi/server/RMIObjectInputStream.java,
gnu/java/rmi/server/RMIObjectOutputStream.java,
gnu/java/rmi/server/UnicastConnection.java,
gnu/java/rmi/server/UnicastConnectionManager.java,
gnu/java/rmi/server/UnicastRef.java,
gnu/java/rmi/server/UnicastRemoteCall.java,
gnu/java/rmi/server/UnicastRemoteStub.java,
gnu/java/rmi/server/UnicastServer.java,
gnu/java/rmi/server/UnicastServerRef.java: RMI implementation from
Kaffe.  Relabelled classes to fit into Classpath tree.
* Makefile.in: Rebuilt.
* Makefile.am (rmi_java_source_files): New macro.
(ordinary_java_source_files): Reference it.
(bin_PROGRAMS): Added rmic and rmiregistry.
(rmic_SOURCES): New macro.
(EXTRA_rmic_SOURCES): Likewise.
(rmic_LDFLAGS): Likewise.
(rmic_LINK): Likewise.
(rmic_LDADD): Likewise.
(rmic_DEPENDENCIES): Likewise.
(rmiregistry_SOURCES): New macro.
(EXTRA_rmiregistry_SOURCES): Likewise.
(rmiregistry_LDFLAGS): Likewise.
(rmiregistry_LINK): Likewise.
(rmiregistry_LDADD): Likewise.
(rmiregistry_DEPENDENCIES): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45218 138bc75d-0d04-0410-961f-82ee72b054a4

88 files changed:
libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/gnu/java/rmi/dgc/DGCImpl.java [new file with mode: 0644]
libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java [new file with mode: 0644]
libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java [new file with mode: 0644]
libjava/gnu/java/rmi/registry/RegistryImpl.java [new file with mode: 0644]
libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java [new file with mode: 0644]
libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java [new file with mode: 0644]
libjava/gnu/java/rmi/rmic/RMIC.java [new file with mode: 0644]
libjava/gnu/java/rmi/rmic/TabbedWriter.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/ProtocolConstants.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/RMIDefaultSocketFactory.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/RMIHashes.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/RMIObjectInputStream.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/RMIObjectOutputStream.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/UnicastConnection.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/UnicastConnectionManager.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/UnicastRef.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/UnicastRemoteCall.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/UnicastRemoteStub.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/UnicastServer.java [new file with mode: 0644]
libjava/gnu/java/rmi/server/UnicastServerRef.java [new file with mode: 0644]
libjava/java/rmi/AccessException.java [new file with mode: 0644]
libjava/java/rmi/AlreadyBoundException.java [new file with mode: 0644]
libjava/java/rmi/ConnectException.java [new file with mode: 0644]
libjava/java/rmi/ConnectIOException.java [new file with mode: 0644]
libjava/java/rmi/MarshalException.java [new file with mode: 0644]
libjava/java/rmi/MarshalledObject.java [new file with mode: 0644]
libjava/java/rmi/Naming.java [new file with mode: 0644]
libjava/java/rmi/NoSuchObjectException.java [new file with mode: 0644]
libjava/java/rmi/NotBoundException.java [new file with mode: 0644]
libjava/java/rmi/RMISecurityException.java [new file with mode: 0644]
libjava/java/rmi/RMISecurityManager.java [new file with mode: 0644]
libjava/java/rmi/Remote.java [new file with mode: 0644]
libjava/java/rmi/RemoteException.java [new file with mode: 0644]
libjava/java/rmi/ServerError.java [new file with mode: 0644]
libjava/java/rmi/ServerException.java [new file with mode: 0644]
libjava/java/rmi/ServerRuntimeException.java [new file with mode: 0644]
libjava/java/rmi/StubNotFoundException.java [new file with mode: 0644]
libjava/java/rmi/UnexpectedException.java [new file with mode: 0644]
libjava/java/rmi/UnknownHostException.java [new file with mode: 0644]
libjava/java/rmi/UnmarshalException.java [new file with mode: 0644]
libjava/java/rmi/activation/Activatable.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivateFailedException.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationDesc.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationException.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationGroup.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationGroupDesc.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationGroupID.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationID.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationInstantiator.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationMonitor.java [new file with mode: 0644]
libjava/java/rmi/activation/ActivationSystem.java [new file with mode: 0644]
libjava/java/rmi/activation/Activator.java [new file with mode: 0644]
libjava/java/rmi/activation/UnknownGroupException.java [new file with mode: 0644]
libjava/java/rmi/activation/UnknownObjectException.java [new file with mode: 0644]
libjava/java/rmi/dgc/DGC.java [new file with mode: 0644]
libjava/java/rmi/dgc/Lease.java [new file with mode: 0644]
libjava/java/rmi/dgc/VMID.java [new file with mode: 0644]
libjava/java/rmi/registry/LocateRegistry.java [new file with mode: 0644]
libjava/java/rmi/registry/Registry.java [new file with mode: 0644]
libjava/java/rmi/registry/RegistryHandler.java [new file with mode: 0644]
libjava/java/rmi/server/ExportException.java [new file with mode: 0644]
libjava/java/rmi/server/LoaderHandler.java [new file with mode: 0644]
libjava/java/rmi/server/LogStream.java [new file with mode: 0644]
libjava/java/rmi/server/ObjID.java [new file with mode: 0644]
libjava/java/rmi/server/Operation.java [new file with mode: 0644]
libjava/java/rmi/server/RMIClassLoader.java [new file with mode: 0644]
libjava/java/rmi/server/RMIClientSocketFactory.java [new file with mode: 0644]
libjava/java/rmi/server/RMIFailureHandler.java [new file with mode: 0644]
libjava/java/rmi/server/RMIServerSocketFactory.java [new file with mode: 0644]
libjava/java/rmi/server/RMISocketFactory.java [new file with mode: 0644]
libjava/java/rmi/server/RemoteCall.java [new file with mode: 0644]
libjava/java/rmi/server/RemoteObject.java [new file with mode: 0644]
libjava/java/rmi/server/RemoteRef.java [new file with mode: 0644]
libjava/java/rmi/server/RemoteServer.java [new file with mode: 0644]
libjava/java/rmi/server/RemoteStub.java [new file with mode: 0644]
libjava/java/rmi/server/ServerCloneException.java [new file with mode: 0644]
libjava/java/rmi/server/ServerNotActiveException.java [new file with mode: 0644]
libjava/java/rmi/server/ServerRef.java [new file with mode: 0644]
libjava/java/rmi/server/Skeleton.java [new file with mode: 0644]
libjava/java/rmi/server/SkeletonMismatchException.java [new file with mode: 0644]
libjava/java/rmi/server/SkeletonNotFoundException.java [new file with mode: 0644]
libjava/java/rmi/server/SocketSecurityException.java [new file with mode: 0644]
libjava/java/rmi/server/UID.java [new file with mode: 0644]
libjava/java/rmi/server/UnicastRemoteObject.java [new file with mode: 0644]
libjava/java/rmi/server/Unreferenced.java [new file with mode: 0644]

index 9dbf8d1..350efc0 100644 (file)
@@ -1,3 +1,96 @@
+2001-08-27  Tom Tromey  <tromey@redhat.com>
+
+       * java/rmi/activation/Activatable.java,
+       java/rmi/activation/ActivateFailedException.java,
+       java/rmi/activation/ActivationDesc.java,
+       java/rmi/activation/ActivationException.java,
+       java/rmi/activation/ActivationGroup.java,
+       java/rmi/activation/ActivationGroupDesc.java,
+       java/rmi/activation/ActivationGroupID.java,
+       java/rmi/activation/ActivationID.java,
+       java/rmi/activation/ActivationInstantiator.java,
+       java/rmi/activation/ActivationMonitor.java,
+       java/rmi/activation/ActivationSystem.java,
+       java/rmi/activation/Activator.java,
+       java/rmi/activation/UnknownGroupException.java,
+       java/rmi/activation/UnknownObjectException.java,
+       java/rmi/AccessException.java,
+       java/rmi/AlreadyBoundException.java,
+       java/rmi/ConnectException.java, java/rmi/ConnectIOException.java,
+       java/rmi/MarshalException.java, java/rmi/MarshalledObject.java,
+       java/rmi/Naming.java, java/rmi/NoSuchObjectException.java,
+       java/rmi/NotBoundException.java,
+       java/rmi/RMISecurityException.java,
+       java/rmi/RMISecurityManager.java, java/rmi/Remote.java,
+       java/rmi/RemoteException.java, java/rmi/ServerError.java,
+       java/rmi/ServerException.java,
+       java/rmi/ServerRuntimeException.java,
+       java/rmi/StubNotFoundException.java,
+       java/rmi/UnexpectedException.java,
+       java/rmi/UnknownHostException.java,
+       java/rmi/UnmarshalException.java, java/rmi/dgc/DGC.java,
+       java/rmi/dgc/Lease.java, java/rmi/dgc/VMID.java,
+       java/rmi/registry/LocateRegistry.java,
+       java/rmi/registry/Registry.java,
+       java/rmi/registry/RegistryHandler.java,
+       java/rmi/server/ExportException.java,
+       java/rmi/server/LoaderHandler.java,
+       java/rmi/server/LogStream.java, java/rmi/server/ObjID.java,
+       java/rmi/server/Operation.java,
+       java/rmi/server/RMIClassLoader.java,
+       java/rmi/server/RMIClientSocketFactory.java,
+       java/rmi/server/RMIFailureHandler.java,
+       java/rmi/server/RMIServerSocketFactory.java,
+       java/rmi/server/RMISocketFactory.java,
+       java/rmi/server/RemoteCall.java,
+       java/rmi/server/RemoteObject.java, java/rmi/server/RemoteRef.java,
+       java/rmi/server/RemoteServer.java,
+       java/rmi/server/RemoteStub.java,
+       java/rmi/server/ServerCloneException.java,
+       java/rmi/server/ServerNotActiveException.java,
+       java/rmi/server/ServerRef.java, java/rmi/server/Skeleton.java,
+       java/rmi/server/SkeletonMismatchException.java,
+       java/rmi/server/SkeletonNotFoundException.java,
+       java/rmi/server/SocketSecurityException.java,
+       java/rmi/server/UID.java,
+       java/rmi/server/UnicastRemoteObject.java,
+       java/rmi/server/Unreferenced.java, gnu/java/rmi/dgc/DGCImpl.java,
+       gnu/java/rmi/dgc/DGCImpl_Skel.java,
+       gnu/java/rmi/dgc/DGCImpl_Stub.java,
+       gnu/java/rmi/registry/RegistryImpl.java,
+       gnu/java/rmi/registry/RegistryImpl_Skel.java,
+       gnu/java/rmi/registry/RegistryImpl_Stub.java,
+       gnu/java/rmi/rmic/RMIC.java, gnu/java/rmi/rmic/TabbedWriter.java,
+       gnu/java/rmi/server/ProtocolConstants.java,
+       gnu/java/rmi/server/RMIDefaultSocketFactory.java,
+       gnu/java/rmi/server/RMIHashes.java,
+       gnu/java/rmi/server/RMIObjectInputStream.java,
+       gnu/java/rmi/server/RMIObjectOutputStream.java,
+       gnu/java/rmi/server/UnicastConnection.java,
+       gnu/java/rmi/server/UnicastConnectionManager.java,
+       gnu/java/rmi/server/UnicastRef.java,
+       gnu/java/rmi/server/UnicastRemoteCall.java,
+       gnu/java/rmi/server/UnicastRemoteStub.java,
+       gnu/java/rmi/server/UnicastServer.java,
+       gnu/java/rmi/server/UnicastServerRef.java: RMI implementation from
+       Kaffe.  Relabelled classes to fit into Classpath tree.
+       * Makefile.in: Rebuilt.
+       * Makefile.am (rmi_java_source_files): New macro.
+       (ordinary_java_source_files): Reference it.
+       (bin_PROGRAMS): Added rmic and rmiregistry.
+       (rmic_SOURCES): New macro.
+       (EXTRA_rmic_SOURCES): Likewise.
+       (rmic_LDFLAGS): Likewise.
+       (rmic_LINK): Likewise.
+       (rmic_LDADD): Likewise.
+       (rmic_DEPENDENCIES): Likewise.
+       (rmiregistry_SOURCES): New macro.
+       (EXTRA_rmiregistry_SOURCES): Likewise.
+       (rmiregistry_LDFLAGS): Likewise.
+       (rmiregistry_LINK): Likewise.
+       (rmiregistry_LDADD): Likewise.
+       (rmiregistry_DEPENDENCIES): Likewise.
+
 2001-08-26  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
 
        * name-finder.cc (lookup): Ignore a null dli_fname from dladdr.
index b764803..bcff10a 100644 (file)
@@ -35,7 +35,7 @@ data_DATA = libgcj.jar
 
 ## For now, only on native systems.  FIXME.
 if NATIVE
-bin_PROGRAMS = jv-convert gij
+bin_PROGRAMS = jv-convert gij rmic rmiregistry
 endif
 
 bin_SCRIPTS = addr2name.awk
@@ -435,6 +435,38 @@ gij_LDADD = libgcj.la $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
 ## linking this program.
 gij_DEPENDENCIES = $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
 
+rmic_SOURCES =
+## This is a dummy definition.
+EXTRA_rmic_SOURCES = $(rmi_java_source_files)
+rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \
+       -rpath $(toolexeclibdir) -shared-libgcc
+rmic_LINK = $(GCJLINK)
+## We explicitly link in the libraries we need.  This way we don't
+## need -nodefaultlibs, so we can still rely on gcj picking up the
+## system libraries we need (via the specs file).
+## We need the -L so that gcj can find libgcj with `-lgcj'.
+## FIXME: should be _libs on some systems.
+rmic_LDADD = libgcj.la $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
+## Depend on the spec file to make sure it is up to date before
+## linking this program.
+rmic_DEPENDENCIES = $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
+
+rmiregistry_SOURCES =
+## This is a dummy definition.
+EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files)
+rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \
+       -rpath $(toolexeclibdir) -shared-libgcc
+rmiregistry_LINK = $(GCJLINK)
+## We explicitly link in the libraries we need.  This way we don't
+## need -nodefaultlibs, so we can still rely on gcj picking up the
+## system libraries we need (via the specs file).
+## We need the -L so that gcj can find libgcj with `-lgcj'.
+## FIXME: should be _libs on some systems.
+rmiregistry_LDADD = libgcj.la $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
+## Depend on the spec file to make sure it is up to date before
+## linking this program.
+rmiregistry_DEPENDENCIES = $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
+
 # The Unicode consortium does not permit re-distributing the file JIS0201.TXT.
 # You can get it from ftp://ftp.unicode.org/Public/MAPPINGS/EASTASIA/JIS/.
 
@@ -769,6 +801,93 @@ java/beans/VetoableChangeListener.java \
 java/beans/VetoableChangeSupport.java \
 java/beans/Visibility.java
 
+rmi_java_source_files =        \
+java/rmi/activation/Activatable.java \
+java/rmi/activation/ActivateFailedException.java \
+java/rmi/activation/ActivationDesc.java        \
+java/rmi/activation/ActivationException.java \
+java/rmi/activation/ActivationGroup.java \
+java/rmi/activation/ActivationGroupDesc.java \
+java/rmi/activation/ActivationGroupID.java \
+java/rmi/activation/ActivationID.java \
+java/rmi/activation/ActivationInstantiator.java        \
+java/rmi/activation/ActivationMonitor.java \
+java/rmi/activation/ActivationSystem.java \
+java/rmi/activation/Activator.java \
+java/rmi/activation/UnknownGroupException.java \
+java/rmi/activation/UnknownObjectException.java        \
+java/rmi/AccessException.java \
+java/rmi/AlreadyBoundException.java \
+java/rmi/ConnectException.java \
+java/rmi/ConnectIOException.java \
+java/rmi/MarshalException.java \
+java/rmi/MarshalledObject.java \
+java/rmi/Naming.java \
+java/rmi/NoSuchObjectException.java \
+java/rmi/NotBoundException.java        \
+java/rmi/RMISecurityException.java \
+java/rmi/RMISecurityManager.java \
+java/rmi/Remote.java \
+java/rmi/RemoteException.java \
+java/rmi/ServerError.java \
+java/rmi/ServerException.java \
+java/rmi/ServerRuntimeException.java \
+java/rmi/StubNotFoundException.java \
+java/rmi/UnexpectedException.java \
+java/rmi/UnknownHostException.java \
+java/rmi/UnmarshalException.java \
+java/rmi/dgc/DGC.java \
+java/rmi/dgc/Lease.java        \
+java/rmi/dgc/VMID.java \
+java/rmi/registry/LocateRegistry.java \
+java/rmi/registry/Registry.java        \
+java/rmi/registry/RegistryHandler.java \
+java/rmi/server/ExportException.java \
+java/rmi/server/LoaderHandler.java \
+java/rmi/server/LogStream.java \
+java/rmi/server/ObjID.java \
+java/rmi/server/Operation.java \
+java/rmi/server/RMIClassLoader.java \
+java/rmi/server/RMIClientSocketFactory.java \
+java/rmi/server/RMIFailureHandler.java \
+java/rmi/server/RMIServerSocketFactory.java \
+java/rmi/server/RMISocketFactory.java \
+java/rmi/server/RemoteCall.java        \
+java/rmi/server/RemoteObject.java \
+java/rmi/server/RemoteRef.java \
+java/rmi/server/RemoteServer.java \
+java/rmi/server/RemoteStub.java        \
+java/rmi/server/ServerCloneException.java \
+java/rmi/server/ServerNotActiveException.java \
+java/rmi/server/ServerRef.java \
+java/rmi/server/Skeleton.java \
+java/rmi/server/SkeletonMismatchException.java \
+java/rmi/server/SkeletonNotFoundException.java \
+java/rmi/server/SocketSecurityException.java \
+java/rmi/server/UID.java \
+java/rmi/server/UnicastRemoteObject.java \
+java/rmi/server/Unreferenced.java \
+gnu/java/rmi/dgc/DGCImpl.java \
+gnu/java/rmi/dgc/DGCImpl_Skel.java \
+gnu/java/rmi/dgc/DGCImpl_Stub.java \
+gnu/java/rmi/registry/RegistryImpl.java        \
+gnu/java/rmi/registry/RegistryImpl_Skel.java \
+gnu/java/rmi/registry/RegistryImpl_Stub.java \
+gnu/java/rmi/rmic/RMIC.java \
+gnu/java/rmi/rmic/TabbedWriter.java \
+gnu/java/rmi/server/ProtocolConstants.java \
+gnu/java/rmi/server/RMIDefaultSocketFactory.java \
+gnu/java/rmi/server/RMIHashes.java \
+gnu/java/rmi/server/RMIObjectInputStream.java \
+gnu/java/rmi/server/RMIObjectOutputStream.java \
+gnu/java/rmi/server/UnicastConnection.java \
+gnu/java/rmi/server/UnicastConnectionManager.java \
+gnu/java/rmi/server/UnicastRef.java \
+gnu/java/rmi/server/UnicastRemoteCall.java \
+gnu/java/rmi/server/UnicastRemoteStub.java \
+gnu/java/rmi/server/UnicastServer.java \
+gnu/java/rmi/server/UnicastServerRef.java
+
 ## Java files which are created by configure and thus are in the build
 ## directory.
 built_java_source_files = java/lang/ConcreteProcess.java \
@@ -1309,6 +1428,7 @@ org/xml/sax/SAXNotSupportedException.java \
 org/xml/sax/SAXParseException.java \
 org/xml/sax/XMLFilter.java \
 org/xml/sax/XMLReader.java \
+$(rmi_java_source_files) \
 $(awt_java_source_files) \
 $(convert_source_files)
 
index 3e976bf..38aa7f1 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4-p1 from Makefile.am
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
 
 # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
@@ -123,26 +123,38 @@ libgcj_basedir = @libgcj_basedir@
 mkinstalldirs = @mkinstalldirs@
 
 AUTOMAKE_OPTIONS = foreign
-@TESTSUBDIR_TRUE@SUBDIRS = $(DIRLTDL) testsuite gcj include
-@TESTSUBDIR_FALSE@SUBDIRS = $(DIRLTDL) gcj include
-@USE_LIBDIR_TRUE@toolexeclibdir = $(libdir)$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR)
-@USE_LIBDIR_FALSE@toolexecdir = $(exec_prefix)/$(target_alias)
-@XLIB_AWT_TRUE@cond_x_ltlibrary = libgcjx.la
-@XLIB_AWT_FALSE@cond_x_ltlibrary = 
+@TESTSUBDIR_TRUE@SUBDIRS = \
+@TESTSUBDIR_TRUE@$(DIRLTDL) testsuite gcj include
+@TESTSUBDIR_FALSE@SUBDIRS = \
+@TESTSUBDIR_FALSE@$(DIRLTDL) gcj include
+@USE_LIBDIR_TRUE@toolexeclibdir = \
+@USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexeclibdir = \
+@USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
+@USE_LIBDIR_FALSE@toolexecdir = \
+@USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
+@XLIB_AWT_TRUE@cond_x_ltlibrary = \
+@XLIB_AWT_TRUE@libgcjx.la
+@XLIB_AWT_FALSE@cond_x_ltlibrary = \
 
 toolexeclib_LTLIBRARIES = libgcj.la $(cond_x_ltlibrary)
 toolexeclib_DATA = libgcj.spec
 data_DATA = libgcj.jar
 
-@NATIVE_TRUE@bin_PROGRAMS = jv-convert gij
+@NATIVE_TRUE@bin_PROGRAMS = \
+@NATIVE_TRUE@jv-convert gij rmic rmiregistry
 
 bin_SCRIPTS = addr2name.awk
-@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
-@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = jar
-@CANADIAN_FALSE@ZIP = $(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
-@CANADIAN_TRUE@GCJH = gcjh
-@CANADIAN_FALSE@GCJH = $(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
+@CANADIAN_TRUE@@NULL_TARGET_TRUE@ZIP = \
+@CANADIAN_TRUE@@NULL_TARGET_TRUE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
+@CANADIAN_TRUE@@NULL_TARGET_FALSE@ZIP = \
+@CANADIAN_TRUE@@NULL_TARGET_FALSE@jar
+@CANADIAN_FALSE@ZIP = \
+@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/fastjar/jar$(EXEEXT)
+@CANADIAN_TRUE@GCJH = \
+@CANADIAN_TRUE@gcjh
+@CANADIAN_FALSE@GCJH = \
+@CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh$(EXEEXT)
 
 GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8
 
@@ -157,38 +169,52 @@ JAVAC = $(GCJ_WITH_FLAGS) -C
 GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
 
 WARNINGS = -W -Wall
-AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions  -fdollars-in-identifiers        @LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE  -DPREFIX="\"$(prefix)\""
+AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions \
+       -fdollars-in-identifiers \
+       @LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
+       -DPREFIX="\"$(prefix)\""
 
-@USING_GCC_TRUE@AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS)
-@USING_GCC_FALSE@AM_CFLAGS = @LIBGCJ_CFLAGS@
+@USING_GCC_TRUE@AM_CFLAGS = \
+@USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
+@USING_GCC_FALSE@AM_CFLAGS = \
+@USING_GCC_FALSE@@LIBGCJ_CFLAGS@
 
 JCFLAGS = -g
 JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
 
 LIBFFIINCS = @LIBFFIINCS@
 
-INCLUDES = -I$(top_srcdir) -Iinclude -I$(top_srcdir)/include   $(GCINCS) $(THREADINCS) $(INCLTDL)      $(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
+INCLUDES = -I$(top_srcdir) -Iinclude -I$(top_srcdir)/include \
+       $(GCINCS) $(THREADINCS) $(INCLTDL) \
+       $(GCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)
 
 
 nat_files = $(nat_source_files:.cc=.lo)
 x_nat_files = $(x_nat_source_files:.cc=.lo)
 c_files = $(c_source_files:.c=.lo)
-javao_files = $(java_source_files:.java=.lo)   $(built_java_source_files:.java=.lo)
+javao_files = $(java_source_files:.java=.lo) \
+       $(built_java_source_files:.java=.lo)
 
 x_javao_files = $(x_java_source_files:.java=.lo)
 
-libgcj_la_SOURCES = prims.cc posix.cc jni.cc exception.cc      resolve.cc defineclass.cc interpret.cc name-finder.cc   $(nat_source_files)
+libgcj_la_SOURCES = prims.cc posix.cc jni.cc exception.cc \
+       resolve.cc defineclass.cc interpret.cc name-finder.cc \
+       $(nat_source_files)
 
-EXTRA_libgcj_la_SOURCES = boehm.cc nogc.cc posix-threads.cc no-threads.cc      $(c_source_files) $(java_source_files) $(built_java_source_files)
+EXTRA_libgcj_la_SOURCES = boehm.cc nogc.cc posix-threads.cc no-threads.cc \
+       $(c_source_files) $(java_source_files) $(built_java_source_files)
 
-libgcj_la_DEPENDENCIES = libgcj.jar $(javao_files)     $(c_files) $(GCOBJS) $(THREADOBJS) $(LIBLTDL)
+libgcj_la_DEPENDENCIES = libgcj.jar $(javao_files) \
+       $(c_files) $(GCOBJS) $(THREADOBJS) $(LIBLTDL)
 
 
-libgcj_la_LIBADD = $(javao_files) $(c_files) $(GCOBJS)         $(THREADOBJS)
+libgcj_la_LIBADD = $(javao_files) $(c_files) $(GCOBJS) \
+       $(THREADOBJS)
 
 # Include THREADLIBS here to ensure that the correct version of
 # certain linuxthread functions get linked:
-libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLIBS) $(LIBLTDL)  -version-info `grep -v '^\#' $(srcdir)/libtool-version`
+libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLIBS) $(LIBLTDL) \
+       -version-info `grep -v '^\#' $(srcdir)/libtool-version`
 
 libgcj_la_LINK = $(LIBLINK)
 
@@ -196,7 +222,9 @@ libgcjx_la_SOURCES = $(x_nat_source_files)
 EXTRA_libgcjx_la_SOURCES = $(x_java_source_files)
 libgcjx_la_DEPENDENCIES = libgcj.jar $(x_javao_files)
 libgcjx_la_LIBADD = $(x_javao_files)
-libgcjx_la_LDFLAGS = @X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@         -rpath $(toolexeclibdir)         -version-info `grep -v '^\#' $(srcdir)/libtool-version`
+libgcjx_la_LDFLAGS = @X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \
+        -rpath $(toolexeclibdir) \
+        -version-info `grep -v '^\#' $(srcdir)/libtool-version`
 
 libgcjx_la_LINK = $(LIBLINK)
 
@@ -205,7 +233,10 @@ CLEANFILES = tmp-list libgcj.jar
 
 SUFFIXES = .class .java .h
 
-nat_headers = $(ordinary_java_source_files:.java=.h)   $(built_java_source_files:.java=.h)     java/io/ObjectOutputStream$$PutField.h  java/io/ObjectInputStream$$GetField.h
+nat_headers = $(ordinary_java_source_files:.java=.h) \
+       $(built_java_source_files:.java=.h) \
+       java/io/ObjectOutputStream$$PutField.h \
+       java/io/ObjectInputStream$$GetField.h
 
 
 x_nat_headers = $(x_java_source_files:.java=.h)
@@ -214,18 +245,22 @@ extra_headers = java/lang/Object.h java/lang/Class.h
 
 NM = nm
 
-@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = gen-from-JIS
+@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = \
+@NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS
 
 CONVERT_DIR = gnu/gcj/convert
 
 jv_convert_SOURCES = 
 EXTRA_jv_convert_SOURCES = $(convert_source_files)
-jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert    -rpath $(toolexeclibdir) -shared-libgcc
+jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \
+       -rpath $(toolexeclibdir) -shared-libgcc
 
 jv_convert_LINK = $(GCJLINK)
-jv_convert_LDADD = $(convert_source_files:.java=.lo) libgcj.la         $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
+jv_convert_LDADD = $(convert_source_files:.java=.lo) libgcj.la \
+       $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
 
-jv_convert_DEPENDENCIES = $(convert_source_files:.java=.lo)    $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
+jv_convert_DEPENDENCIES = $(convert_source_files:.java=.lo) \
+       $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
 
 
 gij_SOURCES = gij.cc
@@ -234,50 +269,1078 @@ gij_LINK = $(GCJLINK)
 gij_LDADD = libgcj.la $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
 gij_DEPENDENCIES = $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
 
-gen_from_JIS_SOURCES = 
-EXTRA_gen_from_JIS_SOURCES = $(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c           $(srcdir)/$(CONVERT_DIR)/make-trie.c            $(srcdir)/$(CONVERT_DIR)/JIS0201.h              $(srcdir)/$(CONVERT_DIR)/JIS0208.h              $(srcdir)/$(CONVERT_DIR)/JIS0212.h
-
-gen_from_JIS_LDADD = $(CONVERT_DIR)/gen-from-JIS.o $(CONVERT_DIR)/make-trie.o
-gen_from_JIS_DEPENDENCIES = $(CONVERT_DIR)/gen-from-JIS.o              $(CONVERT_DIR)/make-trie.o
-
-
-convert_source_files =  gnu/gcj/convert/BytesToUnicode.java gnu/gcj/convert/Convert.java gnu/gcj/convert/Input_8859_1.java gnu/gcj/convert/Input_ASCII.java gnu/gcj/convert/Input_EUCJIS.java gnu/gcj/convert/Input_JavaSrc.java gnu/gcj/convert/Input_SJIS.java gnu/gcj/convert/Input_UTF8.java       gnu/gcj/convert/Input_iconv.java gnu/gcj/convert/IOConverter.java gnu/gcj/convert/Output_8859_1.java gnu/gcj/convert/Output_ASCII.java gnu/gcj/convert/Output_EUCJIS.java gnu/gcj/convert/Output_JavaSrc.java gnu/gcj/convert/Output_SJIS.java gnu/gcj/convert/Output_UTF8.java gnu/gcj/convert/Output_iconv.java gnu/gcj/convert/UnicodeToBytes.java
+rmic_SOURCES = 
+EXTRA_rmic_SOURCES = $(rmi_java_source_files)
+rmic_LDFLAGS = --main=gnu.java.rmi.rmic.RMIC \
+       -rpath $(toolexeclibdir) -shared-libgcc
 
+rmic_LINK = $(GCJLINK)
+rmic_LDADD = libgcj.la $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
+rmic_DEPENDENCIES = $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
 
-special_java_source_files = java/lang/Class.java java/lang/Object.java
-
-awt_java_source_files =  gnu/awt/LightweightRedirector.java gnu/awt/j2d/AbstractGraphicsState.java gnu/awt/j2d/DirectRasterGraphics.java gnu/awt/j2d/Graphics2DImpl.java gnu/awt/j2d/IntegerGraphicsState.java gnu/awt/j2d/MappedRaster.java gnu/gcj/awt/BitMaskExtent.java gnu/gcj/awt/Buffers.java gnu/gcj/awt/ComponentDataBlitOp.java gnu/gcj/awt/GLightweightPeer.java gnu/java/beans/editors/ColorEditor.java    gnu/java/beans/editors/FontEditor.java gnu/java/beans/editors/NativeBooleanEditor.java  gnu/java/beans/editors/NativeByteEditor.java gnu/java/beans/editors/NativeDoubleEditor.java gnu/java/beans/editors/NativeFloatEditor.java gnu/java/beans/editors/NativeIntEditor.java gnu/java/beans/editors/NativeLongEditor.java gnu/java/beans/editors/NativeShortEditor.java gnu/java/beans/editors/StringEditor.java gnu/java/beans/info/ComponentBeanInfo.java gnu/java/beans/BeanInfoEmbryo.java gnu/java/beans/EmptyBeanInfo.java gnu/java/beans/ExplicitBeanInfo.java gnu/java/beans/IntrospectionIncubator.java java/applet/Applet.java java/applet/AppletStub.java java/applet/AppletContext.java java/applet/AudioClip.java java/awt/AWTError.java java/awt/AWTEvent.java java/awt/AWTEventMulticaster.java java/awt/AWTException.java java/awt/AWTPermission.java java/awt/ActiveEvent.java java/awt/Adjustable.java java/awt/BorderLayout.java java/awt/Button.java java/awt/Canvas.java java/awt/CardLayout.java java/awt/Checkbox.java java/awt/CheckboxGroup.java java/awt/CheckboxMenuItem.java java/awt/Choice.java java/awt/Color.java java/awt/Component.java      java/awt/ComponentOrientation.java java/awt/Container.java      java/awt/Cursor.java java/awt/Dialog.java java/awt/Dimension.java       java/awt/Event.java java/awt/EventDispatchThread.java java/awt/EventQueue.java java/awt/FileDialog.java java/awt/FlowLayout.java java/awt/Font.java java/awt/FontMetrics.java java/awt/Frame.java java/awt/Graphics.java java/awt/Graphics2D.java java/awt/GraphicsConfiguration.java java/awt/GridBagConstraints.java java/awt/GridLayout.java java/awt/IllegalComponentStateException.java java/awt/Image.java java/awt/Insets.java java/awt/ItemSelectable.java java/awt/Label.java java/awt/LayoutManager.java java/awt/LayoutManager2.java java/awt/List.java java/awt/Menu.java java/awt/MenuBar.java java/awt/MenuComponent.java java/awt/MenuContainer.java java/awt/MenuItem.java java/awt/MenuShortcut.java java/awt/Paint.java java/awt/PaintContext.java java/awt/Panel.java java/awt/Point.java java/awt/Polygon.java java/awt/PopupMenu.java      java/awt/Rectangle.java java/awt/RenderingHints.java java/awt/ScrollPane.java java/awt/Scrollbar.java   java/awt/Shape.java java/awt/SystemColor.java java/awt/TextArea.java java/awt/TextComponent.java java/awt/TextField.java        java/awt/Toolkit.java java/awt/Transparency.java java/awt/Window.java java/awt/color/ColorSpace.java java/awt/color/ICC_ColorSpace.java java/awt/color/ICC_Profile.java java/awt/datatransfer/Clipboard.java java/awt/event/AWTEventListener.java java/awt/event/ActionEvent.java       java/awt/event/ActionListener.java java/awt/event/AdjustmentEvent.java java/awt/event/AdjustmentListener.java java/awt/event/ComponentAdapter.java java/awt/event/ComponentEvent.java java/awt/event/ComponentListener.java java/awt/event/ContainerAdapter.java java/awt/event/ContainerEvent.java java/awt/event/ContainerListener.java java/awt/event/FocusAdapter.java java/awt/event/FocusEvent.java java/awt/event/FocusListener.java java/awt/event/HierarchyBoundsAdapter.java java/awt/event/HierarchyBoundsListener.java java/awt/event/HierarchyEvent.java java/awt/event/HierarchyListener.java java/awt/event/InputEvent.java java/awt/event/InputMethodEvent.java java/awt/event/InputMethodListener.java java/awt/event/InvocationEvent.java java/awt/event/ItemEvent.java java/awt/event/ItemListener.java java/awt/event/KeyAdapter.java java/awt/event/KeyEvent.java java/awt/event/KeyListener.java  java/awt/event/MouseAdapter.java java/awt/event/MouseEvent.java java/awt/event/MouseListener.java java/awt/event/MouseMotionAdapter.java java/awt/event/MouseMotionListener.java        java/awt/event/PaintEvent.java java/awt/event/TextEvent.java java/awt/event/TextListener.java java/awt/event/WindowAdapter.java java/awt/event/WindowEvent.java java/awt/event/WindowListener.java java/awt/geom/AffineTransform.java java/awt/geom/Dimension2D.java java/awt/geom/Ellipse2D.java java/awt/geom/IllegalPathStateException.java java/awt/geom/Line2D.java java/awt/geom/NoninvertibleTransformException.java java/awt/geom/PathIterator.java     java/awt/geom/Point2D.java java/awt/geom/Rectangle2D.java java/awt/geom/RectangularShape.java java/awt/geom/RoundRectangle2D.java java/awt/image/BufferedImage.java java/awt/image/ColorModel.java java/awt/image/ComponentColorModel.java      java/awt/image/ComponentSampleModel.java java/awt/image/DataBuffer.java java/awt/image/DataBufferByte.java java/awt/image/DataBufferInt.java java/awt/image/DataBufferUShort.java java/awt/image/DirectColorModel.java java/awt/image/ImageConsumer.java java/awt/image/ImageObserver.java java/awt/image/ImageProducer.java java/awt/image/IndexColorModel.java java/awt/image/PackedColorModel.java java/awt/image/Raster.java java/awt/image/RasterOp.java java/awt/image/SampleModel.java   java/awt/image/SinglePixelPackedSampleModel.java java/awt/image/WritableRaster.java java/awt/peer/ButtonPeer.java java/awt/peer/CanvasPeer.java java/awt/peer/CheckboxMenuItemPeer.java java/awt/peer/CheckboxPeer.java java/awt/peer/ChoicePeer.java java/awt/peer/ComponentPeer.java java/awt/peer/ContainerPeer.java java/awt/peer/DialogPeer.java java/awt/peer/FileDialogPeer.java java/awt/peer/FontPeer.java java/awt/peer/FramePeer.java java/awt/peer/LabelPeer.java java/awt/peer/LightweightPeer.java java/awt/peer/ListPeer.java java/awt/peer/MenuBarPeer.java java/awt/peer/MenuComponentPeer.java java/awt/peer/MenuItemPeer.java        java/awt/peer/MenuPeer.java java/awt/peer/PanelPeer.java java/awt/peer/PopupMenuPeer.java java/awt/peer/ScrollPanePeer.java java/awt/peer/ScrollbarPeer.java java/awt/peer/TextAreaPeer.java    java/awt/peer/TextComponentPeer.java java/awt/peer/TextFieldPeer.java java/awt/peer/WindowPeer.java java/beans/beancontext/BeanContext.java     java/beans/beancontext/BeanContextChild.java java/beans/beancontext/BeanContextChildComponentProxy.java java/beans/beancontext/BeanContextChildSupport.java java/beans/beancontext/BeanContextContainerProxy.java java/beans/beancontext/BeanContextEvent.java java/beans/beancontext/BeanContextMembershipEvent.java java/beans/beancontext/BeanContextMembershipListener.java java/beans/beancontext/BeanContextProxy.java java/beans/beancontext/BeanContextServiceAvailableEvent.java java/beans/beancontext/BeanContextServiceProvider.java java/beans/beancontext/BeanContextServiceProviderBeanInfo.java java/beans/beancontext/BeanContextServiceRevokedEvent.java java/beans/beancontext/BeanContextServiceRevokedListener.java java/beans/beancontext/BeanContextServices.java        java/beans/beancontext/BeanContextServicesListener.java java/beans/BeanDescriptor.java java/beans/BeanInfo.java java/beans/Beans.java java/beans/Customizer.java java/beans/DesignMode.java java/beans/EventSetDescriptor.java java/beans/FeatureDescriptor.java java/beans/IndexedPropertyDescriptor.java java/beans/IntrospectionException.java java/beans/Introspector.java java/beans/MethodDescriptor.java java/beans/ParameterDescriptor.java java/beans/PropertyChangeEvent.java java/beans/PropertyChangeListener.java java/beans/PropertyChangeSupport.java java/beans/PropertyDescriptor.java java/beans/PropertyEditor.java java/beans/PropertyEditorManager.java java/beans/PropertyEditorSupport.java java/beans/PropertyVetoException.java java/beans/SimpleBeanInfo.java java/beans/VetoableChangeListener.java java/beans/VetoableChangeSupport.java java/beans/Visibility.java
+rmiregistry_SOURCES = 
+EXTRA_rmiregistry_SOURCES = $(rmi_java_source_files)
+rmiregistry_LDFLAGS = --main=gnu.java.rmi.registry.RegistryImpl \
+       -rpath $(toolexeclibdir) -shared-libgcc
 
+rmiregistry_LINK = $(GCJLINK)
+rmiregistry_LDADD = libgcj.la $(GCLIBS) $(THREADLIBS) $(ZLIBS) -L$(here)/.libs
+rmiregistry_DEPENDENCIES = $(GCDEPS) $(THREADDEPS) $(ZDEPS) libgcj.la libgcj.spec
 
-built_java_source_files = java/lang/ConcreteProcess.java                           gnu/classpath/Configuration.java
+gen_from_JIS_SOURCES = 
+EXTRA_gen_from_JIS_SOURCES = $(srcdir)/$(CONVERT_DIR)/gen-from-JIS.c \
+               $(srcdir)/$(CONVERT_DIR)/make-trie.c \
+               $(srcdir)/$(CONVERT_DIR)/JIS0201.h \
+               $(srcdir)/$(CONVERT_DIR)/JIS0208.h \
+               $(srcdir)/$(CONVERT_DIR)/JIS0212.h
 
+gen_from_JIS_LDADD = $(CONVERT_DIR)/gen-from-JIS.o $(CONVERT_DIR)/make-trie.o
+gen_from_JIS_DEPENDENCIES = $(CONVERT_DIR)/gen-from-JIS.o \
+               $(CONVERT_DIR)/make-trie.o
+
+
+convert_source_files = \
+gnu/gcj/convert/BytesToUnicode.java \
+gnu/gcj/convert/Convert.java \
+gnu/gcj/convert/Input_8859_1.java \
+gnu/gcj/convert/Input_ASCII.java \
+gnu/gcj/convert/Input_EUCJIS.java \
+gnu/gcj/convert/Input_JavaSrc.java \
+gnu/gcj/convert/Input_SJIS.java \
+gnu/gcj/convert/Input_UTF8.java        \
+gnu/gcj/convert/Input_iconv.java \
+gnu/gcj/convert/IOConverter.java \
+gnu/gcj/convert/Output_8859_1.java \
+gnu/gcj/convert/Output_ASCII.java \
+gnu/gcj/convert/Output_EUCJIS.java \
+gnu/gcj/convert/Output_JavaSrc.java \
+gnu/gcj/convert/Output_SJIS.java \
+gnu/gcj/convert/Output_UTF8.java \
+gnu/gcj/convert/Output_iconv.java \
+gnu/gcj/convert/UnicodeToBytes.java
 
-core_java_source_files =  java/lang/AbstractMethodError.java java/lang/ArithmeticException.java java/lang/ArrayIndexOutOfBoundsException.java java/lang/ArrayStoreException.java java/lang/Boolean.java java/lang/Byte.java java/lang/Character.java java/lang/ClassCastException.java java/lang/ClassCircularityError.java java/lang/ClassFormatError.java    java/lang/ClassLoader.java java/lang/ClassNotFoundException.java java/lang/CloneNotSupportedException.java java/lang/Cloneable.java java/lang/Comparable.java java/lang/Compiler.java   java/lang/Double.java java/lang/Error.java java/lang/Exception.java java/lang/ExceptionInInitializerError.java java/lang/Float.java java/lang/IllegalAccessError.java java/lang/IllegalAccessException.java java/lang/IllegalArgumentException.java     java/lang/IllegalMonitorStateException.java java/lang/IllegalStateException.java java/lang/IllegalThreadStateException.java java/lang/IncompatibleClassChangeError.java java/lang/IndexOutOfBoundsException.java java/lang/InstantiationError.java java/lang/InstantiationException.java java/lang/Integer.java java/lang/InternalError.java java/lang/InterruptedException.java java/lang/LinkageError.java java/lang/Long.java java/lang/Math.java java/lang/NegativeArraySizeException.java java/lang/NoClassDefFoundError.java java/lang/NoSuchFieldError.java      java/lang/NoSuchFieldException.java java/lang/NoSuchMethodError.java java/lang/NoSuchMethodException.java java/lang/NullPointerException.java java/lang/Number.java java/lang/NumberFormatException.java java/lang/OutOfMemoryError.java        java/lang/Package.java java/lang/Process.java java/lang/Runnable.java   java/lang/Runtime.java java/lang/RuntimeException.java  java/lang/RuntimePermission.java java/lang/SecurityException.java java/lang/SecurityManager.java java/lang/Short.java java/lang/StackOverflowError.java java/lang/String.java java/lang/StringBuffer.java java/lang/StringIndexOutOfBoundsException.java java/lang/System.java java/lang/Thread.java java/lang/ThreadDeath.java java/lang/ThreadGroup.java java/lang/ThreadLocal.java java/lang/Throwable.java java/lang/UnknownError.java java/lang/UnsatisfiedLinkError.java java/lang/UnsupportedOperationException.java java/lang/VerifyError.java java/lang/VirtualMachineError.java java/lang/VMClassLoader.java java/lang/Void.java java/io/BufferedInputStream.java java/io/BufferedOutputStream.java java/io/BufferedReader.java java/io/BufferedWriter.java java/io/ByteArrayInputStream.java java/io/ByteArrayOutputStream.java java/io/CharArrayReader.java java/io/CharArrayWriter.java java/io/CharConversionException.java java/io/DataInput.java java/io/DataInputStream.java java/io/DataOutput.java   java/io/DataOutputStream.java java/io/EOFException.java java/io/Externalizable.java java/io/File.java java/io/FileDescriptor.java java/io/FileFilter.java java/io/FileInputStream.java java/io/FileNotFoundException.java java/io/FileOutputStream.java java/io/FilePermission.java java/io/FileReader.java     java/io/FileWriter.java java/io/FilenameFilter.java java/io/FilterInputStream.java java/io/FilterOutputStream.java      java/io/FilterReader.java java/io/FilterWriter.java java/io/IOException.java java/io/InputStream.java java/io/InputStreamReader.java java/io/InterruptedIOException.java java/io/InvalidClassException.java java/io/InvalidObjectException.java java/io/LineNumberInputStream.java java/io/LineNumberReader.java java/io/NotActiveException.java        java/io/NotSerializableException.java java/io/ObjectInput.java java/io/ObjectInputStream.java java/io/ObjectInputValidation.java java/io/ObjectOutput.java java/io/ObjectOutputStream.java      java/io/ObjectStreamClass.java java/io/ObjectStreamConstants.java java/io/ObjectStreamException.java java/io/ObjectStreamField.java java/io/OptionalDataException.java java/io/OutputStream.java java/io/OutputStreamWriter.java        java/io/PipedInputStream.java java/io/PipedOutputStream.java java/io/PipedReader.java java/io/PipedWriter.java java/io/PrintStream.java java/io/PrintWriter.java java/io/PushbackInputStream.java java/io/PushbackReader.java java/io/RandomAccessFile.java java/io/Reader.java java/io/SequenceInputStream.java java/io/Serializable.java java/io/SerializablePermission.java java/io/StreamCorruptedException.java java/io/StreamTokenizer.java java/io/StringBufferInputStream.java java/io/StringReader.java java/io/StringWriter.java java/io/SyncFailedException.java java/io/UTFDataFormatException.java java/io/UnsupportedEncodingException.java java/io/WriteAbortedException.java java/io/Writer.java java/util/AbstractCollection.java java/util/AbstractList.java java/util/AbstractMap.java java/util/AbstractSequentialList.java java/util/AbstractSet.java java/util/ArrayList.java java/util/Arrays.java java/util/BasicMapEntry.java java/util/BitSet.java java/util/Calendar.java    java/util/Collection.java java/util/Collections.java java/util/Comparator.java java/util/ConcurrentModificationException.java java/util/Date.java java/util/Dictionary.java java/util/EmptyStackException.java java/util/Enumeration.java java/util/EventListener.java java/util/EventObject.java java/util/GregorianCalendar.java java/util/HashMap.java java/util/HashSet.java java/util/Hashtable.java java/util/IdentityHashMap.java java/util/Iterator.java        java/util/LinkedList.java java/util/List.java java/util/ListIterator.java java/util/ListResourceBundle.java java/util/Locale.java java/util/Map.java java/util/MissingResourceException.java    java/util/NoSuchElementException.java java/util/Observable.java java/util/Observer.java java/util/Properties.java java/util/PropertyPermission.java java/util/PropertyResourceBundle.java java/util/Random.java java/util/ResourceBundle.java java/util/Set.java java/util/SimpleTimeZone.java java/util/SortedMap.java java/util/SortedSet.java java/util/Stack.java java/util/StringTokenizer.java java/util/TimeZone.java    java/util/Timer.java java/util/TimerTask.java java/util/TreeMap.java java/util/TreeSet.java java/util/TooManyListenersException.java java/util/Vector.java java/util/WeakHashMap.java
 
+special_java_source_files = java/lang/Class.java java/lang/Object.java
 
-ordinary_java_source_files = $(core_java_source_files) gnu/gcj/RawData.java gnu/gcj/io/DefaultMimeTypes.java gnu/gcj/io/MimeTypes.java gnu/gcj/io/SimpleSHSStream.java gnu/gcj/math/MPN.java gnu/gcj/protocol/file/Connection.java gnu/gcj/protocol/file/Handler.java gnu/gcj/protocol/http/Connection.java gnu/gcj/protocol/http/Handler.java gnu/gcj/protocol/jar/Connection.java gnu/gcj/protocol/jar/Handler.java gnu/gcj/runtime/FileDeleter.java gnu/gcj/runtime/FirstThread.java gnu/gcj/runtime/VMClassLoader.java gnu/gcj/text/BaseBreakIterator.java gnu/gcj/text/CharacterBreakIterator.java gnu/gcj/text/LineBreakIterator.java gnu/gcj/text/LocaleData_en.java    gnu/gcj/text/LocaleData_en_US.java gnu/gcj/text/SentenceBreakIterator.java      gnu/gcj/text/WordBreakIterator.java gnu/gcj/util/EnumerationChain.java gnu/java/io/ClassLoaderObjectInputStream.java gnu/java/io/NullOutputStream.java gnu/java/io/ObjectIdentityWrapper.java gnu/java/lang/ArrayHelper.java gnu/java/lang/ClassHelper.java gnu/java/lang/reflect/TypeSignature.java gnu/java/locale/Calendar.java gnu/java/locale/Calendar_de.java gnu/java/locale/Calendar_en.java gnu/java/locale/Calendar_nl.java gnu/java/security/provider/DefaultPolicy.java gnu/java/security/provider/Gnu.java gnu/java/security/provider/SHA.java gnu/java/security/provider/SHA1PRNG.java java/lang/ref/PhantomReference.java java/lang/ref/Reference.java java/lang/ref/ReferenceQueue.java java/lang/ref/SoftReference.java java/lang/ref/WeakReference.java java/lang/reflect/AccessibleObject.java       java/lang/reflect/Array.java java/lang/reflect/Constructor.java java/lang/reflect/Field.java java/lang/reflect/InvocationTargetException.java java/lang/reflect/Member.java java/lang/reflect/Method.java java/lang/reflect/Modifier.java       java/lang/reflect/ReflectPermission.java java/math/BigDecimal.java java/math/BigInteger.java java/net/BindException.java java/net/ConnectException.java java/net/ContentHandler.java java/net/ContentHandlerFactory.java java/net/DatagramPacket.java java/net/DatagramSocket.java java/net/DatagramSocketImpl.java java/net/FileNameMap.java java/net/HttpURLConnection.java   java/net/InetAddress.java java/net/JarURLConnection.java java/net/MalformedURLException.java java/net/MulticastSocket.java java/net/NetPermission.java java/net/NoRouteToHostException.java java/net/PlainDatagramSocketImpl.java java/net/PlainSocketImpl.java java/net/ProtocolException.java java/net/ServerSocket.java java/net/Socket.java java/net/SocketException.java java/net/SocketImpl.java java/net/SocketImplFactory.java  java/net/SocketOptions.java java/net/SocketPermission.java java/net/URL.java java/net/URLClassLoader.java java/net/URLConnection.java java/net/URLDecoder.java java/net/URLEncoder.java java/net/URLStreamHandler.java java/net/URLStreamHandlerFactory.java java/net/UnknownHostException.java java/net/UnknownServiceException.java java/security/AccessControlContext.java java/security/AccessControlException.java java/security/AccessController.java java/security/AlgorithmParameterGenerator.java java/security/AlgorithmParameters.java java/security/AlgorithmParameterGeneratorSpi.java java/security/AlgorithmParametersSpi.java java/security/AllPermission.java java/security/BasicPermission.java java/security/Certificate.java java/security/CodeSource.java java/security/DigestException.java java/security/DigestOutputStream.java java/security/DummyKeyPairGenerator.java java/security/DummySignature.java java/security/DigestInputStream.java java/security/DomainCombiner.java java/security/DummyMessageDigest.java java/security/GeneralSecurityException.java java/security/Guard.java java/security/GuardedObject.java java/security/Identity.java java/security/IdentityScope.java java/security/InvalidAlgorithmParameterException.java java/security/InvalidKeyException.java java/security/InvalidParameterException.java java/security/Key.java java/security/KeyFactorySpi.java java/security/KeyPairGenerator.java java/security/KeyStoreException.java java/security/KeyException.java java/security/KeyManagementException.java java/security/KeyPairGeneratorSpi.java java/security/KeyStoreSpi.java java/security/KeyFactory.java java/security/KeyPair.java java/security/KeyStore.java java/security/MessageDigest.java java/security/MessageDigestSpi.java java/security/NoSuchAlgorithmException.java java/security/NoSuchProviderException.java java/security/Permission.java java/security/Principal.java java/security/PrivilegedExceptionAction.java java/security/PublicKey.java java/security/PermissionCollection.java java/security/PrivateKey.java java/security/ProtectionDomain.java java/security/Permissions.java java/security/PrivilegedAction.java java/security/Provider.java java/security/Policy.java java/security/PrivilegedActionException.java java/security/ProviderException.java java/security/SecureClassLoader.java java/security/SecureRandomSpi.java java/security/SecurityPermission.java java/security/SignatureException.java java/security/SignedObject.java java/security/SecureRandom.java java/security/Security.java java/security/Signature.java java/security/SignatureSpi.java java/security/Signer.java java/security/UnrecoverableKeyException.java java/security/UnresolvedPermission.java java/security/acl/Acl.java java/security/acl/AclNotFoundException.java java/security/acl/LastOwnerException.java java/security/acl/Owner.java java/security/acl/AclEntry.java java/security/acl/Group.java java/security/acl/NotOwnerException.java java/security/acl/Permission.java java/security/cert/CRL.java java/security/cert/CRLException.java java/security/cert/Certificate.java java/security/cert/CertificateEncodingException.java java/security/cert/CertificateException.java java/security/cert/CertificateExpiredException.java java/security/cert/CertificateFactory.java java/security/cert/CertificateFactorySpi.java java/security/cert/CertificateNotYetValidException.java java/security/cert/CertificateParsingException.java java/security/cert/X509CRL.java java/security/cert/X509CRLEntry.java java/security/cert/X509Certificate.java java/security/cert/X509Extension.java java/security/interfaces/DSAKey.java java/security/interfaces/DSAKeyPairGenerator.java java/security/interfaces/DSAParams.java java/security/interfaces/DSAPrivateKey.java java/security/interfaces/DSAPublicKey.java java/security/interfaces/RSAKey.java java/security/interfaces/RSAPrivateCrtKey.java java/security/interfaces/RSAPrivateKey.java java/security/interfaces/RSAPublicKey.java java/security/spec/AlgorithmParameterSpec.java java/security/spec/DSAParameterSpec.java java/security/spec/DSAPrivateKeySpec.java java/security/spec/DSAPublicKeySpec.java java/security/spec/EncodedKeySpec.java java/security/spec/InvalidKeySpecException.java java/security/spec/InvalidParameterSpecException.java java/security/spec/KeySpec.java java/security/spec/PKCS8EncodedKeySpec.java java/security/spec/RSAKeyGenParameterSpec.java java/security/spec/RSAPrivateCrtKeySpec.java java/security/spec/RSAPrivateKeySpec.java java/security/spec/RSAPublicKeySpec.java java/security/spec/X509EncodedKeySpec.java java/sql/Array.java java/sql/BatchUpdateException.java java/sql/Blob.java java/sql/CallableStatement.java  java/sql/Clob.java java/sql/Connection.java java/sql/DataTruncation.java java/sql/DatabaseMetaData.java java/sql/Date.java java/sql/Driver.java java/sql/DriverManager.java java/sql/DriverPropertyInfo.java java/sql/PreparedStatement.java    java/sql/Ref.java java/sql/ResultSet.java       java/sql/ResultSetMetaData.java java/sql/SQLData.java java/sql/SQLException.java java/sql/SQLInput.java java/sql/SQLOutput.java java/sql/SQLWarning.java java/sql/Statement.java        java/sql/Struct.java    java/sql/Time.java java/sql/Timestamp.java      java/sql/Types.java java/text/BreakIterator.java java/text/CharacterIterator.java java/text/ChoiceFormat.java java/text/CollationElementIterator.java   java/text/CollationKey.java java/text/Collator.java     java/text/DateFormat.java java/text/DateFormatSymbols.java java/text/DecimalFormat.java java/text/DecimalFormatSymbols.java java/text/FieldPosition.java java/text/Format.java java/text/MessageFormat.java java/text/NumberFormat.java java/text/ParseException.java java/text/ParsePosition.java java/text/RuleBasedCollator.java java/text/SimpleDateFormat.java     java/text/StringCharacterIterator.java java/util/jar/Attributes.java java/util/jar/JarEntry.java java/util/jar/JarException.java java/util/jar/JarFile.java java/util/jar/JarInputStream.java java/util/jar/JarOutputStream.java java/util/jar/Manifest.java java/util/zip/Adler32.java java/util/zip/CRC32.java java/util/zip/CheckedInputStream.java java/util/zip/CheckedOutputStream.java java/util/zip/Checksum.java java/util/zip/DataFormatException.java java/util/zip/Deflater.java java/util/zip/DeflaterOutputStream.java    java/util/zip/GZIPInputStream.java java/util/zip/GZIPOutputStream.java java/util/zip/Inflater.java java/util/zip/InflaterInputStream.java java/util/zip/ZipConstants.java       java/util/zip/ZipEntry.java java/util/zip/ZipException.java     java/util/zip/ZipFile.java java/util/zip/ZipInputStream.java java/util/zip/ZipOutputStream.java org/w3c/dom/Attr.java org/w3c/dom/CDATASection.java org/w3c/dom/CharacterData.java org/w3c/dom/Comment.java org/w3c/dom/DOMException.java org/w3c/dom/DOMImplementation.java org/w3c/dom/Document.java org/w3c/dom/DocumentFragment.java org/w3c/dom/DocumentType.java org/w3c/dom/Element.java org/w3c/dom/Entity.java org/w3c/dom/EntityReference.java org/w3c/dom/NamedNodeMap.java org/w3c/dom/Node.java org/w3c/dom/NodeList.java org/w3c/dom/Notation.java org/w3c/dom/ProcessingInstruction.java org/w3c/dom/Text.java org/w3c/dom/ranges/DocumentRange.java org/w3c/dom/ranges/Range.java org/w3c/dom/ranges/RangeException.java org/w3c/dom/traversal/DocumentTraversal.java org/w3c/dom/traversal/NodeFilter.java org/w3c/dom/traversal/NodeIterator.java org/w3c/dom/traversal/TreeWalker.java org/xml/sax/ext/DeclHandler.java org/xml/sax/ext/LexicalHandler.java org/xml/sax/helpers/AttributeListImpl.java org/xml/sax/helpers/AttributesImpl.java org/xml/sax/helpers/DefaultHandler.java org/xml/sax/helpers/LocatorImpl.java org/xml/sax/helpers/NamespaceSupport.java org/xml/sax/helpers/ParserAdapter.java org/xml/sax/helpers/ParserFactory.java org/xml/sax/helpers/XMLFilterImpl.java org/xml/sax/helpers/XMLReaderAdapter.java org/xml/sax/helpers/XMLReaderFactory.java org/xml/sax/AttributeList.java org/xml/sax/Attributes.java org/xml/sax/ContentHandler.java org/xml/sax/DTDHandler.java org/xml/sax/DocumentHandler.java org/xml/sax/EntityResolver.java org/xml/sax/ErrorHandler.java org/xml/sax/HandlerBase.java org/xml/sax/InputSource.java org/xml/sax/Locator.java org/xml/sax/Parser.java org/xml/sax/SAXException.java org/xml/sax/SAXNotRecognizedException.java org/xml/sax/SAXNotSupportedException.java org/xml/sax/SAXParseException.java org/xml/sax/XMLFilter.java org/xml/sax/XMLReader.java $(awt_java_source_files) $(convert_source_files)
+awt_java_source_files = \
+gnu/awt/LightweightRedirector.java \
+gnu/awt/j2d/AbstractGraphicsState.java \
+gnu/awt/j2d/DirectRasterGraphics.java \
+gnu/awt/j2d/Graphics2DImpl.java \
+gnu/awt/j2d/IntegerGraphicsState.java \
+gnu/awt/j2d/MappedRaster.java \
+gnu/gcj/awt/BitMaskExtent.java \
+gnu/gcj/awt/Buffers.java \
+gnu/gcj/awt/ComponentDataBlitOp.java \
+gnu/gcj/awt/GLightweightPeer.java \
+gnu/java/beans/editors/ColorEditor.java        \
+gnu/java/beans/editors/FontEditor.java \
+gnu/java/beans/editors/NativeBooleanEditor.java        \
+gnu/java/beans/editors/NativeByteEditor.java \
+gnu/java/beans/editors/NativeDoubleEditor.java \
+gnu/java/beans/editors/NativeFloatEditor.java \
+gnu/java/beans/editors/NativeIntEditor.java \
+gnu/java/beans/editors/NativeLongEditor.java \
+gnu/java/beans/editors/NativeShortEditor.java \
+gnu/java/beans/editors/StringEditor.java \
+gnu/java/beans/info/ComponentBeanInfo.java \
+gnu/java/beans/BeanInfoEmbryo.java \
+gnu/java/beans/EmptyBeanInfo.java \
+gnu/java/beans/ExplicitBeanInfo.java \
+gnu/java/beans/IntrospectionIncubator.java \
+java/applet/Applet.java \
+java/applet/AppletStub.java \
+java/applet/AppletContext.java \
+java/applet/AudioClip.java \
+java/awt/AWTError.java \
+java/awt/AWTEvent.java \
+java/awt/AWTEventMulticaster.java \
+java/awt/AWTException.java \
+java/awt/AWTPermission.java \
+java/awt/ActiveEvent.java \
+java/awt/Adjustable.java \
+java/awt/BorderLayout.java \
+java/awt/Button.java \
+java/awt/Canvas.java \
+java/awt/CardLayout.java \
+java/awt/Checkbox.java \
+java/awt/CheckboxGroup.java \
+java/awt/CheckboxMenuItem.java \
+java/awt/Choice.java \
+java/awt/Color.java \
+java/awt/Component.java        \
+java/awt/ComponentOrientation.java \
+java/awt/Container.java        \
+java/awt/Cursor.java \
+java/awt/Dialog.java \
+java/awt/Dimension.java        \
+java/awt/Event.java \
+java/awt/EventDispatchThread.java \
+java/awt/EventQueue.java \
+java/awt/FileDialog.java \
+java/awt/FlowLayout.java \
+java/awt/Font.java \
+java/awt/FontMetrics.java \
+java/awt/Frame.java \
+java/awt/Graphics.java \
+java/awt/Graphics2D.java \
+java/awt/GraphicsConfiguration.java \
+java/awt/GridBagConstraints.java \
+java/awt/GridLayout.java \
+java/awt/IllegalComponentStateException.java \
+java/awt/Image.java \
+java/awt/Insets.java \
+java/awt/ItemSelectable.java \
+java/awt/Label.java \
+java/awt/LayoutManager.java \
+java/awt/LayoutManager2.java \
+java/awt/List.java \
+java/awt/Menu.java \
+java/awt/MenuBar.java \
+java/awt/MenuComponent.java \
+java/awt/MenuContainer.java \
+java/awt/MenuItem.java \
+java/awt/MenuShortcut.java \
+java/awt/Paint.java \
+java/awt/PaintContext.java \
+java/awt/Panel.java \
+java/awt/Point.java \
+java/awt/Polygon.java \
+java/awt/PopupMenu.java        \
+java/awt/Rectangle.java        \
+java/awt/RenderingHints.java \
+java/awt/ScrollPane.java \
+java/awt/Scrollbar.java        \
+java/awt/Shape.java \
+java/awt/SystemColor.java \
+java/awt/TextArea.java \
+java/awt/TextComponent.java \
+java/awt/TextField.java        \
+java/awt/Toolkit.java \
+java/awt/Transparency.java \
+java/awt/Window.java \
+java/awt/color/ColorSpace.java \
+java/awt/color/ICC_ColorSpace.java \
+java/awt/color/ICC_Profile.java        \
+java/awt/datatransfer/Clipboard.java \
+java/awt/event/AWTEventListener.java \
+java/awt/event/ActionEvent.java        \
+java/awt/event/ActionListener.java \
+java/awt/event/AdjustmentEvent.java \
+java/awt/event/AdjustmentListener.java \
+java/awt/event/ComponentAdapter.java \
+java/awt/event/ComponentEvent.java \
+java/awt/event/ComponentListener.java \
+java/awt/event/ContainerAdapter.java \
+java/awt/event/ContainerEvent.java \
+java/awt/event/ContainerListener.java \
+java/awt/event/FocusAdapter.java \
+java/awt/event/FocusEvent.java \
+java/awt/event/FocusListener.java \
+java/awt/event/HierarchyBoundsAdapter.java \
+java/awt/event/HierarchyBoundsListener.java \
+java/awt/event/HierarchyEvent.java \
+java/awt/event/HierarchyListener.java \
+java/awt/event/InputEvent.java \
+java/awt/event/InputMethodEvent.java \
+java/awt/event/InputMethodListener.java        \
+java/awt/event/InvocationEvent.java \
+java/awt/event/ItemEvent.java \
+java/awt/event/ItemListener.java \
+java/awt/event/KeyAdapter.java \
+java/awt/event/KeyEvent.java \
+java/awt/event/KeyListener.java        \
+java/awt/event/MouseAdapter.java \
+java/awt/event/MouseEvent.java \
+java/awt/event/MouseListener.java \
+java/awt/event/MouseMotionAdapter.java \
+java/awt/event/MouseMotionListener.java        \
+java/awt/event/PaintEvent.java \
+java/awt/event/TextEvent.java \
+java/awt/event/TextListener.java \
+java/awt/event/WindowAdapter.java \
+java/awt/event/WindowEvent.java        \
+java/awt/event/WindowListener.java \
+java/awt/geom/AffineTransform.java \
+java/awt/geom/Dimension2D.java \
+java/awt/geom/Ellipse2D.java \
+java/awt/geom/IllegalPathStateException.java \
+java/awt/geom/Line2D.java \
+java/awt/geom/NoninvertibleTransformException.java \
+java/awt/geom/PathIterator.java        \
+java/awt/geom/Point2D.java \
+java/awt/geom/Rectangle2D.java \
+java/awt/geom/RectangularShape.java \
+java/awt/geom/RoundRectangle2D.java \
+java/awt/image/BufferedImage.java \
+java/awt/image/ColorModel.java \
+java/awt/image/ComponentColorModel.java        \
+java/awt/image/ComponentSampleModel.java \
+java/awt/image/DataBuffer.java \
+java/awt/image/DataBufferByte.java \
+java/awt/image/DataBufferInt.java \
+java/awt/image/DataBufferUShort.java \
+java/awt/image/DirectColorModel.java \
+java/awt/image/ImageConsumer.java \
+java/awt/image/ImageObserver.java \
+java/awt/image/ImageProducer.java \
+java/awt/image/IndexColorModel.java \
+java/awt/image/PackedColorModel.java \
+java/awt/image/Raster.java \
+java/awt/image/RasterOp.java \
+java/awt/image/SampleModel.java        \
+java/awt/image/SinglePixelPackedSampleModel.java \
+java/awt/image/WritableRaster.java \
+java/awt/peer/ButtonPeer.java \
+java/awt/peer/CanvasPeer.java \
+java/awt/peer/CheckboxMenuItemPeer.java        \
+java/awt/peer/CheckboxPeer.java        \
+java/awt/peer/ChoicePeer.java \
+java/awt/peer/ComponentPeer.java \
+java/awt/peer/ContainerPeer.java \
+java/awt/peer/DialogPeer.java \
+java/awt/peer/FileDialogPeer.java \
+java/awt/peer/FontPeer.java \
+java/awt/peer/FramePeer.java \
+java/awt/peer/LabelPeer.java \
+java/awt/peer/LightweightPeer.java \
+java/awt/peer/ListPeer.java \
+java/awt/peer/MenuBarPeer.java \
+java/awt/peer/MenuComponentPeer.java \
+java/awt/peer/MenuItemPeer.java        \
+java/awt/peer/MenuPeer.java \
+java/awt/peer/PanelPeer.java \
+java/awt/peer/PopupMenuPeer.java \
+java/awt/peer/ScrollPanePeer.java \
+java/awt/peer/ScrollbarPeer.java \
+java/awt/peer/TextAreaPeer.java        \
+java/awt/peer/TextComponentPeer.java \
+java/awt/peer/TextFieldPeer.java \
+java/awt/peer/WindowPeer.java \
+java/beans/beancontext/BeanContext.java        \
+java/beans/beancontext/BeanContextChild.java \
+java/beans/beancontext/BeanContextChildComponentProxy.java \
+java/beans/beancontext/BeanContextChildSupport.java \
+java/beans/beancontext/BeanContextContainerProxy.java \
+java/beans/beancontext/BeanContextEvent.java \
+java/beans/beancontext/BeanContextMembershipEvent.java \
+java/beans/beancontext/BeanContextMembershipListener.java \
+java/beans/beancontext/BeanContextProxy.java \
+java/beans/beancontext/BeanContextServiceAvailableEvent.java \
+java/beans/beancontext/BeanContextServiceProvider.java \
+java/beans/beancontext/BeanContextServiceProviderBeanInfo.java \
+java/beans/beancontext/BeanContextServiceRevokedEvent.java \
+java/beans/beancontext/BeanContextServiceRevokedListener.java \
+java/beans/beancontext/BeanContextServices.java        \
+java/beans/beancontext/BeanContextServicesListener.java        \
+java/beans/BeanDescriptor.java \
+java/beans/BeanInfo.java \
+java/beans/Beans.java \
+java/beans/Customizer.java \
+java/beans/DesignMode.java \
+java/beans/EventSetDescriptor.java \
+java/beans/FeatureDescriptor.java \
+java/beans/IndexedPropertyDescriptor.java \
+java/beans/IntrospectionException.java \
+java/beans/Introspector.java \
+java/beans/MethodDescriptor.java \
+java/beans/ParameterDescriptor.java \
+java/beans/PropertyChangeEvent.java \
+java/beans/PropertyChangeListener.java \
+java/beans/PropertyChangeSupport.java \
+java/beans/PropertyDescriptor.java \
+java/beans/PropertyEditor.java \
+java/beans/PropertyEditorManager.java \
+java/beans/PropertyEditorSupport.java \
+java/beans/PropertyVetoException.java \
+java/beans/SimpleBeanInfo.java \
+java/beans/VetoableChangeListener.java \
+java/beans/VetoableChangeSupport.java \
+java/beans/Visibility.java
+
+
+rmi_java_source_files = \
+java/rmi/activation/Activatable.java \
+java/rmi/activation/ActivateFailedException.java \
+java/rmi/activation/ActivationDesc.java        \
+java/rmi/activation/ActivationException.java \
+java/rmi/activation/ActivationGroup.java \
+java/rmi/activation/ActivationGroupDesc.java \
+java/rmi/activation/ActivationGroupID.java \
+java/rmi/activation/ActivationID.java \
+java/rmi/activation/ActivationInstantiator.java        \
+java/rmi/activation/ActivationMonitor.java \
+java/rmi/activation/ActivationSystem.java \
+java/rmi/activation/Activator.java \
+java/rmi/activation/UnknownGroupException.java \
+java/rmi/activation/UnknownObjectException.java        \
+java/rmi/AccessException.java \
+java/rmi/AlreadyBoundException.java \
+java/rmi/ConnectException.java \
+java/rmi/ConnectIOException.java \
+java/rmi/MarshalException.java \
+java/rmi/MarshalledObject.java \
+java/rmi/Naming.java \
+java/rmi/NoSuchObjectException.java \
+java/rmi/NotBoundException.java        \
+java/rmi/RMISecurityException.java \
+java/rmi/RMISecurityManager.java \
+java/rmi/Remote.java \
+java/rmi/RemoteException.java \
+java/rmi/ServerError.java \
+java/rmi/ServerException.java \
+java/rmi/ServerRuntimeException.java \
+java/rmi/StubNotFoundException.java \
+java/rmi/UnexpectedException.java \
+java/rmi/UnknownHostException.java \
+java/rmi/UnmarshalException.java \
+java/rmi/dgc/DGC.java \
+java/rmi/dgc/Lease.java        \
+java/rmi/dgc/VMID.java \
+java/rmi/registry/LocateRegistry.java \
+java/rmi/registry/Registry.java        \
+java/rmi/registry/RegistryHandler.java \
+java/rmi/server/ExportException.java \
+java/rmi/server/LoaderHandler.java \
+java/rmi/server/LogStream.java \
+java/rmi/server/ObjID.java \
+java/rmi/server/Operation.java \
+java/rmi/server/RMIClassLoader.java \
+java/rmi/server/RMIClientSocketFactory.java \
+java/rmi/server/RMIFailureHandler.java \
+java/rmi/server/RMIServerSocketFactory.java \
+java/rmi/server/RMISocketFactory.java \
+java/rmi/server/RemoteCall.java        \
+java/rmi/server/RemoteObject.java \
+java/rmi/server/RemoteRef.java \
+java/rmi/server/RemoteServer.java \
+java/rmi/server/RemoteStub.java        \
+java/rmi/server/ServerCloneException.java \
+java/rmi/server/ServerNotActiveException.java \
+java/rmi/server/ServerRef.java \
+java/rmi/server/Skeleton.java \
+java/rmi/server/SkeletonMismatchException.java \
+java/rmi/server/SkeletonNotFoundException.java \
+java/rmi/server/SocketSecurityException.java \
+java/rmi/server/UID.java \
+java/rmi/server/UnicastRemoteObject.java \
+java/rmi/server/Unreferenced.java \
+gnu/java/rmi/dgc/DGCImpl.java \
+gnu/java/rmi/dgc/DGCImpl_Skel.java \
+gnu/java/rmi/dgc/DGCImpl_Stub.java \
+gnu/java/rmi/registry/RegistryImpl.java        \
+gnu/java/rmi/registry/RegistryImpl_Skel.java \
+gnu/java/rmi/registry/RegistryImpl_Stub.java \
+gnu/java/rmi/rmic/RMIC.java \
+gnu/java/rmi/rmic/TabbedWriter.java \
+gnu/java/rmi/server/ProtocolConstants.java \
+gnu/java/rmi/server/RMIDefaultSocketFactory.java \
+gnu/java/rmi/server/RMIHashes.java \
+gnu/java/rmi/server/RMIObjectInputStream.java \
+gnu/java/rmi/server/RMIObjectOutputStream.java \
+gnu/java/rmi/server/UnicastConnection.java \
+gnu/java/rmi/server/UnicastConnectionManager.java \
+gnu/java/rmi/server/UnicastRef.java \
+gnu/java/rmi/server/UnicastRemoteCall.java \
+gnu/java/rmi/server/UnicastRemoteStub.java \
+gnu/java/rmi/server/UnicastServer.java \
+gnu/java/rmi/server/UnicastServerRef.java
+
+
+built_java_source_files = java/lang/ConcreteProcess.java \
+                          gnu/classpath/Configuration.java
+
+
+core_java_source_files = \
+java/lang/AbstractMethodError.java \
+java/lang/ArithmeticException.java \
+java/lang/ArrayIndexOutOfBoundsException.java \
+java/lang/ArrayStoreException.java \
+java/lang/Boolean.java \
+java/lang/Byte.java \
+java/lang/Character.java \
+java/lang/ClassCastException.java \
+java/lang/ClassCircularityError.java \
+java/lang/ClassFormatError.java        \
+java/lang/ClassLoader.java \
+java/lang/ClassNotFoundException.java \
+java/lang/CloneNotSupportedException.java \
+java/lang/Cloneable.java \
+java/lang/Comparable.java \
+java/lang/Compiler.java        \
+java/lang/Double.java \
+java/lang/Error.java \
+java/lang/Exception.java \
+java/lang/ExceptionInInitializerError.java \
+java/lang/Float.java \
+java/lang/IllegalAccessError.java \
+java/lang/IllegalAccessException.java \
+java/lang/IllegalArgumentException.java        \
+java/lang/IllegalMonitorStateException.java \
+java/lang/IllegalStateException.java \
+java/lang/IllegalThreadStateException.java \
+java/lang/IncompatibleClassChangeError.java \
+java/lang/IndexOutOfBoundsException.java \
+java/lang/InstantiationError.java \
+java/lang/InstantiationException.java \
+java/lang/Integer.java \
+java/lang/InternalError.java \
+java/lang/InterruptedException.java \
+java/lang/LinkageError.java \
+java/lang/Long.java \
+java/lang/Math.java \
+java/lang/NegativeArraySizeException.java \
+java/lang/NoClassDefFoundError.java \
+java/lang/NoSuchFieldError.java        \
+java/lang/NoSuchFieldException.java \
+java/lang/NoSuchMethodError.java \
+java/lang/NoSuchMethodException.java \
+java/lang/NullPointerException.java \
+java/lang/Number.java \
+java/lang/NumberFormatException.java \
+java/lang/OutOfMemoryError.java        \
+java/lang/Package.java \
+java/lang/Process.java \
+java/lang/Runnable.java        \
+java/lang/Runtime.java \
+java/lang/RuntimeException.java        \
+java/lang/RuntimePermission.java \
+java/lang/SecurityException.java \
+java/lang/SecurityManager.java \
+java/lang/Short.java \
+java/lang/StackOverflowError.java \
+java/lang/String.java \
+java/lang/StringBuffer.java \
+java/lang/StringIndexOutOfBoundsException.java \
+java/lang/System.java \
+java/lang/Thread.java \
+java/lang/ThreadDeath.java \
+java/lang/ThreadGroup.java \
+java/lang/ThreadLocal.java \
+java/lang/Throwable.java \
+java/lang/UnknownError.java \
+java/lang/UnsatisfiedLinkError.java \
+java/lang/UnsupportedOperationException.java \
+java/lang/VerifyError.java \
+java/lang/VirtualMachineError.java \
+java/lang/VMClassLoader.java \
+java/lang/Void.java \
+java/io/BufferedInputStream.java \
+java/io/BufferedOutputStream.java \
+java/io/BufferedReader.java \
+java/io/BufferedWriter.java \
+java/io/ByteArrayInputStream.java \
+java/io/ByteArrayOutputStream.java \
+java/io/CharArrayReader.java \
+java/io/CharArrayWriter.java \
+java/io/CharConversionException.java \
+java/io/DataInput.java \
+java/io/DataInputStream.java \
+java/io/DataOutput.java        \
+java/io/DataOutputStream.java \
+java/io/EOFException.java \
+java/io/Externalizable.java \
+java/io/File.java \
+java/io/FileDescriptor.java \
+java/io/FileFilter.java \
+java/io/FileInputStream.java \
+java/io/FileNotFoundException.java \
+java/io/FileOutputStream.java \
+java/io/FilePermission.java \
+java/io/FileReader.java        \
+java/io/FileWriter.java        \
+java/io/FilenameFilter.java \
+java/io/FilterInputStream.java \
+java/io/FilterOutputStream.java        \
+java/io/FilterReader.java \
+java/io/FilterWriter.java \
+java/io/IOException.java \
+java/io/InputStream.java \
+java/io/InputStreamReader.java \
+java/io/InterruptedIOException.java \
+java/io/InvalidClassException.java \
+java/io/InvalidObjectException.java \
+java/io/LineNumberInputStream.java \
+java/io/LineNumberReader.java \
+java/io/NotActiveException.java        \
+java/io/NotSerializableException.java \
+java/io/ObjectInput.java \
+java/io/ObjectInputStream.java \
+java/io/ObjectInputValidation.java \
+java/io/ObjectOutput.java \
+java/io/ObjectOutputStream.java        \
+java/io/ObjectStreamClass.java \
+java/io/ObjectStreamConstants.java \
+java/io/ObjectStreamException.java \
+java/io/ObjectStreamField.java \
+java/io/OptionalDataException.java \
+java/io/OutputStream.java \
+java/io/OutputStreamWriter.java        \
+java/io/PipedInputStream.java \
+java/io/PipedOutputStream.java \
+java/io/PipedReader.java \
+java/io/PipedWriter.java \
+java/io/PrintStream.java \
+java/io/PrintWriter.java \
+java/io/PushbackInputStream.java \
+java/io/PushbackReader.java \
+java/io/RandomAccessFile.java \
+java/io/Reader.java \
+java/io/SequenceInputStream.java \
+java/io/Serializable.java \
+java/io/SerializablePermission.java \
+java/io/StreamCorruptedException.java \
+java/io/StreamTokenizer.java \
+java/io/StringBufferInputStream.java \
+java/io/StringReader.java \
+java/io/StringWriter.java \
+java/io/SyncFailedException.java \
+java/io/UTFDataFormatException.java \
+java/io/UnsupportedEncodingException.java \
+java/io/WriteAbortedException.java \
+java/io/Writer.java \
+java/util/AbstractCollection.java \
+java/util/AbstractList.java \
+java/util/AbstractMap.java \
+java/util/AbstractSequentialList.java \
+java/util/AbstractSet.java \
+java/util/ArrayList.java \
+java/util/Arrays.java \
+java/util/BasicMapEntry.java \
+java/util/BitSet.java \
+java/util/Calendar.java        \
+java/util/Collection.java \
+java/util/Collections.java \
+java/util/Comparator.java \
+java/util/ConcurrentModificationException.java \
+java/util/Date.java \
+java/util/Dictionary.java \
+java/util/EmptyStackException.java \
+java/util/Enumeration.java \
+java/util/EventListener.java \
+java/util/EventObject.java \
+java/util/GregorianCalendar.java \
+java/util/HashMap.java \
+java/util/HashSet.java \
+java/util/Hashtable.java \
+java/util/IdentityHashMap.java \
+java/util/Iterator.java        \
+java/util/LinkedList.java \
+java/util/List.java \
+java/util/ListIterator.java \
+java/util/ListResourceBundle.java \
+java/util/Locale.java \
+java/util/Map.java \
+java/util/MissingResourceException.java        \
+java/util/NoSuchElementException.java \
+java/util/Observable.java \
+java/util/Observer.java        \
+java/util/Properties.java \
+java/util/PropertyPermission.java \
+java/util/PropertyResourceBundle.java \
+java/util/Random.java \
+java/util/ResourceBundle.java \
+java/util/Set.java \
+java/util/SimpleTimeZone.java \
+java/util/SortedMap.java \
+java/util/SortedSet.java \
+java/util/Stack.java \
+java/util/StringTokenizer.java \
+java/util/TimeZone.java        \
+java/util/Timer.java \
+java/util/TimerTask.java \
+java/util/TreeMap.java \
+java/util/TreeSet.java \
+java/util/TooManyListenersException.java \
+java/util/Vector.java \
+java/util/WeakHashMap.java
+
+
+ordinary_java_source_files = $(core_java_source_files) \
+gnu/gcj/RawData.java \
+gnu/gcj/io/DefaultMimeTypes.java \
+gnu/gcj/io/MimeTypes.java \
+gnu/gcj/io/SimpleSHSStream.java        \
+gnu/gcj/math/MPN.java \
+gnu/gcj/protocol/file/Connection.java \
+gnu/gcj/protocol/file/Handler.java \
+gnu/gcj/protocol/http/Connection.java \
+gnu/gcj/protocol/http/Handler.java \
+gnu/gcj/protocol/jar/Connection.java \
+gnu/gcj/protocol/jar/Handler.java \
+gnu/gcj/runtime/FileDeleter.java \
+gnu/gcj/runtime/FirstThread.java \
+gnu/gcj/runtime/VMClassLoader.java \
+gnu/gcj/text/BaseBreakIterator.java \
+gnu/gcj/text/CharacterBreakIterator.java \
+gnu/gcj/text/LineBreakIterator.java \
+gnu/gcj/text/LocaleData_en.java        \
+gnu/gcj/text/LocaleData_en_US.java \
+gnu/gcj/text/SentenceBreakIterator.java        \
+gnu/gcj/text/WordBreakIterator.java \
+gnu/gcj/util/EnumerationChain.java \
+gnu/java/io/ClassLoaderObjectInputStream.java \
+gnu/java/io/NullOutputStream.java \
+gnu/java/io/ObjectIdentityWrapper.java \
+gnu/java/lang/ArrayHelper.java \
+gnu/java/lang/ClassHelper.java \
+gnu/java/lang/reflect/TypeSignature.java \
+gnu/java/locale/Calendar.java \
+gnu/java/locale/Calendar_de.java \
+gnu/java/locale/Calendar_en.java \
+gnu/java/locale/Calendar_nl.java \
+gnu/java/security/provider/DefaultPolicy.java \
+gnu/java/security/provider/Gnu.java \
+gnu/java/security/provider/SHA.java \
+gnu/java/security/provider/SHA1PRNG.java \
+java/lang/ref/PhantomReference.java \
+java/lang/ref/Reference.java \
+java/lang/ref/ReferenceQueue.java \
+java/lang/ref/SoftReference.java \
+java/lang/ref/WeakReference.java \
+java/lang/reflect/AccessibleObject.java        \
+java/lang/reflect/Array.java \
+java/lang/reflect/Constructor.java \
+java/lang/reflect/Field.java \
+java/lang/reflect/InvocationTargetException.java \
+java/lang/reflect/Member.java \
+java/lang/reflect/Method.java \
+java/lang/reflect/Modifier.java        \
+java/lang/reflect/ReflectPermission.java \
+java/math/BigDecimal.java \
+java/math/BigInteger.java \
+java/net/BindException.java \
+java/net/ConnectException.java \
+java/net/ContentHandler.java \
+java/net/ContentHandlerFactory.java \
+java/net/DatagramPacket.java \
+java/net/DatagramSocket.java \
+java/net/DatagramSocketImpl.java \
+java/net/FileNameMap.java \
+java/net/HttpURLConnection.java        \
+java/net/InetAddress.java \
+java/net/JarURLConnection.java \
+java/net/MalformedURLException.java \
+java/net/MulticastSocket.java \
+java/net/NetPermission.java \
+java/net/NoRouteToHostException.java \
+java/net/PlainDatagramSocketImpl.java \
+java/net/PlainSocketImpl.java \
+java/net/ProtocolException.java        \
+java/net/ServerSocket.java \
+java/net/Socket.java \
+java/net/SocketException.java \
+java/net/SocketImpl.java \
+java/net/SocketImplFactory.java        \
+java/net/SocketOptions.java \
+java/net/SocketPermission.java \
+java/net/URL.java \
+java/net/URLClassLoader.java \
+java/net/URLConnection.java \
+java/net/URLDecoder.java \
+java/net/URLEncoder.java \
+java/net/URLStreamHandler.java \
+java/net/URLStreamHandlerFactory.java \
+java/net/UnknownHostException.java \
+java/net/UnknownServiceException.java \
+java/security/AccessControlContext.java \
+java/security/AccessControlException.java \
+java/security/AccessController.java \
+java/security/AlgorithmParameterGenerator.java \
+java/security/AlgorithmParameters.java \
+java/security/AlgorithmParameterGeneratorSpi.java \
+java/security/AlgorithmParametersSpi.java \
+java/security/AllPermission.java \
+java/security/BasicPermission.java \
+java/security/Certificate.java \
+java/security/CodeSource.java \
+java/security/DigestException.java \
+java/security/DigestOutputStream.java \
+java/security/DummyKeyPairGenerator.java \
+java/security/DummySignature.java \
+java/security/DigestInputStream.java \
+java/security/DomainCombiner.java \
+java/security/DummyMessageDigest.java \
+java/security/GeneralSecurityException.java \
+java/security/Guard.java \
+java/security/GuardedObject.java \
+java/security/Identity.java \
+java/security/IdentityScope.java \
+java/security/InvalidAlgorithmParameterException.java \
+java/security/InvalidKeyException.java \
+java/security/InvalidParameterException.java \
+java/security/Key.java \
+java/security/KeyFactorySpi.java \
+java/security/KeyPairGenerator.java \
+java/security/KeyStoreException.java \
+java/security/KeyException.java \
+java/security/KeyManagementException.java \
+java/security/KeyPairGeneratorSpi.java \
+java/security/KeyStoreSpi.java \
+java/security/KeyFactory.java \
+java/security/KeyPair.java \
+java/security/KeyStore.java \
+java/security/MessageDigest.java \
+java/security/MessageDigestSpi.java \
+java/security/NoSuchAlgorithmException.java \
+java/security/NoSuchProviderException.java \
+java/security/Permission.java \
+java/security/Principal.java \
+java/security/PrivilegedExceptionAction.java \
+java/security/PublicKey.java \
+java/security/PermissionCollection.java \
+java/security/PrivateKey.java \
+java/security/ProtectionDomain.java \
+java/security/Permissions.java \
+java/security/PrivilegedAction.java \
+java/security/Provider.java \
+java/security/Policy.java \
+java/security/PrivilegedActionException.java \
+java/security/ProviderException.java \
+java/security/SecureClassLoader.java \
+java/security/SecureRandomSpi.java \
+java/security/SecurityPermission.java \
+java/security/SignatureException.java \
+java/security/SignedObject.java \
+java/security/SecureRandom.java \
+java/security/Security.java \
+java/security/Signature.java \
+java/security/SignatureSpi.java \
+java/security/Signer.java \
+java/security/UnrecoverableKeyException.java \
+java/security/UnresolvedPermission.java \
+java/security/acl/Acl.java \
+java/security/acl/AclNotFoundException.java \
+java/security/acl/LastOwnerException.java \
+java/security/acl/Owner.java \
+java/security/acl/AclEntry.java \
+java/security/acl/Group.java \
+java/security/acl/NotOwnerException.java \
+java/security/acl/Permission.java \
+java/security/cert/CRL.java \
+java/security/cert/CRLException.java \
+java/security/cert/Certificate.java \
+java/security/cert/CertificateEncodingException.java \
+java/security/cert/CertificateException.java \
+java/security/cert/CertificateExpiredException.java \
+java/security/cert/CertificateFactory.java \
+java/security/cert/CertificateFactorySpi.java \
+java/security/cert/CertificateNotYetValidException.java \
+java/security/cert/CertificateParsingException.java \
+java/security/cert/X509CRL.java \
+java/security/cert/X509CRLEntry.java \
+java/security/cert/X509Certificate.java \
+java/security/cert/X509Extension.java \
+java/security/interfaces/DSAKey.java \
+java/security/interfaces/DSAKeyPairGenerator.java \
+java/security/interfaces/DSAParams.java \
+java/security/interfaces/DSAPrivateKey.java \
+java/security/interfaces/DSAPublicKey.java \
+java/security/interfaces/RSAKey.java \
+java/security/interfaces/RSAPrivateCrtKey.java \
+java/security/interfaces/RSAPrivateKey.java \
+java/security/interfaces/RSAPublicKey.java \
+java/security/spec/AlgorithmParameterSpec.java \
+java/security/spec/DSAParameterSpec.java \
+java/security/spec/DSAPrivateKeySpec.java \
+java/security/spec/DSAPublicKeySpec.java \
+java/security/spec/EncodedKeySpec.java \
+java/security/spec/InvalidKeySpecException.java \
+java/security/spec/InvalidParameterSpecException.java \
+java/security/spec/KeySpec.java \
+java/security/spec/PKCS8EncodedKeySpec.java \
+java/security/spec/RSAKeyGenParameterSpec.java \
+java/security/spec/RSAPrivateCrtKeySpec.java \
+java/security/spec/RSAPrivateKeySpec.java \
+java/security/spec/RSAPublicKeySpec.java \
+java/security/spec/X509EncodedKeySpec.java \
+java/sql/Array.java \
+java/sql/BatchUpdateException.java \
+java/sql/Blob.java \
+java/sql/CallableStatement.java        \
+java/sql/Clob.java \
+java/sql/Connection.java \
+java/sql/DataTruncation.java \
+java/sql/DatabaseMetaData.java \
+java/sql/Date.java \
+java/sql/Driver.java \
+java/sql/DriverManager.java \
+java/sql/DriverPropertyInfo.java \
+java/sql/PreparedStatement.java        \
+java/sql/Ref.java \
+java/sql/ResultSet.java        \
+java/sql/ResultSetMetaData.java        \
+java/sql/SQLData.java \
+java/sql/SQLException.java \
+java/sql/SQLInput.java \
+java/sql/SQLOutput.java \
+java/sql/SQLWarning.java \
+java/sql/Statement.java        \
+java/sql/Struct.java   \
+java/sql/Time.java \
+java/sql/Timestamp.java        \
+java/sql/Types.java \
+java/text/BreakIterator.java \
+java/text/CharacterIterator.java \
+java/text/ChoiceFormat.java \
+java/text/CollationElementIterator.java        \
+java/text/CollationKey.java \
+java/text/Collator.java        \
+java/text/DateFormat.java \
+java/text/DateFormatSymbols.java \
+java/text/DecimalFormat.java \
+java/text/DecimalFormatSymbols.java \
+java/text/FieldPosition.java \
+java/text/Format.java \
+java/text/MessageFormat.java \
+java/text/NumberFormat.java \
+java/text/ParseException.java \
+java/text/ParsePosition.java \
+java/text/RuleBasedCollator.java \
+java/text/SimpleDateFormat.java        \
+java/text/StringCharacterIterator.java \
+java/util/jar/Attributes.java \
+java/util/jar/JarEntry.java \
+java/util/jar/JarException.java \
+java/util/jar/JarFile.java \
+java/util/jar/JarInputStream.java \
+java/util/jar/JarOutputStream.java \
+java/util/jar/Manifest.java \
+java/util/zip/Adler32.java \
+java/util/zip/CRC32.java \
+java/util/zip/CheckedInputStream.java \
+java/util/zip/CheckedOutputStream.java \
+java/util/zip/Checksum.java \
+java/util/zip/DataFormatException.java \
+java/util/zip/Deflater.java \
+java/util/zip/DeflaterOutputStream.java        \
+java/util/zip/GZIPInputStream.java \
+java/util/zip/GZIPOutputStream.java \
+java/util/zip/Inflater.java \
+java/util/zip/InflaterInputStream.java \
+java/util/zip/ZipConstants.java        \
+java/util/zip/ZipEntry.java \
+java/util/zip/ZipException.java        \
+java/util/zip/ZipFile.java \
+java/util/zip/ZipInputStream.java \
+java/util/zip/ZipOutputStream.java \
+org/w3c/dom/Attr.java \
+org/w3c/dom/CDATASection.java \
+org/w3c/dom/CharacterData.java \
+org/w3c/dom/Comment.java \
+org/w3c/dom/DOMException.java \
+org/w3c/dom/DOMImplementation.java \
+org/w3c/dom/Document.java \
+org/w3c/dom/DocumentFragment.java \
+org/w3c/dom/DocumentType.java \
+org/w3c/dom/Element.java \
+org/w3c/dom/Entity.java \
+org/w3c/dom/EntityReference.java \
+org/w3c/dom/NamedNodeMap.java \
+org/w3c/dom/Node.java \
+org/w3c/dom/NodeList.java \
+org/w3c/dom/Notation.java \
+org/w3c/dom/ProcessingInstruction.java \
+org/w3c/dom/Text.java \
+org/w3c/dom/ranges/DocumentRange.java \
+org/w3c/dom/ranges/Range.java \
+org/w3c/dom/ranges/RangeException.java \
+org/w3c/dom/traversal/DocumentTraversal.java \
+org/w3c/dom/traversal/NodeFilter.java \
+org/w3c/dom/traversal/NodeIterator.java \
+org/w3c/dom/traversal/TreeWalker.java \
+org/xml/sax/ext/DeclHandler.java \
+org/xml/sax/ext/LexicalHandler.java \
+org/xml/sax/helpers/AttributeListImpl.java \
+org/xml/sax/helpers/AttributesImpl.java \
+org/xml/sax/helpers/DefaultHandler.java \
+org/xml/sax/helpers/LocatorImpl.java \
+org/xml/sax/helpers/NamespaceSupport.java \
+org/xml/sax/helpers/ParserAdapter.java \
+org/xml/sax/helpers/ParserFactory.java \
+org/xml/sax/helpers/XMLFilterImpl.java \
+org/xml/sax/helpers/XMLReaderAdapter.java \
+org/xml/sax/helpers/XMLReaderFactory.java \
+org/xml/sax/AttributeList.java \
+org/xml/sax/Attributes.java \
+org/xml/sax/ContentHandler.java \
+org/xml/sax/DTDHandler.java \
+org/xml/sax/DocumentHandler.java \
+org/xml/sax/EntityResolver.java \
+org/xml/sax/ErrorHandler.java \
+org/xml/sax/HandlerBase.java \
+org/xml/sax/InputSource.java \
+org/xml/sax/Locator.java \
+org/xml/sax/Parser.java \
+org/xml/sax/SAXException.java \
+org/xml/sax/SAXNotRecognizedException.java \
+org/xml/sax/SAXNotSupportedException.java \
+org/xml/sax/SAXParseException.java \
+org/xml/sax/XMLFilter.java \
+org/xml/sax/XMLReader.java \
+$(rmi_java_source_files) \
+$(awt_java_source_files) \
+$(convert_source_files)
 
 
 java_source_files = $(special_java_source_files) $(ordinary_java_source_files)
 
-c_source_files =    java/lang/dtoa.c        java/lang/k_rem_pio2.c  java/lang/s_tan.c         java/lang/e_acos.c      java/lang/k_sin.c       java/lang/strtod.c        java/lang/e_asin.c      java/lang/k_tan.c       java/lang/w_acos.c        java/lang/e_atan2.c     java/lang/mprec.c       java/lang/w_asin.c        java/lang/e_exp.c       java/lang/s_atan.c      java/lang/w_atan2.c       java/lang/e_fmod.c      java/lang/s_ceil.c      java/lang/w_exp.c         java/lang/e_log.c       java/lang/s_copysign.c  java/lang/w_fmod.c        java/lang/e_pow.c       java/lang/s_cos.c       java/lang/w_log.c         java/lang/e_rem_pio2.c  java/lang/s_fabs.c      java/lang/w_pow.c         java/lang/e_remainder.c java/lang/s_floor.c     java/lang/w_remainder.c   java/lang/e_scalb.c     java/lang/s_rint.c      java/lang/w_sqrt.c        java/lang/e_sqrt.c      java/lang/s_scalbn.c    java/lang/sf_rint.c       java/lang/k_cos.c       java/lang/s_sin.c       java/lang/sf_fabs.c
+c_source_files = \
+  java/lang/dtoa.c        java/lang/k_rem_pio2.c  java/lang/s_tan.c       \
+  java/lang/e_acos.c      java/lang/k_sin.c       java/lang/strtod.c      \
+  java/lang/e_asin.c      java/lang/k_tan.c       java/lang/w_acos.c      \
+  java/lang/e_atan2.c     java/lang/mprec.c       java/lang/w_asin.c      \
+  java/lang/e_exp.c       java/lang/s_atan.c      java/lang/w_atan2.c     \
+  java/lang/e_fmod.c      java/lang/s_ceil.c      java/lang/w_exp.c       \
+  java/lang/e_log.c       java/lang/s_copysign.c  java/lang/w_fmod.c      \
+  java/lang/e_pow.c       java/lang/s_cos.c       java/lang/w_log.c       \
+  java/lang/e_rem_pio2.c  java/lang/s_fabs.c      java/lang/w_pow.c       \
+  java/lang/e_remainder.c java/lang/s_floor.c     java/lang/w_remainder.c \
+  java/lang/e_scalb.c     java/lang/s_rint.c      java/lang/w_sqrt.c      \
+  java/lang/e_sqrt.c      java/lang/s_scalbn.c    java/lang/sf_rint.c     \
+  java/lang/k_cos.c       java/lang/s_sin.c       java/lang/sf_fabs.c
 
 
 #java/awt/natToolkit.cc
 
-nat_source_files =  gnu/gcj/convert/JIS0208_to_Unicode.cc gnu/gcj/convert/JIS0212_to_Unicode.cc gnu/gcj/convert/Unicode_to_JIS.cc gnu/gcj/convert/natIconv.cc gnu/gcj/convert/natInput_EUCJIS.cc gnu/gcj/convert/natInput_SJIS.cc gnu/gcj/convert/natOutput_EUCJIS.cc gnu/gcj/convert/natOutput_SJIS.cc gnu/gcj/io/natSimpleSHSStream.cc gnu/gcj/io/shs.cc gnu/gcj/runtime/natFirstThread.cc java/io/natFile.cc java/io/natFileDescriptor.cc java/io/natObjectInputStream.cc java/io/natObjectOutputStream.cc java/lang/natCharacter.cc java/lang/natClass.cc java/lang/natClassLoader.cc java/lang/natConcreteProcess.cc java/lang/natDouble.cc java/lang/natFloat.cc java/lang/natMath.cc java/lang/natObject.cc java/lang/natRuntime.cc     java/lang/natString.cc java/lang/natStringBuffer.cc java/lang/natSystem.cc java/lang/natThread.cc java/lang/natThrowable.cc java/lang/reflect/natArray.cc java/lang/reflect/natConstructor.cc java/lang/reflect/natField.cc java/lang/reflect/natMethod.cc java/net/natInetAddress.cc java/net/natPlainDatagramSocketImpl.cc java/net/natPlainSocketImpl.cc java/text/natCollator.cc java/util/zip/natDeflater.cc java/util/zip/natInflater.cc
-
-
-x_java_source_files =  gnu/gcj/xlib/Clip.java gnu/gcj/xlib/Colormap.java gnu/gcj/xlib/Display.java gnu/gcj/xlib/Drawable.java gnu/gcj/xlib/Font.java gnu/gcj/xlib/GC.java gnu/gcj/xlib/Pixmap.java gnu/gcj/xlib/Screen.java gnu/gcj/xlib/Visual.java gnu/gcj/xlib/WMSizeHints.java gnu/gcj/xlib/Window.java gnu/gcj/xlib/WindowAttributes.java gnu/gcj/xlib/XAnyEvent.java gnu/gcj/xlib/XButtonEvent.java gnu/gcj/xlib/XColor.java gnu/gcj/xlib/XConfigureEvent.java gnu/gcj/xlib/XConnectException.java gnu/gcj/xlib/XEvent.java gnu/gcj/xlib/XException.java gnu/gcj/xlib/XExposeEvent.java gnu/gcj/xlib/XID.java gnu/gcj/xlib/XImage.java gnu/gcj/xlib/XUnmapEvent.java gnu/awt/xlib/XCanvasPeer.java gnu/awt/xlib/XEventLoop.java gnu/awt/xlib/XEventQueue.java gnu/awt/xlib/XFontMetrics.java gnu/awt/xlib/XFramePeer.java gnu/awt/xlib/XGraphics.java gnu/awt/xlib/XGraphicsConfiguration.java gnu/awt/xlib/XPanelPeer.java gnu/awt/xlib/XToolkit.java
-
-
-x_nat_source_files =  gnu/gcj/xlib/natClip.cc gnu/gcj/xlib/natColormap.cc gnu/gcj/xlib/natDisplay.cc gnu/gcj/xlib/natDrawable.cc gnu/gcj/xlib/natFont.cc gnu/gcj/xlib/natGC.cc gnu/gcj/xlib/natPixmap.cc gnu/gcj/xlib/natScreen.cc gnu/gcj/xlib/natVisual.cc gnu/gcj/xlib/natWMSizeHints.cc gnu/gcj/xlib/natWindow.cc gnu/gcj/xlib/natWindowAttributes.cc gnu/gcj/xlib/natXAnyEvent.cc gnu/gcj/xlib/natXButtonEvent.cc gnu/gcj/xlib/natXColor.cc gnu/gcj/xlib/natXConfigureEvent.cc gnu/gcj/xlib/natXException.cc gnu/gcj/xlib/natXExposeEvent.cc gnu/gcj/xlib/natXImage.cc gnu/gcj/xlib/natXUnmapEvent.cc
+nat_source_files = \
+gnu/gcj/convert/JIS0208_to_Unicode.cc \
+gnu/gcj/convert/JIS0212_to_Unicode.cc \
+gnu/gcj/convert/Unicode_to_JIS.cc \
+gnu/gcj/convert/natIconv.cc \
+gnu/gcj/convert/natInput_EUCJIS.cc \
+gnu/gcj/convert/natInput_SJIS.cc \
+gnu/gcj/convert/natOutput_EUCJIS.cc \
+gnu/gcj/convert/natOutput_SJIS.cc \
+gnu/gcj/io/natSimpleSHSStream.cc \
+gnu/gcj/io/shs.cc \
+gnu/gcj/runtime/natFirstThread.cc \
+java/io/natFile.cc \
+java/io/natFileDescriptor.cc \
+java/io/natObjectInputStream.cc \
+java/io/natObjectOutputStream.cc \
+java/lang/natCharacter.cc \
+java/lang/natClass.cc \
+java/lang/natClassLoader.cc \
+java/lang/natConcreteProcess.cc \
+java/lang/natDouble.cc \
+java/lang/natFloat.cc \
+java/lang/natMath.cc \
+java/lang/natObject.cc \
+java/lang/natRuntime.cc        \
+java/lang/natString.cc \
+java/lang/natStringBuffer.cc \
+java/lang/natSystem.cc \
+java/lang/natThread.cc \
+java/lang/natThrowable.cc \
+java/lang/reflect/natArray.cc \
+java/lang/reflect/natConstructor.cc \
+java/lang/reflect/natField.cc \
+java/lang/reflect/natMethod.cc \
+java/net/natInetAddress.cc \
+java/net/natPlainDatagramSocketImpl.cc \
+java/net/natPlainSocketImpl.cc \
+java/text/natCollator.cc \
+java/util/zip/natDeflater.cc \
+java/util/zip/natInflater.cc
+
+
+x_java_source_files = \
+gnu/gcj/xlib/Clip.java \
+gnu/gcj/xlib/Colormap.java \
+gnu/gcj/xlib/Display.java \
+gnu/gcj/xlib/Drawable.java \
+gnu/gcj/xlib/Font.java \
+gnu/gcj/xlib/GC.java \
+gnu/gcj/xlib/Pixmap.java \
+gnu/gcj/xlib/Screen.java \
+gnu/gcj/xlib/Visual.java \
+gnu/gcj/xlib/WMSizeHints.java \
+gnu/gcj/xlib/Window.java \
+gnu/gcj/xlib/WindowAttributes.java \
+gnu/gcj/xlib/XAnyEvent.java \
+gnu/gcj/xlib/XButtonEvent.java \
+gnu/gcj/xlib/XColor.java \
+gnu/gcj/xlib/XConfigureEvent.java \
+gnu/gcj/xlib/XConnectException.java \
+gnu/gcj/xlib/XEvent.java \
+gnu/gcj/xlib/XException.java \
+gnu/gcj/xlib/XExposeEvent.java \
+gnu/gcj/xlib/XID.java \
+gnu/gcj/xlib/XImage.java \
+gnu/gcj/xlib/XUnmapEvent.java \
+gnu/awt/xlib/XCanvasPeer.java \
+gnu/awt/xlib/XEventLoop.java \
+gnu/awt/xlib/XEventQueue.java \
+gnu/awt/xlib/XFontMetrics.java \
+gnu/awt/xlib/XFramePeer.java \
+gnu/awt/xlib/XGraphics.java \
+gnu/awt/xlib/XGraphicsConfiguration.java \
+gnu/awt/xlib/XPanelPeer.java \
+gnu/awt/xlib/XToolkit.java
+
+
+x_nat_source_files = \
+gnu/gcj/xlib/natClip.cc \
+gnu/gcj/xlib/natColormap.cc \
+gnu/gcj/xlib/natDisplay.cc \
+gnu/gcj/xlib/natDrawable.cc \
+gnu/gcj/xlib/natFont.cc \
+gnu/gcj/xlib/natGC.cc \
+gnu/gcj/xlib/natPixmap.cc \
+gnu/gcj/xlib/natScreen.cc \
+gnu/gcj/xlib/natVisual.cc \
+gnu/gcj/xlib/natWMSizeHints.cc \
+gnu/gcj/xlib/natWindow.cc \
+gnu/gcj/xlib/natWindowAttributes.cc \
+gnu/gcj/xlib/natXAnyEvent.cc \
+gnu/gcj/xlib/natXButtonEvent.cc \
+gnu/gcj/xlib/natXColor.cc \
+gnu/gcj/xlib/natXConfigureEvent.cc \
+gnu/gcj/xlib/natXException.cc \
+gnu/gcj/xlib/natXExposeEvent.cc \
+gnu/gcj/xlib/natXImage.cc \
+gnu/gcj/xlib/natXUnmapEvent.cc
 
 
 # Work around what appears to be a GNU make bug handling MAKEFLAGS
 # values defined in terms of make variables, as is the case for CC and
 # friends when we are called from the top level Makefile.
-AM_MAKEFLAGS =         "AR_FLAGS=$(AR_FLAGS)"  "CC_FOR_BUILD=$(CC_FOR_BUILD)"  "CFLAGS=$(CFLAGS)"      "CXXFLAGS=$(CXXFLAGS)"  "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)"  "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)"        "INSTALL=$(INSTALL)"    "INSTALL_DATA=$(INSTALL_DATA)"  "INSTALL_PROGRAM=$(INSTALL_PROGRAM)"    "INSTALL_SCRIPT=$(INSTALL_SCRIPT)"      "JC1FLAGS=$(JC1FLAGS)"  "LDFLAGS=$(LDFLAGS)"    "LIBCFLAGS=$(LIBCFLAGS)"        "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)"  "MAKE=$(MAKE)"  "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)"         "PICFLAG=$(PICFLAG)"    "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)"      "SHELL=$(SHELL)"        "RUNTESTFLAGS=$(RUNTESTFLAGS)"  "exec_prefix=$(exec_prefix)"    "infodir=$(infodir)"    "libdir=$(libdir)"      "prefix=$(prefix)"      "AR=$(AR)"      "AS=$(AS)"      "CC=$(CC)"      "CXX=$(CXX)"    "LD=$(LD)"      "LIBCFLAGS=$(LIBCFLAGS)"        "NM=$(NM)"      "PICFLAG=$(PICFLAG)"    "RANLIB=$(RANLIB)"      "DESTDIR=$(DESTDIR)"
+AM_MAKEFLAGS = \
+       "AR_FLAGS=$(AR_FLAGS)" \
+       "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
+       "CFLAGS=$(CFLAGS)" \
+       "CXXFLAGS=$(CXXFLAGS)" \
+       "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
+       "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
+       "INSTALL=$(INSTALL)" \
+       "INSTALL_DATA=$(INSTALL_DATA)" \
+       "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+       "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
+       "JC1FLAGS=$(JC1FLAGS)" \
+       "LDFLAGS=$(LDFLAGS)" \
+       "LIBCFLAGS=$(LIBCFLAGS)" \
+       "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
+       "MAKE=$(MAKE)" \
+       "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
+       "PICFLAG=$(PICFLAG)" \
+       "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
+       "SHELL=$(SHELL)" \
+       "RUNTESTFLAGS=$(RUNTESTFLAGS)" \
+       "exec_prefix=$(exec_prefix)" \
+       "infodir=$(infodir)" \
+       "libdir=$(libdir)" \
+       "prefix=$(prefix)" \
+       "AR=$(AR)" \
+       "AS=$(AS)" \
+       "CC=$(CC)" \
+       "CXX=$(CXX)" \
+       "LD=$(LD)" \
+       "LIBCFLAGS=$(LIBCFLAGS)" \
+       "NM=$(NM)" \
+       "PICFLAG=$(PICFLAG)" \
+       "RANLIB=$(RANLIB)" \
+       "DESTDIR=$(DESTDIR)"
 
 
 CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host
@@ -337,13 +1400,16 @@ gnu/gcj/xlib/natXButtonEvent.lo gnu/gcj/xlib/natXColor.lo \
 gnu/gcj/xlib/natXConfigureEvent.lo gnu/gcj/xlib/natXException.lo \
 gnu/gcj/xlib/natXExposeEvent.lo gnu/gcj/xlib/natXImage.lo \
 gnu/gcj/xlib/natXUnmapEvent.lo
-@NATIVE_TRUE@bin_PROGRAMS =  jv-convert$(EXEEXT) gij$(EXEEXT)
+@NATIVE_TRUE@bin_PROGRAMS =  jv-convert$(EXEEXT) gij$(EXEEXT) \
+@NATIVE_TRUE@rmic$(EXEEXT) rmiregistry$(EXEEXT)
 @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@noinst_PROGRAMS =  \
 @NATIVE_TRUE@@MAINTAINER_MODE_TRUE@gen-from-JIS$(EXEEXT)
 PROGRAMS =  $(bin_PROGRAMS) $(noinst_PROGRAMS)
 
 jv_convert_OBJECTS = 
 gij_OBJECTS =  gij.$(OBJEXT)
+rmic_OBJECTS = 
+rmiregistry_OBJECTS = 
 gen_from_JIS_OBJECTS = 
 gen_from_JIS_LDFLAGS = 
 SCRIPTS =  $(bin_SCRIPTS)
@@ -366,7 +1432,7 @@ libgcj-test.spec.in libgcj.spec.in
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 DIST_SUBDIRS =  @DIRLTDL@ testsuite gcj include @DIRLTDL@ gcj include
 DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
@@ -473,6 +1539,24 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/gnu/java/lang/reflect/TypeSignature.P \
 .deps/gnu/java/locale/Calendar.P .deps/gnu/java/locale/Calendar_de.P \
 .deps/gnu/java/locale/Calendar_en.P .deps/gnu/java/locale/Calendar_nl.P \
+.deps/gnu/java/rmi/dgc/DGCImpl.P .deps/gnu/java/rmi/dgc/DGCImpl_Skel.P \
+.deps/gnu/java/rmi/dgc/DGCImpl_Stub.P \
+.deps/gnu/java/rmi/registry/RegistryImpl.P \
+.deps/gnu/java/rmi/registry/RegistryImpl_Skel.P \
+.deps/gnu/java/rmi/registry/RegistryImpl_Stub.P \
+.deps/gnu/java/rmi/rmic/RMIC.P .deps/gnu/java/rmi/rmic/TabbedWriter.P \
+.deps/gnu/java/rmi/server/ProtocolConstants.P \
+.deps/gnu/java/rmi/server/RMIDefaultSocketFactory.P \
+.deps/gnu/java/rmi/server/RMIHashes.P \
+.deps/gnu/java/rmi/server/RMIObjectInputStream.P \
+.deps/gnu/java/rmi/server/RMIObjectOutputStream.P \
+.deps/gnu/java/rmi/server/UnicastConnection.P \
+.deps/gnu/java/rmi/server/UnicastConnectionManager.P \
+.deps/gnu/java/rmi/server/UnicastRef.P \
+.deps/gnu/java/rmi/server/UnicastRemoteCall.P \
+.deps/gnu/java/rmi/server/UnicastRemoteStub.P \
+.deps/gnu/java/rmi/server/UnicastServer.P \
+.deps/gnu/java/rmi/server/UnicastServerRef.P \
 .deps/gnu/java/security/provider/DefaultPolicy.P \
 .deps/gnu/java/security/provider/Gnu.P \
 .deps/gnu/java/security/provider/SHA.P \
@@ -777,7 +1861,58 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/java/net/UnknownServiceException.P \
 .deps/java/net/natInetAddress.P \
 .deps/java/net/natPlainDatagramSocketImpl.P \
-.deps/java/net/natPlainSocketImpl.P \
+.deps/java/net/natPlainSocketImpl.P .deps/java/rmi/AccessException.P \
+.deps/java/rmi/AlreadyBoundException.P \
+.deps/java/rmi/ConnectException.P .deps/java/rmi/ConnectIOException.P \
+.deps/java/rmi/MarshalException.P .deps/java/rmi/MarshalledObject.P \
+.deps/java/rmi/Naming.P .deps/java/rmi/NoSuchObjectException.P \
+.deps/java/rmi/NotBoundException.P \
+.deps/java/rmi/RMISecurityException.P \
+.deps/java/rmi/RMISecurityManager.P .deps/java/rmi/Remote.P \
+.deps/java/rmi/RemoteException.P .deps/java/rmi/ServerError.P \
+.deps/java/rmi/ServerException.P \
+.deps/java/rmi/ServerRuntimeException.P \
+.deps/java/rmi/StubNotFoundException.P \
+.deps/java/rmi/UnexpectedException.P \
+.deps/java/rmi/UnknownHostException.P \
+.deps/java/rmi/UnmarshalException.P \
+.deps/java/rmi/activation/Activatable.P \
+.deps/java/rmi/activation/ActivateFailedException.P \
+.deps/java/rmi/activation/ActivationDesc.P \
+.deps/java/rmi/activation/ActivationException.P \
+.deps/java/rmi/activation/ActivationGroup.P \
+.deps/java/rmi/activation/ActivationGroupDesc.P \
+.deps/java/rmi/activation/ActivationGroupID.P \
+.deps/java/rmi/activation/ActivationID.P \
+.deps/java/rmi/activation/ActivationInstantiator.P \
+.deps/java/rmi/activation/ActivationMonitor.P \
+.deps/java/rmi/activation/ActivationSystem.P \
+.deps/java/rmi/activation/Activator.P \
+.deps/java/rmi/activation/UnknownGroupException.P \
+.deps/java/rmi/activation/UnknownObjectException.P \
+.deps/java/rmi/dgc/DGC.P .deps/java/rmi/dgc/Lease.P \
+.deps/java/rmi/dgc/VMID.P .deps/java/rmi/registry/LocateRegistry.P \
+.deps/java/rmi/registry/Registry.P \
+.deps/java/rmi/registry/RegistryHandler.P \
+.deps/java/rmi/server/ExportException.P \
+.deps/java/rmi/server/LoaderHandler.P .deps/java/rmi/server/LogStream.P \
+.deps/java/rmi/server/ObjID.P .deps/java/rmi/server/Operation.P \
+.deps/java/rmi/server/RMIClassLoader.P \
+.deps/java/rmi/server/RMIClientSocketFactory.P \
+.deps/java/rmi/server/RMIFailureHandler.P \
+.deps/java/rmi/server/RMIServerSocketFactory.P \
+.deps/java/rmi/server/RMISocketFactory.P \
+.deps/java/rmi/server/RemoteCall.P .deps/java/rmi/server/RemoteObject.P \
+.deps/java/rmi/server/RemoteRef.P .deps/java/rmi/server/RemoteServer.P \
+.deps/java/rmi/server/RemoteStub.P \
+.deps/java/rmi/server/ServerCloneException.P \
+.deps/java/rmi/server/ServerNotActiveException.P \
+.deps/java/rmi/server/ServerRef.P .deps/java/rmi/server/Skeleton.P \
+.deps/java/rmi/server/SkeletonMismatchException.P \
+.deps/java/rmi/server/SkeletonNotFoundException.P \
+.deps/java/rmi/server/SocketSecurityException.P \
+.deps/java/rmi/server/UID.P .deps/java/rmi/server/UnicastRemoteObject.P \
+.deps/java/rmi/server/Unreferenced.P \
 .deps/java/security/AccessControlContext.P \
 .deps/java/security/AccessControlException.P \
 .deps/java/security/AccessController.P \
@@ -980,8 +2115,8 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .deps/org/xml/sax/helpers/XMLReaderAdapter.P \
 .deps/org/xml/sax/helpers/XMLReaderFactory.P .deps/posix-threads.P \
 .deps/posix.P .deps/prims.P .deps/resolve.P
-SOURCES = $(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) $(libgcjx_la_SOURCES) $(EXTRA_libgcjx_la_SOURCES) $(jv_convert_SOURCES) $(EXTRA_jv_convert_SOURCES) $(gij_SOURCES) $(gen_from_JIS_SOURCES) $(EXTRA_gen_from_JIS_SOURCES)
-OBJECTS = $(libgcj_la_OBJECTS) $(libgcjx_la_OBJECTS) $(jv_convert_OBJECTS) $(gij_OBJECTS) $(gen_from_JIS_OBJECTS)
+SOURCES = $(libgcj_la_SOURCES) $(EXTRA_libgcj_la_SOURCES) $(libgcjx_la_SOURCES) $(EXTRA_libgcjx_la_SOURCES) $(jv_convert_SOURCES) $(EXTRA_jv_convert_SOURCES) $(gij_SOURCES) $(rmic_SOURCES) $(EXTRA_rmic_SOURCES) $(rmiregistry_SOURCES) $(EXTRA_rmiregistry_SOURCES) $(gen_from_JIS_SOURCES) $(EXTRA_gen_from_JIS_SOURCES)
+OBJECTS = $(libgcj_la_OBJECTS) $(libgcjx_la_OBJECTS) $(jv_convert_OBJECTS) $(gij_OBJECTS) $(rmic_OBJECTS) $(rmiregistry_OBJECTS) $(gen_from_JIS_OBJECTS)
 
 all: all-redirect
 .SUFFIXES:
@@ -1110,6 +2245,14 @@ gij$(EXEEXT): $(gij_OBJECTS) $(gij_DEPENDENCIES)
        @rm -f gij$(EXEEXT)
        $(gij_LINK) $(gij_LDFLAGS) $(gij_OBJECTS) $(gij_LDADD) $(LIBS)
 
+rmic$(EXEEXT): $(rmic_OBJECTS) $(rmic_DEPENDENCIES)
+       @rm -f rmic$(EXEEXT)
+       $(rmic_LINK) $(rmic_LDFLAGS) $(rmic_OBJECTS) $(rmic_LDADD) $(LIBS)
+
+rmiregistry$(EXEEXT): $(rmiregistry_OBJECTS) $(rmiregistry_DEPENDENCIES)
+       @rm -f rmiregistry$(EXEEXT)
+       $(rmiregistry_LINK) $(rmiregistry_LDFLAGS) $(rmiregistry_OBJECTS) $(rmiregistry_LDADD) $(LIBS)
+
 gen-from-JIS$(EXEEXT): $(gen_from_JIS_OBJECTS) $(gen_from_JIS_DEPENDENCIES)
        @rm -f gen-from-JIS$(EXEEXT)
        $(LINK) $(gen_from_JIS_LDFLAGS) $(gen_from_JIS_OBJECTS) $(gen_from_JIS_LDADD) $(LIBS)
@@ -1312,7 +2455,7 @@ distdir: $(DISTFILES)
        @for file in $(DISTFILES); do \
          d=$(srcdir); \
          if test -d $$d/$$file; then \
-           cp -pr $$d/$$file $(distdir)/$$file; \
+           cp -pr $$/$$file $(distdir)/$$file; \
          else \
            test -f $(distdir)/$$file \
            || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
diff --git a/libjava/gnu/java/rmi/dgc/DGCImpl.java b/libjava/gnu/java/rmi/dgc/DGCImpl.java
new file mode 100644 (file)
index 0000000..2c07c14
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.dgc;
+
+import java.rmi.dgc.DGC;
+import java.rmi.dgc.Lease;
+import java.rmi.dgc.VMID;
+import java.rmi.server.ObjID;
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.rmi.server.RMISocketFactory;
+import gnu.java.rmi.server.UnicastServerRef;
+
+public class DGCImpl
+       extends UnicastRemoteObject implements DGC {
+
+public DGCImpl() throws RemoteException {
+       super(new UnicastServerRef(new ObjID(ObjID.DGC_ID), 0, RMISocketFactory.getSocketFactory()));
+}
+
+public Lease dirty(ObjID[] ids, long sequenceNum, Lease lease) throws RemoteException {
+       System.out.println("DGCImpl.dirty - not implemented");
+       return (lease);
+}
+
+public void clean(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong) throws RemoteException {
+       System.out.println("DGCImpl.clean - not implemented");
+}
+
+}
diff --git a/libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java b/libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java
new file mode 100644 (file)
index 0000000..fd0f2ee
--- /dev/null
@@ -0,0 +1,106 @@
+// Skel class generated by rmic - DO NOT EDIT!
+
+package gnu.java.rmi.dgc;
+
+public final class DGCImpl_Skel
+    implements java.rmi.server.Skeleton
+{
+    private static final long interfaceHash = -669196253586618813L;
+    
+    private static final java.rmi.server.Operation[] operations = {
+        new java.rmi.server.Operation("void clean(java.rmi.server.ObjID[], long, java.rmi.dgc.VMID, boolean"),
+        new java.rmi.server.Operation("java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease")
+    };
+    
+    public java.rmi.server.Operation[] getOperations() {
+        return ((java.rmi.server.Operation[]) operations.clone());
+    }
+    
+    public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {
+        if (opnum < 0) {
+            if (hash == -5803803475088455571L) {
+                opnum = 0;
+            }
+            else if (hash == -8139341527526761862L) {
+                opnum = 1;
+            }
+            else {
+                throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+            }
+        }
+        else if (hash != interfaceHash) {
+            throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+        }
+        
+        gnu.java.rmi.dgc.DGCImpl server = (gnu.java.rmi.dgc.DGCImpl)obj;
+        switch (opnum) {
+        case 0:
+        {
+            java.rmi.server.ObjID[] $param_0;
+            long $param_1;
+            java.rmi.dgc.VMID $param_2;
+            boolean $param_3;
+            try {
+                java.io.ObjectInput in = call.getInputStream();
+                $param_0 = (java.rmi.server.ObjID[])in.readObject();
+                $param_1 = (long)in.readLong();
+                $param_2 = (java.rmi.dgc.VMID)in.readObject();
+                $param_3 = (boolean)in.readBoolean();
+                
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            catch (java.lang.ClassCastException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            finally {
+                call.releaseInputStream();
+            }
+            server.clean($param_0, $param_1, $param_2, $param_3);
+            try {
+                java.io.ObjectOutput out = call.getResultStream(true);
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.MarshalException("error marshalling return", e);
+            }
+            break;
+        }
+        
+        case 1:
+        {
+            java.rmi.server.ObjID[] $param_0;
+            long $param_1;
+            java.rmi.dgc.Lease $param_2;
+            try {
+                java.io.ObjectInput in = call.getInputStream();
+                $param_0 = (java.rmi.server.ObjID[])in.readObject();
+                $param_1 = (long)in.readLong();
+                $param_2 = (java.rmi.dgc.Lease)in.readObject();
+                
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            catch (java.lang.ClassCastException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            finally {
+                call.releaseInputStream();
+            }
+            java.rmi.dgc.Lease $result = server.dirty($param_0, $param_1, $param_2);
+            try {
+                java.io.ObjectOutput out = call.getResultStream(true);
+                out.writeObject($result);
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.MarshalException("error marshalling return", e);
+            }
+            break;
+        }
+        
+        default:
+            throw new java.rmi.UnmarshalException("invalid method number");
+        }
+    }
+}
diff --git a/libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java b/libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java
new file mode 100644 (file)
index 0000000..e611fb2
--- /dev/null
@@ -0,0 +1,120 @@
+// Stub class generated by rmic - DO NOT EDIT!
+
+package gnu.java.rmi.dgc;
+
+public final class DGCImpl_Stub
+    extends java.rmi.server.RemoteStub
+    implements java.rmi.dgc.DGC
+{
+    private static final long serialVersionUID = 2L;
+    
+    private static final long interfaceHash = -669196253586618813L;
+    
+    private static boolean useNewInvoke;
+    
+    private static final java.rmi.server.Operation[] operations = {
+        new java.rmi.server.Operation("void clean(java.rmi.server.ObjID[], long, java.rmi.dgc.VMID, boolean)"),
+        new java.rmi.server.Operation("java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)")
+    };
+    
+    private static java.lang.reflect.Method $method_clean_0;
+    private static java.lang.reflect.Method $method_dirty_1;
+    
+    static {
+        try {
+            java.rmi.server.RemoteRef.class.getMethod("invoke", new java.lang.Class[] { java.rmi.Remote.class, java.lang.reflect.Method.class, java.lang.Object[].class, long.class });
+            useNewInvoke = true;
+            $method_clean_0 = gnu.java.rmi.dgc.DGCImpl.class.getMethod("clean", new java.lang.Class[] {java.rmi.server.ObjID[].class, long.class, java.rmi.dgc.VMID.class, boolean.class});
+            $method_dirty_1 = gnu.java.rmi.dgc.DGCImpl.class.getMethod("dirty", new java.lang.Class[] {java.rmi.server.ObjID[].class, long.class, java.rmi.dgc.Lease.class});
+            
+        }
+        catch (java.lang.NoSuchMethodException e) {
+            useNewInvoke = false;
+        }
+    }
+    
+    public DGCImpl_Stub() {
+        super();
+    }
+    public DGCImpl_Stub(java.rmi.server.RemoteRef ref) {
+        super(ref);
+    }
+    
+    public void clean(java.rmi.server.ObjID[] $param_0, long $param_1, java.rmi.dgc.VMID $param_2, boolean $param_3) throws java.rmi.RemoteException {
+        try {
+            if (useNewInvoke) {
+                ref.invoke(this, $method_clean_0, new java.lang.Object[] {$param_0, new java.lang.Long($param_1), $param_2, new java.lang.Boolean($param_3)}, -5803803475088455571L);
+            }
+            else {
+                java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 0, interfaceHash);
+                try {
+                    java.io.ObjectOutput out = call.getOutputStream();
+                    out.writeObject($param_0);
+                    out.writeLong($param_1);
+                    out.writeObject($param_2);
+                    out.writeBoolean($param_3);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.MarshalException("error marshalling arguments", e);
+                }
+                ref.invoke(call);
+                try {
+                    java.io.ObjectInput in = call.getInputStream();
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                }
+                finally {
+                    ref.done(call);
+                }
+            }
+        }
+        catch (java.rmi.RemoteException e) {
+            throw e;
+        }
+        catch (java.lang.Exception e) {
+            throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+        }
+    }
+    
+    public java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[] $param_0, long $param_1, java.rmi.dgc.Lease $param_2) throws java.rmi.RemoteException {
+        try {
+            if (useNewInvoke) {
+                java.lang.Object $result = ref.invoke(this, $method_dirty_1, new java.lang.Object[] {$param_0, new java.lang.Long($param_1), $param_2}, -8139341527526761862L);
+                return ((java.rmi.dgc.Lease)$result);
+            }
+            else {
+                java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 1, interfaceHash);
+                try {
+                    java.io.ObjectOutput out = call.getOutputStream();
+                    out.writeObject($param_0);
+                    out.writeLong($param_1);
+                    out.writeObject($param_2);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.MarshalException("error marshalling arguments", e);
+                }
+                ref.invoke(call);
+                java.rmi.dgc.Lease $result;
+                try {
+                    java.io.ObjectInput in = call.getInputStream();
+                    $result = (java.rmi.dgc.Lease)in.readObject();
+                    return ($result);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                }
+                finally {
+                    ref.done(call);
+                }
+            }
+        }
+        catch (java.rmi.RemoteException e) {
+            throw e;
+        }
+        catch (java.lang.Exception e) {
+            throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+        }
+    }
+    
+}
diff --git a/libjava/gnu/java/rmi/registry/RegistryImpl.java b/libjava/gnu/java/rmi/registry/RegistryImpl.java
new file mode 100644 (file)
index 0000000..1dab766
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.registry;
+
+import java.rmi.registry.Registry;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.RemoteException;
+import java.rmi.NotBoundException;
+import java.rmi.AccessException;
+import java.rmi.AlreadyBoundException;
+import java.rmi.Remote;
+import java.rmi.server.UnicastRemoteObject;
+import java.rmi.server.ObjID;
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.rmi.server.RMISocketFactory;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+import gnu.java.rmi.server.UnicastServerRef;
+
+public class RegistryImpl
+       extends UnicastRemoteObject implements Registry {
+
+private Hashtable bindings = new Hashtable();
+
+public RegistryImpl(int port) throws RemoteException {
+       this(port, RMISocketFactory.getSocketFactory(), RMISocketFactory.getSocketFactory());
+}
+
+public RegistryImpl(int port, RMIClientSocketFactory cf, RMIServerSocketFactory sf) throws RemoteException {
+       super(new UnicastServerRef(new ObjID(ObjID.REGISTRY_ID), port, sf));
+       ((UnicastServerRef)getRef()).exportObject(this);
+}
+
+public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException {
+       Object obj = bindings.get(name);
+       if (obj == null) {
+               throw new NotBoundException(name);
+       }
+       return ((Remote)obj);
+}
+
+public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException {
+       if (bindings.containsKey(name)) {
+               throw new AlreadyBoundException(name);
+       }
+       bindings.put(name, obj);
+}
+
+public void unbind(String name) throws RemoteException, NotBoundException, AccessException {
+       Object obj = bindings.remove(name);
+       if (obj == null) {
+               throw new NotBoundException(name);
+       }
+}
+
+public void rebind(String name, Remote obj) throws RemoteException, AccessException {
+       bindings.put(name, obj);
+}
+
+public String[] list() throws RemoteException, AccessException {
+       int size = bindings.size();
+       String[] strings = new String[size];
+       Enumeration e = bindings.keys();
+       for (int i = 0; i < size; i++) {
+               strings[i] = (String)e.nextElement();
+       }
+       return (strings);
+}
+
+public static void main(String[] args) {
+       int port = Registry.REGISTRY_PORT;
+       if (args.length > 0) {
+               try {
+                       port = Integer.parseInt(args[0]);
+               }
+               catch (NumberFormatException _) {
+                       System.err.println("Bad port number - using default");
+               }
+       }
+
+       try {
+               Registry impl = LocateRegistry.createRegistry(port);
+       }
+       catch (RemoteException _) {
+               System.err.println("Registry failed");
+       }
+}
+
+}
diff --git a/libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java b/libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java
new file mode 100644 (file)
index 0000000..7ba41c3
--- /dev/null
@@ -0,0 +1,189 @@
+// Skel class generated by rmic - DO NOT EDIT!
+
+package gnu.java.rmi.registry;
+
+public final class RegistryImpl_Skel
+    implements java.rmi.server.Skeleton
+{
+    private static final long interfaceHash = 4905912898345647071L;
+    
+    private static final java.rmi.server.Operation[] operations = {
+        new java.rmi.server.Operation("void bind(java.lang.String, java.rmi.Remote"),
+        new java.rmi.server.Operation("java.lang.String[] list("),
+        new java.rmi.server.Operation("java.rmi.Remote lookup(java.lang.String"),
+        new java.rmi.server.Operation("void rebind(java.lang.String, java.rmi.Remote"),
+        new java.rmi.server.Operation("void unbind(java.lang.String")
+    };
+    
+    public java.rmi.server.Operation[] getOperations() {
+        return ((java.rmi.server.Operation[]) operations.clone());
+    }
+    
+    public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {
+        if (opnum < 0) {
+            if (hash == 7583982177005850366L) {
+                opnum = 0;
+            }
+            else if (hash == 2571371476350237748L) {
+                opnum = 1;
+            }
+            else if (hash == -7538657168040752697L) {
+                opnum = 2;
+            }
+            else if (hash == -8381844669958460146L) {
+                opnum = 3;
+            }
+            else if (hash == 7305022919901907578L) {
+                opnum = 4;
+            }
+            else {
+                throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+            }
+        }
+        else if (hash != interfaceHash) {
+            throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
+        }
+        
+        gnu.java.rmi.registry.RegistryImpl server = (gnu.java.rmi.registry.RegistryImpl)obj;
+        switch (opnum) {
+        case 0:
+        {
+            java.lang.String $param_0;
+            java.rmi.Remote $param_1;
+            try {
+                java.io.ObjectInput in = call.getInputStream();
+                $param_0 = (java.lang.String)in.readObject();
+                $param_1 = (java.rmi.Remote)in.readObject();
+                
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            catch (java.lang.ClassCastException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            finally {
+                call.releaseInputStream();
+            }
+            server.bind($param_0, $param_1);
+            try {
+                java.io.ObjectOutput out = call.getResultStream(true);
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.MarshalException("error marshalling return", e);
+            }
+            break;
+        }
+        
+        case 1:
+        {
+            try {
+                java.io.ObjectInput in = call.getInputStream();
+                
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            finally {
+                call.releaseInputStream();
+            }
+            java.lang.String[] $result = server.list();
+            try {
+                java.io.ObjectOutput out = call.getResultStream(true);
+                out.writeObject($result);
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.MarshalException("error marshalling return", e);
+            }
+            break;
+        }
+        
+        case 2:
+        {
+            java.lang.String $param_0;
+            try {
+                java.io.ObjectInput in = call.getInputStream();
+                $param_0 = (java.lang.String)in.readObject();
+                
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            catch (java.lang.ClassCastException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            finally {
+                call.releaseInputStream();
+            }
+            java.rmi.Remote $result = server.lookup($param_0);
+            try {
+                java.io.ObjectOutput out = call.getResultStream(true);
+                out.writeObject($result);
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.MarshalException("error marshalling return", e);
+            }
+            break;
+        }
+        
+        case 3:
+        {
+            java.lang.String $param_0;
+            java.rmi.Remote $param_1;
+            try {
+                java.io.ObjectInput in = call.getInputStream();
+                $param_0 = (java.lang.String)in.readObject();
+                $param_1 = (java.rmi.Remote)in.readObject();
+                
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            catch (java.lang.ClassCastException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            finally {
+                call.releaseInputStream();
+            }
+            server.rebind($param_0, $param_1);
+            try {
+                java.io.ObjectOutput out = call.getResultStream(true);
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.MarshalException("error marshalling return", e);
+            }
+            break;
+        }
+        
+        case 4:
+        {
+            java.lang.String $param_0;
+            try {
+                java.io.ObjectInput in = call.getInputStream();
+                $param_0 = (java.lang.String)in.readObject();
+                
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            catch (java.lang.ClassCastException e) {
+                throw new java.rmi.UnmarshalException("error unmarshalling arguments", e);
+            }
+            finally {
+                call.releaseInputStream();
+            }
+            server.unbind($param_0);
+            try {
+                java.io.ObjectOutput out = call.getResultStream(true);
+            }
+            catch (java.io.IOException e) {
+                throw new java.rmi.MarshalException("error marshalling return", e);
+            }
+            break;
+        }
+        
+        default:
+            throw new java.rmi.UnmarshalException("invalid method number");
+        }
+    }
+}
diff --git a/libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java b/libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java
new file mode 100644 (file)
index 0000000..bfa755c
--- /dev/null
@@ -0,0 +1,255 @@
+// Stub class generated by rmic - DO NOT EDIT!
+
+package gnu.java.rmi.registry;
+
+public final class RegistryImpl_Stub
+    extends java.rmi.server.RemoteStub
+    implements java.rmi.registry.Registry
+{
+    private static final long serialVersionUID = 2L;
+    
+    private static final long interfaceHash = 4905912898345647071L;
+    
+    private static boolean useNewInvoke;
+    
+    private static final java.rmi.server.Operation[] operations = {
+        new java.rmi.server.Operation("void bind(java.lang.String, java.rmi.Remote)"),
+        new java.rmi.server.Operation("java.lang.String[] list()"),
+        new java.rmi.server.Operation("java.rmi.Remote lookup(java.lang.String)"),
+        new java.rmi.server.Operation("void rebind(java.lang.String, java.rmi.Remote)"),
+        new java.rmi.server.Operation("void unbind(java.lang.String)")
+    };
+    
+    private static java.lang.reflect.Method $method_bind_0;
+    private static java.lang.reflect.Method $method_list_1;
+    private static java.lang.reflect.Method $method_lookup_2;
+    private static java.lang.reflect.Method $method_rebind_3;
+    private static java.lang.reflect.Method $method_unbind_4;
+    
+    static {
+        try {
+            java.rmi.server.RemoteRef.class.getMethod("invoke", new java.lang.Class[] { java.rmi.Remote.class, java.lang.reflect.Method.class, java.lang.Object[].class, long.class });
+            useNewInvoke = true;
+            $method_bind_0 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("bind", new java.lang.Class[] {java.lang.String.class, java.rmi.Remote.class});
+            $method_list_1 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("list", new java.lang.Class[] {});
+            $method_lookup_2 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("lookup", new java.lang.Class[] {java.lang.String.class});
+            $method_rebind_3 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("rebind", new java.lang.Class[] {java.lang.String.class, java.rmi.Remote.class});
+            $method_unbind_4 = gnu.java.rmi.registry.RegistryImpl.class.getMethod("unbind", new java.lang.Class[] {java.lang.String.class});
+            
+        }
+        catch (java.lang.NoSuchMethodException e) {
+            useNewInvoke = false;
+        }
+    }
+    
+    public RegistryImpl_Stub() {
+        super();
+    }
+    public RegistryImpl_Stub(java.rmi.server.RemoteRef ref) {
+        super(ref);
+    }
+    
+    public void bind(java.lang.String $param_0, java.rmi.Remote $param_1) throws java.rmi.AccessException, java.rmi.AlreadyBoundException, java.rmi.RemoteException {
+        try {
+            if (useNewInvoke) {
+                ref.invoke(this, $method_bind_0, new java.lang.Object[] {$param_0, $param_1}, 7583982177005850366L);
+            }
+            else {
+                java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 0, interfaceHash);
+                try {
+                    java.io.ObjectOutput out = call.getOutputStream();
+                    out.writeObject($param_0);
+                    out.writeObject($param_1);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.MarshalException("error marshalling arguments", e);
+                }
+                ref.invoke(call);
+                try {
+                    java.io.ObjectInput in = call.getInputStream();
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                }
+                finally {
+                    ref.done(call);
+                }
+            }
+        }
+        catch (java.rmi.AccessException e) {
+            throw e;
+        }
+        catch (java.rmi.AlreadyBoundException e) {
+            throw e;
+        }
+        catch (java.rmi.RemoteException e) {
+            throw e;
+        }
+        catch (java.lang.Exception e) {
+            throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+        }
+    }
+    
+    public java.lang.String[] list() throws java.rmi.AccessException, java.rmi.RemoteException {
+        try {
+            if (useNewInvoke) {
+                java.lang.Object $result = ref.invoke(this, $method_list_1, null, 2571371476350237748L);
+                return ((java.lang.String[])$result);
+            }
+            else {
+                java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 1, interfaceHash);
+                try {
+                    java.io.ObjectOutput out = call.getOutputStream();
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.MarshalException("error marshalling arguments", e);
+                }
+                ref.invoke(call);
+                java.lang.String[] $result;
+                try {
+                    java.io.ObjectInput in = call.getInputStream();
+                    $result = (java.lang.String[])in.readObject();
+                    return ($result);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                }
+                finally {
+                    ref.done(call);
+                }
+            }
+        }
+        catch (java.rmi.AccessException e) {
+            throw e;
+        }
+        catch (java.rmi.RemoteException e) {
+            throw e;
+        }
+        catch (java.lang.Exception e) {
+            throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+        }
+    }
+    
+    public java.rmi.Remote lookup(java.lang.String $param_0) throws java.rmi.AccessException, java.rmi.NotBoundException, java.rmi.RemoteException {
+        try {
+            if (useNewInvoke) {
+                java.lang.Object $result = ref.invoke(this, $method_lookup_2, new java.lang.Object[] {$param_0}, -7538657168040752697L);
+                return ((java.rmi.Remote)$result);
+            }
+            else {
+                java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 2, interfaceHash);
+                try {
+                    java.io.ObjectOutput out = call.getOutputStream();
+                    out.writeObject($param_0);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.MarshalException("error marshalling arguments", e);
+                }
+                ref.invoke(call);
+                java.rmi.Remote $result;
+                try {
+                    java.io.ObjectInput in = call.getInputStream();
+                    $result = (java.rmi.Remote)in.readObject();
+                    return ($result);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                }
+                finally {
+                    ref.done(call);
+                }
+            }
+        }
+        catch (java.rmi.AccessException e) {
+            throw e;
+        }
+        catch (java.rmi.NotBoundException e) {
+            throw e;
+        }
+        catch (java.rmi.RemoteException e) {
+            throw e;
+        }
+        catch (java.lang.Exception e) {
+            throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+        }
+    }
+    
+    public void rebind(java.lang.String $param_0, java.rmi.Remote $param_1) throws java.rmi.AccessException, java.rmi.RemoteException {
+        try {
+            if (useNewInvoke) {
+                ref.invoke(this, $method_rebind_3, new java.lang.Object[] {$param_0, $param_1}, -8381844669958460146L);
+            }
+            else {
+                java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 3, interfaceHash);
+                try {
+                    java.io.ObjectOutput out = call.getOutputStream();
+                    out.writeObject($param_0);
+                    out.writeObject($param_1);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.MarshalException("error marshalling arguments", e);
+                }
+                ref.invoke(call);
+                try {
+                    java.io.ObjectInput in = call.getInputStream();
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                }
+                finally {
+                    ref.done(call);
+                }
+            }
+        }
+        catch (java.rmi.AccessException e) {
+            throw e;
+        }
+        catch (java.rmi.RemoteException e) {
+            throw e;
+        }
+        catch (java.lang.Exception e) {
+            throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+        }
+    }
+    
+    public void unbind(java.lang.String $param_0) throws java.rmi.AccessException, java.rmi.NotBoundException, java.rmi.RemoteException {
+        try {
+            if (useNewInvoke) {
+                ref.invoke(this, $method_unbind_4, new java.lang.Object[] {$param_0}, 7305022919901907578L);
+            }
+            else {
+                java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, 4, interfaceHash);
+                try {
+                    java.io.ObjectOutput out = call.getOutputStream();
+                    out.writeObject($param_0);
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.MarshalException("error marshalling arguments", e);
+                }
+                ref.invoke(call);
+                try {
+                    java.io.ObjectInput in = call.getInputStream();
+                }
+                catch (java.io.IOException e) {
+                    throw new java.rmi.UnmarshalException("error unmarshalling return", e);
+                }
+                finally {
+                    ref.done(call);
+                }
+            }
+        }
+        catch (java.rmi.AccessException e) {
+            throw e;
+        }
+        catch (java.rmi.NotBoundException e) {
+            throw e;
+        }
+        catch (java.rmi.RemoteException e) {
+            throw e;
+        }
+        catch (java.lang.Exception e) {
+            throw new java.rmi.UnexpectedException("undeclared checked exception", e);
+        }
+    }
+    
+}
diff --git a/libjava/gnu/java/rmi/rmic/RMIC.java b/libjava/gnu/java/rmi/rmic/RMIC.java
new file mode 100644 (file)
index 0000000..84681e2
--- /dev/null
@@ -0,0 +1,982 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.rmic;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Arrays;
+import java.lang.Comparable;
+import gnu.java.rmi.server.RMIHashes;
+// import kaffe.tools.compiler.Compiler;
+
+public class RMIC {
+
+private String[] args;
+private int next;
+private Exception exception;
+
+private boolean keep = false;
+private boolean need11Stubs = true;
+private boolean need12Stubs = true;
+private boolean compile = true;
+private boolean verbose;
+private String destination;
+
+private PrintWriter out;
+private TabbedWriter ctrl;
+
+private Class clazz;
+private String classname;
+private String fullclassname;
+private MethodRef[] remotemethods;
+private String stubname;
+private String skelname;
+
+public RMIC(String[] a) {
+       args = a;
+}
+
+public static void main(String args[]) {
+       RMIC r = new RMIC(args);
+       if (r.run() == false) {
+               Exception exception = r.getException();
+               if (exception != null) {
+                       exception.printStackTrace();
+               }
+               else {
+                       usage();
+               }
+       }
+}
+
+public boolean run() {
+       parseOptions();
+       if (next >= args.length) {
+               return (false);
+       }
+       for (int i = next; i < args.length; i++) {
+               try {
+                       if (verbose) {
+                               System.out.println("[Processing class " + args[i] + ".class]");
+                       }
+                       processClass(args[i]);
+               }
+               catch (Exception e) {
+                       exception = e;
+                       return (false);
+               }
+       }
+       return (true);
+}
+
+private boolean processClass(String classname) throws Exception {
+       analyzeClass(classname);
+       generateStub();
+       if (need11Stubs) {
+               generateSkel();
+       }
+       if (compile) {
+               compile(stubname + ".java");
+               if (need11Stubs) {
+                       compile(skelname + ".java");
+               }
+       }
+       if (!keep) {
+               (new File(stubname + ".java")).delete();
+               if (need11Stubs) {
+                       (new File(skelname + ".java")).delete();
+               }
+       }
+       return (true);
+}
+
+private void analyzeClass(String cname) throws Exception {
+       int p = cname.lastIndexOf('.');
+       if (p != -1) {
+               classname = cname.substring(p+1);
+       }
+       else {
+               classname = cname;
+       }
+       fullclassname = cname;
+
+       HashSet rmeths = new HashSet();
+       findClass();
+       for (Class cls = clazz; cls != null; cls = cls.getSuperclass()) {
+               // Keep going down the inheritence tree until we hit the system
+               if (cls.getName().startsWith("java.")) {
+                       break;
+               }
+
+               Method[] meths = cls.getDeclaredMethods();
+               for (int i = 0; i < meths.length; i++) {
+                       // Only include public methods
+                       int mods = meths[i].getModifiers();
+                       if (Modifier.isPublic(mods) && !Modifier.isStatic(mods)) {
+                               // Should check exceptions here. - XXX
+
+                               // Add this one in.
+                               rmeths.add(meths[i]);
+                       }
+               }
+       }
+
+       // Convert into a MethodRef array and sort them
+       remotemethods = new MethodRef[rmeths.size()];
+       int c = 0;
+       for (Iterator i = rmeths.iterator(); i.hasNext(); ) {
+               remotemethods[c++] = new MethodRef((Method)i.next());
+       }
+       Arrays.sort(remotemethods);
+}
+
+public Exception getException() {
+       return (exception);
+}
+
+private void findClass() throws ClassNotFoundException {
+       clazz = Class.forName(fullclassname);
+}
+
+private void generateStub() throws IOException {
+       stubname = classname + "_Stub";
+       ctrl = new TabbedWriter(new FileWriter(stubname + ".java"));
+       out = new PrintWriter(ctrl);
+
+       if (verbose) {
+               System.out.println("[Generating class " + stubname + ".java]");
+       }
+
+       out.println("// Stub class generated by rmic - DO NOT EDIT!");
+       out.println();
+       if (fullclassname != classname) {
+               String pname = fullclassname.substring(0, fullclassname.lastIndexOf('.'));
+               out.println("package " + pname + ";");
+               out.println();
+       }
+
+       out.print("public final class " + stubname);
+       ctrl.indent();
+       out.println("extends java.rmi.server.RemoteStub");
+       
+       // Output interfaces we implement
+       out.print("implements ");
+       Class[] ifaces = clazz.getInterfaces(); 
+       for (int i = 0; i < ifaces.length; i++) {
+               out.print(ifaces[i].getName());
+               if (i+1 < ifaces.length) {
+                       out.print(", ");
+               }
+       }
+
+       ctrl.unindent();
+       out.print("{");
+       ctrl.indent();
+
+       // UID
+       if (need12Stubs) {
+               out.println("private static final long serialVersionUID = 2L;");
+               out.println();
+       }
+
+       // InterfaceHash - don't know how to calculate this - XXX
+       if (need11Stubs) {
+               out.println("private static final long interfaceHash = " + RMIHashes.getInterfaceHash(clazz) + "L;");
+               out.println();
+               if (need12Stubs) {
+                       out.println("private static boolean useNewInvoke;");
+                       out.println();
+               }
+
+               // Operation table
+               out.print("private static final java.rmi.server.Operation[] operations = {");
+
+               ctrl.indent();
+               for (int i = 0; i < remotemethods.length; i++) {
+                       Method m = remotemethods[i].meth;
+                       out.print("new java.rmi.server.Operation(\"");
+                       out.print(getPrettyName(m.getReturnType()) + " ");
+                       out.print(m.getName() + "(");
+                       // Output signature
+                       Class[] sig = m.getParameterTypes();
+                       for (int j = 0; j < sig.length; j++) {
+                               out.print(getPrettyName(sig[j]));
+                               if (j+1 < sig.length) {
+                                       out.print(", ");
+                               }
+                       }
+                       out.print(")\")");
+                       if (i + 1 < remotemethods.length) {
+                               out.println(",");
+                       }
+               }
+               ctrl.unindent();
+               out.println("};");
+               out.println();
+       }
+
+       // Set of method references.
+       if (need12Stubs) {
+               for (int i = 0; i < remotemethods.length; i++) {
+                       Method m = remotemethods[i].meth;
+                       out.println("private static java.lang.reflect.Method $method_" + m.getName() + "_" + i + ";");
+               }
+
+               // Initialize the methods references.
+               out.println();
+               out.print("static {");
+               ctrl.indent();
+
+               out.print("try {");
+               ctrl.indent();
+
+               if (need11Stubs) {
+                       out.println("java.rmi.server.RemoteRef.class.getMethod(\"invoke\", new java.lang.Class[] { java.rmi.Remote.class, java.lang.reflect.Method.class, java.lang.Object[].class, long.class });");
+                       out.println("useNewInvoke = true;");
+               }
+
+               for (int i = 0; i < remotemethods.length; i++) {
+                       Method m = remotemethods[i].meth;
+                       out.print("$method_" + m.getName() + "_" + i + " = ");
+                       out.print(fullclassname + ".class.getMethod(\"" + m.getName() + "\"");
+                       out.print(", new java.lang.Class[] {");
+                       // Output signature
+                       Class[] sig = m.getParameterTypes();
+                       for (int j = 0; j < sig.length; j++) {
+                               out.print(getPrettyName(sig[j]) + ".class");
+                               if (j+1 < sig.length) {
+                                       out.print(", ");
+                               }
+                       }
+                       out.println("});");
+               }
+               ctrl.unindent();
+               out.println("}");
+               out.print("catch (java.lang.NoSuchMethodException e) {");
+               ctrl.indent();
+               if (need11Stubs) {
+                       out.print("useNewInvoke = false;");
+               }
+               else {
+                       out.print("throw new java.lang.NoSuchMethodError(\"stub class initialization failed\");");
+               }
+
+               ctrl.unindent();
+               out.print("}");
+
+               ctrl.unindent();
+               out.println("}");
+               out.println();
+       }
+
+       // Constructors
+       if (need11Stubs) {
+               out.print("public " + stubname + "() {");
+               ctrl.indent();
+               out.print("super();");
+               ctrl.unindent();
+               out.println("}");
+       }
+
+       if (need12Stubs) {
+               out.print("public " + stubname + "(java.rmi.server.RemoteRef ref) {");
+               ctrl.indent();
+               out.print("super(ref);");
+               ctrl.unindent();
+               out.println("}");
+       }
+
+       // Method implementations
+       for (int i = 0; i < remotemethods.length; i++) {
+               Method m = remotemethods[i].meth;
+               Class[] sig = m.getParameterTypes();
+               Class returntype = m.getReturnType();
+               Class[] except = sortExceptions(m.getExceptionTypes());
+
+               out.println();
+               out.print("public " + getPrettyName(returntype) + " " + m.getName() + "(");
+               for (int j = 0; j < sig.length; j++) {
+                       out.print(getPrettyName(sig[j]));
+                       out.print(" $param_" + j);
+                       if (j+1 < sig.length) {
+                               out.print(", ");
+                       }
+               }
+               out.print(") ");
+               out.print("throws ");
+               for (int j = 0; j < except.length; j++) {
+                       out.print(getPrettyName(except[j]));
+                       if (j+1 < except.length) {
+                               out.print(", ");
+                       }
+               }
+               out.print(" {");
+               ctrl.indent();
+
+               out.print("try {");
+               ctrl.indent();
+
+               if (need12Stubs) {
+                       if (need11Stubs) {
+                               out.print("if (useNewInvoke) {");
+                               ctrl.indent();
+                       }
+                       if (returntype != Void.TYPE) {
+                               out.print("java.lang.Object $result = ");
+                       }
+                       out.print("ref.invoke(this, $method_" + m.getName() + "_" + i + ", ");
+                       if (sig.length == 0) {
+                               out.print("null, ");
+                       }
+                       else {
+                               out.print("new java.lang.Object[] {");
+                               for (int j = 0; j < sig.length; j++) {
+                                       if (sig[j] == Boolean.TYPE) {
+                                               out.print("new java.lang.Boolean($param_" + j + ")");
+                                       }
+                                       else if (sig[j] == Byte.TYPE) {
+                                               out.print("new java.lang.Byte($param_" + j + ")");
+                                       }
+                                       else if (sig[j] == Character.TYPE) {
+                                               out.print("new java.lang.Character($param_" + j + ")");
+                                       }
+                                       else if (sig[j] == Short.TYPE) {
+                                               out.print("new java.lang.Short($param_" + j + ")");
+                                       }
+                                       else if (sig[j] == Integer.TYPE) {
+                                               out.print("new java.lang.Integer($param_" + j + ")");
+                                       }
+                                       else if (sig[j] == Long.TYPE) {
+                                               out.print("new java.lang.Long($param_" + j + ")");
+                                       }
+                                       else if (sig[j] == Float.TYPE) {
+                                               out.print("new java.lang.Float($param_" + j + ")");
+                                       }
+                                       else if (sig[j] == Double.TYPE) {
+                                               out.print("new java.lang.Double($param_" + j + ")");
+                                       }
+                                       else {
+                                               out.print("$param_" + j);
+                                       }
+                                       if (j+1 < sig.length) {
+                                               out.print(", ");
+                                       }
+                               }
+                               out.print("}, ");
+                       }
+                       out.print(Long.toString(remotemethods[i].hash) + "L");
+                       out.print(");");
+
+                       if (returntype != Void.TYPE) {
+                               out.println();
+                               out.print("return (");
+                               if (returntype == Boolean.TYPE) {
+                                       out.print("((java.lang.Boolean)$result).booleanValue()");
+                               }
+                               else if (returntype == Byte.TYPE) {
+                                       out.print("((java.lang.Byte)$result).byteValue()");
+                               }
+                               else if (returntype == Character.TYPE) {
+                                       out.print("((java.lang.Character)$result).charValue()");
+                               }
+                               else if (returntype == Short.TYPE) {
+                                       out.print("((java.lang.Short)$result).shortValue()");
+                               }
+                               else if (returntype == Integer.TYPE) {
+                                       out.print("((java.lang.Integer)$result).intValue()");
+                               }
+                               else if (returntype == Long.TYPE) {
+                                       out.print("((java.lang.Long)$result).longValue()");
+                               }
+                               else if (returntype == Float.TYPE) {
+                                       out.print("((java.lang.Float)$result).floatValue()");
+                               }
+                               else if (returntype == Double.TYPE) {
+                                       out.print("((java.lang.Double)$result).doubleValue()");
+                               }
+                               else {
+                                       out.print("(" + getPrettyName(returntype) + ")$result");
+                               }
+                               out.print(");");
+                       }
+
+                       if (need11Stubs) {
+                               ctrl.unindent();
+                               out.println("}");
+                               out.print("else {");
+                               ctrl.indent();
+                       }
+               }
+
+               if (need11Stubs) {
+                       out.println("java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, " + i + ", interfaceHash);");
+                       out.print("try {");
+                       ctrl.indent();
+                       out.print("java.io.ObjectOutput out = call.getOutputStream();");
+                       for (int j = 0; j < sig.length; j++) {
+                               out.println();
+                               if (sig[j] == Boolean.TYPE) {
+                                       out.print("out.writeBoolean(");
+                               }
+                               else if (sig[j] == Byte.TYPE) {
+                                       out.print("out.writeByte(");
+                               }
+                               else if (sig[j] == Character.TYPE) {
+                                       out.print("out.writeChar(");
+                               }
+                               else if (sig[j] == Short.TYPE) {
+                                       out.print("out.writeShort(");
+                               }
+                               else if (sig[j] == Integer.TYPE) {
+                                       out.print("out.writeInt(");
+                               }
+                               else if (sig[j] == Long.TYPE) {
+                                       out.print("out.writeLong(");
+                               }
+                               else if (sig[j] == Float.TYPE) {
+                                       out.print("out.writeFloat(");
+                               }
+                               else if (sig[j] == Double.TYPE) {
+                                       out.print("out.writeDouble(");
+                               }
+                               else {
+                                       out.print("out.writeObject(");
+                               }
+                               out.print("$param_" + j + ");");
+                       }
+                       ctrl.unindent();
+                       out.println("}");
+                       out.print("catch (java.io.IOException e) {");
+                       ctrl.indent();
+                       out.print("throw new java.rmi.MarshalException(\"error marshalling arguments\", e);");
+                       ctrl.unindent();
+                       out.println("}");
+                       out.println("ref.invoke(call);");
+                       if (returntype != Void.TYPE) {
+                               out.println(getPrettyName(returntype) + " $result;");
+                       }
+                       out.print("try {");
+                       ctrl.indent();
+                       out.print("java.io.ObjectInput in = call.getInputStream();");
+                       boolean needcastcheck = false;
+                       if (returntype != Void.TYPE) {
+                               out.println();
+                               out.print("$result = ");
+                               if (returntype == Boolean.TYPE) {
+                                       out.print("in.readBoolean();");
+                               }
+                               else if (returntype == Byte.TYPE) {
+                                       out.print("in.readByte();");
+                               }
+                               else if (returntype == Character.TYPE) {
+                                       out.print("in.readChar();");
+                               }
+                               else if (returntype == Short.TYPE) {
+                                       out.print("in.readShort();");
+                               }
+                               else if (returntype == Integer.TYPE) {
+                                       out.print("in.readInt();");
+                               }
+                               else if (returntype == Long.TYPE) {
+                                       out.print("in.readLong();");
+                               }
+                               else if (returntype == Float.TYPE) {
+                                       out.print("in.readFloat();");
+                               }
+                               else if (returntype == Double.TYPE) {
+                                       out.print("in.readDouble();");
+                               }
+                               else {
+                                       if (returntype != Object.class) {
+                                               out.print("(" + getPrettyName(returntype) + ")");
+                                       }
+                                       else {
+                                               needcastcheck = true;
+                                       }
+                                       out.print("in.readObject();");
+                               }
+                               out.println();
+                               out.print("return ($result);");
+                       }
+                       ctrl.unindent();
+                       out.println("}");
+                       out.print("catch (java.io.IOException e) {");
+                       ctrl.indent();
+                       out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
+                       ctrl.unindent();
+                       out.println("}");
+                       if (needcastcheck) {
+                               out.print("catch (java.lang.ClassNotFoundException e) {");
+                               ctrl.indent();
+                               out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
+                               ctrl.unindent();
+                               out.println("}");
+                       }
+                       out.print("finally {");
+                       ctrl.indent();
+                       out.print("ref.done(call);");
+                       ctrl.unindent();
+                       out.print("}");
+
+                       if (need12Stubs && need11Stubs) {
+                               ctrl.unindent();
+                               out.print("}");
+                       }
+               }
+
+               ctrl.unindent();
+               out.print("}");
+
+               boolean needgeneral = true;
+               for (int j = 0; j < except.length; j++) {
+                       out.println();
+                       out.print("catch (" + getPrettyName(except[j]) + " e) {");
+                       ctrl.indent();
+                       out.print("throw e;");
+                       ctrl.unindent();
+                       out.print("}");
+                       if (except[j] == Exception.class) {
+                               needgeneral = false;
+                       }
+               }
+               if (needgeneral) {
+                       out.println();
+                       out.print("catch (java.lang.Exception e) {");
+                       ctrl.indent();
+                       out.print("throw new java.rmi.UnexpectedException(\"undeclared checked exception\", e);");
+                       ctrl.unindent();
+                       out.print("}");
+               }
+
+               ctrl.unindent();
+               out.print("}");
+               out.println();
+       }
+
+       ctrl.unindent();
+       out.println("}");
+
+       out.close();
+}
+
+private void generateSkel() throws IOException {
+       skelname = classname + "_Skel";
+       ctrl = new TabbedWriter(new FileWriter(skelname + ".java"));
+       out = new PrintWriter(ctrl);
+
+       if (verbose) {
+               System.out.println("[Generating class " + skelname + ".java]");
+       }
+
+       out.println("// Skel class generated by rmic - DO NOT EDIT!");
+       out.println();
+       if (fullclassname != classname) {
+               String pname = fullclassname.substring(0, fullclassname.lastIndexOf('.'));
+               out.println("package " + pname + ";");
+               out.println();
+       }
+
+       out.print("public final class " + skelname);
+       ctrl.indent();
+       
+       // Output interfaces we implement
+       out.print("implements java.rmi.server.Skeleton");
+
+       ctrl.unindent();
+       out.print("{");
+       ctrl.indent();
+
+       // Interface hash - don't know how to calculate this - XXX
+       out.println("private static final long interfaceHash = " + RMIHashes.getInterfaceHash(clazz) + "L;");
+       out.println();
+
+       // Operation table
+       out.print("private static final java.rmi.server.Operation[] operations = {");
+
+       ctrl.indent();
+       for (int i = 0; i < remotemethods.length; i++) {
+               Method m = remotemethods[i].meth;
+               out.print("new java.rmi.server.Operation(\"");
+               out.print(getPrettyName(m.getReturnType()) + " ");
+               out.print(m.getName() + "(");
+               // Output signature
+               Class[] sig = m.getParameterTypes();
+               for (int j = 0; j < sig.length; j++) {
+                       out.print(getPrettyName(sig[j]));
+                       if (j+1 < sig.length) {
+                               out.print(", ");
+                       }
+               }
+               out.print("\")");
+               if (i + 1 < remotemethods.length) {
+                       out.println(",");
+               }
+       }
+       ctrl.unindent();
+       out.println("};");
+
+       out.println();
+
+       // getOpertions method
+       out.print("public java.rmi.server.Operation[] getOperations() {");
+       ctrl.indent();
+       out.print("return ((java.rmi.server.Operation[]) operations.clone());");
+       ctrl.unindent();
+       out.println("}");
+
+       out.println();
+
+       // Dispatch method
+       out.print("public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {");
+       ctrl.indent();
+
+       out.print("if (opnum < 0) {");
+       ctrl.indent();
+
+       for (int i = 0; i < remotemethods.length; i++) {
+               out.print("if (hash == " + Long.toString(remotemethods[i].hash) + "L) {");
+               ctrl.indent();
+               out.print("opnum = " + i + ";");
+               ctrl.unindent();
+               out.println("}");
+               out.print("else ");
+       }
+       out.print("{");
+       ctrl.indent();
+       out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
+       ctrl.unindent();
+       out.print("}");
+
+       ctrl.unindent();
+       out.println("}");
+       out.print("else if (hash != interfaceHash) {");
+       ctrl.indent();
+       out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
+       ctrl.unindent();
+       out.println("}");
+
+       out.println();
+
+       out.println(fullclassname + " server = (" + fullclassname + ")obj;");
+       out.println("switch (opnum) {");
+
+       // Method dispatch
+       for (int i = 0; i < remotemethods.length; i++) {
+               Method m = remotemethods[i].meth;
+               out.println("case " + i + ":");
+               out.print("{");
+               ctrl.indent();
+
+               Class[] sig = m.getParameterTypes();
+               for (int j = 0; j < sig.length; j++) {
+                       out.print(getPrettyName(sig[j]));
+                       out.println(" $param_" + j + ";");
+               }
+
+               out.print("try {");
+               boolean needcastcheck = false;
+               ctrl.indent();
+               out.println("java.io.ObjectInput in = call.getInputStream();");
+               for (int j = 0; j < sig.length; j++) {
+                       out.print("$param_" + j + " = ");
+                       if (sig[j] == Boolean.TYPE) {
+                               out.print("in.readBoolean();");
+                       }
+                       else if (sig[j] == Byte.TYPE) {
+                               out.print("in.readByte();");
+                       }
+                       else if (sig[j] == Character.TYPE) {
+                               out.print("in.readChar();");
+                       }
+                       else if (sig[j] == Short.TYPE) {
+                               out.print("in.readShort();");
+                       }
+                       else if (sig[j] == Integer.TYPE) {
+                               out.print("in.readInt();");
+                       }
+                       else if (sig[j] == Long.TYPE) {
+                               out.print("in.readLong();");
+                       }
+                       else if (sig[j] == Float.TYPE) {
+                               out.print("in.readFloat();");
+                       }
+                       else if (sig[j] == Double.TYPE) {
+                               out.print("in.readDouble();");
+                       }
+                       else {
+                               if (sig[j] != Object.class) {
+                                       out.print("(" + getPrettyName(sig[j]) + ")");
+                                       needcastcheck = true;
+                               }
+                               out.print("in.readObject();");
+                       }
+                       out.println();
+               }
+               ctrl.unindent();
+               out.println("}");
+               out.print("catch (java.io.IOException e) {");
+               ctrl.indent();
+               out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
+               ctrl.unindent();
+               out.println("}");
+               if (needcastcheck) {
+                       out.print("catch (java.lang.ClassCastException e) {");
+                       ctrl.indent();
+                       out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
+                       ctrl.unindent();
+                       out.println("}");
+               }
+               out.print("finally {");
+               ctrl.indent();
+               out.print("call.releaseInputStream();");
+               ctrl.unindent();
+               out.println("}");
+
+               Class returntype = m.getReturnType();
+               if (returntype != Void.TYPE) {
+                       out.print(getPrettyName(returntype) + " $result = ");
+               }
+               out.print("server." + m.getName() + "(");
+               for (int j = 0; j < sig.length; j++) {
+                       out.print("$param_" + j);
+                       if (j + 1 < sig.length) {
+                               out.print(", ");
+                       }
+               }
+               out.println(");");
+
+               out.print("try {");
+               ctrl.indent();
+               out.print("java.io.ObjectOutput out = call.getResultStream(true);");
+               if (returntype != Void.TYPE) {
+                       out.println();
+                       if (returntype == Boolean.TYPE) {
+                               out.print("out.writeBoolean($result);");
+                       }
+                       else if (returntype == Byte.TYPE) {
+                               out.print("out.writeByte($result);");
+                       }
+                       else if (returntype == Character.TYPE) {
+                               out.print("out.writeChar($result);");
+                       }
+                       else if (returntype == Short.TYPE) {
+                               out.print("out.writeShort($result);");
+                       }
+                       else if (returntype == Integer.TYPE) {
+                               out.print("out.writeInt($result);");
+                       }
+                       else if (returntype == Long.TYPE) {
+                               out.print("out.writeLong($result);");
+                       }
+                       else if (returntype == Float.TYPE) {
+                               out.print("out.writeFloat($result);");
+                       }
+                       else if (returntype == Double.TYPE) {
+                               out.print("out.writeDouble($result);");
+                       }
+                       else {
+                               out.print("out.writeObject($result);");
+                       }
+               }
+               ctrl.unindent();
+               out.println("}");
+               out.print("catch (java.io.IOException e) {");
+               ctrl.indent();
+               out.print("throw new java.rmi.MarshalException(\"error marshalling return\", e);");
+               ctrl.unindent();
+               out.println("}");
+               out.print("break;");
+
+               ctrl.unindent();
+               out.println("}");
+               out.println();
+       }
+
+       out.print("default:");
+       ctrl.indent();
+       out.print("throw new java.rmi.UnmarshalException(\"invalid method number\");");
+       ctrl.unindent();
+       out.print("}");
+
+       ctrl.unindent();
+       out.print("}");
+
+       ctrl.unindent();
+       out.println("}");
+
+       out.close();
+}
+
+private void compile(String name) throws Exception {
+       throw new Error ("Not implemented");
+//     Compiler comp = Compiler.getInstance();
+//     if (verbose) {
+//             System.out.println("[Compiling class " + name + "]");
+//     }
+//     comp.setDestination(destination);
+//     boolean result = comp.compile(name);
+//     if (result == false) {
+//             throw comp.getException();
+//     }
+}
+
+private static String getPrettyName(Class cls) {
+        StringBuffer str = new StringBuffer();
+        for (int count = 0;; count++) {
+                if (!cls.isArray()) {
+                        str.append(cls.getName());
+                        for (; count > 0; count--) {
+                                str.append("[]");
+                        }
+                        return (str.toString());
+                }
+                cls = cls.getComponentType();
+        }
+}
+
+/**
+ * Sort exceptions so the most general go last.
+ */
+private Class[] sortExceptions(Class[] except) {
+       for (int i = 0; i < except.length; i++) {
+               for (int j = i+1; j < except.length; j++) {
+                       if (except[i].isAssignableFrom(except[j])) {
+                               Class tmp = except[i];
+                               except[i] = except[j];
+                               except[j] = tmp;
+                       }
+               }
+       }
+       return (except);
+}
+
+/**
+ * Process the options until we find the first argument.
+ */
+private void parseOptions() {
+       for (;;) {
+               if (next >= args.length || args[next].charAt(0) != '-') {
+                       break;
+               }
+               String arg = args[next];
+               next++;
+
+               if (arg.equals("-keep")) {
+                       keep = true;
+               }
+               else if (arg.equals("-keepgenerated")) {
+                       keep = true;
+               }
+               else if (arg.equals("-v1.1")) {
+                       need11Stubs = true;
+                       need12Stubs = false;
+               }
+               else if (arg.equals("-vcompat")) {
+                       need11Stubs = true;
+                       need12Stubs = true;
+               }
+               else if (arg.equals("-v1.2")) {
+                       need11Stubs = false;
+                       need12Stubs = true;
+               }
+               else if (arg.equals("-g")) {
+               }
+               else if (arg.equals("-depend")) {
+               }
+               else if (arg.equals("-nowarn")) {
+               }
+               else if (arg.equals("-verbose")) {
+                       verbose = true;
+               }
+               else if (arg.equals("-nocompile")) {
+                       compile = false;
+               }
+               else if (arg.equals("-classpath")) {
+                       next++;
+               }
+               else if (arg.equals("-d")) {
+                       destination = args[next];
+                       next++;
+               }
+               else if (arg.charAt(1) == 'J') {
+               }
+               else {
+                       System.err.println("Unknown option: " + arg);
+               }
+       }
+}
+
+private static void usage() {
+       System.out.println(
+"usage: rmic [-options] classes\n" +
+"Options are:\n" +
+"      -keep                   Don't delete any intermediate files\n" +
+"      -keepgenerated          Same as -keep\n" +
+"      -v1.1                   Java 1.1 style stubs only\n" +
+"      -vcompat                Java 1.1 & Java 1.2 stubs\n" +
+"      -v1.2                   Java 1.2 style stubs only\n" +
+"      -g *                    Generated debugging information\n" +
+"      -depend *               Recompile out-of-date files\n" +
+"      -nowarn *               Suppress warning messages\n" +
+"      -nocompile              Don't compile the generated files\n" +
+"      -verbose                Output what's going on\n" +
+"      -classpath <path> *     Use given path as classpath\n" +
+"      -d <directory>          Specify where to place generated classes\n" +
+"      -J<flag> *              Pass flag to Java\n" +
+"  * Option currently ignored"
+       );
+}
+
+static class MethodRef
+       implements Comparable {
+
+Method meth;
+String sig;
+long hash;
+
+MethodRef(Method m) {
+       meth = m;
+       // We match on the name - but what about overloading? - XXX
+       sig = m.getName();
+       hash = RMIHashes.getMethodHash(m);
+}
+
+public int compareTo(Object obj) {
+       MethodRef that = (MethodRef)obj;
+       return (this.sig.compareTo(that.sig));
+}
+
+}
+
+}
diff --git a/libjava/gnu/java/rmi/rmic/TabbedWriter.java b/libjava/gnu/java/rmi/rmic/TabbedWriter.java
new file mode 100644 (file)
index 0000000..c2e668c
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.rmic;
+
+import java.io.FilterWriter;
+import java.io.Writer;
+import java.io.IOException;
+
+public class TabbedWriter
+       extends FilterWriter {
+
+private static final String defaultTabstring = "    ";
+private char[] tabstring; 
+private int tabs;
+
+public TabbedWriter(Writer o) {
+       this(o, defaultTabstring);
+}
+
+public TabbedWriter(Writer o, String str) {
+       super(o);
+       tabs = 0;
+       tabstring = str.toCharArray();
+}
+
+public void write(int c) throws IOException {
+       out.write(c);
+       if (c == '\n') {
+               for (int i = 0; i < tabs; i++) {
+                       out.write(tabstring, 0, tabstring.length);
+               }
+       }
+}
+
+public void write(char cbuf[], int off, int len) throws IOException {
+       for (int i = 0; i < len; i++) {
+               write((int)cbuf[i+off]);
+       }
+}
+
+public void write(String str, int off, int len) throws IOException {
+       write(str.toCharArray(), off, len);
+}
+
+public void unindent() throws IOException {
+       unindent(1);
+}
+
+public void unindent(int nr) throws IOException {
+       indent(-nr);
+}
+
+public void indent() throws IOException {
+       indent(1);
+}
+
+public void indent(int nr) throws IOException {
+       tabs += nr;
+       if (tabs < 0) {
+               tabs = 0;
+       }
+       write((int)'\n');
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/ProtocolConstants.java b/libjava/gnu/java/rmi/server/ProtocolConstants.java
new file mode 100644 (file)
index 0000000..431a699
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+public interface ProtocolConstants {
+
+final public static int PROTOCOL_HEADER = 0x4a524d49; // JRMI
+final public static int PROTOCOL_VERSION = 2;
+
+final public static int STREAM_PROTOCOL = 0x4b;
+final public static int SINGLE_OP_PROTOCOL = 0x4c;
+final public static int MULTIPLEX_PROTOCOL = 0x4d;
+
+final public static int PROTOCOL_ACK = 0x4e;
+final public static int PROTOCOL_NACK = 0x4f;
+
+final public static int MESSAGE_CALL = 0x50;
+final public static int MESSAGE_CALL_ACK = 0x51;
+final public static int MESSAGE_PING = 0x52;
+final public static int MESSAGE_PING_ACK = 0x53;
+final public static int MESSAGE_DGCACK = 0x54;
+
+final public static int RETURN_ACK = 0x01;
+final public static int RETURN_NACK = 0x02;
+
+final public static int DEFAULT_PROTOCOL = STREAM_PROTOCOL;
+
+};
diff --git a/libjava/gnu/java/rmi/server/RMIDefaultSocketFactory.java b/libjava/gnu/java/rmi/server/RMIDefaultSocketFactory.java
new file mode 100644 (file)
index 0000000..610c3a7
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.rmi.server.RMISocketFactory;
+import java.io.IOException;
+import java.net.Socket;
+import java.net.ServerSocket;
+
+public class RMIDefaultSocketFactory
+       extends RMISocketFactory {
+
+public RMIDefaultSocketFactory() {
+}
+
+public Socket createSocket(String host, int port) throws IOException {
+       return (new Socket(host, port));
+}
+
+public ServerSocket createServerSocket(int port) throws IOException {
+       return (new ServerSocket(port));
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/RMIHashes.java b/libjava/gnu/java/rmi/server/RMIHashes.java
new file mode 100644 (file)
index 0000000..dc00276
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.lang.reflect.Method;
+import java.lang.Class;
+import gnu.java.security.provider.SHA;
+
+public class RMIHashes
+{
+  public static long getMethodHash(Method meth)
+  {
+    return meth.hashCode ();
+  }
+
+  public static long getInterfaceHash(Class clazz)
+  {
+    return clazz.hashCode ();
+  }
+}
diff --git a/libjava/gnu/java/rmi/server/RMIObjectInputStream.java b/libjava/gnu/java/rmi/server/RMIObjectInputStream.java
new file mode 100644 (file)
index 0000000..b6efbf0
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.io.ObjectStreamClass;
+import java.io.ObjectInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.rmi.server.RMIClassLoader;
+
+public class RMIObjectInputStream
+       extends ObjectInputStream {
+
+UnicastConnectionManager manager;
+
+public RMIObjectInputStream(InputStream strm, UnicastConnectionManager man) throws IOException {
+       super(strm);
+       manager = man;
+       enableResolveObject(true);
+}
+
+protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
+//System.out.println("Resolving class: " + desc.getName());
+       String annotation = (String)readObject();
+       if (annotation == null) {
+               return (super.resolveClass(desc));
+       }
+       else {
+               try {
+                       return (RMIClassLoader.loadClass(new URL(annotation), desc.getName()));
+               }
+               catch (MalformedURLException _) {
+                       throw new ClassNotFoundException(desc.getName());
+               }
+       }
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java b/libjava/gnu/java/rmi/server/RMIObjectOutputStream.java
new file mode 100644 (file)
index 0000000..960252b
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+import java.rmi.server.RMIClassLoader;
+
+public class RMIObjectOutputStream
+       extends ObjectOutputStream {
+
+public RMIObjectOutputStream(OutputStream strm) throws IOException {
+       super(strm);
+}
+
+protected void annotateClass(Class cls) throws IOException {
+//System.out.println("Annotating class: " + cls);
+       writeObject(RMIClassLoader.getClassAnnotation(cls));
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/UnicastConnection.java b/libjava/gnu/java/rmi/server/UnicastConnection.java
new file mode 100644 (file)
index 0000000..04d18be
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.lang.Runnable;
+import java.net.Socket;
+import java.net.ServerSocket;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.rmi.RemoteException;
+
+public class UnicastConnection 
+       implements Runnable, ProtocolConstants {
+
+UnicastConnectionManager manager;
+Socket sock;
+DataInputStream din;
+DataOutputStream dout;
+ObjectInputStream oin;
+ObjectOutputStream oout;
+
+UnicastConnection(UnicastConnectionManager man, Socket sock) {
+       this.manager = man;
+       this.sock = sock;
+}
+
+void acceptConnection() throws IOException {
+//System.out.println("Accepting connection on " + lport);
+       din = new DataInputStream(sock.getInputStream());
+       dout = new DataOutputStream(sock.getOutputStream());
+
+       int sig = din.readInt();
+       if (sig != PROTOCOL_HEADER) {
+               throw new IOException("bad protocol header");
+       }
+       short ver = din.readShort();
+       if (ver != PROTOCOL_VERSION) {
+               throw new IOException("bad protocol version");
+       }
+       int protocol = din.readUnsignedByte();
+       if (protocol != SINGLE_OP_PROTOCOL) {
+               // Send an ACK
+               dout.writeByte(PROTOCOL_ACK);
+
+               // Send my hostname and port
+               dout.writeUTF(manager.serverName);
+               dout.writeInt(manager.serverPort);
+
+               // Read their hostname and port
+               String rhost = din.readUTF();
+               int rport = din.readInt();
+       }
+       // Okay, ready to roll ...
+}
+
+void makeConnection(int protocol) throws IOException {
+       dout = new DataOutputStream(sock.getOutputStream());
+       din = new DataInputStream(sock.getInputStream());
+
+       // Send header
+       dout.writeInt(PROTOCOL_HEADER);
+       dout.writeShort(PROTOCOL_VERSION);
+       dout.writeByte(protocol);
+       dout.flush();
+
+       if (protocol != SINGLE_OP_PROTOCOL) {
+               // Get back ack.
+               int ack = din.readUnsignedByte();
+               if (ack != PROTOCOL_ACK) {
+                       throw new RemoteException("Unsupported protocol");
+               }
+
+               // Read in host and port
+               String dicard_rhost = din.readUTF();
+               int discard_rport = din.readInt();
+
+               // Send them my endpoint
+               dout.writeUTF(manager.serverName);
+               dout.writeInt(manager.serverPort);
+       }
+       // Okay, ready to roll ...
+}
+
+DataInputStream getDataInputStream() throws IOException {
+       return (din);
+}
+
+DataOutputStream getDataOutputStream() throws IOException {
+       return (dout);
+}
+
+ObjectInputStream getObjectInputStream() throws IOException {
+       if (oin == null) {
+               oin = new RMIObjectInputStream(din, manager);
+       }
+       return (oin);
+}
+
+ObjectOutputStream getObjectOutputStream() throws IOException {
+       if (oout == null) {
+               oout = new RMIObjectOutputStream(dout);
+       }
+       return (oout);
+}
+
+void disconnect() {
+       oin = null;
+       oout = null;
+       try {
+               sock.close();
+       }
+       catch (IOException _) {
+       }
+       din = null;
+       dout = null;
+       sock = null;
+}
+
+/**
+ * We run connects on the server. Dispatch it then discard it.
+ */
+public void run() {
+       try {
+               UnicastServer.dispatch(this);
+               manager.discardConnection(this);
+       }
+       catch (Exception e) {
+               e.printStackTrace();
+       }
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/UnicastConnectionManager.java b/libjava/gnu/java/rmi/server/UnicastConnectionManager.java
new file mode 100644 (file)
index 0000000..84152bd
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.rmi.server.RMISocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.RemoteException;
+import gnu.java.rmi.server.UnicastConnection;
+import java.util.Hashtable;
+import java.net.Socket;
+import java.net.ServerSocket;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.lang.Thread;
+import java.lang.Runnable;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+public class UnicastConnectionManager
+       implements Runnable, ProtocolConstants {
+
+private static String localhost;
+private static Hashtable servers = new Hashtable();
+
+private Thread serverThread;
+private ServerSocket ssock;
+String serverName;
+int serverPort;
+private RMIServerSocketFactory serverFactory;
+private RMIClientSocketFactory clientFactory;
+
+static {
+        try {
+                localhost = InetAddress.getLocalHost().getHostName();
+        }
+        catch (UnknownHostException _) {
+                localhost = "localhost";
+        }
+}
+
+private UnicastConnectionManager(String host, int port, RMIClientSocketFactory csf) {
+       ssock = null;
+       serverName = host;
+       serverPort = port;
+       serverFactory = null;
+       clientFactory = csf;
+}
+
+private UnicastConnectionManager(int port, RMIServerSocketFactory ssf) {
+       try {
+               ssock = ssf.createServerSocket(port);
+               serverPort = ssock.getLocalPort();
+       }
+       catch (IOException _) {
+               try {
+                       ssock = ssf.createServerSocket(0);
+                       serverPort = ssock.getLocalPort();
+               }
+               catch (IOException __) {
+                       ssock = null;
+                       serverPort = 0;
+               }
+       }
+       serverName = localhost;
+       serverFactory = ssf;
+       clientFactory = null;
+}
+
+/**
+ * Return a client connection manager which will connect to the given
+ * host/port.
+ */
+public static synchronized UnicastConnectionManager getInstance(String host, int port, RMIClientSocketFactory csf) {
+//System.out.println("getInstance: " + host + "," + port + "," + csf);
+       if (csf == null) {
+               csf = RMISocketFactory.getSocketFactory();
+       }
+       TripleKey key = new TripleKey(host, port, csf);
+       UnicastConnectionManager man = (UnicastConnectionManager)servers.get(key);
+       if (man == null) {
+               man = new UnicastConnectionManager(host, port, csf);
+               servers.put(key, man);
+       }
+       return (man);
+}
+
+/**
+ * Return a server connection manager which will accept connection on the
+ * given port.
+ */
+public static synchronized UnicastConnectionManager getInstance(int port, RMIServerSocketFactory ssf) {
+//System.out.println("getInstance: " + port + "," + ssf);
+       if (ssf == null) {
+               ssf = RMISocketFactory.getSocketFactory();
+       }
+       TripleKey key = new TripleKey(localhost, port, ssf);
+       UnicastConnectionManager man = (UnicastConnectionManager)servers.get(key);
+       if (man == null) {
+               man = new UnicastConnectionManager(port, ssf);
+               // The provided port might not be the set port.
+               key.port = man.serverPort;
+               servers.put(key, man);
+       }
+       return (man);
+}
+
+/**
+ * Get a connection from this manager.
+ */
+public UnicastConnection getConnection() throws IOException {
+       if (ssock == null) {
+               return (getClientConnection());
+       }
+       else {
+               return (getServerConnection());
+       }
+}
+
+/**
+ * Accept a connection to this server.
+ */
+private UnicastConnection getServerConnection() throws IOException {
+       Socket sock = ssock.accept();
+       UnicastConnection conn = new UnicastConnection(this, sock);
+       conn.acceptConnection();
+//System.out.println("Server connection " + conn);
+       return (conn);
+}
+
+/**
+ * Make a conection from this client to the server.
+ */
+private UnicastConnection getClientConnection() throws IOException {
+       Socket sock = clientFactory.createSocket(serverName, serverPort);
+       UnicastConnection conn = new UnicastConnection(this, sock);
+       conn.makeConnection(DEFAULT_PROTOCOL);
+//System.out.println("Client connection " + conn);
+       return (conn);
+}
+
+/**
+ * Discard a connection when we're done with it - maybe it can be
+ * recycled.
+ */
+public void discardConnection(UnicastConnection conn) {
+//System.out.println("Discarding connection " + conn);
+       conn.disconnect();
+}
+
+/**
+ * Start a server on this manager if it's a server socket and we've not
+ * already got one running.
+ */
+public void startServer() {
+       synchronized(this) {
+               if (ssock == null || serverThread != null) {
+                       return;
+               }
+               serverThread = new Thread(this);
+       }
+       serverThread.start();
+}
+
+/**
+ * Server thread for connection manager.
+ */
+public void run() {
+       for (;;) {
+               try {
+//System.out.println("Waiting for connection on " + serverPort);
+                       UnicastConnection conn = getServerConnection();
+                       (new Thread(conn)).start();
+               }
+               catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+}
+
+/**
+ * Serialization routine.
+ */
+void write(ObjectOutput out) throws IOException {
+        out.writeUTF(serverName);
+        out.writeInt(serverPort);
+}
+
+/**
+ * Serialization routine.
+ */
+static UnicastConnectionManager read(ObjectInput in) throws IOException {
+        String host = in.readUTF();
+        int port = in.readInt();
+       RMIClientSocketFactory csf = ((RMIObjectInputStream)in).manager.clientFactory;
+        return (getInstance(host, port, csf));
+}
+
+}
+
+/**
+ * This is use as the hashkey for the client/server connections.
+ */
+class TripleKey {
+
+String host;
+int port;
+Object other;
+
+TripleKey(String host, int port, Object other) {
+       this.host = host;
+       this.port = port;
+       this.other = other;
+}
+
+/**
+ * Hash code just include the host and other - we ignore the port since
+ * this has unusual matching behaviour.
+ */
+public int hashCode() {
+       return (host.hashCode() ^ other.hashCode());
+}
+
+public boolean equals(Object obj) {
+       if (obj instanceof TripleKey) {
+               TripleKey other = (TripleKey)obj;
+               if (this.host.equals(other.host) &&
+                   this.other == other.other &&
+                   (this.port == other.port || this.port == 0 || other.port == 0)) {
+                       return (true);
+               }
+       }
+       return (false);
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/UnicastRef.java b/libjava/gnu/java/rmi/server/UnicastRef.java
new file mode 100644 (file)
index 0000000..837e6e4
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.server.RemoteRef;
+import java.rmi.server.RMISocketFactory;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.server.RemoteObject;
+import java.rmi.server.RemoteCall;
+import java.rmi.server.UnicastRemoteObject;
+import java.rmi.server.Operation;
+import java.rmi.server.ObjID;
+import java.rmi.server.UID;
+import java.lang.reflect.Method;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.net.Socket;
+import java.net.InetAddress;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+
+public class UnicastRef
+       implements RemoteRef, ProtocolConstants {
+
+public ObjID objid;
+UnicastConnectionManager manager;
+
+/**
+ * Used by serialization.
+ */
+private UnicastRef() {
+}
+
+public UnicastRef(ObjID objid, String host, int port, RMIClientSocketFactory csf) {
+       this(objid);
+       manager = UnicastConnectionManager.getInstance(host, port, csf);
+}
+
+public UnicastRef(ObjID objid) {
+       this.objid = objid;
+}
+
+public Object invoke(Remote obj, Method method, Object[] params, long opnum) throws Exception {
+       return (invokeCommon(obj, method, params, -1, opnum));
+}
+
+private Object invokeCommon(Remote obj, Method method, Object[] params, int opnum, long hash) throws Exception {
+       UnicastConnection conn;
+       try {
+               conn = manager.getConnection();
+       }
+       catch (IOException e1) {
+               throw new RemoteException("connection failed to host: " + manager.serverName, e1);
+       }
+
+       ObjectOutputStream out;
+       DataOutputStream dout;
+       try {
+               dout = conn.getDataOutputStream();
+               dout.writeByte(MESSAGE_CALL);
+
+               out = conn.getObjectOutputStream();
+               
+               objid.write(out);
+               out.writeInt(opnum);
+               out.writeLong(hash);
+               if (params != null) {
+                       for (int i = 0; i < params.length; i++) {
+                               if (params[i] instanceof UnicastRemoteObject) {
+                                       out.writeObject(UnicastRemoteObject.exportObject((UnicastRemoteObject)params[i]));
+                               }
+                               else {
+                                       out.writeObject(params[i]);
+                               }
+                       }
+               }
+
+               out.flush();
+       }
+       catch (IOException e2) {
+               throw new RemoteException("call failed: ", e2);
+       }
+
+       int returncode;
+       Object returnval;
+       DataInputStream din;
+       ObjectInputStream in;
+       UID ack;
+       try {
+               din = conn.getDataInputStream();
+               if (din.readUnsignedByte() != MESSAGE_CALL_ACK) {
+                       throw new RemoteException("Call not acked");
+               }
+
+               in = conn.getObjectInputStream();
+
+               returncode = in.readUnsignedByte();
+               ack = UID.read(in);
+               returnval = in.readObject();
+       }
+       catch (IOException e3) {
+               throw new RemoteException("call return failed: ", e3);
+       }
+
+       manager.discardConnection(conn);
+
+       if (returncode != RETURN_ACK) {
+               throw (Exception)returnval;
+       }
+
+       return (returnval);
+}
+
+/**
+ * @deprecated
+ */
+public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException {
+       return (new UnicastRemoteCall(obj, opnum, hash));
+}
+
+/**
+ * @deprecated
+ */
+public void invoke(RemoteCall call) throws Exception {
+       UnicastRemoteCall c = (UnicastRemoteCall)call;
+       Object ret = invokeCommon((Remote)c.getObject(), (Method)null, c.getArguments(), c.getOpnum(), c.getHash());
+       c.setReturnValue(ret);
+}
+
+/**
+ * @deprecated
+ */
+public void done(RemoteCall call) throws RemoteException {
+       /* Does nothing */
+}
+
+public void writeExternal(ObjectOutput out) throws IOException {
+       if (manager == null) {
+               throw new IOException("no connection");
+       }
+       manager.write(out);
+       objid.write(out);
+       out.writeByte(RETURN_ACK);
+}
+
+public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+       manager = UnicastConnectionManager.read(in);
+       objid = ObjID.read(in);
+       if (in.readByte() != RETURN_ACK) {
+               throw new IOException("no ack found");
+       }
+}
+
+public boolean remoteEquals(RemoteRef ref) {
+       throw new Error("Not implemented");
+}
+
+public int remoteHashCode() {
+       throw new Error("Not implemented");
+}
+
+public String getRefClass(ObjectOutput out) {
+       return ("UnicastRef");
+}
+
+public String remoteToString() {
+       throw new Error("Not implemented");
+}
+
+public void dump(UnicastConnection conn) {
+       try {
+               DataInputStream din = conn.getDataInputStream();
+               for (;;) {
+                       int b = din.readUnsignedByte();
+                       System.out.print(Integer.toHexString(b));
+                       if (b >= 32 && b < 128) {
+                               System.out.print(": " + (char)b);
+                       }
+                       System.out.println();
+               }
+       }
+       catch (IOException _) {
+       }
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/UnicastRemoteCall.java b/libjava/gnu/java/rmi/server/UnicastRemoteCall.java
new file mode 100644 (file)
index 0000000..42759e7
--- /dev/null
@@ -0,0 +1,301 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.lang.Exception;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.StreamCorruptedException;
+import java.rmi.server.RemoteCall;
+import java.util.Vector;
+
+public class UnicastRemoteCall
+       implements RemoteCall {
+
+private UnicastConnection conn;
+private Object result;
+private Object object;
+private int opnum;
+private long hash;
+private Vector vec;
+private int ptr;
+
+/**
+ * Incoming call.
+ */
+UnicastRemoteCall(UnicastConnection conn) {
+       this.conn = conn;
+}
+
+/**
+ * Outgoing call.
+ */
+UnicastRemoteCall(Object obj, int opnum, long hash) {
+       this.object = obj;
+       this.opnum = opnum;
+       this.hash = hash;
+}
+
+public ObjectOutput getOutputStream() throws IOException {
+       vec = new Vector();
+       return (new DummyObjectOutputStream());
+}
+
+public void releaseOutputStream() throws IOException {
+       // Does nothing.
+}
+
+public ObjectInput getInputStream() throws IOException {
+       if (conn != null) {
+               return (conn.getObjectInputStream());
+       }
+       else {
+               ptr = 0;
+               return (new DummyObjectInputStream());
+       }
+}
+
+public void releaseInputStream() throws IOException {
+       // Does nothing.
+}
+
+public ObjectOutput getResultStream(boolean success) throws IOException, StreamCorruptedException {
+       vec = new Vector();
+       return (new DummyObjectOutputStream());
+}
+
+public void executeCall() throws Exception {
+       throw new Error("Not implemented");
+}
+
+public void done() throws IOException {
+       /* Does nothing */
+}
+
+Object returnValue() {
+       return (vec.elementAt(0));
+}
+
+Object[] getArguments() {
+       return (vec.toArray());
+}
+
+Object getObject() {
+       return (object);
+}
+
+int getOpnum() {
+       return (opnum);
+}
+
+long getHash() {
+       return (hash);
+}
+
+void setReturnValue(Object obj) {
+       vec.removeAllElements();
+       vec.addElement(obj);
+}
+
+/**
+ * Dummy object output class.
+ */
+private class DummyObjectOutputStream implements ObjectOutput {
+
+public void writeBoolean(boolean v) throws IOException {
+       vec.addElement(new Boolean(v));
+}
+
+public void writeByte(int v) throws IOException {
+       vec.addElement(new Byte((byte)v));
+}
+
+public void writeChar(int v) throws IOException {
+       vec.addElement(new Character((char)v));
+}
+
+public void writeDouble(double v) throws IOException {
+       vec.addElement(new Double(v));
+}
+
+public void writeFloat(float v) throws IOException {
+       vec.addElement(new Float(v));
+}
+
+public void writeInt(int v) throws IOException {
+       vec.addElement(new Integer(v));
+}
+
+public void writeLong(long v) throws IOException {
+       vec.addElement(new Long(v));
+}
+
+public void writeShort(int v) throws IOException {
+       vec.addElement(new Short((short)v));
+}
+
+public void writeObject(Object obj) throws IOException {
+       vec.addElement(obj);
+}
+
+public void write(byte b[]) throws IOException {
+       throw new IOException("not required");
+}
+
+public void write(byte b[], int off, int len) throws IOException {
+       throw new IOException("not required");
+}
+
+public void write(int b) throws IOException {
+       throw new IOException("not required");
+}
+
+public void writeBytes(String s) throws IOException {
+       throw new IOException("not required");
+}
+
+public void writeChars(String s) throws IOException {
+       throw new IOException("not required");
+}
+
+public void writeUTF(String str) throws IOException {
+       throw new IOException("not required");
+}
+
+public void flush() throws IOException {
+}
+
+public void close() throws IOException {
+}
+
+}
+
+/**
+ * Dummy object input class.
+ */
+private class DummyObjectInputStream implements ObjectInput {
+
+public boolean readBoolean() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Boolean)obj).booleanValue());
+}
+
+public byte readByte() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Byte)obj).byteValue());
+}
+
+public char readChar() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Character)obj).charValue());
+}
+
+public double readDouble() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Double)obj).doubleValue());
+}
+
+public float readFloat() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Float)obj).floatValue());
+}
+
+public int readInt() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Integer)obj).intValue());
+}
+
+public long readLong() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Long)obj).longValue());
+}
+
+public short readShort() throws IOException {
+       Object obj = vec.elementAt(ptr++);
+       return (((Short)obj).shortValue());
+}
+
+public Object readObject() throws IOException {
+       return (vec.elementAt(ptr++));
+}
+
+public int read(byte b[]) throws IOException {
+       throw new IOException("not required");
+}
+
+public int read(byte b[], int off, int len) throws IOException {
+       throw new IOException("not required");
+}
+
+public int read() throws IOException {
+       throw new IOException("not required");
+}
+
+public long skip(long n) throws IOException {
+       throw new IOException("not required");
+}
+
+public int available() throws IOException {
+       throw new IOException("not required");
+}
+
+public void readFully(byte b[]) throws IOException {
+       throw new IOException("not required");
+}
+
+public void readFully(byte b[], int off, int len) throws IOException {
+       throw new IOException("not required");
+}
+
+public String readLine() throws IOException {
+       throw new IOException("not required");
+}
+
+public String readUTF() throws IOException {
+       throw new IOException("not required");
+}
+
+public int readUnsignedByte() throws IOException {
+       throw new IOException("not required");
+}
+
+public int readUnsignedShort() throws IOException {
+       throw new IOException("not required");
+}
+
+public int skipBytes(int n) throws IOException {
+       throw new IOException("not required");
+}
+
+public void close() throws IOException {
+}
+
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/UnicastRemoteStub.java b/libjava/gnu/java/rmi/server/UnicastRemoteStub.java
new file mode 100644 (file)
index 0000000..244e7a8
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.rmi.server.RemoteStub;
+import java.rmi.server.RemoteRef;
+
+public class UnicastRemoteStub
+       extends RemoteStub {
+
+public static void setStubRef(RemoteStub stub, RemoteRef ref) {
+       setRef(stub, ref);
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/UnicastServer.java b/libjava/gnu/java/rmi/server/UnicastServer.java
new file mode 100644 (file)
index 0000000..d2cc7dc
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.util.Hashtable;
+import java.net.UnknownHostException;
+import java.rmi.server.ObjID;
+import java.rmi.server.UnicastRemoteObject;
+import java.rmi.server.UID;
+import java.rmi.server.RemoteRef;
+import java.rmi.RemoteException;
+import java.rmi.NoSuchObjectException;
+import gnu.java.rmi.dgc.DGCImpl;
+
+public class UnicastServer
+       implements ProtocolConstants {
+
+static private Hashtable objects = new Hashtable();
+static private DGCImpl dgc;
+
+public static void exportObject(UnicastServerRef obj) {
+       startDGC();
+       objects.put(obj.objid, obj);
+       obj.manager.startServer();
+}
+
+private static synchronized void startDGC() {
+       if (dgc == null) {
+               try {
+                       dgc = new DGCImpl();
+                       ((UnicastServerRef)dgc.getRef()).exportObject(dgc);
+               }
+               catch (RemoteException e) {
+                       e.printStackTrace();
+               }
+       }
+}
+
+public static void dispatch(UnicastConnection conn) throws Exception {
+       switch (conn.getDataInputStream().readUnsignedByte()) {
+       case MESSAGE_CALL:
+               incomingMessageCall(conn);
+               break;
+       default:
+               throw new Exception("bad method type");
+       }
+}
+
+private static void incomingMessageCall(UnicastConnection conn) throws IOException {
+       ObjectInputStream in = conn.getObjectInputStream();
+
+       ObjID objid = ObjID.read(in);
+       int method = in.readInt();
+       long hash = in.readLong();
+
+//System.out.println("ObjID: " + objid + ", method: " + method + ", hash: " + hash);
+
+       // Use the objid to locate the relevant UnicastServerRef
+       UnicastServerRef uref = (UnicastServerRef)objects.get(objid);
+       Object returnval;
+       int returncode = RETURN_ACK;
+       if (uref != null) {
+               try {
+                       // Dispatch the call to it.
+                       returnval = uref.incomingMessageCall(conn, method, hash);
+               }
+               catch (Exception e) {
+                       returnval = e;
+                       returncode = RETURN_NACK;
+               }
+       }
+       else {
+               returnval = new NoSuchObjectException("");
+               returncode = RETURN_NACK;
+       }
+
+       conn.getDataOutputStream().writeByte(MESSAGE_CALL_ACK);
+
+       ObjectOutputStream out = conn.getObjectOutputStream();
+
+       out.writeByte(returncode);
+       (new UID()).write(out);
+       out.writeObject(returnval);
+
+       out.flush();
+}
+
+}
diff --git a/libjava/gnu/java/rmi/server/UnicastServerRef.java b/libjava/gnu/java/rmi/server/UnicastServerRef.java
new file mode 100644 (file)
index 0000000..290ea09
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package gnu.java.rmi.server;
+
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.server.RemoteStub;
+import java.rmi.server.ObjID;
+import java.rmi.server.ServerRef;
+import java.rmi.server.RemoteRef;
+import java.rmi.server.ServerNotActiveException;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.server.UID;
+import java.rmi.server.Skeleton;
+import java.rmi.server.RemoteCall;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.Thread;
+import java.lang.Exception;
+import java.io.IOException;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Hashtable;
+
+public class UnicastServerRef
+       extends UnicastRef {
+
+final static private Class[] stubprototype = new Class[] { RemoteRef.class };
+
+Remote myself;
+private Skeleton skel;
+private RemoteStub stub;
+private Hashtable methods;
+
+public UnicastServerRef(ObjID id, int port, RMIServerSocketFactory ssf) {
+       super(id);
+       manager = UnicastConnectionManager.getInstance(port, ssf);
+}
+
+public RemoteStub exportObject(Remote obj) throws RemoteException {
+       if (myself == null) {
+               myself = obj;
+
+               // Find and install the stub
+               Class cls = obj.getClass();
+               stub = (RemoteStub)getHelperClass(cls, "_Stub");
+               if (stub == null) {
+                       throw new RemoteException("failed to export: " + cls);
+               }
+
+               // Find and install the skeleton (if there is one)
+               skel = (Skeleton)getHelperClass(cls, "_Skel");
+
+               // Build hash of methods which may be called.
+               buildMethodHash(obj.getClass());
+
+               // Export it.
+               UnicastServer.exportObject(this);
+       }
+
+       return (stub);
+}
+
+private Object getHelperClass(Class cls, String type) {
+       try {   
+               String classname = cls.getName();
+               Class scls = Class.forName(classname + type);
+               if (type.equals("_Stub")) {
+                       try {
+                               // JDK 1.2 stubs
+                               Constructor con = scls.getConstructor(stubprototype);
+                               return (con.newInstance(new Object[]{this}));
+                       }
+                       catch (NoSuchMethodException e) {
+                       }
+                       catch (InstantiationException e) {
+                       }
+                       catch (IllegalAccessException e) {
+                       }
+                       catch (IllegalArgumentException e) {
+                       }
+                       catch (InvocationTargetException e) {
+                       }
+                       // JDK 1.1 stubs
+                       RemoteStub stub = (RemoteStub)scls.newInstance();
+                       UnicastRemoteStub.setStubRef(stub, this);
+                       return (stub);
+               }
+               else {
+                       // JDK 1.1 skel
+                       return (scls.newInstance());
+               }
+       }
+       catch (ClassNotFoundException e) {
+       }
+       catch (InstantiationException e) {
+       }
+       catch (IllegalAccessException e) {
+       }
+       return (null);
+}
+
+public String getClientHost() throws ServerNotActiveException {
+       throw new Error("Not implemented");
+}
+
+private void buildMethodHash(Class cls) {
+       methods = new Hashtable();
+       Method[] meths = cls.getMethods();
+       for (int i = 0; i < meths.length; i++) {
+               /* Don't need to include any java.xxx related stuff */
+               if (meths[i].getDeclaringClass().getName().startsWith("java.")) {
+                       continue;
+               }
+               long hash = RMIHashes.getMethodHash(meths[i]);
+               methods.put(new Long (hash), meths[i]);
+//System.out.println("meth = " + meths[i] + ", hash = " + hash);
+       }
+}
+
+public Object incomingMessageCall(UnicastConnection conn, int method, long hash) throws Exception {
+//System.out.println("method = " + method + ", hash = " + hash);
+       // If method is -1 then this is JDK 1.2 RMI - so use the hash
+       // to locate the method
+       if (method == -1) {
+               Method meth = (Method)methods.get(new Long (hash));
+//System.out.println("class = " + myself.getClass() + ", meth = " + meth);
+               if (meth == null) {
+                       throw new NoSuchMethodException();
+               }
+
+               ObjectInputStream in = conn.getObjectInputStream();
+               int nrargs = meth.getParameterTypes().length;
+               Object[] args = new Object[nrargs];
+               for (int i = 0; i < nrargs; i++) {
+                       /** 
+                        * For debugging purposes - we don't handle CodeBases
+                        * quite right so we don't always find the stubs.  This
+                        * lets us know that.
+                        */
+                       try {
+                               args[i] = in.readObject();
+                       }
+                       catch (Exception t) {
+                               t.printStackTrace();
+                               throw t;
+                       }
+               }
+               return (meth.invoke(myself, args));
+       }
+       // Otherwise this is JDK 1.1 style RMI - we find the skeleton
+       // and invoke it using the method number.  We wrap up our
+       // connection system in a UnicastRemoteCall so it appears in a
+       // way the Skeleton can handle.
+       else {
+               if (skel == null) {
+                       throw new NoSuchMethodException();
+               }
+               UnicastRemoteCall call = new UnicastRemoteCall(conn);
+               skel.dispatch(myself, call, method, hash);
+               return (call.returnValue());
+       }
+}
+
+}
diff --git a/libjava/java/rmi/AccessException.java b/libjava/java/rmi/AccessException.java
new file mode 100644 (file)
index 0000000..91d66b2
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class AccessException 
+       extends RemoteException {
+
+public static final long serialVersionUID = 6314925228044966088l;
+
+public AccessException(String s) {
+       super(s);
+}
+
+public AccessException(String s, Exception e) {
+       super (s, e);
+}
+
+}
diff --git a/libjava/java/rmi/AlreadyBoundException.java b/libjava/java/rmi/AlreadyBoundException.java
new file mode 100644 (file)
index 0000000..ef0c166
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class AlreadyBoundException 
+       extends Exception {
+
+public AlreadyBoundException() {
+       super();
+}
+
+public AlreadyBoundException(String s) {
+       super (s);
+}
+
+}
diff --git a/libjava/java/rmi/ConnectException.java b/libjava/java/rmi/ConnectException.java
new file mode 100644 (file)
index 0000000..e55a274
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class ConnectException 
+       extends RemoteException {
+
+
+public ConnectException(String s) {
+       super(s);
+}
+
+public ConnectException(String s, Exception e) {
+       super (s, e);
+}
+
+}
diff --git a/libjava/java/rmi/ConnectIOException.java b/libjava/java/rmi/ConnectIOException.java
new file mode 100644 (file)
index 0000000..bb7e298
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class ConnectIOException 
+       extends RemoteException {
+
+
+public ConnectIOException(String s) {
+       super(s);
+}
+
+public ConnectIOException(String s, Exception e) {
+       super (s, e);
+}
+
+}
diff --git a/libjava/java/rmi/MarshalException.java b/libjava/java/rmi/MarshalException.java
new file mode 100644 (file)
index 0000000..988ec47
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class MarshalException 
+       extends RemoteException {
+
+
+public MarshalException(String s) {
+       super(s);
+}
+
+public MarshalException(String s, Exception e) {
+       super (s, e);
+}
+
+}
diff --git a/libjava/java/rmi/MarshalledObject.java b/libjava/java/rmi/MarshalledObject.java
new file mode 100644 (file)
index 0000000..87e6963
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+import java.io.Serializable;
+
+public final class MarshalledObject
+       extends Object implements Serializable {
+
+public MarshalledObject(Object obj) {
+       throw new Error("Not implemented");
+}
+
+public boolean equals(Object obj) {
+       throw new Error("Not implemented");
+}
+
+public Object get() {
+       throw new Error("Not implemented");
+}
+
+public int hashCode() {
+       throw new Error("Not implemented");
+}
+
+}
diff --git a/libjava/java/rmi/Naming.java b/libjava/java/rmi/Naming.java
new file mode 100644 (file)
index 0000000..7646477
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.rmi.registry.Registry;
+import java.rmi.registry.LocateRegistry;
+
+public final class Naming {
+
+public static Remote lookup(String name) throws NotBoundException, MalformedURLException, RemoteException {
+       URL u = new URL("http:" + name);
+       return (getRegistry(u).lookup(u.getFile().substring(1)));
+}
+
+public static void bind(String name, Remote obj) throws AlreadyBoundException, MalformedURLException, RemoteException {
+       URL u = new URL("http:" + name);
+       getRegistry(u).bind(u.getFile().substring(1), obj);
+}
+
+public static void unbind(String name) throws RemoteException, NotBoundException, MalformedURLException {
+       URL u = new URL("http:" + name);
+       getRegistry(u).unbind(u.getFile().substring(1));
+}
+
+public static void rebind(String name, Remote obj) throws RemoteException, MalformedURLException {
+       URL u = new URL("http:" + name);
+       getRegistry(u).rebind(u.getFile().substring(1), obj);
+}
+
+public static String[] list(String name) throws RemoteException, MalformedURLException {
+       return (getRegistry(new URL("http:" + name)).list());
+}
+
+private static Registry getRegistry(URL u) throws RemoteException {
+       if (u.getPort() == -1) {
+               return (LocateRegistry.getRegistry(u.getHost()));
+       }
+       else {
+               return (LocateRegistry.getRegistry(u.getHost(), u.getPort()));
+       }
+}
+
+}
diff --git a/libjava/java/rmi/NoSuchObjectException.java b/libjava/java/rmi/NoSuchObjectException.java
new file mode 100644 (file)
index 0000000..7608fd9
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class NoSuchObjectException
+       extends RemoteException {
+
+public static final long serialVersionUID = 6619395951570472985L;
+
+public NoSuchObjectException(String s) {
+       super(s);
+}
+
+}
diff --git a/libjava/java/rmi/NotBoundException.java b/libjava/java/rmi/NotBoundException.java
new file mode 100644 (file)
index 0000000..f28ee6a
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class NotBoundException 
+       extends Exception {
+
+public static final long serialVersionUID = -1857741824849069317l;
+
+public NotBoundException() {
+       super();
+}
+
+public NotBoundException(String s) {
+       super (s);
+}
+
+}
diff --git a/libjava/java/rmi/RMISecurityException.java b/libjava/java/rmi/RMISecurityException.java
new file mode 100644 (file)
index 0000000..cbfbed2
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+import java.lang.SecurityException;
+
+public class RMISecurityException
+       extends SecurityException {
+
+public RMISecurityException(String n) {
+       super(n);
+}
+
+public RMISecurityException(String n, String a) {
+       super(n);
+}
+
+}
diff --git a/libjava/java/rmi/RMISecurityManager.java b/libjava/java/rmi/RMISecurityManager.java
new file mode 100644 (file)
index 0000000..d63d969
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+import java.io.FileDescriptor;
+import java.lang.Thread;
+import java.lang.Class;
+import java.lang.SecurityManager;
+import java.net.InetAddress;
+import java.security.Permission;
+
+public class RMISecurityManager extends SecurityManager {
+
+public RMISecurityManager() {
+}
+
+public void checkAccept(String host, int port) {
+}
+
+public void checkAccess(Thread g) {
+}
+
+public void checkAccess(ThreadGroup g) {
+}
+
+public void checkAwtEventQueueAccess() {
+}
+
+public void checkConnect(String host, int port) {
+}
+
+public void checkConnect(String host, int port, Object context) {
+}
+
+public void checkCreateClassLoader() {
+}
+
+public void checkDelete(String file) {
+}
+
+public void checkExec(String cmd) {
+}
+
+public void checkExit(int status) {
+}
+
+public void checkLink(String lib) {
+}
+
+public void checkListen(int port) {
+}
+
+public void checkMemberAccess ( Class clazz, int which ) {
+}
+
+public void checkMulticast(InetAddress maddr) {
+}
+
+public void checkMulticast(InetAddress maddr, byte ttl) {
+}
+
+public void checkPackageAccess(String pkg) {
+}
+
+public void checkPackageDefinition(String pkg) {
+}
+
+public void checkPermission(Permission perm) {
+}
+
+public void checkPermission(Permission perm, Object context) {
+}
+
+public void checkPrintJobAccess() {
+}
+
+public void checkPropertiesAccess() {
+}
+
+public void checkPropertyAccess(String key) {
+}
+
+/* public void checkPropertyAccess(String key, String def) {
+}*/
+
+public void checkRead(FileDescriptor fd) {
+}
+
+public void checkRead(String file) {
+}
+
+public void checkRead(String file, Object context) {
+}
+
+public void checkSecurityAccess(String action) {
+}
+
+public void checkSetFactory() {
+}
+
+public void checkSystemClipboardAccess() {
+}
+
+public boolean checkTopLevelWindow(Object window) {
+       return (true);
+}
+
+public void checkWrite(FileDescriptor fd) {
+}
+
+public void checkWrite(String file) {
+}
+
+}
diff --git a/libjava/java/rmi/Remote.java b/libjava/java/rmi/Remote.java
new file mode 100644 (file)
index 0000000..f9aab0b
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public interface Remote {
+}
diff --git a/libjava/java/rmi/RemoteException.java b/libjava/java/rmi/RemoteException.java
new file mode 100644 (file)
index 0000000..5127a5a
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+import java.lang.Throwable;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+
+public class RemoteException 
+       extends IOException {
+
+public static final long serialVersionUID = -5148567311918794206l;
+
+public Throwable detail;
+
+public RemoteException() {
+       super();
+       detail = null;
+}
+
+public RemoteException(String s) {
+       super(s);
+       detail = null;
+}
+
+public RemoteException(String s, Throwable e) {
+       super(s);
+       detail = e;
+}
+
+public String getMessage() {
+       if (detail == null) {
+               return (super.getMessage());
+       }
+       else {
+               return (super.getMessage() + "; nested exception is: " + detail.getMessage());
+       }
+}
+
+public void printStackTrace(PrintStream s) {
+       if (detail != null) {
+               detail.printStackTrace(s);
+       }
+       super.printStackTrace(s);
+}
+
+public void printStackTrace(PrintWriter s) {
+       if (detail != null) {
+               detail.printStackTrace(s);
+       }
+       super.printStackTrace(s);
+}
+
+public void printStackTrace() {
+       printStackTrace(System.err);
+}
+
+}
diff --git a/libjava/java/rmi/ServerError.java b/libjava/java/rmi/ServerError.java
new file mode 100644 (file)
index 0000000..71e2d06
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class ServerError
+       extends RemoteException {
+
+public ServerError(String s, Error e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/ServerException.java b/libjava/java/rmi/ServerException.java
new file mode 100644 (file)
index 0000000..f7ec303
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class ServerException
+       extends RemoteException {
+
+public static final long serialVersionUID = -4775845313121906682l;
+
+public ServerException(String s) {
+       super(s);
+}
+
+public ServerException(String s, Exception e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/ServerRuntimeException.java b/libjava/java/rmi/ServerRuntimeException.java
new file mode 100644 (file)
index 0000000..9f76f61
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class ServerRuntimeException
+       extends RemoteException {
+
+public ServerRuntimeException(String s, Exception e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/StubNotFoundException.java b/libjava/java/rmi/StubNotFoundException.java
new file mode 100644 (file)
index 0000000..c6d70cf
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class StubNotFoundException
+       extends RemoteException {
+
+public StubNotFoundException(String s) {
+       super(s);
+}
+
+public StubNotFoundException(String s, Exception e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/UnexpectedException.java b/libjava/java/rmi/UnexpectedException.java
new file mode 100644 (file)
index 0000000..b65d661
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class UnexpectedException
+       extends RemoteException {
+
+public UnexpectedException(String s) {
+       super(s);
+}
+
+public UnexpectedException(String s, Exception e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/UnknownHostException.java b/libjava/java/rmi/UnknownHostException.java
new file mode 100644 (file)
index 0000000..06263b2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class UnknownHostException
+       extends RemoteException {
+
+public UnknownHostException(String s) {
+       super(s);
+}
+
+public UnknownHostException(String s, Exception e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/UnmarshalException.java b/libjava/java/rmi/UnmarshalException.java
new file mode 100644 (file)
index 0000000..68adfdf
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi;
+
+public class UnmarshalException
+       extends RemoteException {
+
+public static final long serialVersionUID = 594380845140740218l;
+
+public UnmarshalException(String s) {
+       super(s);
+}
+
+public UnmarshalException(String s, Exception e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/activation/Activatable.java b/libjava/java/rmi/activation/Activatable.java
new file mode 100644 (file)
index 0000000..a3e712f
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.rmi.server.RemoteServer;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.RemoteException;
+import java.rmi.Remote;
+import java.rmi.NoSuchObjectException;
+import java.rmi.MarshalledObject;
+
+public abstract class Activatable
+       extends RemoteServer {
+
+protected Activatable(String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+protected Activatable(String location, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+protected Activatable(ActivationID id, int port) throws RemoteException {
+       throw new Error("Not implemented");
+}
+
+protected Activatable(ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
+       throw new Error("Not implemented");
+}
+
+protected ActivationID getID() {
+       throw new Error("Not implemented");
+}
+
+public static Remote register(ActivationDesc desc) throws UnknownGroupException, ActivationException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+public static boolean inactive(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+public static void unregister(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+public static ActivationID exportObject(Remote obj, String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+public static ActivationID exportObject(Remote obj, String location, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+public static Remote exportObject(Remote obj, ActivationID id, int port) throws RemoteException {
+       throw new Error("Not implemented");
+}
+
+public static Remote exportObject(Remote obj, ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
+       throw new Error("Not implemented");
+}
+
+public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException {
+       throw new Error("Not implemented");
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivateFailedException.java b/libjava/java/rmi/activation/ActivateFailedException.java
new file mode 100644 (file)
index 0000000..0352817
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.rmi.RemoteException;
+
+public class ActivateFailedException
+       extends RemoteException {
+
+public ActivateFailedException(String s) {
+       super(s);
+}
+
+public ActivateFailedException(String s, Exception ex) {
+       super(s, ex);
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivationDesc.java b/libjava/java/rmi/activation/ActivationDesc.java
new file mode 100644 (file)
index 0000000..192fb5c
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.io.Serializable;
+import java.rmi.MarshalledObject;
+
+public final class ActivationDesc
+       implements Serializable {
+
+private ActivationGroupID groupid;
+private String classname;
+private String location;
+private MarshalledObject data;
+private boolean restart;
+
+public ActivationDesc(String className, String location, MarshalledObject data) throws ActivationException {
+       this(ActivationGroup.currentGroupID(), className, location, data, false);
+}
+
+public ActivationDesc(String className, String location, MarshalledObject data, boolean restart) throws ActivationException {
+       this(ActivationGroup.currentGroupID(), className, location, data, restart);
+}
+
+public ActivationDesc(ActivationGroupID groupID, String className, String location, MarshalledObject data) {
+       this(groupID, className, location, data, false);
+}
+
+public ActivationDesc(ActivationGroupID groupID, String className, String location, MarshalledObject data, boolean restart) {
+       this.groupid = groupID;
+       this.classname = className;
+       this.location = location;
+       this.data = data;
+       this.restart = restart;
+}
+
+public ActivationGroupID getGroupID() {
+       return (groupid);
+}
+
+public String getClassName() {
+       return (classname);
+}
+
+public String getLocation() {
+       return (location);
+}
+
+public MarshalledObject getData() {
+       return (data);
+}
+
+public boolean getRestartMode() {
+       return (restart);
+}
+
+public boolean equals(Object obj) {
+       if (!(obj instanceof ActivationDesc)) {
+               return (false);
+       }
+       ActivationDesc that = (ActivationDesc)obj;
+
+       if (this.groupid.equals(that.groupid) &&
+           this.classname.equals(that.classname) &&
+           this.location.equals(that.location) &&
+           this.data.equals(that.data) &&
+           this.restart == that.restart) {
+               return (true);
+       }
+       return (false);
+}
+
+public int hashCode() {
+       return (groupid.hashCode() ^ classname.hashCode() ^ location.hashCode() ^ data.hashCode());
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivationException.java b/libjava/java/rmi/activation/ActivationException.java
new file mode 100644 (file)
index 0000000..d72e1a6
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+
+public class ActivationException
+       extends Exception {
+
+public Throwable detail;
+
+public ActivationException() {
+       super();
+}
+
+public ActivationException(String s) {
+       super(s);
+}
+
+public ActivationException(String s, Throwable ex) {
+       super(s);
+       detail = ex;
+}
+
+public String getMessage() {
+       if (detail == null) {
+               return (super.getMessage());
+       }
+       else {
+               return (super.getMessage() + ":" + detail.getMessage());
+       }
+}
+
+public void printStackTrace(PrintStream s) {
+        if (detail != null) {
+                detail.printStackTrace(s);
+        }
+        super.printStackTrace(s);
+}
+
+public void printStackTrace() {
+       printStackTrace(System.err);
+}
+
+public void printStackTrace(PrintWriter s) {
+        if (detail != null) {
+                detail.printStackTrace(s);
+        }
+        super.printStackTrace(s);
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivationGroup.java b/libjava/java/rmi/activation/ActivationGroup.java
new file mode 100644 (file)
index 0000000..40316c0
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.rmi.server.UnicastRemoteObject;
+import java.rmi.RemoteException;
+import java.rmi.Remote;
+import java.rmi.MarshalledObject;
+
+public abstract class ActivationGroup
+       extends UnicastRemoteObject
+       implements ActivationInstantiator {
+
+protected ActivationGroup(ActivationGroupID groupID) throws RemoteException {
+       throw new Error("Not implemented");
+}
+
+public boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+public abstract void activeObject(ActivationID id, Remote obj) throws ActivationException, UnknownObjectException, RemoteException;
+
+public static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException {
+       throw new Error("Not implemented");
+}
+
+public static ActivationGroupID currentGroupID() {
+       throw new Error("Not implemented");
+}
+
+public static void setSystem(ActivationSystem system) throws ActivationException {
+       throw new Error("Not implemented");
+}
+
+public static ActivationSystem getSystem() throws ActivationException {
+       throw new Error("Not implemented");
+}
+
+protected void activeObject(ActivationID id, MarshalledObject mobj) throws ActivationException, UnknownObjectException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+protected void inactiveGroup() throws UnknownGroupException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivationGroupDesc.java b/libjava/java/rmi/activation/ActivationGroupDesc.java
new file mode 100644 (file)
index 0000000..1dd90e6
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.io.Serializable;
+import java.util.Properties;
+import java.rmi.MarshalledObject;
+
+public final class ActivationGroupDesc
+       implements Serializable {
+
+public static class CommandEnvironment
+       implements Serializable {
+
+private String cmdpath;
+private String[] argv;
+
+public CommandEnvironment(String cmdpath, String[] argv) {
+       this.cmdpath = cmdpath;
+       this.argv = argv;
+}
+
+public String getCommandPath() {
+       return (cmdpath);
+}
+
+public String[] getCommandOptions() {
+       return (argv);
+}
+
+public boolean equals(Object obj) {
+       if (!(obj instanceof CommandEnvironment)) {
+               return (false);
+       }
+       CommandEnvironment that = (CommandEnvironment)obj;
+       
+       if (!this.cmdpath.equals(that.cmdpath)) {
+               return (false);
+       }
+
+       int len = this.argv.length;
+       if (len != that.argv.length) {
+               return (false);
+       }
+       for (int i = 0; i < len; i++) {
+               if (!this.argv[i].equals(that.argv[i])) {
+                       return (false);
+               }
+       }
+       return (true);
+}
+
+public int hashCode() {
+       return (cmdpath.hashCode()); // Not a very good hash code.
+}
+
+}
+
+public ActivationGroupDesc(Properties overrides, ActivationGroupDesc.CommandEnvironment cmd) {
+       throw new Error("Not implemented");
+}
+
+public ActivationGroupDesc(String className, String location, MarshalledObject data, Properties overrides, ActivationGroupDesc.CommandEnvironment cmd) {
+       throw new Error("Not implemented");
+}
+
+public String getClassName() {
+       throw new Error("Not implemented");
+}
+
+public String getLocation() {
+       throw new Error("Not implemented");
+}
+
+public MarshalledObject getData() {
+       throw new Error("Not implemented");
+}
+
+public Properties getPropertyOverrides() {
+       throw new Error("Not implemented");
+}
+
+public ActivationGroupDesc.CommandEnvironment getCommandEnvironment() {
+       throw new Error("Not implemented");
+}
+
+public boolean equals(Object obj) {
+       throw new Error("Not implemented");
+}
+
+public int hashCode() {
+       throw new Error("Not implemented");
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivationGroupID.java b/libjava/java/rmi/activation/ActivationGroupID.java
new file mode 100644 (file)
index 0000000..e0e5592
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.io.Serializable;
+
+public class ActivationGroupID
+       implements Serializable {
+
+private ActivationSystem system;
+
+public ActivationGroupID(ActivationSystem system) {
+       this.system = system;
+}
+
+public ActivationSystem getSystem() {
+       return (system);
+}
+
+public int hashCode() {
+       return (system.hashCode());
+}
+
+public boolean equals(Object obj) {
+       if (obj instanceof ActivationGroupID) {
+               ActivationGroupID that = (ActivationGroupID)obj;
+               if (this.system.equals(that.system)) {
+                       return (true);
+               }
+       }
+       return (false);
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivationID.java b/libjava/java/rmi/activation/ActivationID.java
new file mode 100644 (file)
index 0000000..750f6cb
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+public class ActivationID
+       implements Serializable {
+
+private Activator activator;
+
+public ActivationID(Activator activator) {
+       this.activator = activator;
+}
+
+public Remote activate(boolean force) throws ActivationException, UnknownObjectException, RemoteException {
+       throw new Error("Not implemented");
+}
+
+public int hashCode() {
+       return (activator.hashCode());
+}
+
+public boolean equals(Object obj) {
+       if (obj instanceof ActivationID) {
+               ActivationID that = (ActivationID)obj;
+               if (this.activator.equals(that.activator)) {
+                       return (true);
+               }
+       }
+       return (false);
+}
+
+}
diff --git a/libjava/java/rmi/activation/ActivationInstantiator.java b/libjava/java/rmi/activation/ActivationInstantiator.java
new file mode 100644 (file)
index 0000000..71cd799
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.MarshalledObject;
+
+public interface ActivationInstantiator
+       extends Remote {
+
+public MarshalledObject newInstance(ActivationID id, ActivationDesc desc) throws ActivationException, RemoteException;
+
+}
diff --git a/libjava/java/rmi/activation/ActivationMonitor.java b/libjava/java/rmi/activation/ActivationMonitor.java
new file mode 100644 (file)
index 0000000..21d269a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.MarshalledObject;
+
+public interface ActivationMonitor
+       extends Remote {
+
+public void inactiveObject(ActivationID id) throws UnknownObjectException, RemoteException;
+public void activeObject(ActivationID id, MarshalledObject obj) throws UnknownObjectException, RemoteException;
+public void inactiveGroup(ActivationGroupID id, long incarnation) throws UnknownGroupException, RemoteException;
+
+}
diff --git a/libjava/java/rmi/activation/ActivationSystem.java b/libjava/java/rmi/activation/ActivationSystem.java
new file mode 100644 (file)
index 0000000..c937da4
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+public interface ActivationSystem
+       extends Remote {
+
+public static final int SYSTEM_PORT = 0; // XXX
+
+public ActivationID registerObject(ActivationDesc desc) throws ActivationException, UnknownGroupException, RemoteException;
+public void unregisterObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException;
+public ActivationGroupID registerGroup(ActivationGroupDesc desc) throws ActivationException, RemoteException;
+public ActivationMonitor activeGroup(ActivationGroupID id, ActivationInstantiator group, long incarnation) throws UnknownGroupException, ActivationException, RemoteException;
+public void unregisterGroup(ActivationGroupID id) throws ActivationException, UnknownGroupException, RemoteException;
+public void shutdown() throws RemoteException;
+public ActivationDesc setActivationDesc(ActivationID id, ActivationDesc desc) throws ActivationException, UnknownObjectException, UnknownGroupException, RemoteException;
+public ActivationGroupDesc setActivationGroupDesc(ActivationGroupID id, ActivationGroupDesc desc) throws ActivationException, UnknownGroupException, RemoteException;
+public ActivationDesc getActivationDesc(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException;
+public ActivationGroupDesc getActivationGroupDesc(ActivationGroupID id) throws ActivationException, UnknownGroupException, RemoteException;
+
+}
diff --git a/libjava/java/rmi/activation/Activator.java b/libjava/java/rmi/activation/Activator.java
new file mode 100644 (file)
index 0000000..82dbc60
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.MarshalledObject;
+
+public interface Activator
+       extends Remote {
+
+public MarshalledObject activate(ActivationID id, boolean force) throws ActivationException, UnknownObjectException, RemoteException;
+
+}
diff --git a/libjava/java/rmi/activation/UnknownGroupException.java b/libjava/java/rmi/activation/UnknownGroupException.java
new file mode 100644 (file)
index 0000000..655f2c6
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+public class UnknownGroupException
+       extends ActivationException {
+
+public UnknownGroupException(String s) {
+       super(s);
+}
+
+}
diff --git a/libjava/java/rmi/activation/UnknownObjectException.java b/libjava/java/rmi/activation/UnknownObjectException.java
new file mode 100644 (file)
index 0000000..b28bfaa
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.activation;
+
+public class UnknownObjectException
+       extends ActivationException {
+
+public UnknownObjectException(String s) {
+       super(s);
+}
+
+}
diff --git a/libjava/java/rmi/dgc/DGC.java b/libjava/java/rmi/dgc/DGC.java
new file mode 100644 (file)
index 0000000..3fd1bb6
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.dgc;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.server.ObjID;
+
+public interface DGC
+       extends Remote {
+
+public Lease dirty(ObjID[] ids, long sequenceNum, Lease lease) throws RemoteException;
+
+public void clean(ObjID[] ids, long sequenceNum, VMID vmid, boolean strong) throws RemoteException;
+
+}
diff --git a/libjava/java/rmi/dgc/Lease.java b/libjava/java/rmi/dgc/Lease.java
new file mode 100644 (file)
index 0000000..98dfb2d
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.dgc;
+
+import java.io.Serializable;
+import java.rmi.dgc.VMID;
+
+public final class Lease
+       implements Serializable {
+
+static final long serialVersionUID = -5713411624328831948L;
+
+private VMID vmid;
+private long value;
+
+public Lease(VMID id, long duration) {
+       vmid = id;
+       value = duration;
+}
+
+public VMID getVMID() {
+       return (vmid);
+}
+
+public long getValue() {
+       return (value);
+}
+
+public String toString() {
+       return ("[" + vmid.toString() + ", " + Long.toString(value) + "]");
+}
+
+}
diff --git a/libjava/java/rmi/dgc/VMID.java b/libjava/java/rmi/dgc/VMID.java
new file mode 100644 (file)
index 0000000..d264752
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.dgc;
+
+import java.io.Serializable;
+import java.rmi.server.UID;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+public final class VMID
+       implements Serializable {
+
+static final long serialVersionUID = -538642295484486218L;
+static final boolean areWeUnique;
+static byte[] localAddr;
+
+private byte[] addr;
+private UID uid;
+
+static {
+       byte[] addr;
+       boolean awu = true;
+       try {
+               addr = InetAddress.getLocalHost().getAddress();
+               if (addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) {
+                       awu = false;
+               }
+       }
+       catch (UnknownHostException _) {
+               addr = new byte[]{ 127, 0, 0, 1 };
+               awu = false;
+       }
+       localAddr = addr;
+       areWeUnique = awu;
+}
+
+public VMID() {
+       addr = localAddr;
+       uid = new UID();
+}
+
+public static boolean isUnique() {
+       return (areWeUnique);
+}
+
+public int hashCode() {
+       return (super.hashCode());
+}
+
+public boolean equals(Object obj) {
+       if (!(obj instanceof VMID)) {
+               return (false);
+       }
+       VMID other = (VMID)obj;
+       if (addr.length != other.addr.length) {
+               return (false);
+       }
+       for (int i = addr.length - 1; i >= 0; i--) {
+               if (addr[i] != other.addr[i]) {
+                       return (false);
+               }
+       }
+       return (uid.equals(other.uid));
+}
+
+public String toString() {
+       StringBuffer buf = new StringBuffer("[VMID: ");
+       for (int i = 0; i < addr.length; i++) {
+               if (i > 0) {
+                       buf.append(".");
+               }
+               buf.append(Integer.toString(addr[i]));
+       }
+       buf.append(" ");
+       buf.append(uid.toString());
+       buf.append("]");
+
+       return (buf.toString());
+}
+
+}
diff --git a/libjava/java/rmi/registry/LocateRegistry.java b/libjava/java/rmi/registry/LocateRegistry.java
new file mode 100644 (file)
index 0000000..269049d
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.registry;
+
+import java.io.IOException;
+import java.rmi.RemoteException;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+import java.rmi.server.RMISocketFactory;
+import java.rmi.server.RemoteRef;
+import java.rmi.server.ObjID;
+import java.net.Socket;
+
+import gnu.java.rmi.server.UnicastRef;
+import gnu.java.rmi.server.UnicastServerRef;
+import gnu.java.rmi.registry.RegistryImpl;
+import gnu.java.rmi.registry.RegistryImpl_Stub;
+
+public final class LocateRegistry {
+
+public static Registry getRegistry() throws RemoteException {
+       return (getRegistry("localhost", Registry.REGISTRY_PORT));
+}
+
+public static Registry getRegistry(int port) throws RemoteException {
+       return (getRegistry("localhost", port));
+}
+
+public static Registry getRegistry(String host) throws RemoteException {
+       return (getRegistry(host, Registry.REGISTRY_PORT));
+}
+
+public static Registry getRegistry(String host, int port) throws RemoteException {
+       return (getRegistry(host, port, RMISocketFactory.getSocketFactory()));
+}
+
+public static Registry getRegistry(String host, int port, RMIClientSocketFactory csf) throws RemoteException {
+       RemoteRef ref = new UnicastRef(new ObjID(ObjID.REGISTRY_ID), host, port, csf);
+       return (new RegistryImpl_Stub(ref));
+}
+
+public static Registry createRegistry(int port) throws RemoteException {
+       return (createRegistry(port, RMISocketFactory.getSocketFactory(), RMISocketFactory.getSocketFactory()));
+}
+
+public static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {
+       return (new RegistryImpl(port, csf, ssf));
+}
+
+}
diff --git a/libjava/java/rmi/registry/Registry.java b/libjava/java/rmi/registry/Registry.java
new file mode 100644 (file)
index 0000000..2a67f35
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.registry;
+
+import java.rmi.RemoteException;
+import java.rmi.NotBoundException;
+import java.rmi.AccessException;
+import java.rmi.AlreadyBoundException;
+import java.rmi.Remote;
+
+public interface Registry
+       extends Remote {
+
+public static int REGISTRY_PORT = 1099;
+
+public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException;
+
+public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException;
+
+public void unbind(String name) throws RemoteException, NotBoundException, AccessException;
+
+public void rebind(String name, Remote obj) throws RemoteException, AccessException;
+
+public String[] list() throws RemoteException, AccessException;
+
+}
diff --git a/libjava/java/rmi/registry/RegistryHandler.java b/libjava/java/rmi/registry/RegistryHandler.java
new file mode 100644 (file)
index 0000000..d867a45
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.registry;
+
+import java.rmi.RemoteException;
+import java.rmi.UnknownHostException;
+
+public interface RegistryHandler {
+
+public Registry registryStub(String host, int port) throws RemoteException, UnknownHostException;
+
+public Registry registryImpl(int port) throws RemoteException;
+
+}
diff --git a/libjava/java/rmi/server/ExportException.java b/libjava/java/rmi/server/ExportException.java
new file mode 100644 (file)
index 0000000..a3a2793
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.rmi.RemoteException;
+
+public class ExportException
+       extends RemoteException {
+
+public ExportException(String s) {
+       super(s);
+}
+
+public ExportException(String s, Exception e) {
+       super(s, e);
+}
+
+}
diff --git a/libjava/java/rmi/server/LoaderHandler.java b/libjava/java/rmi/server/LoaderHandler.java
new file mode 100644 (file)
index 0000000..e96cf2c
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+
+public interface LoaderHandler {
+
+public static final String packagePrefix = "";
+
+public Class loadClass(String name) throws MalformedURLException, ClassNotFoundException;
+
+public Class loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException;
+
+public Object getSecurityContext(ClassLoader loader);
+
+}
diff --git a/libjava/java/rmi/server/LogStream.java b/libjava/java/rmi/server/LogStream.java
new file mode 100644 (file)
index 0000000..e5e1183
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.io.PrintStream;
+import java.io.OutputStream;
+import java.io.IOException;
+
+public class LogStream
+       extends PrintStream {
+
+public static final int SILENT = 0;
+public static final int BRIEF = 1;
+public static final int VERBOSE = 2;
+
+private static PrintStream defStream;
+
+private LogStream(OutputStream s) {
+       super(s);
+}
+
+public static LogStream log(String name) {
+       throw new Error("Not implemented");
+}
+
+public static PrintStream getDefaultStream() {
+       return (defStream);
+}
+
+public static void setDefaultStream(PrintStream s) {
+       defStream = s;
+}
+
+public OutputStream getOutputStream() {
+       return (out);
+}
+
+public void setOutputStream(OutputStream s) {
+       out = s;
+}
+
+public void write(int b) {
+       super.write(b);
+}
+
+public void write(byte[] b, int off, int len) {
+       super.write(b, off, len);
+}
+
+public String toString() {
+       throw new Error("Not implemented");
+}
+
+public static int parseLevel(String s) {
+       if (s.equalsIgnoreCase("silent")) {
+               return (SILENT);
+       }
+       if (s.equalsIgnoreCase("brief")) {
+               return (BRIEF);
+       }
+       if (s.equalsIgnoreCase("verbose")) {
+               return (VERBOSE);
+       }
+       return (SILENT);
+}
+
+}
diff --git a/libjava/java/rmi/server/ObjID.java b/libjava/java/rmi/server/ObjID.java
new file mode 100644 (file)
index 0000000..038e3f9
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.io.Serializable;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.lang.Math;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.util.Random;
+
+public final class ObjID
+       implements Serializable {
+
+static final long serialVersionUID = -6386392263968365220L;
+
+private static long next = 0x8000000000000000L;
+private static final Object lock = ObjID.class;
+
+public static final int REGISTRY_ID = 0;
+public static final int ACTIVATOR_ID = 1;
+public static final int DGC_ID = 2;
+
+private long objNum;
+private UID space;
+
+public ObjID() {
+       synchronized (lock) {
+               objNum = next++;
+       }
+       space = new UID();
+}
+
+public ObjID(int num) {
+       objNum = (long)num;
+       space = new UID((short)0);
+}
+
+public void write(ObjectOutput out) throws IOException {
+       DataOutput dout = (DataOutput)out;
+       dout.writeLong(objNum);
+       space.write(dout);
+}
+
+public static ObjID read(ObjectInput in) throws IOException {
+       DataInput din = (DataInput)in;
+       ObjID id = new ObjID();
+       id.objNum = din.readLong();
+       id.space = UID.read(din);
+       return (id);
+}
+
+public int hashCode() {
+       return ((int)objNum);
+}
+
+public boolean equals(Object obj) {
+       if (obj instanceof ObjID && this.objNum == ((ObjID)obj).objNum) {
+               return (true);
+       }
+       return (false);
+}
+
+public String toString() {
+       return ("[objNum: " + objNum + ", " + space + "]");
+}
+
+}
diff --git a/libjava/java/rmi/server/Operation.java b/libjava/java/rmi/server/Operation.java
new file mode 100644 (file)
index 0000000..c75fec4
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+public class Operation {
+
+private String operation;
+
+public Operation(String op) {
+       operation = op;
+}
+
+public String getOperation() {
+       return (operation);
+}
+
+public String toString() {
+       return (operation);
+}
+
+}
diff --git a/libjava/java/rmi/server/RMIClassLoader.java b/libjava/java/rmi/server/RMIClassLoader.java
new file mode 100644 (file)
index 0000000..76b48b7
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.net.URL;
+import java.net.URLConnection;
+import java.io.IOException;
+import java.io.DataInputStream;
+import java.net.MalformedURLException;
+import java.util.StringTokenizer;
+
+public class RMIClassLoader {
+
+static private class MyClassLoader extends ClassLoader {
+
+Class defineClass(String name, byte[] data) {
+       return (defineClass(name, data, 0, data.length));
+}
+}
+static private MyClassLoader loader = new MyClassLoader();
+
+/**
+ * @deprecated
+ */
+public static Class loadClass(String name) throws MalformedURLException, ClassNotFoundException {
+       return (loadClass(System.getProperty("java.rmi.server.codebase"), name));
+}
+
+public static Class loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException {
+       URL u = new URL(codebase, name + ".class");
+       try {
+               URLConnection conn = u.openConnection();
+               DataInputStream strm = new DataInputStream(conn.getInputStream());
+               byte data[] = new byte[conn.getContentLength()];
+               strm.readFully(data);
+               return (loader.defineClass(name, data));
+       }
+       catch (IOException _) {
+               throw new ClassNotFoundException(name);
+       }
+}
+
+public static Class loadClass(String codebase, String name) throws MalformedURLException, ClassNotFoundException {
+       StringTokenizer tok = new StringTokenizer(codebase, ":");
+       while (tok.hasMoreTokens()) {
+               try {
+                       return (loadClass(new URL(tok.nextToken()), name));
+               }
+               catch (ClassNotFoundException _) {
+                       // Ignore - try the next one.
+               }
+       }
+       throw new ClassNotFoundException(name);
+}
+
+public static String getClassAnnotation(Class cl) {
+       return (null);  // We don't yet do this.
+}
+
+/**
+ * @deprecated
+ */
+public static Object getSecurityContext(ClassLoader loader) {
+       throw new Error("Not implemented");
+}
+
+}
diff --git a/libjava/java/rmi/server/RMIClientSocketFactory.java b/libjava/java/rmi/server/RMIClientSocketFactory.java
new file mode 100644 (file)
index 0000000..1eda8da
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.net.Socket;
+import java.io.IOException;
+
+public interface RMIClientSocketFactory {
+
+public Socket createSocket(String host, int port) throws IOException;
+
+}
diff --git a/libjava/java/rmi/server/RMIFailureHandler.java b/libjava/java/rmi/server/RMIFailureHandler.java
new file mode 100644 (file)
index 0000000..e729593
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+public interface RMIFailureHandler {
+
+public boolean failure(Exception ex);
+
+}
diff --git a/libjava/java/rmi/server/RMIServerSocketFactory.java b/libjava/java/rmi/server/RMIServerSocketFactory.java
new file mode 100644 (file)
index 0000000..46245bd
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.net.ServerSocket;
+import java.io.IOException;
+
+public interface RMIServerSocketFactory {
+
+public ServerSocket createServerSocket(int port) throws IOException;
+
+}
diff --git a/libjava/java/rmi/server/RMISocketFactory.java b/libjava/java/rmi/server/RMISocketFactory.java
new file mode 100644 (file)
index 0000000..bc7f8c3
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.net.Socket;
+import java.net.ServerSocket;
+import java.io.IOException;
+import gnu.java.rmi.server.RMIDefaultSocketFactory;
+
+public abstract class RMISocketFactory
+       implements RMIClientSocketFactory, RMIServerSocketFactory {
+
+static private RMISocketFactory defaultFactory;
+static private RMISocketFactory currentFactory;
+static private RMIFailureHandler currentHandler;
+
+static {
+       defaultFactory = new RMIDefaultSocketFactory();
+       currentFactory = defaultFactory;
+}
+
+public RMISocketFactory() {
+}
+
+public abstract Socket createSocket(String host, int port) throws IOException;
+
+public abstract ServerSocket createServerSocket(int port) throws IOException;
+
+public static void setSocketFactory(RMISocketFactory fac) throws IOException {
+       currentFactory = fac;
+}
+
+public static RMISocketFactory getSocketFactory() {
+       return (currentFactory);
+}
+
+public static RMISocketFactory getDefaultSocketFactory() {
+       return (defaultFactory);
+}
+
+public static void setFailureHandler(RMIFailureHandler fh) {
+       currentHandler = fh;
+}
+
+public static RMIFailureHandler getFailureHandler() {
+       return (currentHandler);
+}
+
+}
diff --git a/libjava/java/rmi/server/RemoteCall.java b/libjava/java/rmi/server/RemoteCall.java
new file mode 100644 (file)
index 0000000..ceb8abe
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.lang.Exception;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectInput;
+import java.io.StreamCorruptedException;
+
+public interface RemoteCall {
+
+public ObjectOutput getOutputStream() throws IOException;
+public void releaseOutputStream() throws IOException;
+public ObjectInput getInputStream() throws IOException;
+public void releaseInputStream() throws IOException;
+public ObjectOutput getResultStream(boolean success) throws IOException, StreamCorruptedException;
+public void executeCall() throws Exception;
+public void done() throws IOException;
+
+}
diff --git a/libjava/java/rmi/server/RemoteObject.java b/libjava/java/rmi/server/RemoteObject.java
new file mode 100644 (file)
index 0000000..6f12866
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.NoSuchObjectException;
+import java.rmi.UnmarshalException;
+import java.rmi.server.RemoteRef;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.IOException;
+import java.lang.ClassNotFoundException;
+import java.lang.InstantiationException;
+import java.lang.IllegalAccessException;
+
+public abstract class RemoteObject
+       implements Remote, Serializable {
+
+public static final long serialVersionUID = -3215090123894869218l;
+
+protected transient RemoteRef ref;
+
+protected RemoteObject() {
+       this(null);
+}
+
+protected RemoteObject(RemoteRef newref) {
+       ref = newref;
+}
+
+public RemoteRef getRef() {
+       return (ref);
+}
+
+public static Remote toStub(Remote obj) throws NoSuchObjectException {
+       throw new Error("Not implemented");
+}
+
+public int hashCode() {
+       if (ref == null) {
+               return (0);
+       }
+       else {
+               return (ref.hashCode());
+       }
+}
+
+public boolean equals(Object obj) {
+       // We only compare references.
+       return (this == obj);
+}
+
+public String toString() {
+       return (ref.toString());
+}
+
+private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+       String cname = in.readUTF();
+       if (!cname.equals("")) {
+               cname = RemoteRef.packagePrefix + '.' + cname;
+               try {
+                       Class cls = Class.forName(cname);
+                       ref = (RemoteRef)cls.newInstance();
+               }
+               catch (InstantiationException e1) {
+                       throw new UnmarshalException("failed to create ref");
+               }
+               catch (IllegalAccessException e2) {
+                       throw new UnmarshalException("failed to create ref");
+               }
+               ref.readExternal(in);
+       }
+       else {
+               ref = (RemoteRef)in.readObject();
+       }
+}
+
+private void writeObject(ObjectOutputStream out) throws IOException, ClassNotFoundException {
+       if (ref == null) {
+               throw new UnmarshalException("no ref to serialize");
+       }
+       String cname = ref.getRefClass(out);
+       if (cname != null && cname.length() > 0) {
+               out.writeUTF(cname);
+               ref.writeExternal(out);
+       }
+       else {
+               out.writeUTF("");
+               out.writeObject(ref);
+       }
+}
+
+}
diff --git a/libjava/java/rmi/server/RemoteRef.java b/libjava/java/rmi/server/RemoteRef.java
new file mode 100644 (file)
index 0000000..f9e57ce
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.lang.reflect.Method;
+import java.io.Externalizable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.io.ObjectOutput;
+
+public interface RemoteRef
+       extends Externalizable {
+
+public static final long serialVersionUID = 0;
+public static final String packagePrefix = "gnu.java.rmi.server";
+
+public void invoke(RemoteCall call) throws Exception;
+public Object invoke(Remote obj, Method method, Object[] params, long opnum) throws Exception;
+public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException;
+public void done(RemoteCall call) throws RemoteException;
+public boolean remoteEquals(RemoteRef ref);
+public int remoteHashCode();
+public String getRefClass(ObjectOutput out);
+public String remoteToString();
+
+}
diff --git a/libjava/java/rmi/server/RemoteServer.java b/libjava/java/rmi/server/RemoteServer.java
new file mode 100644 (file)
index 0000000..24a564a
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+  Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License.
+ */
+
+package java.rmi.server;
+
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+public abstract class RemoteServer
+       extends RemoteObject {
+
+protected RemoteServer() {
+       super();
+}
+
+protected RemoteServer(RemoteRef ref) {
+       super(ref);
+}
+
+public static String getClientHost() throws ServerNotActiveException {
+       throw new Error("Not implemented");
+}
+
+public static void setLog(OutputStream out) {
+       throw new Error("Not implemented");
+}
+
+public static PrintStream getLog() {
+       throw new Error("Not implemented");
+}
+
+}
diff --git a/libjava/java/rmi/server/RemoteStub.java b/libjava/java/rmi/server/RemoteStub.java
new file mode 100644