mirror of
https://github.com/shadowfacts/jinput-arm64.git
synced 2025-12-06 08:01:59 +01:00
*** empty log message ***
This commit is contained in:
parent
f2a679ae06
commit
eaa55d4860
34
applet/build.xml
Normal file
34
applet/build.xml
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<project name="applet" basedir="." default="jar">
|
||||||
|
|
||||||
|
<target name="clean">
|
||||||
|
<delete dir="dist" failonerror="true"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="init">
|
||||||
|
<mkdir dir="classes"/>
|
||||||
|
<mkdir dir="dist"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="compile" depends="init">
|
||||||
|
<javac srcdir="src" destdir="classes" debug="true" deprecation="true" source="1.4" target="1.4">
|
||||||
|
<classpath>
|
||||||
|
<pathelement location="../dist/jinput.jar"/>
|
||||||
|
<pathelement location="../dist/jinput-test.jar"/>
|
||||||
|
</classpath>
|
||||||
|
</javac>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jar" depends="compile">
|
||||||
|
<jar jarfile="dist/jinput-applet-test.jar" compress="true" basedir="classes">
|
||||||
|
<include name="**/*.class"/>
|
||||||
|
</jar>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="dist" depends="jar">
|
||||||
|
<copy todir="dist">
|
||||||
|
<fileset dir="../webstart/dist/"/>
|
||||||
|
</copy>
|
||||||
|
</target>
|
||||||
|
</project>
|
||||||
18
applet/jinput.html
Normal file
18
applet/jinput.html
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<meta http-equiv="content-language" content="en">
|
||||||
|
<title>Introducing Java SE 6 Update 10</title>
|
||||||
|
<script src="http://java.com/js/deployJava.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
deployJava.setInstallerType('kernel');
|
||||||
|
// include any required packages as shown below
|
||||||
|
deployJava.setAdditionalPackages('javax.swing, javax.xml');
|
||||||
|
deployJava.runApplet({codebase:"file:/C:/code/workspace/jinput/webstart/dist/",
|
||||||
|
archive:"jinput.jar,jinput-test.jar,jinput-applet-test.jar", code:"net.java.games.input.applet.test.ControllerReadTestApplet",
|
||||||
|
width:"320", Height:"400"}, null, "1.4.2");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -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<entriesToUse.size();i++) {
|
||||||
|
JarEntry jarEntry = (JarEntry) entriesToUse.get(i);
|
||||||
|
InputStream inStream = localJarFile.getInputStream(localJarFile.getEntry(jarEntry.getName()));
|
||||||
|
File nativeFile = new File(tempNativesDir, jarEntry.getName());
|
||||||
|
FileOutputStream fos = new FileOutputStream(nativeFile);
|
||||||
|
|
||||||
|
byte[] dataBuffer = new byte[65535];
|
||||||
|
int bytesRead = 0;
|
||||||
|
|
||||||
|
// Read the first block
|
||||||
|
bytesRead = inStream.read(dataBuffer, 0, dataBuffer.length);
|
||||||
|
while(bytesRead!=-1) {
|
||||||
|
|
||||||
|
fos.write(dataBuffer, 0, bytesRead);
|
||||||
|
|
||||||
|
totalUncompressedBytesWritten+=bytesRead;
|
||||||
|
|
||||||
|
int unpackingPercentageDone = (int)((((float)totalUncompressedBytesWritten)/totalUncompressedBytes)*100);
|
||||||
|
percentageDone = 50 + (unpackingPercentageDone/2); //Reading the file is only 1/2 the job
|
||||||
|
diagnosticLog.log(Level.INFO, "Written " + totalUncompressedBytesWritten + " out of " + totalUncompressedBytes + " " + unpackingPercentageDone + "%, (" + percentageDone + "% total)");
|
||||||
|
|
||||||
|
// Read the next block
|
||||||
|
bytesRead = inStream.read(dataBuffer, 0, dataBuffer.length);
|
||||||
|
}
|
||||||
|
long entryModifiedTime = jarEntry.getTime();
|
||||||
|
nativeFile.setLastModified(entryModifiedTime);
|
||||||
|
diagnosticLog.log(Level.INFO, "Setting native modified time to " + new Date(entryModifiedTime));
|
||||||
|
fos.close();
|
||||||
|
inStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void downloadNativesJar(URL codeBase) throws IOException {
|
||||||
|
diagnosticLog.log(Level.INFO, "codebase: " + codeBase);
|
||||||
|
File tempDir = new File(getTempDir(codeBase));
|
||||||
|
if(!tempDir.exists()) {
|
||||||
|
tempDir.mkdirs();
|
||||||
|
tempDir.deleteOnExit();
|
||||||
|
}
|
||||||
|
|
||||||
|
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 {
|
||||||
|
}
|
||||||
|
|
||||||
|
File localJarFile = new File(tempDir, nativeJar);
|
||||||
|
localJarFile.deleteOnExit();
|
||||||
|
|
||||||
|
diagnosticLog.log(Level.INFO, "Using local file " + localJarFile.getCanonicalPath());
|
||||||
|
|
||||||
|
OutputStream outStream = new FileOutputStream(localJarFile);
|
||||||
|
outStream = new BufferedOutputStream(outStream);
|
||||||
|
|
||||||
|
URL remoteJarURL = new URL(codeBase, nativeJar);
|
||||||
|
|
||||||
|
diagnosticLog.log(Level.INFO, "Using remote file " + remoteJarURL);
|
||||||
|
|
||||||
|
URLConnection connection = remoteJarURL.openConnection();
|
||||||
|
connection.setUseCaches(false);
|
||||||
|
connection.setConnectTimeout(2000);
|
||||||
|
|
||||||
|
int contentLength = connection.getContentLength();
|
||||||
|
|
||||||
|
diagnosticLog.log(Level.INFO, "remote jar is " + contentLength + " bytes");
|
||||||
|
|
||||||
|
InputStream inStream = connection.getInputStream();
|
||||||
|
byte[] dataBuffer = new byte[65535];
|
||||||
|
int bytesRead = 0;
|
||||||
|
int totalRead = 0;
|
||||||
|
int totalWritten = 0;
|
||||||
|
|
||||||
|
// Read the first block
|
||||||
|
bytesRead = inStream.read(dataBuffer, 0, dataBuffer.length);
|
||||||
|
while(bytesRead!=-1) {
|
||||||
|
//Update total read
|
||||||
|
totalRead+=bytesRead;
|
||||||
|
|
||||||
|
outStream.write(dataBuffer, 0, bytesRead);
|
||||||
|
|
||||||
|
totalWritten+=bytesRead;
|
||||||
|
|
||||||
|
int thisFilePercent = (int)((((float)totalRead)/contentLength)*100);
|
||||||
|
percentageDone = thisFilePercent/2; //Reading the file is only 1/2 the job
|
||||||
|
diagnosticLog.log(Level.INFO, "Written " + totalRead + " out of " + contentLength + " " + thisFilePercent + "%, (" + percentageDone + "% total)");
|
||||||
|
|
||||||
|
// Read the next block
|
||||||
|
bytesRead = inStream.read(dataBuffer, 0, dataBuffer.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
inStream.close();
|
||||||
|
outStream.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getTempDir(URL codeBase) {
|
||||||
|
return getPrivilegedProperty("java.io.tmpdir") + File.separator + codeBase.getHost() + File.separator + "jinput";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
/**
|
||||||
|
* 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.test;
|
||||||
|
|
||||||
|
import java.applet.Applet;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import net.java.games.input.test.ControllerReadTest;
|
||||||
|
import net.java.games.input.applet.JInputAppletResourceLoader;
|
||||||
|
|
||||||
|
public class ControllerReadTestApplet extends Applet {
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
try {
|
||||||
|
new JInputAppletResourceLoader().loadResources(getCodeBase());
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
new ControllerReadTest().setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue