Index: /other-projects/expeditee-release-kits/bin/rke.bat
===================================================================
--- /other-projects/expeditee-release-kits/bin/rke.bat	(revision 28739)
+++ /other-projects/expeditee-release-kits/bin/rke.bat	(revision 28740)
@@ -1,3 +1,3 @@
-cho off
+@echo off
 set RK_NAME=%0
 %~dp0\rk.bat %*
Index: /other-projects/expeditee-release-kits/scripts/bin/findjava.bat
===================================================================
--- /other-projects/expeditee-release-kits/scripts/bin/findjava.bat	(revision 28739)
+++ /other-projects/expeditee-release-kits/scripts/bin/findjava.bat	(revision 28740)
@@ -18,13 +18,14 @@
 set MIN_VERSION=1.8.0_00
 set SEARCH4J_EXECUTABLE=search4j.exe
+::set HINT=%EXPEDITEE_HOME%\packages\jre
+set HINT=packages\jre
 if exist %SEARCH4J_EXECUTABLE% goto setJexec
-set SEARCH4J_EXECUTABLE=!EXPEDITEE_HOME!\bin\search4j.exe
-set HINT=!EXPEDITEE_HOME!\packages\jre
+set SEARCH4J_EXECUTABLE=%EXPEDITEE_HOME%\bin\search4j.exe
 if not exist "%SEARCH4J_EXECUTABLE%" goto tryJava
 
 :: JAVA_EXECUTABLE is the value returned by running search4j -e -m MIN_VERSION -p HINT
-:: for /f "tokens=*" %%G in ('"%SEARCH4J_EXECUTABLE% -e -m %MIN_VERSION% -p %HINT%"') do set JAVA_EXECUTABLE=%%G
 :setJexec
-    for /f "tokens=* usebackq" %%G in (`"%SEARCH4J_EXECUTABLE%" -e -m '%MIN_VERSION%' -p '%HINT%'`) do set JAVA_EXECUTABLE=%%G
+	for /f "tokens=* usebackq" %%G in (`"%SEARCH4J_EXECUTABLE%" -e -m '%MIN_VERSION%' -p %HINT%`) do set JAVA_EXECUTABLE=%%G
+	
     if "%JAVA_EXECUTABLE%" == "" goto noJava
     echo Java:
@@ -33,5 +34,5 @@
 
     :: we know that works, so we can set the local javahome (for Expeditee) as well
-    for /f "tokens=* usebackq" %%G in (`"%SEARCH4J_EXECUTABLE%" -m '%MIN_VERSION%' -p '%HINT%'`) do set EXP_JAVA_HOME=%%G
+    for /f "tokens=* usebackq" %%G in (`"%SEARCH4J_EXECUTABLE%" -m '%MIN_VERSION%' -p %HINT%`) do set EXP_JAVA_HOME=%%G
 
 :: found java, JAVA_EXECUTABLE and EXP_JAVA_HOME env vars set, can exit this script
Index: /other-projects/expeditee-release-kits/scripts/run.bat
===================================================================
--- /other-projects/expeditee-release-kits/scripts/run.bat	(revision 28739)
+++ /other-projects/expeditee-release-kits/scripts/run.bat	(revision 28740)
@@ -15,9 +15,4 @@
 :: JRE_HOME or JAVA_HOME must be set correctly to run Expeditee
 
-set java_min_version=1.8.0_00
-bin\windows\search4j -m %java_min_version% > nul
-echo.
-if not %ERRORLEVEL% equ 0 goto :exit
-
 :: ---- Check Java ----
 :chkjava
@@ -26,5 +21,5 @@
 :: Need to find Java. If found, JAVA_EXECUTABLE will be set
 :: call findjava.bat %EXP_LANG% %PROGNAME%
-call "%EXPEDITEE_HOME%\findjava.bat"
+call "%EXPEDITEE_HOME%\bin\findjava.bat"
 if "%JAVA_EXECUTABLE%" == "" echo **** No Java executable found& goto exit
 set PATH=%EXP_JAVA_HOME%\bin;%PATH%
Index: /other-projects/expeditee-release-kits/scripts/run.sh
===================================================================
--- /other-projects/expeditee-release-kits/scripts/run.sh	(revision 28739)
+++ /other-projects/expeditee-release-kits/scripts/run.sh	(revision 28740)
@@ -30,36 +30,29 @@
 ##  ---- Determine JAVA_HOME ----
 # JRE_HOME or JAVA_HOME must be set correctly to run this program
-java_min_version=1.8.0_00
-bin/search4j -m $java_min_version &> /dev/null
-# for some reason, Mac requires an echo after the above
-echo
-if [ "$?" == "0" ]; then
+#CLASSPATH
+# if setting classpath, see gs2-server.sh, then export it
 
-    #CLASSPATH
-    # if setting classpath, see gs2-server.sh, then export it
+## ---- Check Java ----
+# call the script with source, so that we have the variables it sets ($javapath)
+exit_status=0
+source bin/findjava.sh "$exp_lang" "$PROGNAME"
+exit_status=$?
+if [ "$exit_status" -eq 1 ]; then
+	exit 1;
+fi
+export PATH=$javahome/bin:$PATH
 
-    ## ---- Check Java ----
-    # call the script with source, so that we have the variables it sets ($javapath)
-    exit_status=0
-    source bin/findjava.sh "$exp_lang" "$PROGNAME"
-    exit_status=$?
-    if [ "$exit_status" -eq 1 ]; then
-        exit 1;
-    fi
-    export PATH=$javahome/bin:$PATH
+# -Xdock:name      To set the name of the app in the MacOS Dock bar
+# -Xdock:icon      Path to the MacOS Doc icon (not necessary for GS)    
+custom_vm_args=""
+if [ "$EXPEDITEE_OS" = "darwin" ]; then
+	custom_vm_args="-Xdock:name=$PROGFULLNAME"
+fi
 
-    # -Xdock:name      To set the name of the app in the MacOS Dock bar
-    # -Xdock:icon      Path to the MacOS Doc icon (not necessary for GS)    
-    custom_vm_args=""
-    if [ "$EXPEDITEE_OS" = "darwin" ]; then
-    	custom_vm_args="-Xdock:name=$PROGFULLNAME"
-    fi
+#-Xmx128M -classpath <classpath>...
 
-    #-Xmx128M -classpath <classpath>...
+"$javapath" $custom_vm_args -jar Expeditee.jar $*
 
-    "$javapath" $custom_vm_args -jar Expeditee.jar $*
-
-    # silent mode: when launched in the background (with & at end), need to 
-    # redirect any STDERR (STDOUT) output to /dev/null first, else output will hog the x-term.
-    #"$javapath" $custom_vm_args org.greenstone.server.Server2 "$GSDLHOME" "$GSDLOS$GSDLARCH" "$serverlang" $* > /dev/null &
-fi
+# silent mode: when launched in the background (with & at end), need to 
+# redirect any STDERR (STDOUT) output to /dev/null first, else output will hog the x-term.
+#"$javapath" $custom_vm_args org.greenstone.server.Server2 "$GSDLHOME" "$GSDLOS$GSDLARCH" "$serverlang" $* > /dev/null &
Index: /other-projects/expeditee-release-kits/shared/windows/7za/License.txt
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/7za/License.txt	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/7za/License.txt	(revision 28740)
@@ -0,0 +1,31 @@
+      7-Zip Extra
+      ~~~~~~~~~~~
+      License for use and distribution
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+      7-Zip Copyright (C) 1999-2011 Igor Pavlov.
+
+      7-Zip Extra files are under the GNU LGPL license.
+
+      
+      Notes: 
+        You can use 7-Zip Extra on any computer, including a computer in a commercial 
+        organization. You don't need to register or pay for 7-Zip.
+
+
+      GNU LGPL information
+      --------------------
+
+        This library is free software; you can redistribute it and/or
+        modify it under the terms of the GNU Lesser General Public
+        License as published by the Free Software Foundation; either
+        version 2.1 of the License, or (at your option) any later version.
+
+        This library 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
+        Lesser General Public License for more details.
+
+        You can receive a copy of the GNU Lesser General Public License from 
+        http://www.gnu.org/
+
Index: /other-projects/expeditee-release-kits/shared/windows/7za/history.txt
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/7za/history.txt	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/7za/history.txt	(revision 28740)
@@ -0,0 +1,65 @@
+7-Zip Extra history
+-------------------
+
+9.18                2010-11-02
+------------------------------
+  - New small SFX module for installers.
+
+
+9.17                2010-10-04
+------------------------------
+  - New 7-Zip plugin for FAR Manager x64.
+
+
+9.10                2009-12-30
+------------------------------
+  - 7-Zip for installers now supports LZMA2.
+
+
+9.09                2009-12-12
+------------------------------
+  - LZMA2 compression method support.
+  - Some bugs were fixed.
+
+
+4.65                2009-02-03
+------------------------------
+  - Some bugs were fixed.
+
+
+4.38 beta           2006-04-13
+------------------------------
+  - SFX for installers now supports new properties in config file:
+    Progress, Directory, ExecuteFile, ExecuteParameters.
+
+
+4.34 beta           2006-02-27
+------------------------------
+  - ISetProperties::SetProperties:
+      it's possible to specify desirable number of CPU threads: 
+           PROPVARIANT: name=L"mt", vt = VT_UI4, ulVal = NumberOfThreads
+      If "mt" is not defined, 7za.dll will check number of processors in system to set 
+      number of desirable threads. 
+      Now 7za.dll can use:
+        2 threads for LZMA compressing
+        N threads for BZip2 compressing
+        4 threads for BZip2 decompressing
+      Other codecs use only one thread. 
+      Note: 7za.dll can use additional "small" threads with low CPU load.
+  - It's possible to call ISetProperties::SetProperties to specify "mt" property for decoder.
+
+
+4.33 beta           2006-02-05
+------------------------------
+  - Compressing speed and Memory requirements were increased.
+    Default dictionary size was increased: Fastest: 64 KB, Fast: 1 MB, 
+    Normal: 4 MB, Max: 16 MB, Ultra: 64 MB.
+  - 7z/LZMA now can use only these match finders: HC4, BT2, BT3, BT4
+
+
+4.27                2005-09-21
+------------------------------
+ - Some GUIDs/interfaces were changed.
+   IStream.h:
+     ISequentialInStream::Read now works as old ReadPart
+     ISequentialOutStream::Write now works as old WritePart
Index: /other-projects/expeditee-release-kits/shared/windows/7za/readme.txt
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/7za/readme.txt	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/7za/readme.txt	(revision 28740)
@@ -0,0 +1,55 @@
+7-Zip Extra 9.22
+----------------
+
+7-Zip Extra is package of extra modules of 7-Zip. 
+
+7-Zip Copyright (C) 1999-2011 Igor Pavlov.
+
+This package contains the following files:
+
+7za.dll   - library for working with 7z archives.
+7zxa.dll  - library for extracting from 7z archives.
+7zS.sfx      - SFX module for installers
+7zSD.sfx     - SFX module for installers (uses msvcrt.dll)
+7zS2.sfx     - small SFX module (GUI version) (uses msvcrt.dll)
+7zS2con.sfx  - small SFX module (Console version) (uses msvcrt.dll)
+7za.exe      - is a standalone command line version of 7-Zip.
+7zr.exe      - reduced version of console program 7za.exe
+7-zip.chm    - help file 
+copying.txt  - GNU LGPL
+readme.txt   - This file
+Far\      - Plugin for FAR manager
+Installer\  - Files to compress installers
+x64\      - DLLs for x64
+
+
+Features of 7za.dll: 
+  - Supporting 7z format;
+  - Built encoders: LZMA, LZMA2, PPMD, BCJ, BCJ2, COPY, AES-256 Encryption.
+  - Built decoders: LZMA, LZMA2, PPMD, BCJ, BCJ2, COPY, AES-256 Encryption, BZip2, Deflate.
+7zxa.dll supports only decoding from .7z archives.
+
+Features of 7za.exe: 
+  - High compression ratio in new 7z format
+  - Supported formats:
+      - Packing / unpacking: 7z, xz, ZIP, GZIP, BZIP2 and TAR 
+      - Unpacking only: Z, lzma
+  - Highest compression ratio for ZIP and GZIP formats.
+  - Fast compression and decompression
+  - Strong AES-256 encryption in 7z and ZIP formats.
+    
+
+7-Zip is free software. Read file License.txt for more infomation about license.
+
+Source code of 7za.dll and 7-Zip (including all interfaces 
+and small example application) can be found at
+
+http://www.7-zip.org/
+
+7za.dll and 7zxa.dll can work in Windows 95/98/ME/NT/2000/2003/2008/XP/Vista/7. 
+7za.dll and 7zxa.dll work via COM interfaces
+But these DLLs don't use standard COM interfaces for objects creating.
+
+
+---
+End of document
Index: /other-projects/expeditee-release-kits/shared/windows/Greenstone Wiki.url
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/Greenstone Wiki.url	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/Greenstone Wiki.url	(revision 28740)
@@ -0,0 +1,5 @@
+[InternetShortcut]
+URL=http://wiki.greenstone.org/
+IDList=
+[{000214A0-0000-0000-C000-000000000046}]
+Prop3=19,2
Index: /other-projects/expeditee-release-kits/shared/windows/Microsoft.VC80.CRT.manifest
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/Microsoft.VC80.CRT.manifest	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/Microsoft.VC80.CRT.manifest	(revision 28740)
@@ -0,0 +1,8 @@
+﻿<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+    <noInheritable></noInheritable>
+    <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
+    <file name="msvcr80.dll" hash="0a38b652c9d03caab803c6b2505fa301e345bab2" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>TM0VvywbHVQayIOw9CSX6M7WpaM=</dsig:DigestValue></asmv2:hash></file>
+    <file name="msvcp80.dll" hash="678bf3da5d1987bb88fd47c4801ecb41f51366ef" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>vHzmAnClhFBZaqPj5dCpn3MTM9k=</dsig:DigestValue></asmv2:hash></file>
+    <file name="msvcm80.dll" hash="34f57d3d73b2810fa7b5ddc111898f137bc0530b" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>5mXwc/jrpkgtj6JtWiE8YH2EcOw=</dsig:DigestValue></asmv2:hash></file>
+</assembly>
Index: /other-projects/expeditee-release-kits/shared/windows/README.txt
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/README.txt	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/README.txt	(revision 28740)
@@ -0,0 +1,16 @@
+Self-extracting jre instructions
+_________________________________
+
+1. You need 7za.exe and 7zCon.sfx from the 7za folder to generate the self-extracting jre.exe from the jre
+
+2. Need the jre for your java version.
+Java 8 should be used for Expeditee.
+The jre should be extracted into a folder named jre. Also, don't make it a tar file for Expeditee. (Greenstone expects the jre to be tarred up first.)
+
+3. Run:
+7za\7za.exe a -sfx -mx=9 jre.exe path\to\your-jdk-version\jre
+
+* -sfx indicates that it will generate a self-extracting binary out of the input file
+* -mx=9 set its to ultra (compression? speed?)
+* the output file name expected by the release-kit is jre.exe
+* the "a" indicates it will add the files from the input folder (the /path/to/your-jdk-version/jre in this case) to the output file
Index: /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/JNLP-1.5.dtd
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/JNLP-1.5.dtd	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/JNLP-1.5.dtd	(revision 28740)
@@ -0,0 +1,472 @@
+<!--
+<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Discriptor 1.5//EN" "http://java.sun.com/dtd/JNLP-1.5.dtd">
+-->
+<!ELEMENT jnlp (information+, security?, resources*, 
+ (application-desc | applet-desc | component-desc |
+ installer-desc))>
+<!--
+The spec attribute of the jnlp element specifies what
+versions of the JNLP specification a particular JNLP file
+works with. The default value is "1.0+".
+-->
+<!ATTLIST jnlp spec CDATA #IMPLIED>
+<!--
+The version attribute of the jnlp element specifies the
+version of the application being launched, as well as the
+version of the JNLP file itself.
+-->
+<!ATTLIST jnlp version CDATA #IMPLIED>
+<!--
+The codebase attribute of the jnlp element specifies the
+codebase for the application. This is also used as the base
+URL for all relative URLs in href attributes.
+-->
+<!ATTLIST jnlp codebase CDATA #IMPLIED>
+<!--
+The href attribute of the jnlp element contains the location
+of the JNLP file as a URL.
+-->
+<!ATTLIST jnlp href CDATA #IMPLIED>
+<!--
+The information element contains various descriptive
+information about the application being launched.
+-->
+<!ELEMENT information (title?, vendor?, homepage?,
+description*, icon*,offline-allowed?, shortcut?,
+association?, related-content*)>
+<!--
+The os attribute of the information element specifies for
+which operating system this element should be considered.
+-->
+<!ATTLIST information os CDATA #IMPLIED>
+<!--
+The arch attribute of the information element specifies for
+what architecure this element should be considered.
+-->
+<!ATTLIST information arch CDATA #IMPLIED>
+<!--
+The platform attribute of the information element specifies
+for what platform this element should be considered.
+-->
+<!ATTLIST information platform CDATA #IMPLIED>
+<!--
+The locale attribute of the information element specifies the
+locale for which this information element should be used.
+-->
+<!ATTLIST information locale CDATA #IMPLIED>
+<!--
+The title element contains the name of the application.
+-->
+<!ELEMENT title (#PCDATA)>
+<!--
+The vendor element contains the name of the vendor.
+-->
+<!ELEMENT vendor (#PCDATA)>
+<!--
+The homepage element contains a href to the homepage for the
+application.
+-->
+<!ELEMENT homepage EMPTY>
+<!--
+The href attribute of the homepage element specifies the URL
+for the homepage.
+-->
+<!ATTLIST homepage href CDATA #REQUIRED>
+<!--
+The description element contains a description of the
+application.
+-->
+<!ELEMENT description (#PCDATA)>
+<!--
+The kind attribute for the description element indicates the
+use of a description element. The values are: i) one-line,
+for a one-line description, ii) short, for a one paragraph
+description, and iii) tooltip, for a tool-tip description.
+Longer descriptions should be put on a separate web page and
+referred to using the homepage element.
+-->
+<!ATTLIST description kind (one-line | short | tooltip)
+#IMPLIED>
+<!--
+The icon element describes an image for an application.
+-->
+<!ELEMENT icon EMPTY>
+<!--
+The href attribute of an icon contains a URL to a location on
+the web containing an image file for an icon.
+-->
+<!ATTLIST icon href CDATA #REQUIRED>
+<!--
+The version attribute of an icon contains a string describing
+the version of the image that is requested.
+-->
+<!ATTLIST icon version CDATA #IMPLIED>
+<!--
+The width attribute of the icon element describes the width
+of the icon in pixels.
+-->
+<!ATTLIST icon width CDATA #IMPLIED>
+<!--
+The height attribute of the icon element describes the height
+of the icon in pixels.
+-->
+<!ATTLIST icon height CDATA #IMPLIED>
+<!--
+The kind attribute of the icon element describes the use of
+the icon.
+-->
+<!ATTLIST icon kind CDATA #IMPLIED>
+<!--
+The depth attribute of the icon element describes the color
+depth of the image in bits-per-pixel. Common values will be
+8, 16, or 24.
+-->
+<!ATTLIST icon depth CDATA #IMPLIED>
+<!--
+The size attribute of an icon element indicates the size of
+an icon file in bytes.
+-->
+<!ATTLIST icon size CDATA #IMPLIED>
+<!--
+The offline-allowed element indicates if the application can
+be launched offline. Default value (i.e., if the element is
+not specified) is online.
+-->
+<!ELEMENT offline-allowed EMPTY>
+<!--
+The security element describes the security requirements of
+the application.
+-->
+<!ELEMENT security (all-permissions?,
+j2ee-application-client-permissions?)>
+<!--
+The all-permissions element indicates that the application
+needs full access the the local system and network.
+-->
+<!ELEMENT all-permissions EMPTY>
+<!--
+The j2ee-application-client-permissions element indicates
+that the application needs the set of permissions defined for
+a J2EE application client.
+-->
+<!ELEMENT j2ee-application-client-permissions EMPTY>
+<!--
+The resources element contains an ordered set of resources
+that constitutes an application.
+-->
+<!ELEMENT resources (j2se | jar | nativelib | extension |
+property | package)*>
+<!--
+The os attribute of the resources element specifies for which
+operating system this element should be considered.
+-->
+<!ATTLIST resources os CDATA #IMPLIED>
+<!--
+The arch attribute of the resources element specifies for
+what platform this element should be considered.
+-->
+<!ATTLIST resources arch CDATA #IMPLIED>
+<!--
+The locale attribute of the resources element specifies for
+which locales this element should be considered.
+-->
+<!ATTLIST resources locale CDATA #IMPLIED>
+<!--
+The j2se element describes a supported JRE version and an
+optional resources element to be used by the particular JRE.
+-->
+<!ELEMENT j2se (resources*)>
+<!--
+The version attribute of the j2se element describes the
+versions of the JRE that this application is supported on.
+-->
+<!ATTLIST j2se version CDATA #REQUIRED>
+<!--
+The href attribute of the j2se element specifies the location
+where the JRE should be downloaded from.
+-->
+<!ATTLIST j2se href CDATA #IMPLIED>
+<!--
+The initial-heap-size attribute of the j2se element specifies
+the initial size of the object heap.
+-->
+<!ATTLIST j2se initial-heap-size CDATA #IMPLIED>
+<!--
+The max-heap-size attribute of the j2se element specifies the
+preferred maximum size of the object heap.
+-->
+<!ATTLIST j2se max-heap-size CDATA #IMPLIED>
+<!--
+The java-vm-args attribute of the j2se element specifies a
+preferred set of virtual machine arguments to use when
+launching java.
+-->
+<!ATTLIST j2se java-vm-args CDATA #IMPLIED>
+<!--
+The jar element describes a jar file resource.
+-->
+<!ELEMENT jar EMPTY>
+<!--
+The href attribute of the jar element contains the location
+of a jar file as a URL.
+-->
+<!ATTLIST jar href CDATA #REQUIRED>
+<!--
+The version attribute of a jar element describes the version
+of a particular JAR file that is requested.
+-->
+<!ATTLIST jar version CDATA #IMPLIED>
+<!--
+The main attribute of a jar element indicates whether this
+element contains the main class.
+-->
+<!ATTLIST jar main (true|false) "false">
+<!--
+The download attribute of a jar element indicates if this
+element must be downloaded before an application is launched
+(eager), or not (lazy).
+-->
+<!ATTLIST jar download (eager | lazy) "eager">
+<!--
+The size attribute of a jar element indicates the size of a
+JAR file in bytes.
+-->
+<!ATTLIST jar size CDATA #IMPLIED>
+<!--
+The part attribute of a jar element describes the name of the
+group it belongs too.
+-->
+<!ATTLIST jar part CDATA #IMPLIED>
+<!--
+The nativelib element describes a resource containing native
+files.
+-->
+<!ELEMENT nativelib EMPTY>
+<!--
+The href attribute of a nativelib element contains the
+location of a nativelib file as a URL.
+-->
+<!ATTLIST nativelib href CDATA #REQUIRED>
+<!--
+The version attribute of a nativelib element describes the
+version of a particular nativelib file that is requested.
+-->
+<!ATTLIST nativelib version CDATA #IMPLIED>
+<!--
+The download attribute of a nativelib element indicates if
+this element must be downloaded before an application is
+launched (eager), or not (lazy).
+-->
+<!ATTLIST nativelib download (eager | lazy) "eager">
+<!--
+The size attribute of a nativelib element indicates the size
+of a nativelib file in bytes.
+-->
+<!ATTLIST nativelib size CDATA #IMPLIED>
+<!--
+The part attribute of a nativelib element describes the name
+of the part it belongs to.
+-->
+<!ATTLIST nativelib part CDATA #IMPLIED>
+<!--
+The extension element describes an extension that is required
+in order to run the application.
+-->
+<!ELEMENT extension (ext-download*)>
+<!--
+The version attribute of an extension element specifies the
+version of the extension requested.
+-->
+<!ATTLIST extension version CDATA #IMPLIED>
+<!--
+The name attribute of an extension element specifies the name
+of the extension.
+-->
+<!ATTLIST extension name CDATA #IMPLIED>
+<!--
+The href attribute of an extension element specifies the
+location of the extension.
+-->
+<!ATTLIST extension href CDATA #REQUIRED>
+<!--
+The ext-download element defines how parts of the extension
+are downloaded.
+-->
+<!ELEMENT ext-download EMPTY>
+<!--
+The ext-part attribute of an ext-download element describes
+the name of a part in the extension.
+-->
+<!ATTLIST ext-download ext-part CDATA #REQUIRED>
+<!--
+The download attribute of an ext-download element describes
+if the resource may be lazily downloaded.
+-->
+<!ATTLIST ext-download download (lazy|eager) "eager">
+<!--
+The part attribute of an ext-download element describes the
+name of the part it belongs to in the current JNLP file.
+-->
+<!ATTLIST ext-download part CDATA #IMPLIED>
+<!--
+The property element describes a name/value pair that is
+available to the launched application as a system property.
+-->
+<!ELEMENT property EMPTY>
+<!--
+The name attribute of the property element describes the name
+of a system property.
+-->
+<!ATTLIST property name CDATA #REQUIRED>
+<!--
+The value element describes the value of a system property.
+-->
+<!ATTLIST property value CDATA #REQUIRED>
+<!--
+The package element defines a relationship between a Java
+package or class name and a part.
+-->
+<!ELEMENT package EMPTY>
+<!--
+The name attribute of the package element describes the name
+of a package or class.
+-->
+<!ATTLIST package name CDATA #REQUIRED>
+<!--
+The part attribute of the package element describes the part
+that contains the specified package or class.
+-->
+<!ATTLIST package part CDATA #REQUIRED>
+<!--
+The recursive attribute of the package element indicates if
+all sub-packages of this particular package is also included.
+-->
+<!ATTLIST package recursive (true|false) "false">
+<!--
+The application-desc element describes how to launch a
+Java-based application. It contains information about the
+main class and arguments.
+-->
+<!ELEMENT application-desc (argument*)>
+<!--
+The main-class attribute of the application-desc element
+describes the main class of an application.
+-->
+<!ATTLIST application-desc main-class CDATA #IMPLIED>
+<!--
+The argument elements describe the ordered set of arguments
+to an application. These arguments will be passed into the
+main method of the application's main class.
+-->
+<!ELEMENT argument (#PCDATA)>
+<!--
+The applet-desc element describes how to launch a Java
+Technology-based Applet. It contains information about, e.g.,
+the main class, size, and parameters.
+-->
+<!ELEMENT applet-desc (param*)>
+<!--
+The documentbase attribute of the applet-desc element
+describes the documentbase for the applet as a URL.
+-->
+<!ATTLIST applet-desc documentbase CDATA #IMPLIED>
+<!--
+The main-class attribute of the applet-desc element describes
+the name of the main Applet class.
+-->
+<!ATTLIST applet-desc main-class CDATA #REQUIRED>
+<!--
+The name attribute of the applet-desc element describes the
+name of the Applet.
+-->
+<!ATTLIST applet-desc name CDATA #REQUIRED>
+<!--
+The width attribute of the applet-desc element describes the
+width of the Applet in pixels.
+-->
+<!ATTLIST applet-desc width CDATA #REQUIRED>
+<!--
+The height attribute of the applet-desc element describes the
+height of the Applet in pixels.
+-->
+<!ATTLIST applet-desc height CDATA #REQUIRED>
+<!--
+The param element describes a parameter to an Applet.
+-->
+<!ELEMENT param EMPTY>
+<!--
+The name attribute of the param element describes the name of
+a parameter.
+-->
+<!ATTLIST param name CDATA #REQUIRED>
+<!--
+The value attribute of the param element describes the value
+of a parameter.
+-->
+<!ATTLIST param value CDATA #REQUIRED>
+<!--
+The component-desc element specifies a component extension.
+-->
+<!ELEMENT component-desc EMPTY>
+<!--
+The installer-desc element specifies an installer extension.
+-->
+<!ELEMENT installer-desc EMPTY>
+<!--
+The main-class attribute of the installer-desc element
+describes the main class for the installer/uninstaller.
+-->
+<!ATTLIST installer-desc main-class CDATA #IMPLIED>
+<!--
+The shortcut element describes an application's preferences
+for desktop integration.
+-->
+<!ELEMENT shortcut (desktop?, menu?)>
+<!--
+The online attribute of the shortcut element describes an
+application's preferences launching shortcuts online or
+offline
+-->
+<!ATTLIST shortcut online (true | false) "true">
+<!--
+The desktop element indicates that a shortcut on the desktop
+is desired.
+-->
+<!ELEMENT desktop EMPTY>
+<!--
+The menu element indicates that a shortcut in a menu is
+desired.
+-->
+<!ELEMENT menu EMPTY>
+<!--
+The submenu attribute of the menu element indicates where in
+the menu a shortcut is desired.
+-->
+<!ATTLIST menu submenu CDATA #IMPLIED>
+<!--
+The association element describes an application's
+preferences for desktop associations.
+-->
+<!ELEMENT association EMPTY>
+<!--
+The extensions attribute of the association element indicates
+a list of extensions to associate.
+-->
+<!ATTLIST association extensions CDATA #REQUIRED>
+<!--
+The mime-type attribute of the association element indicates
+a mime-types to associate.
+-->
+<!ATTLIST association mime-type CDATA #REQUIRED>
+<!--
+The related-content element described additional content that
+may be integrated with the application.
+-->
+<!ELEMENT related-content (title?, description*, icon*)>
+<!--
+The href attribute of the related-content element contains a
+URL to a location on the web containing additional related
+content for the application.
+-->
+<!ATTLIST related-content href CDATA #REQUIRED>
+ 
Index: /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/JNLP-6.0.dtd
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/JNLP-6.0.dtd	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/JNLP-6.0.dtd	(revision 28740)
@@ -0,0 +1,690 @@
+<!--
+<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Discriptor 6.0//EN" "http://java.sun.com/dtd/JNLP-6.0.dtd">
+-->
+<!-- 
+The root element for the JNLP file.  
+-->
+
+<!ELEMENT jnlp (information+, security?, update?, resources*, 
+ (application-desc | applet-desc | component-desc | installer-desc))>
+
+<!--
+The spec attribute of the jnlp element specifies what versions of the JNLP 
+specification a particular JNLP file works with. The default value is "1.0+".
+-->
+
+<!ATTLIST jnlp spec CDATA #IMPLIED>
+
+<!--
+The version attribute of the jnlp element specifies the version of the 
+application being launched, as well as the version of the JNLP file itself.
+-->
+
+<!ATTLIST jnlp version CDATA #IMPLIED>
+
+<!--
+The codebase attribute of the jnlp element specifies the codebase for the 
+application. This is also used as the base URL for all relative URLs in 
+href attributes.
+-->
+
+<!ATTLIST jnlp codebase CDATA #IMPLIED>
+
+<!--
+The href attribute of the jnlp element contains the location of the JNLP 
+file as a URL.
+-->
+
+<!ATTLIST jnlp href CDATA #IMPLIED>
+
+<!--
+The information element contains various descriptive information about the 
+application being launched.
+-->
+
+<!ELEMENT information (title, vendor, homepage?, description*, icon*,
+ offline-allowed?, shortcut?, association?, related-content*)>
+
+<!--
+The os attribute of the information element specifies for which operating 
+system this element should be considered.
+-->
+
+<!ATTLIST information os CDATA #IMPLIED>
+
+<!--
+The arch attribute of the information element specifies for what architecure 
+this element should be considered.
+-->
+
+<!ATTLIST information arch CDATA #IMPLIED>
+
+<!--
+The platform attribute of the information element specifies for what 
+platform this element should be considered.
+-->
+
+<!ATTLIST information platform CDATA #IMPLIED>
+
+<!--
+The locale attribute of the information element specifies the locale for 
+which this information element should be used.
+-->
+
+<!ATTLIST information locale CDATA #IMPLIED>
+
+<!--
+The title element contains the name of the application.
+-->
+
+<!ELEMENT title (#PCDATA)>
+
+<!--
+The vendor element contains the name of the vendor.
+-->
+
+<!ELEMENT vendor (#PCDATA)>
+
+<!--
+The homepage element contains a href to the homepage for the application.
+-->
+
+<!ELEMENT homepage EMPTY>
+
+<!--
+The href attribute of the homepage element specifies the URL for the homepage.
+-->
+
+<!ATTLIST homepage href CDATA #REQUIRED>
+
+<!--
+The description element contains a description of the application.
+-->
+
+<!ELEMENT description (#PCDATA)>
+
+<!--
+The kind attribute for the description element indicates the use of a 
+description element. The values are: i) one-line, for a one-line 
+description, ii) short, for a one paragraph description, and iii) tooltip, 
+for a tool-tip description. Longer descriptions should be put on a separate 
+web page and referred to using the homepage element.
+-->
+
+<!ATTLIST description kind (one-line | short | tooltip) #IMPLIED>
+
+<!--
+The icon element describes an image for an application.
+-->
+
+<!ELEMENT icon EMPTY>
+
+<!--
+The href attribute of an icon contains a URL to a location on the web 
+containing an image file for an icon.
+-->
+
+<!ATTLIST icon href CDATA #REQUIRED>
+
+<!--
+The version attribute of an icon contains a string describing the version of 
+the image that is requested.
+-->
+
+<!ATTLIST icon version CDATA #IMPLIED>
+
+<!--
+The width attribute of the icon element describes the width of the icon 
+in pixels.
+-->
+
+<!ATTLIST icon width CDATA #IMPLIED>
+
+<!--
+The height attribute of the icon element describes the height of the icon 
+in pixels.
+-->
+
+<!ATTLIST icon height CDATA #IMPLIED>
+
+<!--
+The kind attribute of the icon element describes the use of the icon.
+-->
+
+<!ATTLIST icon kind CDATA #IMPLIED>
+
+<!--
+The depth attribute of the icon element describes the color depth of the image 
+in bits-per-pixel. Common values will be 8, 16, or 24.
+-->
+
+<!ATTLIST icon depth CDATA #IMPLIED>
+
+<!--
+The size attribute of an icon element indicates the size of an icon file 
+in bytes.
+-->
+
+<!ATTLIST icon size CDATA #IMPLIED>
+
+<!--
+The offline-allowed element indicates if the application can be launched 
+offline. Default value (i.e., if the element is not specified) is online.
+-->
+
+<!ELEMENT offline-allowed EMPTY>
+
+<!--
+The security element describes the security requirements of the application.
+-->
+
+<!ELEMENT security (all-permissions?, j2ee-application-client-permissions?)>
+
+<!--
+The all-permissions element indicates that the application needs full access 
+the the local system and network.
+-->
+
+<!ELEMENT all-permissions EMPTY>
+
+<!--
+The j2ee-application-client-permissions element indicates that the application 
+needs the set of permissions defined for a J2EE application client.
+-->
+
+<!ELEMENT j2ee-application-client-permissions EMPTY>
+
+<!--
+The update element contains the applications preference for application update.
+-->
+
+<!ELEMENT update EMPTY>
+
+<!--
+The check attribute of the update element indicates the applications 
+preference for when to check for updates.
+-->
+
+<!ATTLIST update check (always | timeout | background) "timeout">
+
+<!--
+The policy attribute of the update element indicates the applications 
+preference for what to do when updates are available.
+-->
+
+<!ATTLIST update policy (always | prompt-update | prompt-run) "always">
+
+<!--
+The resources element contains an ordered set of resources that 
+constitutes an application.
+-->
+
+<!ELEMENT resources (java | j2se | jar | nativelib | extension | 
+ property | package)*>
+
+<!--
+The os attribute of the resources element specifies for which operating 
+system this element should be considered.
+-->
+
+<!ATTLIST resources os CDATA #IMPLIED>
+
+<!--
+The arch attribute of the resources element specifies for what platform this 
+element should be considered.
+-->
+
+<!ATTLIST resources arch CDATA #IMPLIED>
+
+<!--
+The locale attribute of the resources element specifies for which locales 
+this element should be considered.
+-->
+
+<!ATTLIST resources locale CDATA #IMPLIED>
+
+<!--
+The java element describes a supported JRE version and an optional resources 
+element to be used by the particular JRE.
+-->
+
+<!ELEMENT java (resources*)>
+
+<!--
+The version attribute of the java element describes the versions of the JRE 
+that this application is supported on.
+-->
+
+<!ATTLIST java version CDATA #REQUIRED>
+
+<!--
+The href attribute of the java element specifies the location where the JRE 
+should be downloaded from.
+-->
+
+<!ATTLIST java href CDATA #IMPLIED>
+
+<!--
+The initial-heap-size attribute of the java element specifies the initial 
+size of the object heap.
+-->
+
+<!ATTLIST java initial-heap-size CDATA #IMPLIED>
+
+<!--
+The max-heap-size attribute of the java element specifies the preferred 
+maximum size of the object heap.
+-->
+
+<!ATTLIST java max-heap-size CDATA #IMPLIED>
+
+<!--
+The java-vm-args attribute of the java element specifies a preferred set of 
+virtual machine arguments to use when launching java.
+-->
+
+<!ATTLIST java java-vm-args CDATA #IMPLIED>
+
+<!--
+The j2se element describes a supported JRE version and an optional resources 
+element to be used by the particular JRE.
+-->
+
+<!ELEMENT j2se (resources*)>
+
+<!--
+The version attribute of the j2se element describes the versions of the JRE 
+that this application is supported on.
+-->
+
+<!ATTLIST j2se version CDATA #REQUIRED>
+
+<!--
+The href attribute of the j2se element specifies the location where the JRE 
+should be downloaded from.
+-->
+
+<!ATTLIST j2se href CDATA #IMPLIED>
+
+<!--
+The initial-heap-size attribute of the j2se element specifies the initial 
+size of the object heap.
+-->
+
+<!ATTLIST j2se initial-heap-size CDATA #IMPLIED>
+
+<!--
+The max-heap-size attribute of the j2se element specifies the preferred 
+maximum size of the object heap.
+-->
+
+<!ATTLIST j2se max-heap-size CDATA #IMPLIED>
+
+<!--
+The java-vm-args attribute of the j2se element specifies a preferred set of 
+virtual machine arguments to use when launching java.
+-->
+
+<!ATTLIST j2se java-vm-args CDATA #IMPLIED>
+
+<!--
+The jar element describes a jar file resource.
+-->
+
+<!ELEMENT jar EMPTY>
+
+<!--
+The href attribute of the jar element contains the location of a jar file 
+as a URL.
+-->
+
+<!ATTLIST jar href CDATA #REQUIRED>
+
+<!--
+The version attribute of a jar element describes the version of a particular 
+JAR file that is requested.
+-->
+
+<!ATTLIST jar version CDATA #IMPLIED>
+
+<!--
+The main attribute of a jar element indicates whether this element contains 
+the main class.
+-->
+
+<!ATTLIST jar main (true|false) "false">
+
+<!--
+The download attribute of a jar element indicates if this element must be 
+downloaded before an application is launched (eager), or not (lazy).
+-->
+
+<!ATTLIST jar download (eager | lazy) "eager">
+
+<!--
+The size attribute of a jar element indicates the size of a JAR file in bytes.
+-->
+
+<!ATTLIST jar size CDATA #IMPLIED>
+
+<!--
+The part attribute of a jar element describes the name of the group it 
+belongs too.
+-->
+
+<!ATTLIST jar part CDATA #IMPLIED>
+
+<!--
+The nativelib element describes a resource containing native files.
+-->
+
+<!ELEMENT nativelib EMPTY>
+
+<!--
+The href attribute of a nativelib element contains the location of a 
+nativelib file as a URL.
+-->
+
+<!ATTLIST nativelib href CDATA #REQUIRED>
+
+<!--
+The version attribute of a nativelib element describes the version of a 
+particular nativelib file that is requested.
+-->
+
+<!ATTLIST nativelib version CDATA #IMPLIED>
+
+<!--
+The download attribute of a nativelib element indicates if this element 
+must be downloaded before an application is launched (eager), or not (lazy).
+-->
+
+<!ATTLIST nativelib download (eager | lazy) "eager">
+
+<!--
+The size attribute of a nativelib element indicates the size of a nativelib 
+file in bytes.
+-->
+
+<!ATTLIST nativelib size CDATA #IMPLIED>
+
+<!--
+The part attribute of a nativelib element describes the name of the part it 
+belongs to.
+-->
+
+<!ATTLIST nativelib part CDATA #IMPLIED>
+
+<!--
+The extension element describes an extension that is required in order to 
+run the application.
+-->
+
+<!ELEMENT extension (ext-download*)>
+
+<!--
+The version attribute of an extension element specifies the version of the 
+extension requested.
+-->
+
+<!ATTLIST extension version CDATA #IMPLIED>
+
+<!--
+The name attribute of an extension element specifies the name of the extension.
+-->
+
+<!ATTLIST extension name CDATA #IMPLIED>
+
+<!--
+The href attribute of an extension element specifies the location of the 
+extension.
+-->
+
+<!ATTLIST extension href CDATA #REQUIRED>
+
+<!--
+The ext-download element defines how parts of the extension are downloaded.
+-->
+
+<!ELEMENT ext-download EMPTY>
+
+<!--
+The ext-part attribute of an ext-download element describes the name of a 
+part in the extension.
+-->
+
+<!ATTLIST ext-download ext-part CDATA #REQUIRED>
+
+<!--
+The download attribute of an ext-download element describes if the resource 
+may be lazily downloaded.
+-->
+
+<!ATTLIST ext-download download (lazy|eager) "eager">
+
+<!--
+The part attribute of an ext-download element describes the name of the 
+part it belongs to in the current JNLP file.
+-->
+
+<!ATTLIST ext-download part CDATA #IMPLIED>
+
+<!--
+The property element describes a name/value pair that is available to the 
+launched application as a system property.
+-->
+
+<!ELEMENT property EMPTY>
+
+<!--
+The name attribute of the property element describes the name of a system 
+property.
+-->
+
+<!ATTLIST property name CDATA #REQUIRED>
+
+<!--
+The value element describes the value of a system property.
+-->
+
+<!ATTLIST property value CDATA #REQUIRED>
+
+<!--
+The package element defines a relationship between a Java package or 
+class name and a part.
+-->
+
+<!ELEMENT package EMPTY>
+
+<!--
+The name attribute of the package element describes the name of a package 
+or class.
+-->
+
+<!ATTLIST package name CDATA #REQUIRED>
+
+<!--
+The part attribute of the package element describes the part that contains 
+the specified package or class.
+-->
+
+<!ATTLIST package part CDATA #REQUIRED>
+
+<!--
+The recursive attribute of the package element indicates if all sub-packages 
+of this particular package is also included.
+-->
+
+<!ATTLIST package recursive (true|false) "false">
+
+<!--
+The application-desc element describes how to launch a Java-based application. 
+It contains information about the main class and arguments.
+-->
+
+<!ELEMENT application-desc (argument*)>
+
+<!--
+The main-class attribute of the application-desc element describes the 
+main class of an application.
+-->
+
+<!ATTLIST application-desc main-class CDATA #IMPLIED>
+
+<!--
+The argument elements describe the ordered set of arguments to an application. 
+These arguments will be passed into the main method of the application's 
+main class.
+-->
+
+<!ELEMENT argument (#PCDATA)>
+
+<!--
+The applet-desc element describes how to launch a Java Technology-based Applet. It contains information about, e.g., the main class, size, and parameters.
+-->
+
+<!ELEMENT applet-desc (param*)>
+
+<!--
+The documentbase attribute of the applet-desc element describes the 
+documentbase for the applet as a URL.
+-->
+
+<!ATTLIST applet-desc documentbase CDATA #IMPLIED>
+
+<!--
+The main-class attribute of the applet-desc element describes the name of the 
+main Applet class.
+
+-->
+
+<!ATTLIST applet-desc main-class CDATA #REQUIRED>
+
+<!--
+The name attribute of the applet-desc element describes the name of the Applet.
+-->
+
+<!ATTLIST applet-desc name CDATA #REQUIRED>
+
+<!--
+The width attribute of the applet-desc element describes the width of the 
+Applet in pixels.
+-->
+
+<!ATTLIST applet-desc width CDATA #REQUIRED>
+
+<!--
+The height attribute of the applet-desc element describes the height of the 
+Applet in pixels.
+-->
+
+<!ATTLIST applet-desc height CDATA #REQUIRED>
+
+<!--
+The param element describes a parameter to an Applet.
+-->
+
+<!ELEMENT param EMPTY>
+
+<!--
+The name attribute of the param element describes the name of a parameter.
+-->
+
+<!ATTLIST param name CDATA #REQUIRED>
+
+<!--
+The value attribute of the param element describes the value of a parameter.
+
+-->
+
+<!ATTLIST param value CDATA #REQUIRED>
+
+<!--
+The component-desc element specifies a component extension.
+-->
+
+<!ELEMENT component-desc EMPTY>
+
+<!--
+The installer-desc element specifies an installer extension.
+-->
+
+<!ELEMENT installer-desc EMPTY>
+
+<!--
+The main-class attribute of the installer-desc element describes the 
+main class for the installer/uninstaller.
+-->
+
+<!ATTLIST installer-desc main-class CDATA #IMPLIED>
+
+<!--
+The shortcut element describes an application's preferences for desktop 
+integration.
+-->
+
+<!ELEMENT shortcut (desktop?, menu?)>
+
+<!--
+The online attribute of the shortcut element describes an application's 
+preferences launching shortcuts online or offline
+-->
+
+<!ATTLIST shortcut online (true | false) "true">
+
+<!--
+The desktop element indicates that a shortcut on the desktop is desired.
+-->
+
+<!ELEMENT desktop EMPTY>
+
+<!--
+The menu element indicates that a shortcut in a menu is desired.
+-->
+
+<!ELEMENT menu EMPTY>
+
+<!--
+The submenu attribute of the menu element indicates where in the menu a 
+shortcut is desired.
+-->
+
+<!ATTLIST menu submenu CDATA #IMPLIED>
+
+<!--
+The association element describes an application's preferences for desktop 
+associations.
+-->
+
+<!ELEMENT association (description?, icon?)>
+
+<!--
+The extensions attribute of the association element indicates a list of 
+extensions to associate.
+-->
+
+<!ATTLIST association extensions CDATA #REQUIRED>
+
+<!--
+The mime-type attribute of the association element indicates a mime-types 
+to associate.
+-->
+
+<!ATTLIST association mime-type CDATA #REQUIRED>
+
+<!--
+The related-content element described additional content that may be 
+integrated with the application.
+-->
+
+<!ELEMENT related-content (title?, description?, icon?)>
+
+<!--
+The href attribute of the related-content element contains a URL to a 
+location on the web containing additional related content for the application.
+-->
+
+<!ATTLIST related-content href CDATA #REQUIRED>
+
+ 
+
Index: /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/jstub.sh
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/jstub.sh	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/jstub.sh	(revision 28740)
@@ -0,0 +1,53 @@
+#!/bin/sh
+# 
+# Copyright 2005 Orangevolt (www.orangevolt.com)
+
+abs_file()
+{
+ FIRST_CHAR=`echo $1 | cut -c1`
+ if [ "${FIRST_CHAR}" = "/" ]
+ then
+  absolutepath=$1
+ else
+  PWD=`pwd`
+  absolutepath="${PWD}/$1"
+ fi
+}
+
+get_abs_file()
+{
+  abs_file $1
+  if [ -L "$absolutepath" ]; then
+           absolutepath=`ls -l $absolutepath | cut -d\> -f2`
+           abs_file $absolutepath
+#           echo "File is a link: $absolutepath"
+           get_abs_file $absolutepath
+#  else
+#           echo "File is not a link: $absolutepath"
+  fi
+}
+
+get_abs_file $0
+
+# now absolutepath is valid
+#echo $absolutepath
+
+path=${absolutepath%/*}
+# now path is valid
+#echo $path
+
+absolutename=${absolutepath##*/}
+# now absolutepath is valid
+#echo $absolutename
+
+name=${absolutename%%.*}
+# now name is valid
+#echo $name
+
+command="__EXECUTABLE_STRING__"
+echo "executing \"$command\" $@" 
+
+$command $@
+
+exit
+#### archive starts here ####
Index: /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/stub.sh
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/stub.sh	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/stub.sh	(revision 28740)
@@ -0,0 +1,63 @@
+#!/bin/sh
+# 
+# Copyright 2005 Orangevolt (www.orangevolt.com)
+
+abs_file()
+{
+ FIRST_CHAR=`echo $1 | cut -c1`
+ if [ "${FIRST_CHAR}" = "/" ]
+ then
+  absolutepath=$1
+ else
+  PWD=`pwd`
+  absolutepath="${PWD}/$1"
+ fi
+}
+
+get_abs_file()
+{
+  abs_file $1
+  if [ -L "$absolutepath" ]; then
+           absolutepath=`ls -l $absolutepath | cut -d\> -f2`
+           abs_file $absolutepath
+#           echo "File is a link: $absolutepath"
+           get_abs_file $absolutepath
+#  else
+#           echo "File is not a link: $absolutepath"
+  fi
+}
+
+get_abs_file $0
+
+# now absolutepath is valid
+#echo $absolutepath
+
+path=${absolutepath%/*}
+# now path is valid
+#echo $path
+
+absolutename=${absolutepath##*/}
+# now absolutepath is valid
+#echo $absolutename
+
+name=${absolutename%%.*}
+# now name is valid
+#echo $name
+
+exe="__EXECUTABLE__NAME__"
+path="__EXECUTABLE__PATH__"
+
+if [ ! -d "/tmp/$absolutename" ] 
+then
+ mkdir /tmp/$absolutename
+fi
+unzip -o -qq $0 -d /tmp/$absolutename  >/dev/null 2>&1
+
+echo "cd /tmp/$absolutename$path"
+cd /tmp/$absolutename$path
+#chmod 755 $exe
+#echo "$exe $@"
+$exe $@
+
+exit 0
+##### zipped content starts here ####
Index: /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/taskdefs.properties
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/taskdefs.properties	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/orangevolt/tools/ant/taskdefs.properties	(revision 28740)
@@ -0,0 +1,19 @@
+sfx=com.orangevolt.tools.ant.SFXTask
+jstub=com.orangevolt.tools.ant.JStubTask
+jnlp=com.orangevolt.tools.ant.JNLPTask
+preferences=com.orangevolt.tools.ant.PreferencesTask
+win32.registry=com.orangevolt.tools.ant.Win32RegistryTask
+win32.shortcut=com.orangevolt.tools.ant.Win32ShortcutTask
+win32.properties=com.orangevolt.tools.ant.Win32PropertiesTask
+win32.replaceicon=com.orangevolt.tools.ant.Win32ReplaceIconTask
+properties=com.orangevolt.tools.ant.PropertiesTask
+find=com.orangevolt.tools.ant.FindTask
+compare=com.orangevolt.tools.ant.CompareTask
+execute=com.orangevolt.tools.ant.ExecuteTask
+call=com.orangevolt.tools.ant.CallTask
+switch=com.orangevolt.tools.ant.SwitchTask
+unix.properties=com.orangevolt.tools.ant.UnixPropertiesTask
+unix.link=com.orangevolt.tools.ant.UnixLinkTask
+unix.kde.shortcut=com.orangevolt.tools.ant.KDEShortcutTask
+unix.kde.shortcutdirectory=com.orangevolt.tools.ant.KDEShortcutDirectoryTask
+os.properties=com.orangevolt.tools.ant.OsPropertiesTask
Index: /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/roxes/win32/ov4n.properties
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/roxes/win32/ov4n.properties	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/installer-classes/com/roxes/win32/ov4n.properties	(revision 28740)
@@ -0,0 +1,2 @@
+#Sat Oct 06 16:45:54 CEST 2007
+orangevolt.native.libversion=1.1.1
Index: /other-projects/expeditee-release-kits/shared/windows/wirk.cpp
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/wirk.cpp	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/wirk.cpp	(revision 28740)
@@ -0,0 +1,129 @@
+#include <windows.h>
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <sstream>
+
+#ifndef XXX
+#define XXX 2
+#endif
+
+using namespace std;
+
+void replace_all ( std::string & str, std::string const & pattern, std::string const & replacement ) {
+
+	std::string::size_type start = str.find( pattern, 0 );
+
+	while ( start != str.npos ) {
+		str.replace( start, pattern.size(), replacement );
+		start = str.find( pattern, start+replacement.size() );
+	}
+
+}
+
+void show_help() {
+
+	cout << "Wirk" << XXX << " - Windows Release Kit for Greenstone" << XXX << endl;
+	cout << "Helps you to create releases from the Repository" << endl << endl;
+
+	cout << "usage: wirk" << XXX << " [args]" << endl;
+	cout << "	-sim" << endl;
+	cout << "		simulation only, don't actually do anything" << endl << endl;
+
+	cout << "	-help" << endl;
+	cout << "		show this help screen" << endl << endl;
+
+	cout << "	-from <target>" << endl;
+	cout << "		start execution from the target with the given target address" << endl << endl;
+
+	cout << "	-to <target>" << endl;
+	cout << "		stop execution just before the target with the given target address" << endl << endl;
+
+	cout << "	-descend <target>" << endl;
+	cout << "		execute only the target with the given address, including subtargets" << endl << endl;
+
+}
+
+
+int main(int argc, char** argv ) {
+	
+	//some checks
+	bool ok = true;
+	if ( getenv( "JAVA_HOME" ) == NULL ) {
+		cerr << "Please set JAVA_HOME before running wirk" << XXX << endl;
+		ok = false;
+	}
+
+	stringstream out;
+	out << "WIRK" << XXX << "_HOME";
+	string wirk_home_var;
+	wirk_home_var = out.str();
+
+	if ( getenv( wirk_home_var.c_str() ) == NULL ) {
+		cerr << "Please set " << wirk_home_var << " before running wirk" << XXX << endl;
+		ok = false;
+	}
+	if ( !ok ) {
+		return -1;
+	}
+
+	//load environment variables
+	string JAVA_HOME = getenv( "JAVA_HOME" );
+	string WIRK_HOME = getenv( wirk_home_var.c_str() );
+	putenv( ("ANT_HOME=" + WIRK_HOME + "\\core\\ant").c_str() );
+	
+	//get the pwd
+	string pwd;
+	system( "CD > cd.dat" );
+	ifstream file( "cd.dat" ) ;
+	getline(file, pwd);
+	file.close();
+	system( "del cd.dat" );
+		
+	//create the command
+	stringstream command;
+	command << "cmd.exe /c " << WIRK_HOME << "\\core\\ant\\bin\\ant.bat -f \"" << WIRK_HOME << "\\ant-scripts\\build.xml\" -addressing \"-Dwirk" << XXX << ".home=" << WIRK_HOME << "\"";
+
+	//pass on the arguments
+	string a;
+	bool simMode = false;
+	for ( int i=1; i < argc; i++ ) {
+		a = argv[i];
+		
+		if ( a.compare("-help") == 0 || a.compare("--help") == 0 ) {
+			show_help();
+			return 0;
+		} else if ( a.compare("-sim") == 0) {
+			command << " " << a;
+			simMode = true;
+		} else {
+			command << " " << a;
+		}
+
+	}
+
+	//set the basedir in the command
+	command << " \"-Dbasedir=" << pwd << "\"";
+
+	//pipe it all to tee
+	command << " | " << WIRK_HOME << "\\windows\\utils\\tee.exe " << pwd << "\\wirk" << XXX << ".out";
+	
+	cout
+		<< "O-----------------------------------------O" << endl
+		<< "|                                         |" << endl
+		<< "|   WiRK" << XXX << "                                 |" << endl
+		<< "|   Windows Release Kit for Greenstone" << XXX << "   |" << endl
+		<< "|                                         |" << endl
+		<< "O-----------------------------------------O" << endl
+		;
+	
+	string final_command = command.str();
+	cout << "pwd: " << pwd << endl;
+	cout << "command: " << final_command << endl;
+
+	system( final_command.c_str() );
+	
+	return 0;
+
+}
Index: /other-projects/expeditee-release-kits/shared/windows/wrapper/compile.bat
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/wrapper/compile.bat	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/wrapper/compile.bat	(revision 28740)
@@ -0,0 +1,10 @@
+mkdir build
+
+rc wrapper.rc
+move wrapper.RES build\wrapper.res
+
+cl /c -GX wrapper.cpp /out:wrapper.obj
+move wrapper.obj build
+
+link /OUT:build\wrapper.exe build\wrapper.obj build\wrapper.res
+
Index: /other-projects/expeditee-release-kits/shared/windows/wrapper/wrapper.cpp
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/wrapper/wrapper.cpp	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/wrapper/wrapper.cpp	(revision 28740)
@@ -0,0 +1,473 @@
+#include <windows.h>
+
+#include <fstream>
+#include <iostream>
+#include <conio.h>
+#include <string>
+#include <time.h>
+#include <shellapi.h>
+#include <direct.h>
+
+using namespace std;
+
+#ifndef CDROM
+#include "libsearch4j.h"
+#endif
+
+//globals
+HBITMAP g_splash = NULL; //the main splash bitmap
+HFONT g_hfFont = NULL; //the main splash bitmap
+char step[10] = "TMP"; //the current step
+char progress[4] = "0"; //progress in the current step
+HWND splashWnd;
+HINSTANCE mainInstance;
+int mainCmdShow;
+bool window_loaded = false;
+
+void set_splash_step( char* new_step ) {
+	strcpy( step, new_step );
+	InvalidateRect(splashWnd, NULL, FALSE);
+	UpdateWindow(splashWnd);
+}
+
+void set_splash_progress( int percent_progress ) {
+	percent_progress = ( percent_progress / 10 ) * 10;
+	char p[4] = {0};
+	strcpy( progress, itoa( percent_progress, p, 10 ) );
+	InvalidateRect(splashWnd, NULL, FALSE);
+	//RedrawWindow(splashWnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ERASENOW | RDW_UPDATENOW | RDW_INTERNALPAINT);
+	UpdateWindow(splashWnd);
+}
+
+void spoof_progress( int interval ) {
+	int tenPercentWait = interval / 11;
+	for ( int i=0; i <= 100; i+=10 ) {
+		set_splash_progress( i );
+		Sleep( tenPercentWait );
+	}
+}
+
+//extracts a resource in chunks
+int extractResource( const char * basename, const char * type, char * file ) {
+
+	HMODULE hModule = GetModuleHandle(NULL);
+	set_splash_progress( 0 );
+
+	int no_chunks;
+	bool chunk_available = true;
+	for ( no_chunks = 0; chunk_available; no_chunks++ ) {
+
+		//construct the chunk name
+		char chunkname[127] = {0};
+		strcpy( chunkname, basename );
+		strcat( chunkname, "_" );
+		char chunknum[5] = {0};
+		itoa( no_chunks+1, chunknum, 10 );
+		strcat( chunkname, chunknum );
+		
+		if ( FindResource(hModule, chunkname, type) == NULL ) {
+			chunk_available = false;
+			break;
+		}
+	}
+	
+	if ( no_chunks == 0 ) {
+		return 1;
+	}
+	
+	for ( int i=0; i<no_chunks; i++ ) {
+	
+		//construct the chunk name
+		char chunkname[127] = {0};
+		strcpy( chunkname, basename );
+		strcat( chunkname, "_" );
+		char chunknum[5] = {0};
+		itoa( i+1, chunknum, 10 );
+		strcat( chunkname, chunknum );
+		
+		//find it
+		HRSRC hRsrc = FindResource(hModule, chunkname, type);
+		if (hRsrc == NULL ) return 1; //couldn't find the chunk
+		
+		//load it
+		HGLOBAL hGlobal = LoadResource(hModule, hRsrc);
+		if (hGlobal == NULL) return 1; //couldn't lock
+		
+		//lock it
+		BYTE* pBytes = (BYTE*) LockResource(hGlobal);
+		if (pBytes == NULL) return 1; //couldn't lock
+		
+		//put it on disk
+		DWORD dwLength = SizeofResource(hModule, hRsrc);
+		ofstream fStream(file, ios::binary | ios::out | ios::app );
+		fStream.write((char*) pBytes, dwLength);
+		fStream.close();
+		
+		//unload
+		UnlockResource(hGlobal);
+		FreeResource(hGlobal);
+		
+		//update the progress
+		set_splash_progress( i * 100 / no_chunks );
+		
+	}
+
+	return 0;
+
+}
+
+//the splash window procedure
+LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
+	switch(msg) {
+
+		case WM_CREATE: {
+			//load in the reusable resources
+			g_splash = LoadBitmap(GetModuleHandle(NULL),"SPLASH");
+			g_hfFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
+			if(g_splash == NULL) {
+				MessageBox(hwnd, "Could not load splash bitmap!", "Error", MB_OK | MB_ICONEXCLAMATION);
+			}
+			
+			//center the window automatically
+			RECT rect;
+			GetWindowRect(hwnd, &rect);
+			int x = (GetSystemMetrics(SM_CXSCREEN) - (rect.right - rect.left)) / 2;
+			int y = (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom - rect.top)) / 2;
+			SetWindowPos(hwnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE);
+		}
+		
+		case WM_PAINT: {
+			// Don't use MessageBox from inside WM_PAINT
+		
+			//load in the correct resources
+			HBITMAP g_progress = NULL;
+			HBITMAP g_step = NULL;
+			char progress_res[20] = "PROGRESS_";
+			strcat( progress_res, progress );
+			char step_res[20] = "STEP_";
+			strcat( step_res, step );
+			g_progress = LoadBitmap(GetModuleHandle(NULL), progress_res );
+			g_step = LoadBitmap(GetModuleHandle(NULL), step_res );
+			if( g_progress == NULL || g_step == NULL ) {
+				//MessageBox(hwnd, "Could not load an image!", "Error", MB_OK | MB_ICONEXCLAMATION);
+			}
+		
+			BITMAP bm; //holds info about the width and height
+			PAINTSTRUCT ps;
+			
+			HDC hdc = BeginPaint(hwnd, &ps);
+			HDC hdcMem = CreateCompatibleDC(hdc);
+			
+			//paint the main splash screen
+			GetObject(g_splash, sizeof(bm), &bm);
+			HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_splash);
+			BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
+						
+			//paint in the progress
+			GetObject(g_progress, sizeof(bm), &bm);
+			SelectObject(hdcMem, g_progress);
+			BitBlt(hdc, 0, 270, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
+			
+			//paint in the step with transparency
+			GetObject(g_step, sizeof(bm), &bm);
+			SelectObject(hdcMem, g_step);
+			BitBlt(hdc, 0, 276, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCPAINT);
+			
+			//print the step with text
+			RECT rcClient;
+			GetClientRect(hwnd, &rcClient);
+			//DrawText(hdc, "This is the step", -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
+			
+			//restore the hdc
+			SelectObject(hdcMem, hbmOld);
+			
+			//release resources
+			DeleteDC(hdcMem);
+			EndPaint(hwnd, &ps);
+			DeleteObject(g_progress);
+			DeleteObject(g_step);
+			
+		}
+		break;
+		
+		/*
+		case WM_LBUTTONDOWN: {
+			DeleteObject(g_splash);
+			PostQuitMessage(0);
+		}
+		break;
+		*/
+		
+		case WM_CLOSE:
+			DestroyWindow(hwnd);
+			break;
+		
+		case WM_DESTROY:
+			DeleteObject(g_splash);
+			PostQuitMessage(0);
+			break;
+		
+		default:
+			return DefWindowProc(hwnd, msg, wParam, lParam);
+	}
+
+	return 0;
+
+}
+
+//function to process the window
+DWORD WINAPI ProcessWindow( LPVOID lpParam ) {
+	
+	const char g_szClassName[] = "splash";
+	WNDCLASSEX wc;
+	MSG Msg;
+
+	//Step 1: Registering the Window Class
+	wc.cbSize = sizeof(WNDCLASSEX);
+	wc.style = 0;
+	wc.lpfnWndProc = WndProc;
+	wc.cbClsExtra = 0;
+	wc.cbWndExtra = 0;
+	wc.hInstance = mainInstance;
+	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+	wc.lpszMenuName = NULL;
+	wc.lpszClassName = g_szClassName;
+	wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
+	if(!RegisterClassEx(&wc)) {
+		MessageBox(NULL, "Window Registration Failed!", "Error!",
+		MB_ICONEXCLAMATION | MB_OK);
+		return 0;
+	}
+
+	// Step 2: Creating the Window
+	splashWnd = CreateWindowEx( WS_EX_TOOLWINDOW, g_szClassName, "", WS_POPUP | SS_BITMAP, 0, 0, 420, 300, NULL, NULL, mainInstance, NULL);
+	if( splashWnd == NULL ) {
+		MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
+		return 0;
+	}
+	ShowWindow(splashWnd, mainCmdShow);
+	UpdateWindow(splashWnd);
+
+	window_loaded = true;
+	
+	// Step 3: The Message Loop
+	while(GetMessage(&Msg, NULL, 0, 0) > 0) {
+		TranslateMessage(&Msg);
+		DispatchMessage(&Msg);
+	}
+	return 0;
+} 
+
+int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
+	
+	const int SPOOF_TIME = 1000;
+	string command = lpCmdLine;
+
+	if((command.compare("-extract") == 0) || (command.compare("--extract") == 0) || (command.compare("-x") == 0)){
+		printf("----------------------------\n");
+		printf("Extracting java installer...\n");
+		printf("----------------------------\n");
+		int result = extractResource( "JAR", "JAR", "@projectname@.jar" );
+		
+		if(result == 0){
+			printf("\n");
+			printf("Extraction complete\n");
+			printf("You can now type java -jar @projectname@.jar to run the installer from the command line\n");
+			return 0;	
+		}
+		else{
+			return 1;
+		}
+	}
+	else if(command.compare("-text") == 0 || command.compare("text") == 0 )
+	{
+		cerr << "-text is depricated, please use -extract and then run \"java -jar @projectname@.jar text\"" << endl;
+	}
+	
+	srand( time(0) );
+	mainInstance = hInstance;
+	mainCmdShow = nCmdShow;
+	
+	//start the window
+	HANDLE hThread;
+	DWORD dwThreadId, dwThrdParam = 1;
+	hThread = CreateThread( 
+       NULL,                        // no security attributes 
+       0,                           // use default stack size  
+       ProcessWindow,               // thread function 
+       &dwThrdParam,	            // argument to thread function 
+       0,                           // use default creation flags 
+       &dwThreadId);                // returns the thread identifier 
+	if ( hThread == NULL ) {
+		return -1;
+		//ErrorExit( "CreateThread failed." );
+	}
+	CloseHandle( hThread );
+	
+	while ( !window_loaded ) {
+		Sleep( 100 );
+	}
+	
+	//create the temp folder and change to it
+	set_splash_step( "TMP" );
+	spoof_progress( SPOOF_TIME );
+	
+	//get the original working directory
+	char* owdChar = _getcwd(NULL, 1024);
+	string owd = "";
+	owd.append( owdChar );
+	free(owdChar);
+	
+	//strip trailing slash
+	if ( owd.substr(owd.length()-1,1).compare( "\\" ) == 0 ) {
+		owd = owd.substr(0, owd.length()-1);
+	}
+		
+	//using the users TMP directory for temp files rather than the current directory so
+	//installation from cdrom works
+	char* tmp = getenv( "TMP" );
+	char id[6]; for( int i=0; i<5; i++ ) id[i] = (char)((rand()%26) + 97); id[5] = '\0'; //id for this instance
+	string tempdir = ""; tempdir.append( tmp ); tempdir.append( "\\@projectname@-" ); tempdir.append( id );
+	const char* tmpdir = tempdir.c_str();
+	if ( _mkdir( tmpdir ) != 0 ) {
+		string title = "Failed to create the temp folder.";
+		string message = "Failed to create the temp folder.\nPlease set the environment variable TMP to a folder you have permission to write to.";
+		//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
+		MessageBox(splashWnd, message.c_str(), title.c_str(), MB_OK);
+		return -1;
+	}
+	//SetFileAttributes(tmpdir, FILE_ATTRIBUTE_HIDDEN);
+	SetCurrentDirectory(tmpdir);
+	// delete tmp; //  should be tmpdir? ??? (deallocate memory)
+	
+	#ifdef CDROM
+
+	//ask if they want to install, then do it if so
+	int choice = MessageBox(splashWnd, "Install @projectname@?", "@projectname@", MB_OKCANCEL | MB_ICONQUESTION );
+	if ( choice == IDOK ) {
+
+		//prepare to launch the jar
+		set_splash_step( "LAUNCHING" );
+		spoof_progress( SPOOF_TIME );
+	
+		string cmd = "\"";
+		cmd.append( owd );
+		cmd.append( "\\Java\\Windows\\jre\\bin\\java.exe\" \"-Dorig.dir=" );
+		cmd.append( owd );
+		cmd.append( "\" -jar \"" );
+		cmd.append( owd );
+		cmd.append( "\\Java\\Jars\\windows.jar\"" );
+		char cmdLpstr[1024];
+		strcpy( cmdLpstr, cmd.c_str() );
+		
+		
+		STARTUPINFO si;
+		PROCESS_INFORMATION pi;
+		memset(&pi, 0, sizeof(pi));
+		memset(&si, 0, sizeof(si));
+		si.cb = sizeof(si);
+		DWORD dwExitCode = -1;
+
+		//hide splash screen
+		ShowWindow(splashWnd, SW_HIDE);
+
+		//launch the jar
+		bool result;
+		result = CreateProcess(NULL, cmdLpstr, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
+
+		WaitForSingleObject(pi.hProcess, INFINITE);
+		GetExitCodeProcess(pi.hProcess, &dwExitCode);
+		CloseHandle(pi.hThread);
+		CloseHandle(pi.hProcess);
+
+	}	
+	#else
+
+	//rip out java archive if it is bundled
+	set_splash_step( "XJAVA" );
+	int javaIsBundled = (extractResource( "JAVA", "EXE", "@java.installer@" ) == 0);
+	if ( javaIsBundled ) {
+		process( "@java.installer@", false );
+	}
+
+	//find java
+	set_splash_step( "SEARCHING" );
+	spoof_progress( SPOOF_TIME );
+	bool use_minimum = true;
+	Jvm minimum;
+	minimum.setVersionFromString( "@java.min.version@" );
+	string phint = "@java.extracted@";
+	string hint = "";
+	bool verbose = true;
+	Jvm foundJvm;
+	bool jvmFound = find( foundJvm, use_minimum, minimum, false, false, phint, hint, verbose );
+	
+	//if the jvm was not found, try to fix it and find it
+	if ( !jvmFound ) {
+
+		//did not find a good java
+		string message = "This version of @projectname@ requires java @java.min.version@ or greater, but ";
+		
+		//tell them if java is absent or just too old
+		if ( find( foundJvm, false, minimum, false, false, "", "", false ) ) {
+			message.append( "your java is too old.");
+		} else {
+			message.append( "java could not be found on your computer." );
+		}
+		message.append( "\n" );
+		
+		string title = "Installation Failed: Couldn't find java";
+		//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
+		MessageBox(splashWnd, message.c_str(), title.c_str(), MB_OK);
+
+	//if java was found, carry on
+	} else {
+
+		//extract the jar
+		string jarLocation = "@projectname@.jar";
+		
+		set_splash_step( "XJAR" );
+		extractResource( "JAR", "JAR", (char*) jarLocation.c_str() );
+
+		//launch the jar
+		set_splash_step( "LAUNCHING" );
+		spoof_progress( SPOOF_TIME );
+		string cmd = "\"";
+		cmd.append( foundJvm.getWinExecutable() );
+		cmd.append( "\" \"-Dorig.dir=" );
+		cmd.append( owd );
+		cmd.append( "\" -jar @projectname@.jar" );
+		
+		
+		//hide splash screen
+		ShowWindow(splashWnd, SW_HIDE);
+		
+		//run the jar
+		int launch_exit_code = process( cmd, true );
+		
+		//report how it went
+		if ( launch_exit_code != 0 ) {
+			string title = "Installation Error";
+			string message = "The installation exited with an error. Java may not be installed properly, or the installation may have been interrupted partway through. Please try again.";
+			//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
+			MessageBox(NULL, message.c_str(), title.c_str(), MB_OK);
+		}
+	}
+	#endif
+	
+	//clean up the temp directory
+	_unlink( "ant.install.log" );
+	#ifndef CDROM
+	_unlink( "@projectname@.jar" );
+	_unlink( "@java.installer@" );
+	process( "cmd.exe /c rd /s /q @java.extracted@", false );
+	#endif
+
+	SetCurrentDirectory( ".." );
+	_rmdir( tempdir.c_str() );
+	
+	return 0;
+	
+}
Index: /other-projects/expeditee-release-kits/shared/windows/wrapper/wrapper.rc
===================================================================
--- /other-projects/expeditee-release-kits/shared/windows/wrapper/wrapper.rc	(revision 28740)
+++ /other-projects/expeditee-release-kits/shared/windows/wrapper/wrapper.rc	(revision 28740)
@@ -0,0 +1,20 @@
+SPLASH BITMAP "splash.bmp"
+PROGRESS_0 BITMAP "progress-0.bmp"
+PROGRESS_10 BITMAP "progress-10.bmp"
+PROGRESS_20 BITMAP "progress-20.bmp"
+PROGRESS_30 BITMAP "progress-30.bmp"
+PROGRESS_40 BITMAP "progress-40.bmp"
+PROGRESS_50 BITMAP "progress-50.bmp"
+PROGRESS_60 BITMAP "progress-60.bmp"
+PROGRESS_70 BITMAP "progress-70.bmp"
+PROGRESS_80 BITMAP "progress-80.bmp"
+PROGRESS_90 BITMAP "progress-90.bmp"
+PROGRESS_100 BITMAP "progress-100.bmp"
+STEP_TMP BITMAP "step-tmp.bmp"
+STEP_SEARCHING BITMAP "step-searching.bmp"
+STEP_XJAVA BITMAP "step-xjava.bmp"
+STEP_XJAR BITMAP "step-xjar.bmp"
+STEP_LAUNCHING BITMAP "step-launching.bmp"
+MAINICON ICON "icon.ico"
+
+//resources are automatically appended here
Index: her-projects/expeditee-release-kits/windows_wrapper.cpp
===================================================================
--- /other-projects/expeditee-release-kits/windows_wrapper.cpp	(revision 28739)
+++ 	(revision )
@@ -1,473 +1,0 @@
-#include <windows.h>
-
-#include <fstream>
-#include <iostream>
-#include <conio.h>
-#include <string>
-#include <time.h>
-#include <shellapi.h>
-#include <direct.h>
-
-using namespace std;
-
-#ifndef CDROM
-#include "libsearch4j.h"
-#endif
-
-//globals
-HBITMAP g_splash = NULL; //the main splash bitmap
-HFONT g_hfFont = NULL; //the main splash bitmap
-char step[10] = "TMP"; //the current step
-char progress[4] = "0"; //progress in the current step
-HWND splashWnd;
-HINSTANCE mainInstance;
-int mainCmdShow;
-bool window_loaded = false;
-
-void set_splash_step( char* new_step ) {
-	strcpy( step, new_step );
-	InvalidateRect(splashWnd, NULL, FALSE);
-	UpdateWindow(splashWnd);
-}
-
-void set_splash_progress( int percent_progress ) {
-	percent_progress = ( percent_progress / 10 ) * 10;
-	char p[4] = {0};
-	strcpy( progress, itoa( percent_progress, p, 10 ) );
-	InvalidateRect(splashWnd, NULL, FALSE);
-	//RedrawWindow(splashWnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ERASENOW | RDW_UPDATENOW | RDW_INTERNALPAINT);
-	UpdateWindow(splashWnd);
-}
-
-void spoof_progress( int interval ) {
-	int tenPercentWait = interval / 11;
-	for ( int i=0; i <= 100; i+=10 ) {
-		set_splash_progress( i );
-		Sleep( tenPercentWait );
-	}
-}
-
-//extracts a resource in chunks
-int extractResource( const char * basename, const char * type, char * file ) {
-
-	HMODULE hModule = GetModuleHandle(NULL);
-	set_splash_progress( 0 );
-
-	int no_chunks;
-	bool chunk_available = true;
-	for ( no_chunks = 0; chunk_available; no_chunks++ ) {
-
-		//construct the chunk name
-		char chunkname[127] = {0};
-		strcpy( chunkname, basename );
-		strcat( chunkname, "_" );
-		char chunknum[5] = {0};
-		itoa( no_chunks+1, chunknum, 10 );
-		strcat( chunkname, chunknum );
-		
-		if ( FindResource(hModule, chunkname, type) == NULL ) {
-			chunk_available = false;
-			break;
-		}
-	}
-	
-	if ( no_chunks == 0 ) {
-		return 1;
-	}
-	
-	for ( int i=0; i<no_chunks; i++ ) {
-	
-		//construct the chunk name
-		char chunkname[127] = {0};
-		strcpy( chunkname, basename );
-		strcat( chunkname, "_" );
-		char chunknum[5] = {0};
-		itoa( i+1, chunknum, 10 );
-		strcat( chunkname, chunknum );
-		
-		//find it
-		HRSRC hRsrc = FindResource(hModule, chunkname, type);
-		if (hRsrc == NULL ) return 1; //couldn't find the chunk
-		
-		//load it
-		HGLOBAL hGlobal = LoadResource(hModule, hRsrc);
-		if (hGlobal == NULL) return 1; //couldn't lock
-		
-		//lock it
-		BYTE* pBytes = (BYTE*) LockResource(hGlobal);
-		if (pBytes == NULL) return 1; //couldn't lock
-		
-		//put it on disk
-		DWORD dwLength = SizeofResource(hModule, hRsrc);
-		ofstream fStream(file, ios::binary | ios::out | ios::app );
-		fStream.write((char*) pBytes, dwLength);
-		fStream.close();
-		
-		//unload
-		UnlockResource(hGlobal);
-		FreeResource(hGlobal);
-		
-		//update the progress
-		set_splash_progress( i * 100 / no_chunks );
-		
-	}
-
-	return 0;
-
-}
-
-//the splash window procedure
-LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
-	switch(msg) {
-
-		case WM_CREATE: {
-			//load in the reusable resources
-			g_splash = LoadBitmap(GetModuleHandle(NULL),"SPLASH");
-			g_hfFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
-			if(g_splash == NULL) {
-				MessageBox(hwnd, "Could not load splash bitmap!", "Error", MB_OK | MB_ICONEXCLAMATION);
-			}
-			
-			//center the window automatically
-			RECT rect;
-			GetWindowRect(hwnd, &rect);
-			int x = (GetSystemMetrics(SM_CXSCREEN) - (rect.right - rect.left)) / 2;
-			int y = (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom - rect.top)) / 2;
-			SetWindowPos(hwnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE);
-		}
-		
-		case WM_PAINT: {
-			// Don't use MessageBox from inside WM_PAINT
-		
-			//load in the correct resources
-			HBITMAP g_progress = NULL;
-			HBITMAP g_step = NULL;
-			char progress_res[20] = "PROGRESS_";
-			strcat( progress_res, progress );
-			char step_res[20] = "STEP_";
-			strcat( step_res, step );
-			g_progress = LoadBitmap(GetModuleHandle(NULL), progress_res );
-			g_step = LoadBitmap(GetModuleHandle(NULL), step_res );
-			if( g_progress == NULL || g_step == NULL ) {
-				//MessageBox(hwnd, "Could not load an image!", "Error", MB_OK | MB_ICONEXCLAMATION);
-			}
-		
-			BITMAP bm; //holds info about the width and height
-			PAINTSTRUCT ps;
-			
-			HDC hdc = BeginPaint(hwnd, &ps);
-			HDC hdcMem = CreateCompatibleDC(hdc);
-			
-			//paint the main splash screen
-			GetObject(g_splash, sizeof(bm), &bm);
-			HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_splash);
-			BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
-						
-			//paint in the progress
-			GetObject(g_progress, sizeof(bm), &bm);
-			SelectObject(hdcMem, g_progress);
-			BitBlt(hdc, 0, 270, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
-			
-			//paint in the step with transparency
-			GetObject(g_step, sizeof(bm), &bm);
-			SelectObject(hdcMem, g_step);
-			BitBlt(hdc, 0, 276, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCPAINT);
-			
-			//print the step with text
-			RECT rcClient;
-			GetClientRect(hwnd, &rcClient);
-			//DrawText(hdc, "This is the step", -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
-			
-			//restore the hdc
-			SelectObject(hdcMem, hbmOld);
-			
-			//release resources
-			DeleteDC(hdcMem);
-			EndPaint(hwnd, &ps);
-			DeleteObject(g_progress);
-			DeleteObject(g_step);
-			
-		}
-		break;
-		
-		/*
-		case WM_LBUTTONDOWN: {
-			DeleteObject(g_splash);
-			PostQuitMessage(0);
-		}
-		break;
-		*/
-		
-		case WM_CLOSE:
-			DestroyWindow(hwnd);
-			break;
-		
-		case WM_DESTROY:
-			DeleteObject(g_splash);
-			PostQuitMessage(0);
-			break;
-		
-		default:
-			return DefWindowProc(hwnd, msg, wParam, lParam);
-	}
-
-	return 0;
-
-}
-
-//function to process the window
-DWORD WINAPI ProcessWindow( LPVOID lpParam ) {
-	
-	const char g_szClassName[] = "splash";
-	WNDCLASSEX wc;
-	MSG Msg;
-
-	//Step 1: Registering the Window Class
-	wc.cbSize = sizeof(WNDCLASSEX);
-	wc.style = 0;
-	wc.lpfnWndProc = WndProc;
-	wc.cbClsExtra = 0;
-	wc.cbWndExtra = 0;
-	wc.hInstance = mainInstance;
-	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
-	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
-	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
-	wc.lpszMenuName = NULL;
-	wc.lpszClassName = g_szClassName;
-	wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
-	if(!RegisterClassEx(&wc)) {
-		MessageBox(NULL, "Window Registration Failed!", "Error!",
-		MB_ICONEXCLAMATION | MB_OK);
-		return 0;
-	}
-
-	// Step 2: Creating the Window
-	splashWnd = CreateWindowEx( WS_EX_TOOLWINDOW, g_szClassName, "", WS_POPUP | SS_BITMAP, 0, 0, 420, 300, NULL, NULL, mainInstance, NULL);
-	if( splashWnd == NULL ) {
-		MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
-		return 0;
-	}
-	ShowWindow(splashWnd, mainCmdShow);
-	UpdateWindow(splashWnd);
-
-	window_loaded = true;
-	
-	// Step 3: The Message Loop
-	while(GetMessage(&Msg, NULL, 0, 0) > 0) {
-		TranslateMessage(&Msg);
-		DispatchMessage(&Msg);
-	}
-	return 0;
-} 
-
-int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
-	
-	const int SPOOF_TIME = 1000;
-	string command = lpCmdLine;
-
-	if((command.compare("-extract") == 0) || (command.compare("--extract") == 0) || (command.compare("-x") == 0)){
-		printf("----------------------------\n");
-		printf("Extracting java installer...\n");
-		printf("----------------------------\n");
-		int result = extractResource( "JAR", "JAR", "@projectname@.jar" );
-		
-		if(result == 0){
-			printf("\n");
-			printf("Extraction complete\n");
-			printf("You can now type java -jar @projectname@.jar to run the installer from the command line\n");
-			return 0;	
-		}
-		else{
-			return 1;
-		}
-	}
-	else if(command.compare("-text") == 0 || command.compare("text") == 0 )
-	{
-		cerr << "-text is depricated, please use -extract and then run \"java -jar @projectname@.jar text\"" << endl;
-	}
-	
-	srand( time(0) );
-	mainInstance = hInstance;
-	mainCmdShow = nCmdShow;
-	
-	//start the window
-	HANDLE hThread;
-	DWORD dwThreadId, dwThrdParam = 1;
-	hThread = CreateThread( 
-       NULL,                        // no security attributes 
-       0,                           // use default stack size  
-       ProcessWindow,               // thread function 
-       &dwThrdParam,	            // argument to thread function 
-       0,                           // use default creation flags 
-       &dwThreadId);                // returns the thread identifier 
-	if ( hThread == NULL ) {
-		return -1;
-		//ErrorExit( "CreateThread failed." );
-	}
-	CloseHandle( hThread );
-	
-	while ( !window_loaded ) {
-		Sleep( 100 );
-	}
-	
-	//create the temp folder and change to it
-	set_splash_step( "TMP" );
-	spoof_progress( SPOOF_TIME );
-	
-	//get the original working directory
-	char* owdChar = _getcwd(NULL, 1024);
-	string owd = "";
-	owd.append( owdChar );
-	free(owdChar);
-	
-	//strip trailing slash
-	if ( owd.substr(owd.length()-1,1).compare( "\\" ) == 0 ) {
-		owd = owd.substr(0, owd.length()-1);
-	}
-		
-	//using the users TMP directory for temp files rather than the current directory so
-	//installation from cdrom works
-	char* tmp = getenv( "TMP" );
-	char id[6]; for( int i=0; i<5; i++ ) id[i] = (char)((rand()%26) + 97); id[5] = '\0'; //id for this instance
-	string tempdir = ""; tempdir.append( tmp ); tempdir.append( "\\@projectname@-" ); tempdir.append( id );
-	const char* tmpdir = tempdir.c_str();
-	if ( _mkdir( tmpdir ) != 0 ) {
-		string title = "Failed to create the temp folder.";
-		string message = "Failed to create the temp folder.\nPlease set the environment variable TMP to a folder you have permission to write to.";
-		//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
-		MessageBox(splashWnd, message.c_str(), title.c_str(), MB_OK);
-		return -1;
-	}
-	//SetFileAttributes(tmpdir, FILE_ATTRIBUTE_HIDDEN);
-	SetCurrentDirectory(tmpdir);
-	// delete tmp; //  should be tmpdir? ??? (deallocate memory)
-	
-	#ifdef CDROM
-
-	//ask if they want to install, then do it if so
-	int choice = MessageBox(splashWnd, "Install @projectname@?", "@projectname@", MB_OKCANCEL | MB_ICONQUESTION );
-	if ( choice == IDOK ) {
-
-		//prepare to launch the jar
-		set_splash_step( "LAUNCHING" );
-		spoof_progress( SPOOF_TIME );
-	
-		string cmd = "\"";
-		cmd.append( owd );
-		cmd.append( "\\Java\\Windows\\jre\\bin\\java.exe\" \"-Dorig.dir=" );
-		cmd.append( owd );
-		cmd.append( "\" -jar \"" );
-		cmd.append( owd );
-		cmd.append( "\\Java\\Jars\\windows.jar\"" );
-		char cmdLpstr[1024];
-		strcpy( cmdLpstr, cmd.c_str() );
-		
-		
-		STARTUPINFO si;
-		PROCESS_INFORMATION pi;
-		memset(&pi, 0, sizeof(pi));
-		memset(&si, 0, sizeof(si));
-		si.cb = sizeof(si);
-		DWORD dwExitCode = -1;
-
-		//hide splash screen
-		ShowWindow(splashWnd, SW_HIDE);
-
-		//launch the jar
-		bool result;
-		result = CreateProcess(NULL, cmdLpstr, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
-
-		WaitForSingleObject(pi.hProcess, INFINITE);
-		GetExitCodeProcess(pi.hProcess, &dwExitCode);
-		CloseHandle(pi.hThread);
-		CloseHandle(pi.hProcess);
-
-	}	
-	#else
-
-	//rip out java archive if it is bundled
-	set_splash_step( "XJAVA" );
-	int javaIsBundled = (extractResource( "JAVA", "EXE", "@java.installer@" ) == 0);
-	if ( javaIsBundled ) {
-		process( "@java.installer@", false );
-	}
-
-	//find java
-	set_splash_step( "SEARCHING" );
-	spoof_progress( SPOOF_TIME );
-	bool use_minimum = true;
-	Jvm minimum;
-	minimum.setVersionFromString( "@java.min.version@" );
-	string phint = "@java.extracted@";
-	string hint = "";
-	bool verbose = true;
-	Jvm foundJvm;
-	bool jvmFound = find( foundJvm, use_minimum, minimum, false, false, phint, hint, verbose );
-	
-	//if the jvm was not found, try to fix it and find it
-	if ( !jvmFound ) {
-
-		//did not find a good java
-		string message = "This version of @projectname@ requires java @java.min.version@ or greater, but ";
-		
-		//tell them if java is absent or just too old
-		if ( find( foundJvm, false, minimum, false, false, "", "", false ) ) {
-			message.append( "your java is too old.");
-		} else {
-			message.append( "java could not be found on your computer." );
-		}
-		message.append( "\n" );
-		
-		string title = "Installation Failed: Couldn't find java";
-		//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
-		MessageBox(splashWnd, message.c_str(), title.c_str(), MB_OK);
-
-	//if java was found, carry on
-	} else {
-
-		//extract the jar
-		string jarLocation = "@projectname@.jar";
-		
-		set_splash_step( "XJAR" );
-		extractResource( "JAR", "JAR", (char*) jarLocation.c_str() );
-
-		//launch the jar
-		set_splash_step( "LAUNCHING" );
-		spoof_progress( SPOOF_TIME );
-		string cmd = "\"";
-		cmd.append( foundJvm.getWinExecutable() );
-		cmd.append( "\" \"-Dorig.dir=" );
-		cmd.append( owd );
-		cmd.append( "\" -jar @projectname@.jar" );
-		
-		
-		//hide splash screen
-		ShowWindow(splashWnd, SW_HIDE);
-		
-		//run the jar
-		int launch_exit_code = process( cmd, true );
-		
-		//report how it went
-		if ( launch_exit_code != 0 ) {
-			string title = "Installation Error";
-			string message = "The installation exited with an error. Java may not be installed properly, or the installation may have been interrupted partway through. Please try again.";
-			//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
-			MessageBox(NULL, message.c_str(), title.c_str(), MB_OK);
-		}
-	}
-	#endif
-	
-	//clean up the temp directory
-	_unlink( "ant.install.log" );
-	#ifndef CDROM
-	_unlink( "@projectname@.jar" );
-	_unlink( "@java.installer@" );
-	process( "cmd.exe /c rd /s /q @java.extracted@", false );
-	#endif
-
-	SetCurrentDirectory( ".." );
-	_rmdir( tempdir.c_str() );
-	
-	return 0;
-	
-}
Index: her-projects/expeditee-release-kits/wrapper.cpp
===================================================================
--- /other-projects/expeditee-release-kits/wrapper.cpp	(revision 28739)
+++ 	(revision )
@@ -1,473 +1,0 @@
-#include <windows.h>
-
-#include <fstream>
-#include <iostream>
-#include <conio.h>
-#include <string>
-#include <time.h>
-#include <shellapi.h>
-#include <direct.h>
-
-using namespace std;
-
-#ifndef CDROM
-#include "libsearch4j.h"
-#endif
-
-//globals
-HBITMAP g_splash = NULL; //the main splash bitmap
-HFONT g_hfFont = NULL; //the main splash bitmap
-char step[10] = "TMP"; //the current step
-char progress[4] = "0"; //progress in the current step
-HWND splashWnd;
-HINSTANCE mainInstance;
-int mainCmdShow;
-bool window_loaded = false;
-
-void set_splash_step( char* new_step ) {
-	strcpy( step, new_step );
-	InvalidateRect(splashWnd, NULL, FALSE);
-	UpdateWindow(splashWnd);
-}
-
-void set_splash_progress( int percent_progress ) {
-	percent_progress = ( percent_progress / 10 ) * 10;
-	char p[4] = {0};
-	strcpy( progress, itoa( percent_progress, p, 10 ) );
-	InvalidateRect(splashWnd, NULL, FALSE);
-	//RedrawWindow(splashWnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ERASENOW | RDW_UPDATENOW | RDW_INTERNALPAINT);
-	UpdateWindow(splashWnd);
-}
-
-void spoof_progress( int interval ) {
-	int tenPercentWait = interval / 11;
-	for ( int i=0; i <= 100; i+=10 ) {
-		set_splash_progress( i );
-		Sleep( tenPercentWait );
-	}
-}
-
-//extracts a resource in chunks
-int extractResource( const char * basename, const char * type, char * file ) {
-
-	HMODULE hModule = GetModuleHandle(NULL);
-	set_splash_progress( 0 );
-
-	int no_chunks;
-	bool chunk_available = true;
-	for ( no_chunks = 0; chunk_available; no_chunks++ ) {
-
-		//construct the chunk name
-		char chunkname[127] = {0};
-		strcpy( chunkname, basename );
-		strcat( chunkname, "_" );
-		char chunknum[5] = {0};
-		itoa( no_chunks+1, chunknum, 10 );
-		strcat( chunkname, chunknum );
-		
-		if ( FindResource(hModule, chunkname, type) == NULL ) {
-			chunk_available = false;
-			break;
-		}
-	}
-	
-	if ( no_chunks == 0 ) {
-		return 1;
-	}
-	
-	for ( int i=0; i<no_chunks; i++ ) {
-	
-		//construct the chunk name
-		char chunkname[127] = {0};
-		strcpy( chunkname, basename );
-		strcat( chunkname, "_" );
-		char chunknum[5] = {0};
-		itoa( i+1, chunknum, 10 );
-		strcat( chunkname, chunknum );
-		
-		//find it
-		HRSRC hRsrc = FindResource(hModule, chunkname, type);
-		if (hRsrc == NULL ) return 1; //couldn't find the chunk
-		
-		//load it
-		HGLOBAL hGlobal = LoadResource(hModule, hRsrc);
-		if (hGlobal == NULL) return 1; //couldn't lock
-		
-		//lock it
-		BYTE* pBytes = (BYTE*) LockResource(hGlobal);
-		if (pBytes == NULL) return 1; //couldn't lock
-		
-		//put it on disk
-		DWORD dwLength = SizeofResource(hModule, hRsrc);
-		ofstream fStream(file, ios::binary | ios::out | ios::app );
-		fStream.write((char*) pBytes, dwLength);
-		fStream.close();
-		
-		//unload
-		UnlockResource(hGlobal);
-		FreeResource(hGlobal);
-		
-		//update the progress
-		set_splash_progress( i * 100 / no_chunks );
-		
-	}
-
-	return 0;
-
-}
-
-//the splash window procedure
-LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
-	switch(msg) {
-
-		case WM_CREATE: {
-			//load in the reusable resources
-			g_splash = LoadBitmap(GetModuleHandle(NULL),"SPLASH");
-			g_hfFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
-			if(g_splash == NULL) {
-				MessageBox(hwnd, "Could not load splash bitmap!", "Error", MB_OK | MB_ICONEXCLAMATION);
-			}
-			
-			//center the window automatically
-			RECT rect;
-			GetWindowRect(hwnd, &rect);
-			int x = (GetSystemMetrics(SM_CXSCREEN) - (rect.right - rect.left)) / 2;
-			int y = (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom - rect.top)) / 2;
-			SetWindowPos(hwnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE);
-		}
-		
-		case WM_PAINT: {
-			// Don't use MessageBox from inside WM_PAINT
-		
-			//load in the correct resources
-			HBITMAP g_progress = NULL;
-			HBITMAP g_step = NULL;
-			char progress_res[20] = "PROGRESS_";
-			strcat( progress_res, progress );
-			char step_res[20] = "STEP_";
-			strcat( step_res, step );
-			g_progress = LoadBitmap(GetModuleHandle(NULL), progress_res );
-			g_step = LoadBitmap(GetModuleHandle(NULL), step_res );
-			if( g_progress == NULL || g_step == NULL ) {
-				//MessageBox(hwnd, "Could not load an image!", "Error", MB_OK | MB_ICONEXCLAMATION);
-			}
-		
-			BITMAP bm; //holds info about the width and height
-			PAINTSTRUCT ps;
-			
-			HDC hdc = BeginPaint(hwnd, &ps);
-			HDC hdcMem = CreateCompatibleDC(hdc);
-			
-			//paint the main splash screen
-			GetObject(g_splash, sizeof(bm), &bm);
-			HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_splash);
-			BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
-						
-			//paint in the progress
-			GetObject(g_progress, sizeof(bm), &bm);
-			SelectObject(hdcMem, g_progress);
-			BitBlt(hdc, 0, 270, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
-			
-			//paint in the step with transparency
-			GetObject(g_step, sizeof(bm), &bm);
-			SelectObject(hdcMem, g_step);
-			BitBlt(hdc, 0, 276, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCPAINT);
-			
-			//print the step with text
-			RECT rcClient;
-			GetClientRect(hwnd, &rcClient);
-			//DrawText(hdc, "This is the step", -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
-			
-			//restore the hdc
-			SelectObject(hdcMem, hbmOld);
-			
-			//release resources
-			DeleteDC(hdcMem);
-			EndPaint(hwnd, &ps);
-			DeleteObject(g_progress);
-			DeleteObject(g_step);
-			
-		}
-		break;
-		
-		/*
-		case WM_LBUTTONDOWN: {
-			DeleteObject(g_splash);
-			PostQuitMessage(0);
-		}
-		break;
-		*/
-		
-		case WM_CLOSE:
-			DestroyWindow(hwnd);
-			break;
-		
-		case WM_DESTROY:
-			DeleteObject(g_splash);
-			PostQuitMessage(0);
-			break;
-		
-		default:
-			return DefWindowProc(hwnd, msg, wParam, lParam);
-	}
-
-	return 0;
-
-}
-
-//function to process the window
-DWORD WINAPI ProcessWindow( LPVOID lpParam ) {
-	
-	const char g_szClassName[] = "splash";
-	WNDCLASSEX wc;
-	MSG Msg;
-
-	//Step 1: Registering the Window Class
-	wc.cbSize = sizeof(WNDCLASSEX);
-	wc.style = 0;
-	wc.lpfnWndProc = WndProc;
-	wc.cbClsExtra = 0;
-	wc.cbWndExtra = 0;
-	wc.hInstance = mainInstance;
-	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
-	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
-	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
-	wc.lpszMenuName = NULL;
-	wc.lpszClassName = g_szClassName;
-	wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
-	if(!RegisterClassEx(&wc)) {
-		MessageBox(NULL, "Window Registration Failed!", "Error!",
-		MB_ICONEXCLAMATION | MB_OK);
-		return 0;
-	}
-
-	// Step 2: Creating the Window
-	splashWnd = CreateWindowEx( WS_EX_TOOLWINDOW, g_szClassName, "", WS_POPUP | SS_BITMAP, 0, 0, 420, 300, NULL, NULL, mainInstance, NULL);
-	if( splashWnd == NULL ) {
-		MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
-		return 0;
-	}
-	ShowWindow(splashWnd, mainCmdShow);
-	UpdateWindow(splashWnd);
-
-	window_loaded = true;
-	
-	// Step 3: The Message Loop
-	while(GetMessage(&Msg, NULL, 0, 0) > 0) {
-		TranslateMessage(&Msg);
-		DispatchMessage(&Msg);
-	}
-	return 0;
-} 
-
-int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
-	
-	const int SPOOF_TIME = 1000;
-	string command = lpCmdLine;
-
-	if((command.compare("-extract") == 0) || (command.compare("--extract") == 0) || (command.compare("-x") == 0)){
-		printf("----------------------------\n");
-		printf("Extracting java installer...\n");
-		printf("----------------------------\n");
-		int result = extractResource( "JAR", "JAR", "@projectname@.jar" );
-		
-		if(result == 0){
-			printf("\n");
-			printf("Extraction complete\n");
-			printf("You can now type java -jar @projectname@.jar to run the installer from the command line\n");
-			return 0;	
-		}
-		else{
-			return 1;
-		}
-	}
-	else if(command.compare("-text") == 0 || command.compare("text") == 0 )
-	{
-		cerr << "-text is depricated, please use -extract and then run \"java -jar @projectname@.jar text\"" << endl;
-	}
-	
-	srand( time(0) );
-	mainInstance = hInstance;
-	mainCmdShow = nCmdShow;
-	
-	//start the window
-	HANDLE hThread;
-	DWORD dwThreadId, dwThrdParam = 1;
-	hThread = CreateThread( 
-       NULL,                        // no security attributes 
-       0,                           // use default stack size  
-       ProcessWindow,               // thread function 
-       &dwThrdParam,	            // argument to thread function 
-       0,                           // use default creation flags 
-       &dwThreadId);                // returns the thread identifier 
-	if ( hThread == NULL ) {
-		return -1;
-		//ErrorExit( "CreateThread failed." );
-	}
-	CloseHandle( hThread );
-	
-	while ( !window_loaded ) {
-		Sleep( 100 );
-	}
-	
-	//create the temp folder and change to it
-	set_splash_step( "TMP" );
-	spoof_progress( SPOOF_TIME );
-	
-	//get the original working directory
-	char* owdChar = _getcwd(NULL, 1024);
-	string owd = "";
-	owd.append( owdChar );
-	free(owdChar);
-	
-	//strip trailing slash
-	if ( owd.substr(owd.length()-1,1).compare( "\\" ) == 0 ) {
-		owd = owd.substr(0, owd.length()-1);
-	}
-		
-	//using the users TMP directory for temp files rather than the current directory so
-	//installation from cdrom works
-	char* tmp = getenv( "TMP" );
-	char id[6]; for( int i=0; i<5; i++ ) id[i] = (char)((rand()%26) + 97); id[5] = '\0'; //id for this instance
-	string tempdir = ""; tempdir.append( tmp ); tempdir.append( "\\@projectname@-" ); tempdir.append( id );
-	const char* tmpdir = tempdir.c_str();
-	if ( _mkdir( tmpdir ) != 0 ) {
-		string title = "Failed to create the temp folder.";
-		string message = "Failed to create the temp folder.\nPlease set the environment variable TMP to a folder you have permission to write to.";
-		//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
-		MessageBox(splashWnd, message.c_str(), title.c_str(), MB_OK);
-		return -1;
-	}
-	//SetFileAttributes(tmpdir, FILE_ATTRIBUTE_HIDDEN);
-	SetCurrentDirectory(tmpdir);
-	// delete tmp; //  should be tmpdir? ??? (deallocate memory)
-	
-	#ifdef CDROM
-
-	//ask if they want to install, then do it if so
-	int choice = MessageBox(splashWnd, "Install @projectname@?", "@projectname@", MB_OKCANCEL | MB_ICONQUESTION );
-	if ( choice == IDOK ) {
-
-		//prepare to launch the jar
-		set_splash_step( "LAUNCHING" );
-		spoof_progress( SPOOF_TIME );
-	
-		string cmd = "\"";
-		cmd.append( owd );
-		cmd.append( "\\Java\\Windows\\jre\\bin\\java.exe\" \"-Dorig.dir=" );
-		cmd.append( owd );
-		cmd.append( "\" -jar \"" );
-		cmd.append( owd );
-		cmd.append( "\\Java\\Jars\\windows.jar\"" );
-		char cmdLpstr[1024];
-		strcpy( cmdLpstr, cmd.c_str() );
-		
-		
-		STARTUPINFO si;
-		PROCESS_INFORMATION pi;
-		memset(&pi, 0, sizeof(pi));
-		memset(&si, 0, sizeof(si));
-		si.cb = sizeof(si);
-		DWORD dwExitCode = -1;
-
-		//hide splash screen
-		ShowWindow(splashWnd, SW_HIDE);
-
-		//launch the jar
-		bool result;
-		result = CreateProcess(NULL, cmdLpstr, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
-
-		WaitForSingleObject(pi.hProcess, INFINITE);
-		GetExitCodeProcess(pi.hProcess, &dwExitCode);
-		CloseHandle(pi.hThread);
-		CloseHandle(pi.hProcess);
-
-	}	
-	#else
-
-	//rip out java archive if it is bundled
-	set_splash_step( "XJAVA" );
-	int javaIsBundled = (extractResource( "JAVA", "EXE", "@java.installer@" ) == 0);
-	if ( javaIsBundled ) {
-		process( "@java.installer@", false );
-	}
-
-	//find java
-	set_splash_step( "SEARCHING" );
-	spoof_progress( SPOOF_TIME );
-	bool use_minimum = true;
-	Jvm minimum;
-	minimum.setVersionFromString( "@java.min.version@" );
-	string phint = "@java.extracted@";
-	string hint = "";
-	bool verbose = true;
-	Jvm foundJvm;
-	bool jvmFound = find( foundJvm, use_minimum, minimum, false, false, phint, hint, verbose );
-	
-	//if the jvm was not found, try to fix it and find it
-	if ( !jvmFound ) {
-
-		//did not find a good java
-		string message = "This version of @projectname@ requires java @java.min.version@ or greater, but ";
-		
-		//tell them if java is absent or just too old
-		if ( find( foundJvm, false, minimum, false, false, "", "", false ) ) {
-			message.append( "your java is too old.");
-		} else {
-			message.append( "java could not be found on your computer." );
-		}
-		message.append( "\n" );
-		
-		string title = "Installation Failed: Couldn't find java";
-		//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
-		MessageBox(splashWnd, message.c_str(), title.c_str(), MB_OK);
-
-	//if java was found, carry on
-	} else {
-
-		//extract the jar
-		string jarLocation = "@projectname@.jar";
-		
-		set_splash_step( "XJAR" );
-		extractResource( "JAR", "JAR", (char*) jarLocation.c_str() );
-
-		//launch the jar
-		set_splash_step( "LAUNCHING" );
-		spoof_progress( SPOOF_TIME );
-		string cmd = "\"";
-		cmd.append( foundJvm.getWinExecutable() );
-		cmd.append( "\" \"-Dorig.dir=" );
-		cmd.append( owd );
-		cmd.append( "\" -jar @projectname@.jar" );
-		
-		
-		//hide splash screen
-		ShowWindow(splashWnd, SW_HIDE);
-		
-		//run the jar
-		int launch_exit_code = process( cmd, true );
-		
-		//report how it went
-		if ( launch_exit_code != 0 ) {
-			string title = "Installation Error";
-			string message = "The installation exited with an error. Java may not be installed properly, or the installation may have been interrupted partway through. Please try again.";
-			//ShowWindow(splashWnd, SW_HIDE); //hide splash screen
-			MessageBox(NULL, message.c_str(), title.c_str(), MB_OK);
-		}
-	}
-	#endif
-	
-	//clean up the temp directory
-	_unlink( "ant.install.log" );
-	#ifndef CDROM
-	_unlink( "@projectname@.jar" );
-	_unlink( "@java.installer@" );
-	process( "cmd.exe /c rd /s /q @java.extracted@", false );
-	#endif
-
-	SetCurrentDirectory( ".." );
-	_rmdir( tempdir.c_str() );
-	
-	return 0;
-	
-}
