diff --git a/community-resources/src/idea/IdeaApplicationInfo.xml b/community-resources/src/idea/IdeaApplicationInfo.xml index 32319c5a4ac1..d3bbd42ad90f 100644 --- a/community-resources/src/idea/IdeaApplicationInfo.xml +++ b/community-resources/src/idea/IdeaApplicationInfo.xml @@ -5,7 +5,7 @@ - + diff --git a/tools/launcher-generator/.idea/compiler.xml b/tools/launcher-generator/.idea/compiler.xml index b22c943f13ac..2e800cb0d801 100644 --- a/tools/launcher-generator/.idea/compiler.xml +++ b/tools/launcher-generator/.idea/compiler.xml @@ -14,6 +14,7 @@ + diff --git a/tools/launcher-generator/.idea/libraries/guava_12_0.xml b/tools/launcher-generator/.idea/libraries/guava_12_0.xml new file mode 100644 index 000000000000..3ccd7bb7e2f7 --- /dev/null +++ b/tools/launcher-generator/.idea/libraries/guava_12_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/tools/launcher-generator/.idea/modules.xml b/tools/launcher-generator/.idea/modules.xml index 1927ae044a55..002e747e9a7f 100644 --- a/tools/launcher-generator/.idea/modules.xml +++ b/tools/launcher-generator/.idea/modules.xml @@ -3,6 +3,7 @@ + diff --git a/tools/launcher-generator/launcher-generator.iml b/tools/launcher-generator/launcher-generator.iml index a358b2136eea..37938cabae08 100644 --- a/tools/launcher-generator/launcher-generator.iml +++ b/tools/launcher-generator/launcher-generator.iml @@ -10,6 +10,8 @@ + + diff --git a/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java b/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java index c4e8cf7c43dc..55eea2c56aaf 100644 --- a/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java +++ b/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java @@ -21,10 +21,7 @@ import com.pme.exe.Bin; import com.pme.exe.res.Level; import com.pme.exe.res.LevelEntry; -import java.io.DataInput; -import java.io.IOException; -import java.io.File; -import java.io.RandomAccessFile; +import java.io.*; /** * Date: Apr 27, 2006 @@ -62,12 +59,11 @@ public class IconFile extends Bin.Structure { try { super.read(stream); Word idCount = (Word) ((Bin.Structure) getMember("Header")).getMember("idCount"); - ArrayOfBins iconDirs = new ArrayOfBins("Icon directories", IconDirectory.class, idCount); + ArrayOfBins iconDirs = new ArrayOfBins("Icon directories", IconDirectory.class, idCount); iconDirs.setCountHolder(idCount); addMember(myImages); Bin[] array = iconDirs.getArray(); - for (int i = 0; i < array.length; i++) { - Bin bin = array[i]; + for (Bin bin : array) { myImages.addLevelEntry((LevelEntry) bin); } myImages.read(stream); diff --git a/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java b/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java index 2366f8e757c3..8bc8dc8071d2 100644 --- a/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java +++ b/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java @@ -17,13 +17,10 @@ package com.pme.exe.res.icon; -import com.pme.exe.res.*; import com.pme.exe.Bin; +import com.pme.exe.res.*; -import java.io.File; -import java.io.IOException; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; +import java.io.*; import java.util.ArrayList; /** diff --git a/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java b/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java index 5b43c35b9aab..df4a1d6e68ab 100644 --- a/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java +++ b/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java @@ -17,6 +17,8 @@ package com.pme.launcher; +import com.google.common.io.Files; +import com.google.common.io.InputSupplier; import com.pme.exe.Bin; import com.pme.exe.ExeReader; import com.pme.exe.SectionReader; @@ -36,11 +38,11 @@ import java.io.*; */ public class LauncherGenerator { private File myTemplate; - private File myIcon; private File myExePath; private StringTableDirectory myStringTableDirectory; private DirectoryEntry myRoot; private ExeReader myReader; + private VersionInfo myVersionInfo; public LauncherGenerator(File template, File exePath) { myTemplate = template; @@ -58,22 +60,17 @@ public class LauncherGenerator { myRoot = resourceReader.getRoot(); DirectoryEntry subDir = myRoot.findSubDir("IRD6"); myStringTableDirectory = new StringTableDirectory(subDir); - } - - public void generate() throws IOException { - myStringTableDirectory.save(); - - if (myIcon != null) { - IconResourceInjector iconInjector = new IconResourceInjector(); - iconInjector.injectIcon(myIcon, myRoot, "IRD101"); - } DirectoryEntry viDir = myRoot.findSubDir("IRD16").findSubDir( "IRD1" ); Bin.Bytes viBytes = viDir.getRawResource( 0 ).getBytes(); ByteArrayInputStream bytesStream = new ByteArrayInputStream(viBytes.getBytes()); - VersionInfo viReader = new VersionInfo(); - viReader.read(new OffsetTrackingInputStream(new DataInputStream(bytesStream))); + myVersionInfo = new VersionInfo(); + myVersionInfo.read(new OffsetTrackingInputStream(new DataInputStream(bytesStream))); + } + + public void generate() throws IOException { + myStringTableDirectory.save(); myReader.resetOffsets(0); @@ -93,4 +90,16 @@ public class LauncherGenerator { RawResource bmpRes = subDirBmp.getRawResource(0); bmpRes.setBytes(bitmapData); } + + public void injectIcon(String name, final InputStream iconStream) throws IOException { + File f = File.createTempFile("launcher", "ico"); + Files.copy(new InputSupplier() { + @Override + public InputStream getInput() throws IOException { + return iconStream; + } + }, f); + IconResourceInjector iconInjector = new IconResourceInjector(); + iconInjector.injectIcon(f, myRoot, "IRD101"); + } } diff --git a/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java b/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java index b08f4dc6b824..d903e6357a4d 100644 --- a/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java +++ b/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java @@ -56,7 +56,7 @@ public class LauncherGeneratorMain { try { appInfo = new SAXBuilder().build(appInfoStream); } catch (Exception e) { - System.err.println("Error loading application info file " + appInfoStream + ": " + e.getMessage()); + System.err.println("Error loading application info file " + args[1] + ": " + e.getMessage()); System.exit(4); return; } @@ -81,6 +81,17 @@ public class LauncherGeneratorMain { System.exit(6); } + String icoUrl = appInfo.getRootElement().getChild("icon").getAttributeValue("ico"); + if (icoUrl == null) { + System.err.println(".ico file URL not specified in application info file " + args[1]); + System.exit(11); + } + InputStream iconStream = LauncherGeneratorMain.class.getClassLoader().getResourceAsStream(icoUrl); + if (iconStream == null) { + System.err.println(".ico file " + icoUrl + " not found"); + System.exit(12); + } + Map resourceIDs; try { resourceIDs = loadResourceIDs(args[2]); @@ -121,6 +132,7 @@ public class LauncherGeneratorMain { } generator.injectBitmap(resourceIDs.get("IDB_SPLASH"), splashBmpStream.toByteArray()); + generator.injectIcon(icoUrl, iconStream); generator.generate(); } catch (IOException e) {