diff --git a/applet/build.xml b/applet/build.xml new file mode 100644 index 0000000..562a19f --- /dev/null +++ b/applet/build.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/applet/jinput.html b/applet/jinput.html new file mode 100644 index 0000000..5700f4c --- /dev/null +++ b/applet/jinput.html @@ -0,0 +1,18 @@ + + + + + Introducing Java SE 6 Update 10 + + + + + + \ No newline at end of file diff --git a/applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java b/applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java new file mode 100644 index 0000000..63a18b5 --- /dev/null +++ b/applet/src/net/java/games/input/applet/JInputAppletResourceLoader.java @@ -0,0 +1,221 @@ +/** + * Copyright (C) 2003 Jeremy Booth (jeremy@newdawnsoftware.com) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. Redistributions in binary + * form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided + * with the distribution. + * The name of the author may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + */ +package net.java.games.input.applet; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.ArrayList; +import java.util.Date; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class JInputAppletResourceLoader { + + private static final Logger diagnosticLog = Logger.getLogger(JInputAppletResourceLoader.class.getName()); + private int percentageDone = 0; + + private String getPrivilegedProperty(final String property) { + return (String) AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return System.getProperty(property); + } + }); + } + + private String setPrivilegedProperty(final String property, final String value) { + return (String) AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return System.setProperty(property, value); + } + }); + } + + public void loadResources(URL codeBase) throws IOException { + downloadNativesJar(codeBase); + extractNativesJar(codeBase); + setJInputClasspath(codeBase); + } + + public int getPercentageDone() { + return percentageDone; + } + + private void setJInputClasspath(URL codeBase) { + setPrivilegedProperty("net.java.games.input.librarypath", getTempDir(codeBase) + File.separator + "natives" + File.separator); + } + + private void extractNativesJar(URL codeBase) throws IOException { + File tempDir = new File(getTempDir(codeBase)); + String osName = getPrivilegedProperty("os.name"); + String nativeJar = null; + if (osName.startsWith("Win")) { + nativeJar = "jinput-windows-native.jar"; + } else if (osName.startsWith("Linux") || osName.startsWith("FreeBSD")) { + nativeJar = "jinput-linux-native.jar"; + } else if (osName.startsWith("Mac")) { + nativeJar = "jinput-osx-native.jar"; + } else { + } + + JarFile localJarFile = new JarFile(new File(tempDir, nativeJar), true); + + Enumeration jarEntries = localJarFile.entries(); + int totalUncompressedBytes = 0; + int totalUncompressedBytesWritten = 0; + List entriesToUse = new ArrayList(); + + while(jarEntries.hasMoreElements()) { + JarEntry jarEntry = (JarEntry)jarEntries.nextElement(); + String entryName = jarEntry.getName(); + if(!entryName.startsWith("META-INF")) { + totalUncompressedBytes+=jarEntry.getSize(); + entriesToUse.add(jarEntry); + diagnosticLog.log(Level.INFO, "Got entry " + entryName + " " + jarEntry.getSize() + " big, total of " + totalUncompressedBytes); + } + } + + File tempNativesDir = new File(tempDir, "natives"); + if(!tempNativesDir.exists()) { + tempNativesDir.mkdirs(); + tempNativesDir.deleteOnExit(); + } + + for(int i=0;i