Compare commits
112 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2064184093 | |||
| 2e6ea5eecc | |||
| 0dde64e5fc | |||
| 28a3326a35 | |||
| df6b893171 | |||
| ead577521d | |||
|
|
cc1c76bd47 | ||
| b74f1aedb4 | |||
| 67d1e787ee | |||
| 11ca88ee38 | |||
|
|
ae4e3db0d7 | ||
|
|
4314790271 | ||
| 9c58276119 | |||
| 16380a9752 | |||
| b523d80c25 | |||
| 34d1f504c0 | |||
| d4a64d4e72 | |||
| 44201a0bbb | |||
|
|
1d19cd4c98 | ||
| 4c89c70b05 | |||
|
|
33eb219904 | ||
| 37c44ca462 | |||
| 19bf57143c | |||
| 1005619211 | |||
| af31ba91a4 | |||
| 0e9ae7cc91 | |||
| 702160c1df | |||
| b57c1b5753 | |||
| e22a1ce84a | |||
| 83c728e7c8 | |||
| ed75718d34 | |||
| 75873b9e8c | |||
| 1416f6d632 | |||
| 8a7e070f46 | |||
| 1c953dbf1f | |||
| da3b88e083 | |||
| 13d8dc4612 | |||
| 785a4f1b7b | |||
| 43b0ccd96d | |||
| f6af5ce2e7 | |||
| 577ff9c1eb | |||
| f0ae69d610 | |||
| 7e6a08d64b | |||
| 5f34c57b23 | |||
| 356d95191b | |||
| 903f8eaa91 | |||
| 1b7dd7dfb1 | |||
| ca0a15ba09 | |||
| c52422247c | |||
| c9b65cb315 | |||
| fc3365af62 | |||
| 7c7cd58963 | |||
| aea5a58691 | |||
| fab7f1a91c | |||
| 9b23eb56ce | |||
| 450e80ad21 | |||
| 21d7d9d597 | |||
| 746f47a5fa | |||
| c67e6d6abc | |||
| 1f722f5df3 | |||
| df4eae1d66 | |||
| 4d435b4fc1 | |||
| f95ae10d03 | |||
| 423d840d83 | |||
| 1997b0bf9b | |||
| b206fb33aa | |||
| 11b26e396c | |||
| 94139e6ac6 | |||
| c0cc2432ff | |||
| f86aaa3782 | |||
| 690a8f0c3b | |||
| 1de0ca8d60 | |||
| de149c5d85 | |||
| 7d2b11473b | |||
| 4c25fccc86 | |||
| 5e310b0224 | |||
| 169802ccaf | |||
| 28257e00c0 | |||
| 38c6af7090 | |||
| bdbf4c604d | |||
| 73bcba2c9a | |||
| 90ca84cfbf | |||
| a18ca1ce21 | |||
| b92babb5cd | |||
| e3231ec495 | |||
| 4896ee7a65 | |||
| ce3eb7165a | |||
| 4de00b8fac | |||
| ebe777bdc5 | |||
| 3b5cacb8ad | |||
| db7d297dbc | |||
| 2f9abf7629 | |||
| b6063d2fed | |||
| e1f566f0c8 | |||
| 9fa892a6fd | |||
| 1572e163ef | |||
| 2791691057 | |||
| 575537ae66 | |||
| fde4a597c7 | |||
| e69ae52f50 | |||
| 8bdb06749f | |||
| 0cfd066f4f | |||
| 217ccb915a | |||
| 1dd3e9d86f | |||
| d3d81d71fe | |||
| 80c110afa9 | |||
| 1c08b9a51d | |||
| 4ad30106b6 | |||
| 9100d0e35a | |||
| b8dea19c30 | |||
| 671f2b9270 | |||
| d619fb2f4d |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,3 +5,4 @@ AudiobookRecorder.jar
|
||||
AudiobookRecorder-linux
|
||||
AudiobookRecorder-osx.dmg
|
||||
AudiobookRecorder-win.exe
|
||||
.*.swp
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<effect name="Alien">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<biquad type="lowpass" fc="10000" q="1" gain="-10" />
|
||||
<lfo frequency="100" depth="0.5" />
|
||||
<!--biquad type="lowpass" fc="10000" q="1" gain="-10" /-->
|
||||
<lfo frequency="50" depth="1.0" waveform="triangle" mode="replace"/>
|
||||
</effect>
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<effect name="Big Echo">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<delayline>
|
||||
<delay samples="22000" gain="0.2" pan="-0.3">
|
||||
<biquad type="highpass" fc="300" q="1" gain="0" />
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<biquad type="lowpass" fc="10000" q="1" gain="-10" />
|
||||
<agc ceiling="0.666" limit="1" attack="0.1" decay="0.01" />
|
||||
<agc ceiling="0.666" limit="1.5" attack="0.08" decay="0.01" />
|
||||
</effect>
|
||||
|
||||
15
ExampleFilters/cuthumagcstereo.eff
Normal file
15
ExampleFilters/cuthumagcstereo.eff
Normal file
@@ -0,0 +1,15 @@
|
||||
<effect name="Cut Computer Hum (with AGC and Stereo)">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<biquad type="lowpass" fc="10000" q="1" gain="-10" />
|
||||
<delayline wetonly="false">
|
||||
<delay samples="-100" gain="0.1" pan="-1.0">
|
||||
<biquad type="highpass" fc="300" q="1" gain="0" />
|
||||
</delay>
|
||||
<delay samples="100" gain="0.1" pan="1.0">
|
||||
<biquad type="highpass" fc="300" q="1" gain="0" />
|
||||
</delay>
|
||||
</delayline>
|
||||
<agc ceiling="0.666" limit="1.5" attack="0.1" decay="0.01" />
|
||||
</effect>
|
||||
@@ -1,7 +1,4 @@
|
||||
<effect name="Ethereal Voice">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<amplifier gain="0.1" />
|
||||
<delayline>
|
||||
<delay samples="2000" gain="1.0" pan="-0.3">
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<effect name="Large Room (quiet)">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<biquad type="lowpass" fc="10000" q="1" gain="-10" />
|
||||
<delayline>
|
||||
<delay samples="5500" gain="0.2" pan="-0.3">
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<effect name="Large Room (loud)">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<biquad type="lowpass" fc="10000" q="1" gain="-10" />
|
||||
<delayline>
|
||||
<delay samples="5500" gain="0.2" pan="-0.3">
|
||||
|
||||
3
ExampleFilters/panleft.eff
Normal file
3
ExampleFilters/panleft.eff
Normal file
@@ -0,0 +1,3 @@
|
||||
<effect name="Pan Left">
|
||||
<pan pan="-0.4" />
|
||||
</effect>
|
||||
3
ExampleFilters/panright.eff
Normal file
3
ExampleFilters/panright.eff
Normal file
@@ -0,0 +1,3 @@
|
||||
<effect name="Pan Right">
|
||||
<pan pan="0.4" />
|
||||
</effect>
|
||||
@@ -1,7 +1,4 @@
|
||||
<effect name="Telephone">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<biquad type="lowshelf" fc="400" q="10" gain="-20" />
|
||||
<biquad type="highshelf" fc="8000" q="10" gain="-20" />
|
||||
<delayline>
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
<effect name="Radio">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<amplifier gain="0.1" />
|
||||
<biquad type="peak" fc="1000" q="10" gain="45" />
|
||||
<lfo frequency="5000" depth="0.3" />
|
||||
<clipping clip="0.3" />
|
||||
<amplifier gain="0.5" />
|
||||
<biquad type="peak" fc="1000" q="10" gain="25" />
|
||||
<lfo frequency="3000" depth="0.3" waveform="sine" mode="add" />
|
||||
<clipping clip="0.9" />
|
||||
<biquad type="highshelf" fc="8000" q="1" gain="-20" />
|
||||
<delayline>
|
||||
<delay samples="100" gain="0.7" />
|
||||
<delay samples="200" gain="0.5" />
|
||||
</delayline>
|
||||
<amplifier gain="0.3" />
|
||||
</effect>
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<effect name="Robotic">
|
||||
<biquad type="notch" fc="28" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="91" q="20" gain="-50" />
|
||||
<biquad type="notch" fc="120" q="20" gain="-50" />
|
||||
<biquad type="lowshelf" fc="100" q="2" gain="-20" />
|
||||
<delayline>
|
||||
<delay samples="400" gain="1" pan="-0.3" />
|
||||
|
||||
10
ExampleFilters/stereochorus.eff
Normal file
10
ExampleFilters/stereochorus.eff
Normal file
@@ -0,0 +1,10 @@
|
||||
<effect name="Stereo Chorus">
|
||||
<delayline>
|
||||
<delay samples="2000" gain="0.1" pan="-0.3">
|
||||
<biquad type="highpass" fc="300" q="1" gain="0" />
|
||||
</delay>
|
||||
<delay samples="4000" gain="0.1" pan="0.3">
|
||||
<biquad type="highpass" fc="300" q="1" gain="0" />
|
||||
</delay>
|
||||
</delayline>
|
||||
</effect>
|
||||
40
README.md
40
README.md
@@ -10,6 +10,8 @@ A system for easing the task of recording and editing audiobooks.
|
||||
* Chapter management
|
||||
* Audio effect chains (biquad, delay line, etc)
|
||||
|
||||
# [Manual and Tutorial](https://majenkoprojects.github.io/AudiobookRecorder)
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
@@ -29,12 +31,13 @@ From here on much is controlled by key presses.
|
||||
appended to the currently selected chapter, or to the last chapter if none is selected.
|
||||
* Press and hold "T" to record a new phrase that is the start of a new paragraph. This adds the "post paragraph" gap to the previous sentence. Otherwise it does the same as "R".
|
||||
* Press and hold "F" to record a "continuation" phrase. This sets the previous phrase's post-gap to be the "short" gap instead of the normal length gap.
|
||||
* Press and hold "Y" to record a new phrase that is the start of a new section. This add the "post section" gap to the previous sentence. Otherwise it does the same as "R".
|
||||
* Press "D" to delete the last phrase you recorded.
|
||||
* Press "E" to re-record the currently selected phrase.
|
||||
|
||||
Each phrase you record will be briefly analysed using FFT to find the start and end of the audio and set
|
||||
Each phrase you record can be automatically analysed to find the start and end of the audio and set
|
||||
crop marks appropriately. These can be adjusted in the waveform display when a phrase is selected. You can also
|
||||
re-run the analysis using either the default FFT method or using a peak detector method (finding the first and last points
|
||||
re-run the analysis using either FFT or a peak detector method (finding the first and last points
|
||||
where the audio amplitude rises above the backround noise).
|
||||
|
||||
The phrases also have a "post gap" associated with them. This is the amount of room noise (in milliseconds) to place between
|
||||
@@ -53,18 +56,14 @@ edit the text of this ID to identify the recordings. You
|
||||
may, for instance, change it to have the same text as the
|
||||
audio contains.
|
||||
|
||||
To help with this the Haven On-Demand online speech recognition
|
||||
service is integrated with the system and can be used to try and convert the
|
||||
audio into text. Right clicking on a recording brings
|
||||
up a menu which includes the option to try and convert
|
||||
the audio into text. The detected text is then used to
|
||||
replace the current recording ID / text.
|
||||
The audio can also be automatically converted to text if you have an suitable command-line
|
||||
executable that will work. One example is (on Linux) [DeepSpeech](https://github.com/mozilla/DeepSpeech) by Mozilla.
|
||||
|
||||
File layout
|
||||
-----------
|
||||
|
||||
All data is stored in your "storage" directory (specified in Options). Each book (which is a directory named after the
|
||||
title of the book) has an associated XML file (audiobook.abk) and a directory "files" where all the audio (stored as WAV
|
||||
title of the book) has an associated XML file (audiobook.abx) and a directory "files" where all the audio (stored as WAV
|
||||
files) is placed.
|
||||
|
||||
When you export the book as MP3 a new folder "export" is created within the book's folder where the MP3 files are placed.
|
||||
@@ -81,3 +80,26 @@ Building
|
||||
5. Build with `ant build`
|
||||
6. Run with `java -jar ./AudiobookRecorder.jar`
|
||||
|
||||
|
||||
----
|
||||
|
||||
Extra Resources
|
||||
===============
|
||||
|
||||
* DeepSpeech wrapper script
|
||||
|
||||
This is a small script that will convert the audio into a format DeepSpeech likes and call the `deepspeech` executable, removing any extra rubbish from the output. It
|
||||
also requires `sox` to be installed for the audio conversion.
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
ID=$$
|
||||
FILE=$1
|
||||
BINPATH=${HOME}/local/bin
|
||||
MODELS=${HOME}/ds/deepspeech-0.6.1-models
|
||||
|
||||
sox "$FILE" -r 16000 -c 1 -b 16 "/tmp/ds-${ID}.wav"
|
||||
${BINPATH}/deepspeech --model ${MODELS}/output_graph.pbmm --lm ${MODELS}/lm.binary --trie ${MODELS}/trie --audio "/tmp/ds-${ID}.wav" 2>/dev/null
|
||||
rm /tmp/ds-${ID}.wav
|
||||
```
|
||||
|
||||
BIN
deps/commons-lang3.jar
LFS
vendored
Normal file
BIN
deps/commons-lang3.jar
LFS
vendored
Normal file
Binary file not shown.
BIN
deps/commons-text.jar
LFS
vendored
Normal file
BIN
deps/commons-text.jar
LFS
vendored
Normal file
Binary file not shown.
BIN
deps/json-20190722.jar
LFS
vendored
Normal file
BIN
deps/json-20190722.jar
LFS
vendored
Normal file
Binary file not shown.
BIN
deps/sphinx4-core-5prealpha-SNAPSHOT.jar
LFS
vendored
BIN
deps/sphinx4-core-5prealpha-SNAPSHOT.jar
LFS
vendored
Binary file not shown.
BIN
deps/sphinx4-data-5prealpha-SNAPSHOT.jar
LFS
vendored
BIN
deps/sphinx4-data-5prealpha-SNAPSHOT.jar
LFS
vendored
Binary file not shown.
2
dist/linux/stub
vendored
2
dist/linux/stub
vendored
@@ -5,6 +5,6 @@ java=java
|
||||
if test -n "$JAVA_HOME"; then
|
||||
java="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
java_args=-Xmx1g
|
||||
java_args=-Xmx8g
|
||||
exec "$java" $java_args -jar $MYSELF "$@"
|
||||
exit 1
|
||||
|
||||
133
iircoeff.c
133
iircoeff.c
@@ -1,133 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 Felipe Rivera <liebremx at users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*
|
||||
* Coefficient stuff
|
||||
*
|
||||
* $Id: iir_cfs.c,v 1.2 2006/01/15 00:17:46 liebremx Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
static const double band_f031[] =
|
||||
{ 20,25,31.5,40,50,63,80,100,125,160,200,250,315,400,500,630,800,
|
||||
1000,1250,1600,2000,2500,3150,4000,5000,6300,8000,10000,12500,16000,20000
|
||||
};
|
||||
|
||||
#define GAIN_F0 1.0
|
||||
#define GAIN_F1 GAIN_F0 / M_SQRT2
|
||||
|
||||
#define SAMPLING_FREQ 44100.0
|
||||
#define TETA(f) (2*M_PI*(double)f/sample_frequency)
|
||||
#define TWOPOWER(value) (value * value)
|
||||
|
||||
#define BETA2(tf0, tf) \
|
||||
(TWOPOWER(GAIN_F1)*TWOPOWER(cos(tf0)) \
|
||||
- 2.0 * TWOPOWER(GAIN_F1) * cos(tf) * cos(tf0) \
|
||||
+ TWOPOWER(GAIN_F1) \
|
||||
- TWOPOWER(GAIN_F0) * TWOPOWER(sin(tf)))
|
||||
#define BETA1(tf0, tf) \
|
||||
(2.0 * TWOPOWER(GAIN_F1) * TWOPOWER(cos(tf)) \
|
||||
+ TWOPOWER(GAIN_F1) * TWOPOWER(cos(tf0)) \
|
||||
- 2.0 * TWOPOWER(GAIN_F1) * cos(tf) * cos(tf0) \
|
||||
- TWOPOWER(GAIN_F1) + TWOPOWER(GAIN_F0) * TWOPOWER(sin(tf)))
|
||||
#define BETA0(tf0, tf) \
|
||||
(0.25 * TWOPOWER(GAIN_F1) * TWOPOWER(cos(tf0)) \
|
||||
- 0.5 * TWOPOWER(GAIN_F1) * cos(tf) * cos(tf0) \
|
||||
+ 0.25 * TWOPOWER(GAIN_F1) \
|
||||
- 0.25 * TWOPOWER(GAIN_F0) * TWOPOWER(sin(tf)))
|
||||
|
||||
#define GAMMA(beta, tf0) ((0.5 + beta) * cos(tf0))
|
||||
#define ALPHA(beta) ((0.5 - beta)/2.0)
|
||||
|
||||
/*************
|
||||
* Functions *
|
||||
*************/
|
||||
|
||||
/* Get the band_f031 at both sides of F0. These will be cut at -3dB */
|
||||
static void find_f1_and_f2(double f0, double octave_percent, double *f1, double *f2)
|
||||
{
|
||||
double octave_factor = pow(2.0, octave_percent/2.0);
|
||||
*f1 = f0/octave_factor;
|
||||
*f2 = f0*octave_factor;
|
||||
}
|
||||
|
||||
/* Find the quadratic root
|
||||
* Always return the smallest root */
|
||||
static int find_root(double a, double b, double c, double *x0) {
|
||||
double k = c-((b*b)/(4.*a));
|
||||
double h = -(b/(2.*a));
|
||||
double x1 = 0.;
|
||||
if (-(k/a) < 0.)
|
||||
return -1;
|
||||
*x0 = h - sqrt(-(k/a));
|
||||
x1 = h + sqrt(-(k/a));
|
||||
if (x1 < *x0)
|
||||
*x0 = x1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void calc_coeffs(double sample_frequency)
|
||||
{
|
||||
int i, n;
|
||||
double f1, f2;
|
||||
double x0;
|
||||
|
||||
printf(" public final static IIRCoefficients iir_cf31_%d[] = {\n", (int)sample_frequency);
|
||||
for (i = 0; i < 31; i++) {
|
||||
|
||||
/* Find -3dB frequencies for the center freq */
|
||||
find_f1_and_f2(band_f031[i], 1.0/3.0, &f1, &f2);
|
||||
/* Find Beta */
|
||||
if ( find_root(
|
||||
BETA2(TETA(band_f031[i]), TETA(f1)),
|
||||
BETA1(TETA(band_f031[i]), TETA(f1)),
|
||||
BETA0(TETA(band_f031[i]), TETA(f1)),
|
||||
&x0) == 0)
|
||||
{
|
||||
/* Got a solution, now calculate the rest of the factors */
|
||||
/* Take the smallest root always (find_root returns the smallest one)
|
||||
*
|
||||
* NOTE: The IIR equation is
|
||||
* y[n] = 2 * (alpha*(x[n]-x[n-2]) + gamma*y[n-1] - beta*y[n-2])
|
||||
* Now the 2 factor has been distributed in the coefficients
|
||||
*/
|
||||
/* Now store the coefficients */
|
||||
printf(" /* %.1f Hz */\n", band_f031[i]);
|
||||
printf(" new IIRCoefficients(%.10e, %010e, %.10e),\n",
|
||||
(double)(2.0 * x0),
|
||||
(double)(2.0 * ALPHA(x0)),
|
||||
(double)(2.0 * GAMMA(x0, TETA(band_f031[i])))
|
||||
);
|
||||
} else {
|
||||
printf(" **** Where are the roots?\n");
|
||||
}
|
||||
}// for i
|
||||
printf(" };\n");
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2) {
|
||||
printf("Usage: iircoeff <sample frequency>\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
double f = strtod(argv[1], NULL);
|
||||
calc_coeffs(f);
|
||||
}
|
||||
76
iircoeff.pl
76
iircoeff.pl
@@ -1,76 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use Math::Trig;
|
||||
|
||||
my $fs = 48000;
|
||||
my $q = 1.414;
|
||||
|
||||
printCo(20, $fs, $q);
|
||||
printCo(25, $fs, $q);
|
||||
printCo(31.5, $fs, $q);
|
||||
printCo(40, $fs, $q);
|
||||
printCo(50, $fs, $q);
|
||||
printCo(63, $fs, $q);
|
||||
printCo(80, $fs, $q);
|
||||
printCo(100, $fs, $q);
|
||||
printCo(125, $fs, $q);
|
||||
printCo(160, $fs, $q);
|
||||
printCo(200, $fs, $q);
|
||||
printCo(250, $fs, $q);
|
||||
printCo(315, $fs, $q);
|
||||
printCo(400, $fs, $q);
|
||||
printCo(500, $fs, $q);
|
||||
printCo(630, $fs, $q);
|
||||
printCo(800, $fs, $q);
|
||||
printCo(1000, $fs, $q);
|
||||
printCo(1250, $fs, $q);
|
||||
printCo(1600, $fs, $q);
|
||||
printCo(2000, $fs, $q);
|
||||
printCo(2500, $fs, $q);
|
||||
printCo(3150, $fs, $q);
|
||||
printCo(4000, $fs, $q);
|
||||
printCo(5000, $fs, $q);
|
||||
printCo(6300, $fs, $q);
|
||||
printCo(8000, $fs, $q);
|
||||
printCo(10000, $fs, $q);
|
||||
printCo(12500, $fs, $q);
|
||||
printCo(16000, $fs, $q);
|
||||
printCo(20000, $fs, $q);
|
||||
|
||||
sub printCo($$$$) {
|
||||
my $f0 = shift;
|
||||
my $fs = shift;
|
||||
my $q = shift;
|
||||
|
||||
|
||||
@coeff = coefficient($f0, $fs, $q);
|
||||
print "/* $f0 Hz */\n";
|
||||
printf("new IIRCoefficients(%.10e, %.10e, %.10e),\n" , $coeff[1] * 2, $coeff[0] * 2, $coeff[2] * 2);
|
||||
}
|
||||
|
||||
|
||||
sub coefficient($$$$) {
|
||||
my $f0 = shift;
|
||||
my $fs = shift;
|
||||
my $q = shift;
|
||||
|
||||
my $q2 = $q * $q;
|
||||
|
||||
my $f1 = $f0 * (sqrt(1 + (1 / (4 * $q2))) - (1 / (2 * $q)));
|
||||
my $f2 = $f0 * (sqrt(1 + (1 / (4 * $q2))) + (1 / (2 * $q)));
|
||||
|
||||
my $pi = 3.141592653;
|
||||
|
||||
my $theta0 = 2 * $pi * ($f0 / $fs);
|
||||
|
||||
my $thetaOverTwoQ = $theta0 / (2 * $q);
|
||||
|
||||
my $beta = 0.5 * ((1 - tan($thetaOverTwoQ)) / (1 + tan($thetaOverTwoQ)));
|
||||
|
||||
my $gamma = (0.5 + $beta) * cos($theta0);
|
||||
|
||||
my $alpha = (0.5 - $beta) / 2;
|
||||
|
||||
return ($alpha, $beta, $gamma);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" output="demo/ExitCodeApp/build" path="demo/ExitCodeApp/src"/>
|
||||
<classpathentry kind="src" output="demo/SimpleApp/build" path="demo/SimpleApp/src"/>
|
||||
<classpathentry kind="src" output="demo/ConsoleApp/build" path="demo/ConsoleApp/src"/>
|
||||
<classpathentry kind="lib" path="lib/formsrt.jar"/>
|
||||
|
||||
1
launch4j/.gitignore
vendored
1
launch4j/.gitignore
vendored
@@ -1 +1,2 @@
|
||||
/build
|
||||
/target
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2004, 2015 Grzegorz Kowal
|
||||
Copyright (c) 2004, 2017 Grzegorz Kowal
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<property name="build" location="build" />
|
||||
<property name="jar" location="./${ant.project.name}.jar" />
|
||||
<property name="launch4j.dir" location="." />
|
||||
<property name="maven" location="maven" />
|
||||
<property file="${src}/launch4j.properties"/>
|
||||
|
||||
<path id="dist.classpath">
|
||||
<pathelement path="${build}" />
|
||||
@@ -59,4 +61,17 @@
|
||||
<ant dir="./demo/ConsoleApp" target="clean" inheritAll="false" />
|
||||
<ant dir="./demo/SimpleApp" target="clean" inheritAll="false" />
|
||||
</target>
|
||||
|
||||
<target name="switch-to-maven" description="switch project to maven">
|
||||
<copy todir="." overwrite="true">
|
||||
<fileset dir="${maven}">
|
||||
<include name="**/*" />
|
||||
</fileset>
|
||||
</copy>
|
||||
<replace file="./pom.xml">
|
||||
<replacefilter token="$${launch4j.version}" value="${version}"/>
|
||||
</replace>
|
||||
<delete dir="${lib}" />
|
||||
<mkdir dir="./target" />
|
||||
</target>
|
||||
</project>
|
||||
|
||||
Binary file not shown.
@@ -42,7 +42,7 @@
|
||||
<taskdef name="launch4j" classname="net.sf.launch4j.ant.Launch4jTask" classpath="${launch4j.dir}/launch4j.jar
|
||||
:${launch4j.dir}/lib/xstream.jar" />
|
||||
<launch4j>
|
||||
<config headerType="console" jar="ConsoleApp.jar" outfile="ConsoleApp.exe" errTitle="ConsoleApp" chdir="." icon="l4j/ConsoleApp.ico">
|
||||
<config headerType="console" jarPath="ConsoleApp.jar" dontWrapJar="true" outfile="ConsoleApp.exe" errTitle="ConsoleApp" chdir="." icon="l4j/ConsoleApp.ico">
|
||||
<singleInstance mutexName="net.sf.launch4j.example.ConsoleApp" />
|
||||
<jre minVersion="1.6.0" />
|
||||
</config>
|
||||
|
||||
2
launch4j/demo/ExitCodeApp/.gitignore
vendored
Normal file
2
launch4j/demo/ExitCodeApp/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/build
|
||||
/target
|
||||
72
launch4j/demo/ExitCodeApp/pom.xml
Normal file
72
launch4j/demo/ExitCodeApp/pom.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.sf.launch4j.example</groupId>
|
||||
<artifactId>ExitCodeApp</artifactId>
|
||||
<version>1.0</version>
|
||||
<name>ExitCodeApp</name>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src</directory>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>com.akathist.maven.plugins.launch4j</groupId>
|
||||
<artifactId>launch4j-maven-plugin</artifactId>
|
||||
<version>1.7.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>l4j</id>
|
||||
<phase>package</phase>
|
||||
<goals><goal>launch4j</goal></goals>
|
||||
<configuration>
|
||||
<headerType>console</headerType>
|
||||
<outfile>target/ExitCodeApp.exe</outfile>
|
||||
<jar>target/ExitCodeApp-1.0.jar</jar>
|
||||
<errTitle>ExitCodeApp</errTitle>
|
||||
<classPath>
|
||||
<mainClass>net.sf.launch4j.example.ExitCodeApp</mainClass>
|
||||
<addDependencies>false</addDependencies>
|
||||
<preCp>anything</preCp>
|
||||
</classPath>
|
||||
<jre>
|
||||
<minVersion>1.5.0</minVersion>
|
||||
</jre>
|
||||
<versionInfo>
|
||||
<fileVersion>1.0.0.0</fileVersion>
|
||||
<txtFileVersion>1.0</txtFileVersion>
|
||||
<fileDescription>Simple app for testing exit code.</fileDescription>
|
||||
<copyright>Copyright (C) 2015 GK</copyright>
|
||||
<productVersion>3.9.0.0</productVersion>
|
||||
<txtProductVersion>3.9</txtProductVersion>
|
||||
<productName>ExitCodeApp</productName>
|
||||
<internalName>ExitCodeApp</internalName>
|
||||
<originalFilename>ExitCodeApp.exe</originalFilename>
|
||||
</versionInfo>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2004, 2015 Grzegorz Kowal
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.sf.launch4j.example;
|
||||
|
||||
public class ExitCodeApp {
|
||||
public static void main(String[] args) {
|
||||
int exitCode = 0;
|
||||
|
||||
if (args.length > 0) {
|
||||
exitCode = Integer.parseInt(args[0]);
|
||||
}
|
||||
|
||||
System.out.println("Exit code: " + String.valueOf(exitCode));
|
||||
System.exit(exitCode);
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -1,6 +1,7 @@
|
||||
<launch4jConfig>
|
||||
<headerType>gui</headerType>
|
||||
<jar>../SimpleApp.jar</jar>
|
||||
<jar>SimpleApp.jar</jar>
|
||||
<dontWrapJar>true</dontWrapJar>
|
||||
<outfile>../SimpleApp.exe</outfile>
|
||||
<errTitle>SimpleApp</errTitle>
|
||||
<chdir>.</chdir>
|
||||
|
||||
@@ -34,31 +34,63 @@
|
||||
package net.sf.launch4j.example;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.AbstractAction;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
public class SimpleApp extends JFrame {
|
||||
public SimpleApp(String[] args) {
|
||||
super("Java Application");
|
||||
public SimpleApp(String[] args) {
|
||||
super("Java Application");
|
||||
|
||||
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
||||
if (args.length == 1 && "throw".equals(args[0])) {
|
||||
throw new IllegalStateException("Exception thrown from SimpleApp.");
|
||||
}
|
||||
|
||||
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
||||
setBounds (screenSize.width / 4, screenSize.height / 4, screenSize.width / 2, screenSize.height / 2);
|
||||
|
||||
JMenu menu = new JMenu("File");
|
||||
menu.add(new JMenuItem("Open"));
|
||||
menu.add(new JMenuItem("Save"));
|
||||
|
||||
menu.addSeparator();
|
||||
addWindowListener(new WindowAdapter() {
|
||||
public void windowClosing(WindowEvent e) {
|
||||
System.exit(0);
|
||||
}});
|
||||
|
||||
initializeMenu();
|
||||
initializeTextArea(args);
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
public static void setLAF() {
|
||||
JFrame.setDefaultLookAndFeelDecorated(true);
|
||||
Toolkit.getDefaultToolkit().setDynamicLayout(true);
|
||||
System.setProperty("sun.awt.noerasebackground","true");
|
||||
try {
|
||||
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
|
||||
} catch (Exception e) {
|
||||
System.err.println("Failed to set LookAndFeel");
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
setLAF();
|
||||
new SimpleApp(args);
|
||||
}
|
||||
|
||||
private final void initializeMenu() {
|
||||
JMenu menu = new JMenu("Exit with code");
|
||||
|
||||
menu.add(new JMenuItem(new AbstractAction("Exit with code 0") {
|
||||
@Override
|
||||
@@ -78,45 +110,86 @@ public class SimpleApp extends JFrame {
|
||||
mb.setOpaque(true);
|
||||
mb.add(menu);
|
||||
setJMenuBar(mb);
|
||||
}
|
||||
|
||||
private final void initializeTextArea(String[] args) {
|
||||
JTextArea textArea = new JTextArea();
|
||||
textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
|
||||
textArea.setEditable(false);
|
||||
|
||||
JScrollPane scrollPane = new JScrollPane();
|
||||
scrollPane.setViewportView(textArea);
|
||||
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
|
||||
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
getContentPane().add(scrollPane);
|
||||
|
||||
this.addWindowListener(new WindowAdapter() {
|
||||
public void windowClosing(WindowEvent e) {
|
||||
System.exit(0);
|
||||
}});
|
||||
setVisible(true);
|
||||
textArea.setText(getMainProperties(args));
|
||||
textArea.append(getAllProperties());
|
||||
textArea.append(getEnvironmentVariables());
|
||||
}
|
||||
|
||||
private final String getMainProperties(String[] args) {
|
||||
StringBuffer sb = new StringBuffer("Java version: ");
|
||||
sb.append(System.getProperty("java.version"));
|
||||
sb.append("\nJava home: ");
|
||||
sb.append(System.getProperty("java.home"));
|
||||
sb.append("\nCurrent dir: ");
|
||||
sb.append(System.getProperty("user.dir"));
|
||||
if (args.length > 0) {
|
||||
sb.append("\nArgs: ");
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
sb.append(args[i]);
|
||||
sb.append("\nCommand line args: {");
|
||||
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
if (i > 0)
|
||||
{
|
||||
sb.append(' ');
|
||||
}
|
||||
sb.append(args[i]);
|
||||
}
|
||||
JOptionPane.showMessageDialog(this,
|
||||
sb.toString(),
|
||||
"Info",
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
|
||||
public static void setLAF() {
|
||||
JFrame.setDefaultLookAndFeelDecorated(true);
|
||||
Toolkit.getDefaultToolkit().setDynamicLayout(true);
|
||||
System.setProperty("sun.awt.noerasebackground","true");
|
||||
try {
|
||||
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
|
||||
} catch (Exception e) {
|
||||
System.err.println("Failed to set LookAndFeel");
|
||||
}
|
||||
sb.append("}\n");
|
||||
|
||||
final int mb = 1024 * 1024;
|
||||
sb.append("Free memory (MB): ");
|
||||
sb.append(Runtime.getRuntime().freeMemory() / mb);
|
||||
sb.append("\nTotal memory (MB): ");
|
||||
sb.append(Runtime.getRuntime().totalMemory() / mb);
|
||||
sb.append("\nMax memory (MB): ");
|
||||
sb.append(Runtime.getRuntime().maxMemory() / mb);
|
||||
sb.append("\n");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private final String getAllProperties() {
|
||||
StringBuffer sb = new StringBuffer("\n========== All properties ==========\n");
|
||||
|
||||
public static void main(String[] args) {
|
||||
setLAF();
|
||||
new SimpleApp(args);
|
||||
List<String> keys = new ArrayList<String>();
|
||||
keys.addAll(System.getProperties().stringPropertyNames());
|
||||
Collections.sort(keys);
|
||||
|
||||
for (String key : keys) {
|
||||
sb.append(key);
|
||||
sb.append(": ");
|
||||
sb.append(System.getProperty(key));
|
||||
sb.append("\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private final String getEnvironmentVariables() {
|
||||
StringBuffer sb = new StringBuffer("\n========== Environment variables ==========\n");
|
||||
|
||||
List<String> keys = new ArrayList<String>();
|
||||
keys.addAll(System.getenv().keySet());
|
||||
Collections.sort(keys);
|
||||
|
||||
for (String key : keys) {
|
||||
sb.append(key);
|
||||
sb.append(": ");
|
||||
sb.append(System.getenv(key));
|
||||
sb.append("\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
26
launch4j/head_jni_BETA/LICENSE.txt
Normal file
26
launch4j/head_jni_BETA/LICENSE.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2004, 2015 Grzegorz Kowal
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
Except as contained in this notice, the name(s) of the above copyright holders
|
||||
shall not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
BIN
launch4j/head_jni_BETA/head.o
Normal file
BIN
launch4j/head_jni_BETA/head.o
Normal file
Binary file not shown.
BIN
launch4j/head_jni_BETA/jniconsolehead.o
Normal file
BIN
launch4j/head_jni_BETA/jniconsolehead.o
Normal file
Binary file not shown.
BIN
launch4j/head_jni_BETA/jniguihead.o
Normal file
BIN
launch4j/head_jni_BETA/jniguihead.o
Normal file
Binary file not shown.
BIN
launch4j/head_jni_BETA/jnihead.o
Normal file
BIN
launch4j/head_jni_BETA/jnihead.o
Normal file
Binary file not shown.
@@ -91,6 +91,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
splashTimeout = DEFAULT_SPLASH_TIMEOUT;
|
||||
}
|
||||
}
|
||||
splashTimeout = splashTimeout * 1000; // to millis
|
||||
splashTimeoutErr = loadBool(SPLASH_TIMEOUT_ERR)
|
||||
&& strstr(lpCmdLine, "--l4j-no-splash-err") == NULL;
|
||||
waitForWindow = loadBool(SPLASH_WAITS_FOR_WINDOW);
|
||||
@@ -120,7 +121,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
{
|
||||
if (splash || stayAlive)
|
||||
{
|
||||
if (!SetTimer (hWnd, ID_TIMER, 1000 /* 1s */, TimerProc))
|
||||
if (!SetTimer (hWnd, ID_TIMER, TIMER_PROC_INTERVAL, TimerProc))
|
||||
{
|
||||
signalError();
|
||||
return 1;
|
||||
@@ -222,7 +223,7 @@ VOID CALLBACK TimerProc(
|
||||
}
|
||||
else
|
||||
{
|
||||
splashTimeout--;
|
||||
splashTimeout -= TIMER_PROC_INTERVAL;
|
||||
if (waitForWindow)
|
||||
{
|
||||
EnumWindows(enumwndfn, 0);
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#define ID_TIMER 1
|
||||
#define DEFAULT_SPLASH_TIMEOUT 60 /* 60 seconds */
|
||||
#define MAX_SPLASH_TIMEOUT 60 * 15 /* 15 minutes */
|
||||
#define TIMER_PROC_INTERVAL 100 /* interval in ms between calls to EnumWindows */
|
||||
|
||||
HWND getInstanceWindow();
|
||||
|
||||
|
||||
@@ -55,6 +55,8 @@ struct
|
||||
int foundJava;
|
||||
BOOL bundledJreAsFallback;
|
||||
BOOL corruptedJreFound;
|
||||
char originalJavaMinVer[STR];
|
||||
char originalJavaMaxVer[STR];
|
||||
char javaMinVer[STR];
|
||||
char javaMaxVer[STR];
|
||||
char foundJavaVer[STR];
|
||||
@@ -64,6 +66,7 @@ struct
|
||||
|
||||
struct
|
||||
{
|
||||
char mainClass[_MAX_PATH];
|
||||
char cmd[_MAX_PATH];
|
||||
char args[MAX_ARGS];
|
||||
} launcher;
|
||||
@@ -150,7 +153,14 @@ void msgBox(const char* text)
|
||||
{
|
||||
if (console)
|
||||
{
|
||||
printf("%s: %s\n", error.title, text);
|
||||
if (*error.title)
|
||||
{
|
||||
printf("%s: %s\n", error.title, text);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s\n", text);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -197,6 +207,7 @@ BOOL loadString(const int resID, char* buffer)
|
||||
HRSRC hResource;
|
||||
HGLOBAL hResourceLoaded;
|
||||
LPBYTE lpBuffer;
|
||||
debugAll("Resource %d:\t", resID);
|
||||
|
||||
hResource = FindResourceEx(hModule, RT_RCDATA, MAKEINTRESOURCE(resID),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT));
|
||||
@@ -214,10 +225,7 @@ BOOL loadString(const int resID, char* buffer)
|
||||
buffer[x] = (char) lpBuffer[x];
|
||||
} while (buffer[x++] != 0);
|
||||
|
||||
if (debugAll)
|
||||
{
|
||||
debug("Resource %d:\t%s\n", resID, buffer);
|
||||
}
|
||||
debugAll("%s\n", buffer);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -227,6 +235,8 @@ BOOL loadString(const int resID, char* buffer)
|
||||
SetLastError(0);
|
||||
buffer[0] = 0;
|
||||
}
|
||||
|
||||
debugAll("<NULL>\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -302,6 +312,120 @@ BOOL regQueryValue(const char* regPath, unsigned char* buffer,
|
||||
return result;
|
||||
}
|
||||
|
||||
int findNextVersionPart(const char* startAt)
|
||||
{
|
||||
if (startAt == NULL || strlen(startAt) == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
char* firstSeparatorA = strchr(startAt, '.');
|
||||
char* firstSeparatorB = strchr(startAt, '_');
|
||||
char* firstSeparator;
|
||||
if (firstSeparatorA == NULL)
|
||||
{
|
||||
firstSeparator = firstSeparatorB;
|
||||
}
|
||||
else if (firstSeparatorB == NULL)
|
||||
{
|
||||
firstSeparator = firstSeparatorA;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstSeparator = min(firstSeparatorA, firstSeparatorB);
|
||||
}
|
||||
|
||||
if (firstSeparator == NULL)
|
||||
{
|
||||
return strlen(startAt);
|
||||
}
|
||||
|
||||
return firstSeparator - startAt;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will take java version from `originalVersion` string and convert/format it
|
||||
* into `version` string that can be used for string comparison with other versions.
|
||||
*
|
||||
* Due to different version schemas <=8 vs. >=9 it will "normalize" versions to 1 format
|
||||
* so we can directly compare old and new versions.
|
||||
*/
|
||||
void formatJavaVersion(char* version, const char* originalVersion)
|
||||
{
|
||||
strcpy(version, "");
|
||||
if (originalVersion == NULL || strlen(originalVersion) == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int partsAdded = 0;
|
||||
int i;
|
||||
char* pos = (char*) originalVersion;
|
||||
int curPartLen;
|
||||
|
||||
while ((curPartLen = findNextVersionPart(pos)) > 0)
|
||||
{
|
||||
char number[curPartLen + 1];
|
||||
memset(number, 0, curPartLen + 1);
|
||||
strncpy(number, pos, curPartLen);
|
||||
|
||||
if (partsAdded == 0 && (curPartLen != 1 || number[0] != '1'))
|
||||
{
|
||||
// NOTE: When it's java 9+ we'll add "1" as the first part of the version
|
||||
strcpy(version, "1");
|
||||
partsAdded++;
|
||||
}
|
||||
|
||||
if (partsAdded < 3)
|
||||
{
|
||||
if (partsAdded > 0)
|
||||
{
|
||||
strcat(version, ".");
|
||||
}
|
||||
for (i = 0;
|
||||
(partsAdded > 0)
|
||||
&& (i < JRE_VER_MAX_DIGITS_PER_PART - strlen(number));
|
||||
i++)
|
||||
{
|
||||
strcat(version, "0");
|
||||
}
|
||||
strcat(version, number);
|
||||
}
|
||||
else if (partsAdded == 3)
|
||||
{
|
||||
// add as an update
|
||||
strcat(version, "_");
|
||||
for (i = 0; i < JRE_VER_MAX_DIGITS_PER_PART - strlen(number); i++)
|
||||
{
|
||||
strcat(version, "0");
|
||||
}
|
||||
strcat(version, number);
|
||||
}
|
||||
else if (partsAdded >= 4)
|
||||
{
|
||||
debug("Warning:\tformatJavaVersion() too many parts added.\n");
|
||||
break;
|
||||
}
|
||||
partsAdded++;
|
||||
|
||||
pos += curPartLen + 1;
|
||||
if (pos >= originalVersion + strlen(originalVersion))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = partsAdded; i < 3; i++)
|
||||
{
|
||||
strcat(version, ".");
|
||||
int j;
|
||||
for (j = 0; j < JRE_VER_MAX_DIGITS_PER_PART; j++)
|
||||
{
|
||||
strcat(version, "0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void regSearch(const char* keyName, const int searchType)
|
||||
{
|
||||
HKEY hKey;
|
||||
@@ -322,12 +446,13 @@ void regSearch(const char* keyName, const int searchType)
|
||||
unsigned long versionSize = _MAX_PATH;
|
||||
FILETIME time;
|
||||
char fullKeyName[_MAX_PATH] = {0};
|
||||
char originalVersion[_MAX_PATH] = {0};
|
||||
char version[_MAX_PATH] = {0};
|
||||
|
||||
while (RegEnumKeyEx(
|
||||
hKey, // handle to key to enumerate
|
||||
x++, // index of subkey to enumerate
|
||||
version, // address of buffer for subkey name
|
||||
originalVersion,// address of buffer for subkey name
|
||||
&versionSize, // address for size of subkey buffer
|
||||
NULL, // reserved
|
||||
NULL, // address of buffer for class string
|
||||
@@ -335,8 +460,9 @@ void regSearch(const char* keyName, const int searchType)
|
||||
&time) == ERROR_SUCCESS)
|
||||
{
|
||||
strcpy(fullKeyName, keyName);
|
||||
appendPath(fullKeyName, version);
|
||||
appendPath(fullKeyName, originalVersion);
|
||||
debug("Check:\t\t%s\n", fullKeyName);
|
||||
formatJavaVersion(version, originalVersion);
|
||||
|
||||
if (strcmp(version, search.javaMinVer) >= 0
|
||||
&& (!*search.javaMaxVer || strcmp(version, search.javaMaxVer) <= 0)
|
||||
@@ -384,10 +510,6 @@ BOOL isJavaHomeValid(const char* keyName, const int searchType)
|
||||
path[i] = buffer[i];
|
||||
} while (path[i++] != 0);
|
||||
|
||||
if (searchType & FOUND_SDK)
|
||||
{
|
||||
appendPath(path, "jre");
|
||||
}
|
||||
valid = isLauncherPathValid(path);
|
||||
}
|
||||
RegCloseKey(hKey);
|
||||
@@ -476,6 +598,10 @@ void regSearchWow(const char* keyName, const int searchType)
|
||||
case USE_32_BIT_RUNTIME:
|
||||
regSearch(keyName, searchType);
|
||||
break;
|
||||
|
||||
default:
|
||||
debug("Runtime bits:\tFailed to load.\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,10 +629,25 @@ void regSearchJreSdk(const char* jreKeyName, const char* sdkKeyName,
|
||||
|
||||
BOOL findJavaHome(char* path, const int jdkPreference)
|
||||
{
|
||||
debugAll("findJavaHome()\n");
|
||||
regSearchJreSdk("SOFTWARE\\JavaSoft\\Java Runtime Environment",
|
||||
"SOFTWARE\\JavaSoft\\Java Development Kit",
|
||||
jdkPreference);
|
||||
|
||||
// Java 9 support
|
||||
regSearchJreSdk("SOFTWARE\\JavaSoft\\JRE",
|
||||
"SOFTWARE\\JavaSoft\\JDK",
|
||||
jdkPreference);
|
||||
|
||||
// IBM Java 1.8
|
||||
if (search.foundJava == NO_JAVA_FOUND)
|
||||
{
|
||||
regSearchJreSdk("SOFTWARE\\IBM\\Java Runtime Environment",
|
||||
"SOFTWARE\\IBM\\Java Development Kit",
|
||||
jdkPreference);
|
||||
}
|
||||
|
||||
// IBM Java 1.7 and earlier
|
||||
if (search.foundJava == NO_JAVA_FOUND)
|
||||
{
|
||||
regSearchJreSdk("SOFTWARE\\IBM\\Java2 Runtime Environment",
|
||||
@@ -613,6 +754,10 @@ BOOL expandVars(char *dst, const char *src, const char *exePath, const int pathL
|
||||
else if (strstr(varName, HKEY_STR) == varName)
|
||||
{
|
||||
regQueryValue(varName, dst + strlen(dst), BIG_STR);
|
||||
}
|
||||
else if (strcmp(varName, "") == 0)
|
||||
{
|
||||
strcat(dst, "%");
|
||||
}
|
||||
else if (GetEnvironmentVariable(varName, varValue, MAX_VAR_SIZE) > 0)
|
||||
{
|
||||
@@ -733,6 +878,7 @@ BOOL createMutex()
|
||||
|
||||
if (*mutexName)
|
||||
{
|
||||
debug("Create mutex:\t%s\n", mutexName);
|
||||
SECURITY_ATTRIBUTES security;
|
||||
security.nLength = sizeof(SECURITY_ATTRIBUTES);
|
||||
security.bInheritHandle = TRUE;
|
||||
@@ -767,8 +913,16 @@ void setWorkingDirectory(const char *exePath, const int pathLen)
|
||||
|
||||
BOOL bundledJreSearch(const char *exePath, const int pathLen)
|
||||
{
|
||||
debugAll("bundledJreSearch()\n");
|
||||
char tmpPath[_MAX_PATH] = {0};
|
||||
BOOL is64BitJre = loadBool(BUNDLED_JRE_64_BIT);
|
||||
|
||||
if (!wow64 && is64BitJre)
|
||||
{
|
||||
debug("Bundled JRE:\tCannot use 64-bit runtime on 32-bit OS.\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (loadString(JRE_PATH, tmpPath))
|
||||
{
|
||||
char jrePath[MAX_ARGS] = {0};
|
||||
@@ -789,9 +943,7 @@ BOOL bundledJreSearch(const char *exePath, const int pathLen)
|
||||
|
||||
if (isLauncherPathValid(launcher.cmd))
|
||||
{
|
||||
search.foundJava = (wow64 && loadBool(BUNDLED_JRE_64_BIT))
|
||||
? FOUND_BUNDLED | KEY_WOW64_64KEY
|
||||
: FOUND_BUNDLED;
|
||||
search.foundJava = is64BitJre ? FOUND_BUNDLED | KEY_WOW64_64KEY : FOUND_BUNDLED;
|
||||
strcpy(search.foundJavaHome, launcher.cmd);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -802,6 +954,7 @@ BOOL bundledJreSearch(const char *exePath, const int pathLen)
|
||||
|
||||
BOOL installedJreSearch()
|
||||
{
|
||||
debugAll("installedJreSearch()\n");
|
||||
return *search.javaMinVer && findJavaHome(launcher.cmd, loadInt(JDK_PREFERENCE));
|
||||
}
|
||||
|
||||
@@ -811,12 +964,12 @@ void createJreSearchError()
|
||||
{
|
||||
loadString(JRE_VERSION_ERR, error.msg);
|
||||
strcat(error.msg, " ");
|
||||
strcat(error.msg, search.javaMinVer);
|
||||
strcat(error.msg, search.originalJavaMinVer);
|
||||
|
||||
if (*search.javaMaxVer)
|
||||
{
|
||||
strcat(error.msg, " - ");
|
||||
strcat(error.msg, search.javaMaxVer);
|
||||
strcat(error.msg, search.originalJavaMaxVer);
|
||||
}
|
||||
|
||||
if (search.runtimeBits == USE_64_BIT_RUNTIME
|
||||
@@ -848,11 +1001,16 @@ void createJreSearchError()
|
||||
|
||||
BOOL jreSearch(const char *exePath, const int pathLen)
|
||||
{
|
||||
debugAll("jreSearch()\n");
|
||||
BOOL result = TRUE;
|
||||
|
||||
search.bundledJreAsFallback = loadBool(BUNDLED_JRE_AS_FALLBACK);
|
||||
loadString(JAVA_MIN_VER, search.javaMinVer);
|
||||
loadString(JAVA_MAX_VER, search.javaMaxVer);
|
||||
loadString(JAVA_MIN_VER, search.originalJavaMinVer);
|
||||
formatJavaVersion(search.javaMinVer, search.originalJavaMinVer);
|
||||
debug("Java min ver:\t%s\n", search.javaMinVer);
|
||||
loadString(JAVA_MAX_VER, search.originalJavaMaxVer);
|
||||
formatJavaVersion(search.javaMaxVer, search.originalJavaMaxVer);
|
||||
debug("Java max ver:\t%s\n", search.javaMaxVer);
|
||||
|
||||
if (search.bundledJreAsFallback)
|
||||
{
|
||||
@@ -934,14 +1092,15 @@ void setMainClassAndClassPath(const char *exePath, const int pathLen)
|
||||
{
|
||||
char classPath[MAX_ARGS] = {0};
|
||||
char expandedClassPath[MAX_ARGS] = {0};
|
||||
char mainClass[STR] = {0};
|
||||
char jar[_MAX_PATH] = {0};
|
||||
char fullFileName[_MAX_PATH] = {0};
|
||||
const BOOL wrapper = loadBool(WRAPPER);
|
||||
loadString(JAR, jar);
|
||||
|
||||
if (loadString(MAIN_CLASS, mainClass))
|
||||
if (loadString(MAIN_CLASS, launcher.mainClass))
|
||||
{
|
||||
debug("Main class:\t%s\n", launcher.mainClass);
|
||||
|
||||
if (!loadString(CLASSPATH, classPath))
|
||||
{
|
||||
debug("Info:\t\tClasspath not defined.\n");
|
||||
@@ -997,7 +1156,7 @@ void setMainClassAndClassPath(const char *exePath, const int pathLen)
|
||||
|
||||
*(launcher.args + strlen(launcher.args) - 1) = 0;
|
||||
strcat(launcher.args, "\" ");
|
||||
strcat(launcher.args, mainClass);
|
||||
strcat(launcher.args, launcher.mainClass);
|
||||
}
|
||||
else if (wrapper)
|
||||
{
|
||||
@@ -1158,3 +1317,19 @@ BOOL execute(const BOOL wait, DWORD *dwExitCode)
|
||||
*dwExitCode = -1;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const char* getJavaHome()
|
||||
{
|
||||
return search.foundJavaHome;
|
||||
}
|
||||
|
||||
const char* getMainClass()
|
||||
{
|
||||
return launcher.mainClass;
|
||||
}
|
||||
|
||||
const char* getLauncherArgs()
|
||||
{
|
||||
return launcher.args;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,10 +28,13 @@
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0501
|
||||
#endif // _WIN32_WINNT
|
||||
|
||||
#ifndef _LAUNCH4J_HEAD__INCLUDED_
|
||||
#define _LAUNCH4J_HEAD__INCLUDED_
|
||||
|
||||
#define _WIN32_WINNT 0x0501
|
||||
#define WIN32_LEAN_AND_MEAN // VC - Exclude rarely-used stuff from Windows headers
|
||||
|
||||
// Windows Header Files:
|
||||
@@ -51,7 +54,9 @@
|
||||
#include <process.h>
|
||||
|
||||
#define LAUNCH4j "Launch4j"
|
||||
#define VERSION "3.7"
|
||||
#define VERSION "3.12"
|
||||
|
||||
#define JRE_VER_MAX_DIGITS_PER_PART 3
|
||||
|
||||
#define NO_JAVA_FOUND 0
|
||||
#define FOUND_JRE 1
|
||||
@@ -88,6 +93,7 @@
|
||||
|
||||
#define ERROR_FORMAT "Error:\t\t%s\n"
|
||||
#define debug(args...) if (hLog != NULL) fprintf(hLog, ## args);
|
||||
#define debugAll(args...) if (debugAll && hLog != NULL) fprintf(hLog, ## args);
|
||||
|
||||
typedef void (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
|
||||
|
||||
@@ -102,6 +108,7 @@ BOOL loadBool(const int resID);
|
||||
int loadInt(const int resID);
|
||||
BOOL regQueryValue(const char* regPath, unsigned char* buffer,
|
||||
unsigned long bufferLength);
|
||||
void formatJavaVersion(char* version, const char* originalVersion);
|
||||
void regSearch(const char* keyName, const int searchType);
|
||||
BOOL isJavaHomeValid(const char* keyName, const int searchType);
|
||||
BOOL isLauncherPathValid(const char* path);
|
||||
@@ -132,5 +139,8 @@ void setCommandLineArgs(const char *lpCmdLine);
|
||||
int prepare(const char *lpCmdLine);
|
||||
void closeProcessHandles();
|
||||
BOOL execute(const BOOL wait, DWORD *dwExitCode);
|
||||
const char* getJavaHome();
|
||||
const char* getMainClass();
|
||||
const char* getLauncherArgs();
|
||||
|
||||
#endif // _LAUNCH4J_HEAD__INCLUDED_
|
||||
|
||||
2
launch4j/head_src/jniconsolehead_BETA/.gitignore
vendored
Normal file
2
launch4j/head_src/jniconsolehead_BETA/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/jniconsolehead.exe
|
||||
/jniconsolehead.layout
|
||||
34
launch4j/head_src/jniconsolehead_BETA/Makefile.win
Normal file
34
launch4j/head_src/jniconsolehead_BETA/Makefile.win
Normal file
@@ -0,0 +1,34 @@
|
||||
# Project: jniconsolehead
|
||||
# Makefile created by Dev-C++ 5.7.1
|
||||
|
||||
CPP = g++.exe
|
||||
CC = gcc.exe
|
||||
WINDRES = windres.exe
|
||||
OBJ = ../../head_jni_BETA/jniconsolehead.o ../../head_jni_BETA/head.o ../../head_jni_BETA/jnihead.o
|
||||
LINKOBJ = ../../head_jni_BETA/jniconsolehead.o ../../head_jni_BETA/head.o ../../head_jni_BETA/jnihead.o
|
||||
LIBS = -L"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib" -L"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/mingw32/lib" -static-libstdc++ -static-libgcc -n -s
|
||||
INCS = -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/mingw32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib/gcc/mingw32/4.8.1/include" -I"C:/Program Files (x86)/Java/jdk 1.4/include" -I"C:/Program Files (x86)/Java/jdk 1.4/include/win32"
|
||||
CXXINCS = -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/mingw32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib/gcc/mingw32/4.8.1/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib/gcc/mingw32/4.8.1/include/c++" -I"C:/Program Files (x86)/Java/jdk 1.4/include" -I"C:/Program Files (x86)/Java/jdk 1.4/include/win32"
|
||||
BIN = jniconsolehead.exe
|
||||
CXXFLAGS = $(CXXINCS) -Os
|
||||
CFLAGS = $(INCS) -Os
|
||||
RM = rm.exe -f
|
||||
|
||||
.PHONY: all all-before all-after clean clean-custom
|
||||
|
||||
all: all-before $(BIN) all-after
|
||||
|
||||
clean: clean-custom
|
||||
${RM} $(OBJ) $(BIN)
|
||||
|
||||
$(BIN): $(OBJ)
|
||||
$(CC) $(LINKOBJ) -o $(BIN) $(LIBS)
|
||||
|
||||
../../head_jni_BETA/jniconsolehead.o: jniconsolehead.c
|
||||
$(CC) -c jniconsolehead.c -o ../../head_jni_BETA/jniconsolehead.o $(CFLAGS)
|
||||
|
||||
../../head_jni_BETA/head.o: ../head.c
|
||||
$(CC) -c ../head.c -o ../../head_jni_BETA/head.o $(CFLAGS)
|
||||
|
||||
../../head_jni_BETA/jnihead.o: ../jnihead.c
|
||||
$(CC) -c ../jnihead.c -o ../../head_jni_BETA/jnihead.o $(CFLAGS)
|
||||
99
launch4j/head_src/jniconsolehead_BETA/jniconsolehead.c
Normal file
99
launch4j/head_src/jniconsolehead_BETA/jniconsolehead.c
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2004, 2007 Grzegorz Kowal
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
Except as contained in this notice, the name(s) of the above copyright holders
|
||||
shall not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "../resource.h"
|
||||
#include "../head.h"
|
||||
#include "../jnihead.h"
|
||||
|
||||
extern FILE* hLog;
|
||||
|
||||
BOOL restartOnCrash = FALSE;
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
setConsoleFlag();
|
||||
LPTSTR cmdLine = GetCommandLine();
|
||||
|
||||
if (*cmdLine == '"')
|
||||
{
|
||||
if (*(cmdLine = strchr(cmdLine + 1, '"') + 1))
|
||||
{
|
||||
cmdLine++;
|
||||
}
|
||||
}
|
||||
else if ((cmdLine = strchr(cmdLine, ' ')) != NULL)
|
||||
{
|
||||
cmdLine++;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdLine = "";
|
||||
}
|
||||
|
||||
int result = prepare(cmdLine);
|
||||
|
||||
if (result == ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
char errMsg[BIG_STR] = {0};
|
||||
loadString(INSTANCE_ALREADY_EXISTS_MSG, errMsg);
|
||||
msgBox(errMsg);
|
||||
closeLogFile();
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (result != TRUE)
|
||||
{
|
||||
signalError();
|
||||
return 1;
|
||||
}
|
||||
|
||||
restartOnCrash = loadBool(RESTART_ON_CRASH);
|
||||
DWORD dwExitCode;
|
||||
|
||||
do
|
||||
{
|
||||
dwExitCode = 0;
|
||||
saveJvmOptions(getJavaHome(), getMainClass(), getLauncherArgs());
|
||||
|
||||
if (!executeVm(&dwExitCode))
|
||||
{
|
||||
signalError();
|
||||
break;
|
||||
}
|
||||
|
||||
if (restartOnCrash && dwExitCode != 0)
|
||||
{
|
||||
debug("Exit code:\t%d, restarting the application!\n", dwExitCode);
|
||||
}
|
||||
} while (restartOnCrash && dwExitCode != 0);
|
||||
|
||||
debug("Exit code:\t%d\n", dwExitCode);
|
||||
closeLogFile();
|
||||
return (int) dwExitCode;
|
||||
}
|
||||
112
launch4j/head_src/jniconsolehead_BETA/jniconsolehead.dev
Normal file
112
launch4j/head_src/jniconsolehead_BETA/jniconsolehead.dev
Normal file
@@ -0,0 +1,112 @@
|
||||
[Project]
|
||||
FileName=jniconsolehead.dev
|
||||
Name=jniconsolehead
|
||||
UnitCount=6
|
||||
Type=1
|
||||
Ver=2
|
||||
ObjFiles=
|
||||
Includes="C:\Program Files (x86)\Java\jdk 1.4\include";"C:\Program Files (x86)\Java\jdk 1.4\include\win32"
|
||||
Libs=
|
||||
PrivateResource=
|
||||
ResourceIncludes=
|
||||
MakeIncludes=
|
||||
Compiler=
|
||||
CppCompiler=
|
||||
Linker=-n_@@_
|
||||
IsCpp=0
|
||||
Icon=
|
||||
ExeOutput=
|
||||
ObjectOutput=..\..\head_jni_BETA
|
||||
OverrideOutput=0
|
||||
OverrideOutputName=jniconsolehead.exe
|
||||
HostApplication=
|
||||
Folders=
|
||||
CommandLine=
|
||||
UseCustomMakefile=0
|
||||
CustomMakefile=Makefile.win
|
||||
IncludeVersionInfo=0
|
||||
SupportXPThemes=0
|
||||
CompilerSet=0
|
||||
CompilerSettings=000000d000000000000001000
|
||||
LogOutput=
|
||||
LogOutputEnabled=0
|
||||
|
||||
[Unit1]
|
||||
FileName=jniconsolehead.c
|
||||
CompileCpp=0
|
||||
Folder=jniconsolehead
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[VersionInfo]
|
||||
Major=0
|
||||
Minor=1
|
||||
Release=1
|
||||
Build=1
|
||||
LanguageID=1033
|
||||
CharsetID=1252
|
||||
CompanyName=
|
||||
FileVersion=0.1.1.1
|
||||
FileDescription=Developed using the Dev-C++ IDE
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=
|
||||
AutoIncBuildNr=0
|
||||
SyncProduct=0
|
||||
|
||||
[Unit2]
|
||||
FileName=..\resource.h
|
||||
CompileCpp=0
|
||||
Folder=jniconsolehead
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[Unit3]
|
||||
FileName=..\head.c
|
||||
CompileCpp=0
|
||||
Folder=jniconsolehead
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[Unit4]
|
||||
FileName=..\head.h
|
||||
CompileCpp=0
|
||||
Folder=jniconsolehead
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[Unit5]
|
||||
FileName=..\jnihead.h
|
||||
Folder=jniconsolehead
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
CompileCpp=0
|
||||
|
||||
[Unit6]
|
||||
FileName=..\jnihead.c
|
||||
CompileCpp=0
|
||||
Folder=jniconsolehead
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
2
launch4j/head_src/jniguihead_BETA/.gitignore
vendored
Normal file
2
launch4j/head_src/jniguihead_BETA/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/jniguihead.exe
|
||||
/jniguihead.layout
|
||||
34
launch4j/head_src/jniguihead_BETA/Makefile.win
Normal file
34
launch4j/head_src/jniguihead_BETA/Makefile.win
Normal file
@@ -0,0 +1,34 @@
|
||||
# Project: jniguihead
|
||||
# Makefile created by Dev-C++ 5.7.1
|
||||
|
||||
CPP = g++.exe
|
||||
CC = gcc.exe
|
||||
WINDRES = windres.exe
|
||||
OBJ = ../../head_jni_BETA/jniguihead.o ../../head_jni_BETA/head.o ../../head_jni_BETA/jnihead.o
|
||||
LINKOBJ = ../../head_jni_BETA/jniguihead.o ../../head_jni_BETA/head.o ../../head_jni_BETA/jnihead.o
|
||||
LIBS = -L"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib" -L"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/mingw32/lib" -static-libstdc++ -static-libgcc -mwindows -n -s
|
||||
INCS = -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/mingw32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib/gcc/mingw32/4.8.1/include" -I"C:/Program Files (x86)/Java/jdk 1.4/include" -I"C:/Program Files (x86)/Java/jdk 1.4/include/win32"
|
||||
CXXINCS = -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/mingw32/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib/gcc/mingw32/4.8.1/include" -I"C:/Users/GMan/Dev-Cpp 5.7.1/MinGW32/lib/gcc/mingw32/4.8.1/include/c++" -I"C:/Program Files (x86)/Java/jdk 1.4/include" -I"C:/Program Files (x86)/Java/jdk 1.4/include/win32"
|
||||
BIN = jniguihead.exe
|
||||
CXXFLAGS = $(CXXINCS) -Os
|
||||
CFLAGS = $(INCS) -Os
|
||||
RM = rm.exe -f
|
||||
|
||||
.PHONY: all all-before all-after clean clean-custom
|
||||
|
||||
all: all-before $(BIN) all-after
|
||||
|
||||
clean: clean-custom
|
||||
${RM} $(OBJ) $(BIN)
|
||||
|
||||
$(BIN): $(OBJ)
|
||||
$(CC) $(LINKOBJ) -o $(BIN) $(LIBS)
|
||||
|
||||
../../head_jni_BETA/jniguihead.o: jniguihead.c
|
||||
$(CC) -c jniguihead.c -o ../../head_jni_BETA/jniguihead.o $(CFLAGS)
|
||||
|
||||
../../head_jni_BETA/head.o: ../head.c
|
||||
$(CC) -c ../head.c -o ../../head_jni_BETA/head.o $(CFLAGS)
|
||||
|
||||
../../head_jni_BETA/jnihead.o: ../jnihead.c
|
||||
$(CC) -c ../jnihead.c -o ../../head_jni_BETA/jnihead.o $(CFLAGS)
|
||||
244
launch4j/head_src/jniguihead_BETA/jniguihead.c
Normal file
244
launch4j/head_src/jniguihead_BETA/jniguihead.c
Normal file
@@ -0,0 +1,244 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2004, 2015 Grzegorz Kowal
|
||||
Sylvain Mina (single instance patch)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
Except as contained in this notice, the name(s) of the above copyright holders
|
||||
shall not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "../resource.h"
|
||||
#include "../head.h"
|
||||
#include "../jnihead.h"
|
||||
#include "jniguihead.h"
|
||||
|
||||
extern FILE* hLog;
|
||||
extern PROCESS_INFORMATION processInformation;
|
||||
|
||||
HWND hWnd;
|
||||
DWORD dwExitCode = 0;
|
||||
BOOL stayAlive = FALSE;
|
||||
BOOL splash = FALSE;
|
||||
BOOL splashTimeoutErr;
|
||||
BOOL waitForWindow;
|
||||
BOOL restartOnCrash = FALSE;
|
||||
int splashTimeout = DEFAULT_SPLASH_TIMEOUT;
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
int result = prepare(lpCmdLine);
|
||||
|
||||
if (result == ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
HWND handle = getInstanceWindow();
|
||||
ShowWindow(handle, SW_SHOW);
|
||||
SetForegroundWindow(handle);
|
||||
closeLogFile();
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (result != TRUE)
|
||||
{
|
||||
signalError();
|
||||
return 1;
|
||||
}
|
||||
|
||||
splash = loadBool(SHOW_SPLASH)
|
||||
&& strstr(lpCmdLine, "--l4j-no-splash") == NULL;
|
||||
restartOnCrash = loadBool(RESTART_ON_CRASH);
|
||||
|
||||
// if we should restart on crash, we must also stay alive to check for crashes
|
||||
stayAlive = restartOnCrash ||
|
||||
(loadBool(GUI_HEADER_STAYS_ALIVE)
|
||||
&& strstr(lpCmdLine, "--l4j-dont-wait") == NULL);
|
||||
|
||||
if (splash || stayAlive)
|
||||
{
|
||||
hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, "STATIC", "",
|
||||
WS_POPUP | SS_BITMAP,
|
||||
0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
|
||||
if (splash)
|
||||
{
|
||||
char timeout[10] = {0};
|
||||
if (loadString(SPLASH_TIMEOUT, timeout))
|
||||
{
|
||||
splashTimeout = atoi(timeout);
|
||||
if (splashTimeout <= 0 || splashTimeout > MAX_SPLASH_TIMEOUT)
|
||||
{
|
||||
splashTimeout = DEFAULT_SPLASH_TIMEOUT;
|
||||
}
|
||||
}
|
||||
splashTimeoutErr = loadBool(SPLASH_TIMEOUT_ERR)
|
||||
&& strstr(lpCmdLine, "--l4j-no-splash-err") == NULL;
|
||||
waitForWindow = loadBool(SPLASH_WAITS_FOR_WINDOW);
|
||||
HANDLE hImage = LoadImage(hInstance, // handle of the instance containing the image
|
||||
MAKEINTRESOURCE(SPLASH_BITMAP), // name or identifier of image
|
||||
IMAGE_BITMAP, // type of image
|
||||
0, // desired width
|
||||
0, // desired height
|
||||
LR_DEFAULTSIZE);
|
||||
if (hImage == NULL)
|
||||
{
|
||||
signalError();
|
||||
return 1;
|
||||
}
|
||||
SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hImage);
|
||||
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);
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
UpdateWindow (hWnd);
|
||||
}
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
if (splash || stayAlive)
|
||||
{
|
||||
if (!SetTimer (hWnd, ID_TIMER, 1000 /* 1s */, TimerProc))
|
||||
{
|
||||
signalError();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
debug(getJavaHome());
|
||||
saveJvmOptions(getJavaHome(), getMainClass(), getLauncherArgs());
|
||||
|
||||
if (!executeVm(&dwExitCode))
|
||||
{
|
||||
signalError();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!(splash || stayAlive))
|
||||
{
|
||||
debug("Exit code:\t0\n");
|
||||
closeProcessHandles();
|
||||
closeLogFile();
|
||||
return 0;
|
||||
}
|
||||
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
if (restartOnCrash && dwExitCode != 0)
|
||||
{
|
||||
debug("Exit code:\t%d, restarting the application!\n", dwExitCode);
|
||||
}
|
||||
|
||||
closeProcessHandles();
|
||||
} while (restartOnCrash && dwExitCode != 0);
|
||||
|
||||
debug("Exit code:\t%d\n", dwExitCode);
|
||||
closeLogFile();
|
||||
return dwExitCode;
|
||||
}
|
||||
|
||||
HWND getInstanceWindow()
|
||||
{
|
||||
char windowTitle[STR];
|
||||
char instWindowTitle[STR] = {0};
|
||||
if (loadString(INSTANCE_WINDOW_TITLE, instWindowTitle))
|
||||
{
|
||||
HWND handle = FindWindowEx(NULL, NULL, NULL, NULL);
|
||||
while (handle != NULL)
|
||||
{
|
||||
GetWindowText(handle, windowTitle, STR - 1);
|
||||
if (strstr(windowTitle, instWindowTitle) != NULL)
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
else
|
||||
{
|
||||
handle = FindWindowEx(NULL, handle, NULL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BOOL CALLBACK enumwndfn(HWND hwnd, LPARAM lParam)
|
||||
{
|
||||
DWORD processId;
|
||||
GetWindowThreadProcessId(hwnd, &processId);
|
||||
if (processInformation.dwProcessId == processId)
|
||||
{
|
||||
LONG styles = GetWindowLong(hwnd, GWL_STYLE);
|
||||
if ((styles & WS_VISIBLE) != 0)
|
||||
{
|
||||
splash = FALSE;
|
||||
ShowWindow(hWnd, SW_HIDE);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID CALLBACK TimerProc(
|
||||
HWND hwnd, // handle of window for timer messages
|
||||
UINT uMsg, // WM_TIMER message
|
||||
UINT idEvent, // timer identifier
|
||||
DWORD dwTime) // current system time
|
||||
{
|
||||
if (splash)
|
||||
{
|
||||
if (splashTimeout == 0)
|
||||
{
|
||||
splash = FALSE;
|
||||
ShowWindow(hWnd, SW_HIDE);
|
||||
if (waitForWindow && splashTimeoutErr)
|
||||
{
|
||||
KillTimer(hwnd, ID_TIMER);
|
||||
signalError();
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
splashTimeout--;
|
||||
if (waitForWindow)
|
||||
{
|
||||
EnumWindows(enumwndfn, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GetExitCodeProcess(processInformation.hProcess, &dwExitCode);
|
||||
if (dwExitCode != STILL_ACTIVE
|
||||
|| !(splash || stayAlive))
|
||||
{
|
||||
KillTimer(hWnd, ID_TIMER);
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
}
|
||||
122
launch4j/head_src/jniguihead_BETA/jniguihead.dev
Normal file
122
launch4j/head_src/jniguihead_BETA/jniguihead.dev
Normal file
@@ -0,0 +1,122 @@
|
||||
[Project]
|
||||
FileName=jniguihead.dev
|
||||
Name=jniguihead
|
||||
UnitCount=7
|
||||
Type=0
|
||||
Ver=2
|
||||
ObjFiles=
|
||||
Includes="C:\Program Files (x86)\Java\jdk 1.4\include";"C:\Program Files (x86)\Java\jdk 1.4\include\win32"
|
||||
Libs=
|
||||
PrivateResource=
|
||||
ResourceIncludes=
|
||||
MakeIncludes=
|
||||
Compiler=
|
||||
CppCompiler=
|
||||
Linker=-n_@@_
|
||||
IsCpp=0
|
||||
Icon=
|
||||
ExeOutput=
|
||||
ObjectOutput=..\..\head_jni_BETA
|
||||
OverrideOutput=0
|
||||
OverrideOutputName=jniguihead.exe
|
||||
HostApplication=
|
||||
Folders=
|
||||
CommandLine=
|
||||
UseCustomMakefile=0
|
||||
CustomMakefile=Makefile.win
|
||||
IncludeVersionInfo=0
|
||||
SupportXPThemes=0
|
||||
CompilerSet=0
|
||||
CompilerSettings=000000d000000000000001000
|
||||
LogOutput=
|
||||
LogOutputEnabled=0
|
||||
|
||||
[Unit1]
|
||||
FileName=jniguihead.c
|
||||
CompileCpp=0
|
||||
Folder=jniguihead_BETA
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=$(CC) -c jniguihead.c -o ../../head_jni_BETA/jniguihead.o $(CFLAGS)
|
||||
|
||||
[Unit2]
|
||||
FileName=jniguihead.h
|
||||
CompileCpp=0
|
||||
Folder=jniguihead_BETA
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[VersionInfo]
|
||||
Major=0
|
||||
Minor=1
|
||||
Release=1
|
||||
Build=1
|
||||
LanguageID=1033
|
||||
CharsetID=1252
|
||||
CompanyName=
|
||||
FileVersion=0.1.1.1
|
||||
FileDescription=Developed using the Dev-C++ IDE
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=
|
||||
AutoIncBuildNr=0
|
||||
SyncProduct=0
|
||||
|
||||
[Unit4]
|
||||
FileName=..\head.h
|
||||
CompileCpp=0
|
||||
Folder=jniguihead_BETA
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[Unit6]
|
||||
FileName=..\jnihead.c
|
||||
CompileCpp=0
|
||||
Folder=jniguihead_BETA
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[Unit3]
|
||||
FileName=..\head.c
|
||||
CompileCpp=0
|
||||
Folder=jniguihead_BETA
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=$(CC) -c head.c -o ../../head/head.o $(CFLAGS)
|
||||
|
||||
[Unit5]
|
||||
FileName=..\resource.h
|
||||
CompileCpp=0
|
||||
Folder=jniguihead_BETA
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[Unit7]
|
||||
FileName=..\jnihead.h
|
||||
CompileCpp=0
|
||||
Folder=jniguihead_BETA
|
||||
Compile=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
43
launch4j/head_src/jniguihead_BETA/jniguihead.h
Normal file
43
launch4j/head_src/jniguihead_BETA/jniguihead.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2004, 2007 Grzegorz Kowal
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
Except as contained in this notice, the name(s) of the above copyright holders
|
||||
shall not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define ID_TIMER 1
|
||||
#define DEFAULT_SPLASH_TIMEOUT 60 /* 60 seconds */
|
||||
#define MAX_SPLASH_TIMEOUT 60 * 15 /* 15 minutes */
|
||||
|
||||
HWND getInstanceWindow();
|
||||
|
||||
BOOL CALLBACK enumwndfn(HWND hwnd, LPARAM lParam);
|
||||
|
||||
VOID CALLBACK TimerProc(
|
||||
HWND hwnd, // handle of window for timer messages
|
||||
UINT uMsg, // WM_TIMER message
|
||||
UINT idEvent, // timer identifier
|
||||
DWORD dwTime // current system time
|
||||
);
|
||||
284
launch4j/head_src/jnihead.c
Normal file
284
launch4j/head_src/jnihead.c
Normal file
@@ -0,0 +1,284 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2007 Ryan Rusaw
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
Except as contained in this notice, the name(s) of the above copyright holders
|
||||
shall not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "jnihead.h"
|
||||
|
||||
/* Java Invocation API stuff */
|
||||
typedef jint (JNICALL CreateJavaVM_t)(JavaVM **pvm, void **env, void *args);
|
||||
JavaVM* g_pJavaVM = NULL;
|
||||
JNIEnv* g_pJNIEnv = NULL;
|
||||
JavaVMInitArgs g_sJavaVMInitArgs;
|
||||
char g_rgcMnClsArgs[MAX_ARGS] = {0};
|
||||
char g_rgcMnCls[_MAX_PATH] = {0};
|
||||
char g_rgcCurrJrePth[_MAX_PATH] = {0};
|
||||
HINSTANCE g_hInstance;
|
||||
const char* g_pcSep = " \t\f\r\n\v";
|
||||
|
||||
int getArgCount(const char* pcArgStr)
|
||||
{
|
||||
const char *pCopy;
|
||||
int iArgCnt= 0;
|
||||
int bInWtSpc = 1;
|
||||
for(pCopy = pcArgStr; *pCopy; pCopy++)
|
||||
{
|
||||
if (!isspace(*pCopy) && bInWtSpc)
|
||||
{
|
||||
iArgCnt++;
|
||||
}
|
||||
bInWtSpc = isspace(*pCopy);
|
||||
}
|
||||
return iArgCnt;
|
||||
}
|
||||
|
||||
void saveJvmOptions(const char *jrePath, const char *mainClass, const char *pcOpts)
|
||||
{
|
||||
strcpy(g_rgcCurrJrePth, jrePath);
|
||||
strcpy(g_rgcMnCls, mainClass);
|
||||
|
||||
char rgcOptCpy[MAX_ARGS] = {0};
|
||||
int iArgCnt = 0, iCurrArg = 0, iSkipArgCnt = 0;
|
||||
char *pcCurrOpt;
|
||||
char **prgcVmArgs = NULL;
|
||||
strncpy(rgcOptCpy, pcOpts, MAX_ARGS - 1);
|
||||
|
||||
|
||||
iArgCnt = getArgCount(rgcOptCpy);
|
||||
if (iArgCnt > 0)
|
||||
{
|
||||
/* Allocate iArgCnt char pointers */
|
||||
prgcVmArgs = malloc(iArgCnt * sizeof(char *));
|
||||
for (pcCurrOpt = strtok(rgcOptCpy, g_pcSep); pcCurrOpt; pcCurrOpt = strtok(NULL, g_pcSep), iCurrArg++)
|
||||
{
|
||||
/* Use the allocated pointers to make an array of substrings */
|
||||
prgcVmArgs[iCurrArg] = pcCurrOpt;
|
||||
}
|
||||
/* Allocat iArgCnt JavaVMOptions for the g_sJavaVMInitArgs struct */
|
||||
g_sJavaVMInitArgs.options = malloc(iArgCnt * sizeof(JavaVMOption));
|
||||
memset(g_sJavaVMInitArgs.options, 0, iArgCnt * sizeof(JavaVMOption));
|
||||
char* rgcClsPth = 0;
|
||||
/* Copy the tokenized array into the allocated JavaVMOption array,
|
||||
* with some special handling for classpath related arguments */
|
||||
for (iCurrArg = 0; iCurrArg < iArgCnt; iCurrArg++)
|
||||
{
|
||||
if ((strcmp(prgcVmArgs[iCurrArg], "-classpath") == 0) ||
|
||||
(strcmp(prgcVmArgs[iCurrArg], "-jar") == 0))
|
||||
{
|
||||
iCurrArg++;
|
||||
iSkipArgCnt++;
|
||||
if (iCurrArg < iArgCnt)
|
||||
{
|
||||
int iOffset = *prgcVmArgs[iCurrArg] == '"' ? 1 : 0;
|
||||
char rgcTmp[MAX_ARGS] = {0};
|
||||
/* Remove leading and trailing "'s */\
|
||||
strncpy(rgcTmp, prgcVmArgs[iCurrArg] + iOffset,
|
||||
strlen(prgcVmArgs[iCurrArg]) - iOffset);
|
||||
if (rgcTmp[strlen(rgcTmp)-1] == '"')
|
||||
rgcTmp[strlen(rgcTmp)-1] = '\0';
|
||||
/* If we haven't defined a classpath yet start one, otherwise
|
||||
* we just append the this classpath to it */
|
||||
if (!rgcClsPth)
|
||||
{
|
||||
rgcClsPth = malloc(MAX_ARGS * sizeof(char));
|
||||
memset(rgcClsPth, 0, MAX_ARGS * sizeof(char));
|
||||
sprintf(rgcClsPth,"-Djava.class.path=%s", rgcTmp);
|
||||
g_sJavaVMInitArgs.options[iCurrArg - iSkipArgCnt].optionString = rgcClsPth;
|
||||
}
|
||||
else
|
||||
{
|
||||
iSkipArgCnt++;
|
||||
strcat(rgcClsPth,";");
|
||||
strcat(rgcClsPth,rgcTmp);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_sJavaVMInitArgs.options[iCurrArg - iSkipArgCnt].optionString
|
||||
= malloc(strlen(prgcVmArgs[iCurrArg]) + 1);
|
||||
strcpy(g_sJavaVMInitArgs.options[iCurrArg - iSkipArgCnt].optionString,
|
||||
prgcVmArgs[iCurrArg]);
|
||||
}
|
||||
}
|
||||
g_sJavaVMInitArgs.nOptions = iArgCnt - iSkipArgCnt;
|
||||
/* Free the malloc'd memory, we dont want to leak */
|
||||
free(prgcVmArgs);
|
||||
}
|
||||
}
|
||||
|
||||
JNIEnv* createVm()
|
||||
{
|
||||
int iRetVal;
|
||||
CreateJavaVM_t *pfnCreateJavaVM;
|
||||
char rgcLibPth[_MAX_PATH + 18];
|
||||
// sprintf(rgcLibPth, "%s\\bin\\client\\jvm.dll", g_rgcCurrJrePth); // TODO - could be client or server
|
||||
sprintf(rgcLibPth, "%s\\bin\\client\\jvm.dll", g_rgcCurrJrePth);
|
||||
|
||||
/* Get a handle to the jvm dll */
|
||||
if ((g_hInstance = LoadLibrary(rgcLibPth)) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Get the CreateJavaVM() function */
|
||||
pfnCreateJavaVM = (CreateJavaVM_t *)GetProcAddress(g_hInstance, "JNI_CreateJavaVM");
|
||||
|
||||
if (pfnCreateJavaVM == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
g_sJavaVMInitArgs.version = JNI_VERSION_1_2;
|
||||
g_sJavaVMInitArgs.ignoreUnrecognized = JNI_TRUE;
|
||||
/* Start the VM */
|
||||
iRetVal = pfnCreateJavaVM(&g_pJavaVM, (void **)&g_pJNIEnv, &g_sJavaVMInitArgs);
|
||||
|
||||
if (iRetVal != 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return g_pJNIEnv;
|
||||
}
|
||||
|
||||
int invokeMainClass(JNIEnv* psJNIEnv)
|
||||
{
|
||||
jclass jcMnCls;
|
||||
jmethodID jmMnMthd;
|
||||
jobjectArray joAppArgs;
|
||||
jstring jsAppArg;
|
||||
jthrowable jtExcptn;
|
||||
char *pcCurrArg;
|
||||
int iArgCnt= 0, iOption = -1;
|
||||
char rgcMnClsCpy[MAX_ARGS] = {0};
|
||||
|
||||
/* Ensure Java JNI Env is set up */
|
||||
if(psJNIEnv == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
/* We need a class name */
|
||||
if (g_rgcMnCls[0] == '\0')
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Replace . with / in fully qualified class name */
|
||||
char *pClsNm;
|
||||
for(pClsNm = g_rgcMnCls; *pClsNm; pClsNm++)
|
||||
{
|
||||
if(*pClsNm == '.')
|
||||
*pClsNm = '/';
|
||||
}
|
||||
}
|
||||
/* Find the class */
|
||||
jcMnCls = (*psJNIEnv)->FindClass(psJNIEnv, g_rgcMnCls);
|
||||
jtExcptn = (*psJNIEnv)->ExceptionOccurred(psJNIEnv);
|
||||
if (jtExcptn != NULL)
|
||||
{
|
||||
(*psJNIEnv)->ExceptionDescribe(psJNIEnv);
|
||||
return -1;
|
||||
}
|
||||
if (jcMnCls == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
/* Get the static main method */
|
||||
jmMnMthd = (*psJNIEnv)->GetStaticMethodID(psJNIEnv, jcMnCls, "main", "([Ljava/lang/String;)V");
|
||||
jtExcptn = (*psJNIEnv)->ExceptionOccurred(psJNIEnv);
|
||||
if (jtExcptn != NULL)
|
||||
{
|
||||
(*psJNIEnv)->ExceptionDescribe(psJNIEnv);
|
||||
}
|
||||
if (jmMnMthd == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
/* Build the String[] array if we need one */
|
||||
strncpy(rgcMnClsCpy, g_rgcMnClsArgs, MAX_ARGS);
|
||||
iArgCnt = getArgCount(rgcMnClsCpy);
|
||||
joAppArgs = (jobjectArray)(*psJNIEnv)->NewObjectArray(psJNIEnv, iArgCnt,
|
||||
(*psJNIEnv)->FindClass(psJNIEnv, "java/lang/String"), NULL);
|
||||
jtExcptn = (*psJNIEnv)->ExceptionOccurred(psJNIEnv);
|
||||
if (jtExcptn != NULL)
|
||||
{
|
||||
(*psJNIEnv)->ExceptionDescribe(psJNIEnv);
|
||||
return -1;
|
||||
}
|
||||
for (pcCurrArg = strtok(rgcMnClsCpy, g_pcSep); pcCurrArg; pcCurrArg = strtok(NULL, g_pcSep))
|
||||
{
|
||||
iOption++;
|
||||
jsAppArg = (*psJNIEnv)->NewStringUTF(psJNIEnv, pcCurrArg);
|
||||
(*psJNIEnv)->SetObjectArrayElement(psJNIEnv, joAppArgs, iOption, jsAppArg);
|
||||
jtExcptn = (*psJNIEnv)->ExceptionOccurred(psJNIEnv);
|
||||
if(jtExcptn != NULL)
|
||||
{
|
||||
(*psJNIEnv)->ExceptionDescribe(psJNIEnv);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/* Execute the class */
|
||||
(*psJNIEnv)->CallStaticVoidMethod(psJNIEnv, jcMnCls, jmMnMthd, joAppArgs);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cleanupVm()
|
||||
{
|
||||
/* Destroy the VM */
|
||||
(*g_pJavaVM)->DestroyJavaVM(g_pJavaVM);
|
||||
}
|
||||
|
||||
BOOL executeVm(DWORD *dwExitCode)
|
||||
{
|
||||
BOOL result = TRUE;
|
||||
*dwExitCode = -1;
|
||||
|
||||
int iIdx;
|
||||
/* Use Invocation API */
|
||||
if (createVm())
|
||||
{
|
||||
*dwExitCode = invokeMainClass(g_pJNIEnv);
|
||||
cleanupVm();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
/* Free the allocated memory */
|
||||
for (iIdx = 0; iIdx < g_sJavaVMInitArgs.nOptions; iIdx++)
|
||||
{
|
||||
free(g_sJavaVMInitArgs.options[iIdx].optionString);
|
||||
}
|
||||
free(g_sJavaVMInitArgs.options);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
41
launch4j/head_src/jnihead.h
Normal file
41
launch4j/head_src/jnihead.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2007 Ryan Rusaw
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
Except as contained in this notice, the name(s) of the above copyright holders
|
||||
shall not be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <jni.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "head.h"
|
||||
|
||||
int getArgCount(const char* pcArgStr);
|
||||
void saveJvmOptions(const char *jrePath, const char *mainClass, const char *pcOpts);
|
||||
JNIEnv* createVm();
|
||||
int invokeMainClass(JNIEnv* psJNIEnv);
|
||||
void cleanupVm();
|
||||
BOOL executeVm(DWORD *dwExitCode);
|
||||
|
||||
BIN
launch4j/launch4j.jar
LFS
BIN
launch4j/launch4j.jar
LFS
Binary file not shown.
BIN
launch4j/lib/commons-logging.jar
LFS
BIN
launch4j/lib/commons-logging.jar
LFS
Binary file not shown.
24
launch4j/maven/.classpath
Normal file
24
launch4j/maven/.classpath
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="demo/SimpleApp/build" path="demo/SimpleApp/src"/>
|
||||
<classpathentry kind="src" output="demo/ConsoleApp/build" path="demo/ConsoleApp/src"/>
|
||||
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
|
||||
</classpath>
|
||||
23
launch4j/maven/.project
Normal file
23
launch4j/maven/.project
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>launch4j</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
4
launch4j/maven/.settings/org.eclipse.m2e.core.prefs
Normal file
4
launch4j/maven/.settings/org.eclipse.m2e.core.prefs
Normal file
@@ -0,0 +1,4 @@
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
||||
14
launch4j/maven/assembly/assemble-dist.xml
Normal file
14
launch4j/maven/assembly/assemble-dist.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
|
||||
<id>distribution-libs</id>
|
||||
<formats>
|
||||
<format>dir</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<dependencySets>
|
||||
<dependencySet>
|
||||
<includes></includes>
|
||||
<useProjectArtifact>false</useProjectArtifact>
|
||||
</dependencySet>
|
||||
</dependencySets>
|
||||
</assembly>
|
||||
53
launch4j/maven/assembly/assemble-linux.xml
Normal file
53
launch4j/maven/assembly/assemble-linux.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Maven Launch4j Plugin
|
||||
Copyright (c) 2006 Paul Jungwirth
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
-->
|
||||
<assembly>
|
||||
<id>workdir-linux</id>
|
||||
<formats>
|
||||
<format>jar</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>bin/bin-linux</directory>
|
||||
<outputDirectory>${finalName}-workdir-linux/bin</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<outputDirectory>${finalName}-workdir-linux</outputDirectory>
|
||||
<includes>
|
||||
<include>w32api/**/*</include>
|
||||
<include>w32api_jni/**/*</include>
|
||||
<include>head/**/*</include>
|
||||
<include>head_jni_BETA/**/*</include>
|
||||
</includes>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
||||
53
launch4j/maven/assembly/assemble-linux64.xml
Normal file
53
launch4j/maven/assembly/assemble-linux64.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Maven Launch4j Plugin
|
||||
Copyright (c) 2006 Paul Jungwirth
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
-->
|
||||
<assembly>
|
||||
<id>workdir-linux64</id>
|
||||
<formats>
|
||||
<format>jar</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>bin/bin-linux64</directory>
|
||||
<outputDirectory>${finalName}-workdir-linux64/bin</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<outputDirectory>${finalName}-workdir-linux64</outputDirectory>
|
||||
<includes>
|
||||
<include>w32api/**/*</include>
|
||||
<include>w32api_jni/**/*</include>
|
||||
<include>head/**/*</include>
|
||||
<include>head_jni_BETA/**/*</include>
|
||||
</includes>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
||||
53
launch4j/maven/assembly/assemble-mac.xml
Normal file
53
launch4j/maven/assembly/assemble-mac.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Maven Launch4j Plugin
|
||||
Copyright (c) 2006 Paul Jungwirth
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
-->
|
||||
<assembly>
|
||||
<id>workdir-mac</id>
|
||||
<formats>
|
||||
<format>jar</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>bin/bin-macosx-x86</directory>
|
||||
<outputDirectory>${finalName}-workdir-mac/bin</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<outputDirectory>${finalName}-workdir-mac</outputDirectory>
|
||||
<includes>
|
||||
<include>w32api/**/*</include>
|
||||
<include>w32api_jni/**/*</include>
|
||||
<include>head/**/*</include>
|
||||
<include>head_jni_BETA/**/*</include>
|
||||
</includes>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
||||
53
launch4j/maven/assembly/assemble-win32.xml
Normal file
53
launch4j/maven/assembly/assemble-win32.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Maven Launch4j Plugin
|
||||
Copyright (c) 2006 Paul Jungwirth
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
-->
|
||||
<assembly>
|
||||
<id>workdir-win32</id>
|
||||
<formats>
|
||||
<format>jar</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>bin/bin-win32</directory>
|
||||
<outputDirectory>${finalName}-workdir-win32/bin</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<outputDirectory>${finalName}-workdir-win32</outputDirectory>
|
||||
<includes>
|
||||
<include>w32api/**/*</include>
|
||||
<include>w32api_jni/**/*</include>
|
||||
<include>head/**/*</include>
|
||||
<include>head_jni_BETA/**/*</include>
|
||||
</includes>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
||||
55
launch4j/maven/assembly/src.xml
Normal file
55
launch4j/maven/assembly/src.xml
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Maven Launch4j Plugin
|
||||
Copyright (c) 2006 Paul Jungwirth
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
-->
|
||||
<assembly>
|
||||
<id>src</id>
|
||||
<formats>
|
||||
<format>tar.gz</format>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<includes>
|
||||
<include>README*</include>
|
||||
<include>LICENSE*</include>
|
||||
<include>NOTICE*</include>
|
||||
<include>TODO</include>
|
||||
<include>pom.xml</include>
|
||||
</includes>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>src</directory>
|
||||
<excludes>
|
||||
<exclude>**/.*.swp</exclude>
|
||||
</excludes>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
||||
8
launch4j/maven/maven-readme.txt
Normal file
8
launch4j/maven/maven-readme.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Run once the Ant target switch-to-maven, it will reconfigure the project to use maven.
|
||||
|
||||
*** Creation of Distribution Release ***
|
||||
Windows: mvn -P dist,win32 clean package
|
||||
|
||||
Linux: mvn -P dist,linux clean package
|
||||
|
||||
MacOsX: mvn -P dist,macosx-x86 clean package
|
||||
512
launch4j/maven/pom.xml
Normal file
512
launch4j/maven/pom.xml
Normal file
@@ -0,0 +1,512 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.sf.launch4j</groupId>
|
||||
<artifactId>launch4j</artifactId>
|
||||
<version>${launch4j.version}</version>
|
||||
<name>Launch4j</name>
|
||||
<description>Cross-platform Java executable wrapper for creating lightweight Windows native EXEs. Provides advanced JRE search, application startup configuration and better user experience.</description>
|
||||
<url>http://sourceforge.net/projects/launch4j/</url>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>BSD 3-Clause License</name>
|
||||
<url>http://opensource.org/licenses/BSD-3-Clause</url>
|
||||
<comments>Launch4j is licensed under the BSD 3-Clause License.</comments>
|
||||
</license>
|
||||
<license>
|
||||
<name>MIT License</name>
|
||||
<url>http://www.opensource.org/licenses/mit-license.php</url>
|
||||
<comments>Launch4j code (head) which is attached to the wrapped jars is licensed under the MIT License.</comments>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>Grzegorz Kowal</name>
|
||||
<url>http://sourceforge.net/u/grzegok/profile/</url>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:http://git.code.sf.net/p/launch4j/git</connection>
|
||||
<developerConnection>scm:git:http://git.code.sf.net/p/launch4j/git</developerConnection>
|
||||
<url>http://sourceforge.net/p/launch4j/git/ci/master/tree/</url>
|
||||
</scm>
|
||||
|
||||
<distributionManagement>
|
||||
<snapshotRepository>
|
||||
<id>ossrh</id>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<versionNumber>${launch4j.version}.0.0</versionNumber>
|
||||
<version>${launch4j.version}</version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-beanutils</groupId>
|
||||
<artifactId>commons-beanutils</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>commons-collections</artifactId>
|
||||
<groupId>commons-collections</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<version>1.9.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.java.abeille</groupId>
|
||||
<artifactId>abeille</artifactId>
|
||||
<version>3.0</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>colt</artifactId>
|
||||
<groupId>colt</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>
|
||||
com.springsource.org.apache.batik.ext.awt
|
||||
</artifactId>
|
||||
<groupId>org.apache.batik</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>
|
||||
com.springsource.org.apache.batik.util
|
||||
</artifactId>
|
||||
<groupId>org.apache.batik</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>dom4j</artifactId>
|
||||
<groupId>dom4j</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>dsol-xml</artifactId>
|
||||
<groupId>dsol</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>javahelp</artifactId>
|
||||
<groupId>javax.help</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>jfreechart</artifactId>
|
||||
<groupId>jfree</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>jcommon</artifactId>
|
||||
<groupId>jfree</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>mahout-collections</artifactId>
|
||||
<groupId>org.apache.mahout</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>optimization</artifactId>
|
||||
<groupId>com.github.rwl</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>foxtrot</groupId>
|
||||
<artifactId>foxtrot</artifactId>
|
||||
<version>2.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jgoodies</groupId>
|
||||
<artifactId>jgoodies-common</artifactId>
|
||||
<version>1.7.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jgoodies</groupId>
|
||||
<artifactId>forms</artifactId>
|
||||
<version>1.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jgoodies</groupId>
|
||||
<artifactId>looks</artifactId>
|
||||
<version>2.2.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.thoughtworks.xstream</groupId>
|
||||
<artifactId>xstream</artifactId>
|
||||
<version>1.4.15</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
<version>1.9.15</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src</directory>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>com.github.taxone.plugins</groupId>
|
||||
<artifactId>classpath-maven-plugin</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>set-classpath-property</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>setClassPath</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<classpathPrefix>lib/</classpathPrefix>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>default-jar</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>net.sf.launch4j.Main</mainClass>
|
||||
</manifest>
|
||||
<manifestEntries>
|
||||
<Class-Path>. ${taxone.classpath.propertyName}</Class-Path>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>core-jar</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<finalName>${project.build.finalName}</finalName>
|
||||
<excludes>
|
||||
<exclude>net/sf/launch4j/form/</exclude>
|
||||
<exclude>net/sf/launch4j/formimpl</exclude>
|
||||
</excludes>
|
||||
<classifier>core</classifier>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.4.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>assemble-workdir</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>attached</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>assembly/assemble-linux.xml</descriptor>
|
||||
<descriptor>assembly/assemble-linux64.xml</descriptor>
|
||||
<descriptor>assembly/assemble-win32.xml</descriptor>
|
||||
<descriptor>assembly/assemble-mac.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>assemble-distrib</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<finalName>lib</finalName>
|
||||
<outputDirectory>${basedir}</outputDirectory>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
<descriptors>
|
||||
<descriptor>assembly/assemble-dist.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-resources</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>target</directory>
|
||||
<includes>
|
||||
<include>${project.build.finalName}.jar</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>${basedir}</directory>
|
||||
<includes>
|
||||
<include>${project.build.finalName}.jar</include>
|
||||
</includes>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>full-release</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>2.3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar-no-fork</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>2.9.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>1.5</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign-artifacts</id>
|
||||
<goals>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.sonatype.plugins</groupId>
|
||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
||||
<version>1.6.2</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<serverId>ossrh</serverId>
|
||||
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
||||
<!-- Release has to be executed manually -->
|
||||
<autoReleaseAfterClose>false</autoReleaseAfterClose>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<!-- Macosx-x86 Profile -->
|
||||
<profile>
|
||||
<id>macosx-x86</id>
|
||||
<properties>
|
||||
<bin.dir>bin-macosx-x86</bin.dir>
|
||||
</properties>
|
||||
</profile>
|
||||
<!-- Linux Profile -->
|
||||
<profile>
|
||||
<id>linux</id>
|
||||
<properties>
|
||||
<bin.dir>bin-linux</bin.dir>
|
||||
</properties>
|
||||
</profile>
|
||||
<!-- Windows Profile -->
|
||||
<profile>
|
||||
<id>win32</id>
|
||||
<properties>
|
||||
<bin.dir>bin-win32</bin.dir>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Creates Launch4j executable -->
|
||||
<plugin>
|
||||
<groupId>com.akathist.maven.plugins.launch4j</groupId>
|
||||
<artifactId>launch4j-maven-plugin</artifactId>
|
||||
<version>1.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>launch4j</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>launch4j</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<headerType>gui</headerType>
|
||||
<dontWrapJar>true</dontWrapJar>
|
||||
<jar>${project.build.finalName}.jar</jar>
|
||||
<outfile>launch4j.exe</outfile>
|
||||
<errTitle>launch4j</errTitle>
|
||||
<chdir>.</chdir>
|
||||
<stayAlive>false</stayAlive>
|
||||
|
||||
<jre>
|
||||
<minVersion>1.6.0</minVersion>
|
||||
</jre>
|
||||
<versionInfo>
|
||||
<fileVersion>${versionNumber}</fileVersion>
|
||||
<txtFileVersion>${version}</txtFileVersion>
|
||||
<productVersion>${versionNumber}</productVersion>
|
||||
<txtProductVersion>${version}</txtProductVersion>
|
||||
<fileDescription>Cross-platform Java application wrapper</fileDescription>
|
||||
<copyright>Copyright (C) 2004, 2017 Grzegorz Kowal</copyright>
|
||||
<productName>launch4j</productName>
|
||||
<companyName>http://launch4j.sourceforge.net/</companyName>
|
||||
<internalName>GUI launcher</internalName>
|
||||
<originalFilename>launch4j.exe</originalFilename>
|
||||
</versionInfo>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<!-- Generic distribution profile -->
|
||||
<profile>
|
||||
<id>dist</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Clean -->
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>${basedir}/bin</directory>
|
||||
<includes>
|
||||
<incude>*</incude>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>COPYING</exclude>
|
||||
</excludes>
|
||||
</fileset>
|
||||
<fileset>
|
||||
<directory>${basedir}</directory>
|
||||
<includes>
|
||||
<incude>launch4j.exe</incude>
|
||||
</includes>
|
||||
</fileset>
|
||||
<fileset>
|
||||
<directory>${basedir}</directory>
|
||||
<includes>
|
||||
<incude>lib/</incude>
|
||||
</includes>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- Copies executables to "bin" directory -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-binutils</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/bin</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>${basedir}/bin/${bin.dir}</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- Change Permissions -->
|
||||
<plugin>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>1.7</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<configuration>
|
||||
<target>
|
||||
<chmod file="launch4j" perm="+x" />
|
||||
<chmod file="bin/windres" perm="+x" />
|
||||
<chmod file="bin/ld" perm="+x" />
|
||||
</target>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
|
||||
</profiles>
|
||||
|
||||
</project>
|
||||
@@ -33,8 +33,13 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#else
|
||||
#include <sys/io.h>
|
||||
#include <sys/fcntl.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
@@ -45,6 +50,14 @@
|
||||
#define TEST_FILE_NAME "sign4j_temporary.exe"
|
||||
#define SIGN4J_VERSION "3.0"
|
||||
|
||||
#ifndef _WIN32
|
||||
#define O_BINARY 0
|
||||
#define _O_SHORT_LIVED 0
|
||||
#define _S_IREAD S_IREAD
|
||||
#define _S_IWRITE S_IWRITE
|
||||
#define stricmp strcasecmp
|
||||
#endif
|
||||
|
||||
typedef unsigned char byte;
|
||||
|
||||
char command[4096];
|
||||
@@ -127,7 +140,12 @@ int main (int argc, char* argv[])
|
||||
trg = outf;
|
||||
close (fd);
|
||||
|
||||
#ifdef _WIN32
|
||||
strcpy (command, "\" ");
|
||||
#else
|
||||
strcpy (command, "");
|
||||
#endif
|
||||
|
||||
for (i = j; i < argc; i++)
|
||||
{
|
||||
p = (argv[i] == outf ? trg : argv[i]);
|
||||
@@ -139,9 +157,18 @@ int main (int argc, char* argv[])
|
||||
strcat (command, "\"");
|
||||
strcat (command, " ");
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
strcat (command, "\"");
|
||||
#endif
|
||||
|
||||
if (! vrb)
|
||||
#ifdef _WIN32
|
||||
strcat (command, " > NUL");
|
||||
#else
|
||||
strcat (command, " > /dev/null");
|
||||
#endif
|
||||
|
||||
system (command);
|
||||
|
||||
if ((td = open (trg, O_RDONLY | O_BINARY)) < 0)
|
||||
@@ -168,7 +195,12 @@ int main (int argc, char* argv[])
|
||||
printf ("You don't need sign4j to sign this file\n");
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
strcpy (command, "\" ");
|
||||
#else
|
||||
strcpy (command, "");
|
||||
#endif
|
||||
|
||||
for (i = j; i < argc; i++)
|
||||
{
|
||||
p = argv[i];
|
||||
@@ -180,7 +212,11 @@ int main (int argc, char* argv[])
|
||||
strcat (command, "\"");
|
||||
strcat (command, " ");
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
strcat (command, "\"");
|
||||
#endif
|
||||
|
||||
return system (command);
|
||||
}
|
||||
|
||||
|
||||
30
launch4j/src/LICENSE.txt
Normal file
30
launch4j/src/LICENSE.txt
Normal file
@@ -0,0 +1,30 @@
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2004, 2017 Grzegorz Kowal
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -1,2 +1,2 @@
|
||||
versionNumber=3.7.0.0
|
||||
version=3.7
|
||||
versionNumber=3.12.0.0
|
||||
version=3.12
|
||||
|
||||
@@ -82,6 +82,10 @@ public class Builder {
|
||||
FileOutputStream os = null;
|
||||
final RcBuilder rcb = new RcBuilder();
|
||||
try {
|
||||
if (c.isJniApplication()) {
|
||||
_log.append("WARNING: Some features are not implemented in JNI headers, see documentation.");
|
||||
}
|
||||
|
||||
rc = rcb.build(c);
|
||||
ro = Util.createTempFile("o");
|
||||
outfile = ConfigPersister.getInstance().getOutputFile();
|
||||
@@ -102,8 +106,7 @@ public class Builder {
|
||||
.add("--dynamicbase")
|
||||
.add("--nxcompat")
|
||||
.add("--no-seh")
|
||||
.add((c.getHeaderType().equals(Config.GUI_HEADER))
|
||||
? "--subsystem windows" : "--subsystem console")
|
||||
.add(c.isGuiApplication() ? "--subsystem windows" : "--subsystem console")
|
||||
.add("-s") // strip symbols
|
||||
.addFiles(c.getHeaderObjects())
|
||||
.addAbsFile(ro)
|
||||
|
||||
@@ -68,6 +68,7 @@ public class Main {
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.getConsoleLog().append(e.getMessage());
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +86,7 @@ public class Main {
|
||||
" (http://launch4j.sourceforge.net/)\n" +
|
||||
"Cross-platform Java application wrapper" +
|
||||
" for creating Windows native executables.\n\n" +
|
||||
"Copyright (C) 2004, 2015 Grzegorz Kowal\n\n" +
|
||||
"Copyright (C) 2004, 2018 Grzegorz Kowal\n\n" +
|
||||
"Launch4j comes with ABSOLUTELY NO WARRANTY.\n" +
|
||||
"This is free software, licensed under the BSD License.\n" +
|
||||
"This product includes software developed by the Apache Software Foundation" +
|
||||
|
||||
@@ -44,6 +44,7 @@ import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.launch4j.config.CharsetID;
|
||||
import net.sf.launch4j.config.Config;
|
||||
import net.sf.launch4j.config.ConfigPersister;
|
||||
import net.sf.launch4j.config.Jre;
|
||||
@@ -111,7 +112,7 @@ public class RcBuilder {
|
||||
public static final int INSTANCE_ALREADY_EXISTS_MSG = 105;
|
||||
|
||||
private final StringBuffer _sb = new StringBuffer();
|
||||
|
||||
|
||||
public String getContent() {
|
||||
return _sb.toString();
|
||||
}
|
||||
@@ -176,13 +177,19 @@ public class RcBuilder {
|
||||
}
|
||||
|
||||
private void writeResourceFile(File file) throws IOException {
|
||||
FileOutputStream os = null;
|
||||
OutputStreamWriter osw = null;
|
||||
BufferedWriter w = null;
|
||||
|
||||
try {
|
||||
w = new BufferedWriter(new FileWriter(file));
|
||||
os = new FileOutputStream(file);
|
||||
osw = new OutputStreamWriter(os, "ISO-8859-1");
|
||||
w = new BufferedWriter(osw);
|
||||
w.write(_sb.toString());
|
||||
} finally {
|
||||
Util.close(w);
|
||||
Util.close(osw);
|
||||
Util.close(os);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,7 +232,9 @@ public class RcBuilder {
|
||||
"{\n" +
|
||||
" BLOCK \"StringFileInfo\"\n" +
|
||||
" {\n" +
|
||||
" BLOCK \"040904E4\"\n" + // English
|
||||
" BLOCK \"");
|
||||
_sb.append(String.format("%04X%04X", v.getLanguage().getId(), CharsetID.MULTILINGUAL.getId()));
|
||||
_sb.append("\"\n" +
|
||||
" {\n");
|
||||
|
||||
addVerBlockValue("CompanyName", v.getCompanyName());
|
||||
@@ -233,10 +242,13 @@ public class RcBuilder {
|
||||
addVerBlockValue("FileVersion", v.getTxtFileVersion());
|
||||
addVerBlockValue("InternalName", v.getInternalName());
|
||||
addVerBlockValue("LegalCopyright", v.getCopyright());
|
||||
addVerBlockValue("LegalTrademarks", v.getTrademarks());
|
||||
addVerBlockValue("OriginalFilename", v.getOriginalFilename());
|
||||
addVerBlockValue("ProductName", v.getProductName());
|
||||
addVerBlockValue("ProductVersion", v.getTxtProductVersion());
|
||||
_sb.append(" }\n }\nBLOCK \"VarFileInfo\"\n{\nVALUE \"Translation\", 0x0409, 0x04E4\n}\n}");
|
||||
_sb.append(" }\n }\nBLOCK \"VarFileInfo\"\n{\nVALUE \"Translation\", ");
|
||||
_sb.append(String.format("0x%04X, 0x%04X", v.getLanguage().getId(), CharsetID.MULTILINGUAL.getId()));
|
||||
_sb.append("\n}\n}");
|
||||
}
|
||||
|
||||
private void addJre(Jre jre) {
|
||||
|
||||
110
launch4j/src/net/sf/launch4j/config/CharsetID.java
Normal file
110
launch4j/src/net/sf/launch4j/config/CharsetID.java
Normal file
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2015 Sebastian Bögl
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.sf.launch4j.config;
|
||||
|
||||
import java.util.Arrays;
|
||||
/**
|
||||
* @see <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058%28v=vs.85%29.aspx">VERSIONINFO resource</a>
|
||||
* @see <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa381057%28v=vs.85%29.aspx">VarFileInfo BLOCK</a>
|
||||
*/
|
||||
public enum CharsetID implements Describable {
|
||||
/** 0x0000 */
|
||||
ASCII(0, Messages.getString("Charset.ascii")),
|
||||
/** 0x04E8 */
|
||||
ARABIC(1256, Messages.getString("Language.arabic")),
|
||||
/** 0x04E3 */
|
||||
CYRILLIC(1251, Messages.getString("Charset.cyrillic")),
|
||||
/** 0x04E5 */
|
||||
GREEK(1253, Messages.getString("Language.greek")),
|
||||
/** 0x04E7 */
|
||||
HEBREW(1255, Messages.getString("Language.hebrew")),
|
||||
/** 0x03A4 */
|
||||
SHIFT_JIS(932, Messages.getString("Charset.shift.jis")),
|
||||
/** 0x03B5 */
|
||||
SHIFT_KSC(949, Messages.getString("Charset.shift.ksc")),
|
||||
/** 0x04E2 */
|
||||
LATIN2(1250, Messages.getString("Charset.latin2")),
|
||||
/** 0x04E4 */
|
||||
MULTILINGUAL(1252, Messages.getString("Charset.multilingual")),
|
||||
/** 0x0B63 */
|
||||
BIG5(950, Messages.getString("Charset.big5")),
|
||||
/** 0x04E6 */
|
||||
TURKISH(1254, Messages.getString("Language.turkish")),
|
||||
/** 0x04B0 */
|
||||
UNICODE(1200, Messages.getString("Charset.unicode")),
|
||||
;
|
||||
|
||||
private static final CharsetID[] VALUES = CharsetID.values();
|
||||
|
||||
static {
|
||||
Arrays.sort(VALUES, new DescribableComparator());
|
||||
}
|
||||
|
||||
private final int id;
|
||||
private final String description;
|
||||
|
||||
CharsetID(int id, String description) {
|
||||
this.id = id;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIndex() {
|
||||
for (int i = 0; i < VALUES.length; i++) {
|
||||
if (VALUES[i] == this) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
// should never happen
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static CharsetID[] sortedValues() {
|
||||
return VALUES;
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public class ClassPath implements IValidatable {
|
||||
Messages.getString("ClassPath.mainClass"));
|
||||
Validator.checkOptStrings(paths,
|
||||
Validator.MAX_PATH,
|
||||
Validator.MAX_BIG_STR,
|
||||
Validator.MAX_ARGS,
|
||||
"paths",
|
||||
Messages.getString("ClassPath.path"));
|
||||
}
|
||||
|
||||
@@ -63,9 +63,13 @@ public class Config implements IValidatable {
|
||||
|
||||
public static final String GUI_HEADER = "gui";
|
||||
public static final String CONSOLE_HEADER = "console";
|
||||
public static final String JNI_GUI_HEADER_32 = "jniGui32";
|
||||
public static final String JNI_CONSOLE_HEADER_32 = "jniConsole32";
|
||||
|
||||
private static final String[] HEADER_TYPES = new String[] { GUI_HEADER,
|
||||
CONSOLE_HEADER };
|
||||
CONSOLE_HEADER,
|
||||
JNI_GUI_HEADER_32,
|
||||
JNI_CONSOLE_HEADER_32 };
|
||||
|
||||
private static final String[] PRIORITY_CLASS_NAMES = new String[] { "normal",
|
||||
"idle",
|
||||
@@ -119,7 +123,7 @@ public class Config implements IValidatable {
|
||||
if (!Validator.isEmpty(chdir)) {
|
||||
Validator.checkRelativeWinPath(chdir, "chdir",
|
||||
Messages.getString("Config.chdir.relative"));
|
||||
Validator.checkFalse(chdir.toLowerCase().equals("true")
|
||||
Validator.checkFalse(chdir.toLowerCase().equals("true")
|
||||
|| chdir.toLowerCase().equals("false"),
|
||||
"chdir", Messages.getString("Config.chdir.path"));
|
||||
}
|
||||
@@ -135,7 +139,7 @@ public class Config implements IValidatable {
|
||||
"supportUrl", Messages.getString("Config.support.url"));
|
||||
Validator.checkIn(getHeaderType(), HEADER_TYPES, "headerType",
|
||||
Messages.getString("Config.header.type"));
|
||||
Validator.checkFalse(getHeaderType().equals(CONSOLE_HEADER) && splash != null,
|
||||
Validator.checkFalse(!isGuiApplication() && splash != null,
|
||||
"headerType",
|
||||
Messages.getString("Config.splash.not.impl.by.console.hdr"));
|
||||
Validator.checkOptStrings(variables,
|
||||
@@ -147,9 +151,31 @@ public class Config implements IValidatable {
|
||||
Messages.getString("Config.variables.err"));
|
||||
Validator.checkIn(getPriority(), PRIORITY_CLASS_NAMES, "priority",
|
||||
Messages.getString("Config.priority"));
|
||||
checkJniInvariants();
|
||||
jre.checkInvariants();
|
||||
}
|
||||
|
||||
private void checkJniInvariants() {
|
||||
// TODO: Remove once JNI is fully implemented.
|
||||
if (isJniApplication()) {
|
||||
Validator.checkTrue(".".equals(chdir), "chdir",
|
||||
"Only '.' is allowed in change directory.");
|
||||
Validator.checkTrue(Validator.isEmpty(cmdLine), "cmdLine",
|
||||
"Constant command line arguments not supported.");
|
||||
Validator.checkFalse(stayAlive, "stayAlive",
|
||||
"Stay alive option is not used in JNI, this is the default behavior.");
|
||||
Validator.checkFalse(restartOnCrash, "restartOnCrash",
|
||||
"Restart on crash not supported.");
|
||||
Validator.checkIn(getPriority(), new String[] { "normal" }, "priority",
|
||||
"Process priority is not supported,");
|
||||
Validator.checkNotNull(classPath, "classpath", "classpath");
|
||||
Validator.checkFalse(jre.getBundledJre64Bit(), "jre.bundledJre64Bit",
|
||||
"64-bit bundled JRE not supported.");
|
||||
Validator.checkTrue(Jre.RUNTIME_BITS_32.equals(jre.getRuntimeBits()), "jre.runtimeBits",
|
||||
"64-bit JRE not supported.");
|
||||
}
|
||||
}
|
||||
|
||||
public void validate() {
|
||||
checkInvariants();
|
||||
if (classPath != null) {
|
||||
@@ -189,10 +215,19 @@ public class Config implements IValidatable {
|
||||
public void setErrTitle(String errTitle) {
|
||||
this.errTitle = errTitle;
|
||||
}
|
||||
|
||||
public boolean isGuiApplication() {
|
||||
return GUI_HEADER.equals(headerType) || JNI_GUI_HEADER_32.equals(headerType);
|
||||
}
|
||||
|
||||
public boolean isJniApplication() {
|
||||
return JNI_GUI_HEADER_32.equals(headerType)
|
||||
|| JNI_CONSOLE_HEADER_32.equals(headerType);
|
||||
}
|
||||
|
||||
/** launch4j header file. */
|
||||
public String getHeaderType() {
|
||||
return headerType.toLowerCase();
|
||||
return headerType;
|
||||
}
|
||||
|
||||
public void setHeaderType(String headerType) {
|
||||
@@ -215,9 +250,7 @@ public class Config implements IValidatable {
|
||||
|
||||
public List<String> getHeaderObjects() {
|
||||
return isCustomHeaderObjects() ? headerObjects
|
||||
: getHeaderType().equals(GUI_HEADER)
|
||||
? LdDefaults.GUI_HEADER_OBJECTS
|
||||
: LdDefaults.CONSOLE_HEADER_OBJECTS;
|
||||
: LdDefaults.getHeaderObjects(getHeaderTypeIndex());
|
||||
}
|
||||
|
||||
public void setHeaderObjects(List<String> headerObjects) {
|
||||
@@ -229,7 +262,7 @@ public class Config implements IValidatable {
|
||||
}
|
||||
|
||||
public List<String> getLibs() {
|
||||
return isCustomLibs() ? libs : LdDefaults.LIBS;
|
||||
return isCustomLibs() ? libs : LdDefaults.getLibs(headerType);
|
||||
}
|
||||
|
||||
public void setLibs(List<String> libs) {
|
||||
|
||||
18
launch4j/src/net/sf/launch4j/config/Describable.java
Normal file
18
launch4j/src/net/sf/launch4j/config/Describable.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package net.sf.launch4j.config;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
public interface Describable {
|
||||
|
||||
String getDescription();
|
||||
|
||||
int getIndex();
|
||||
|
||||
class DescribableComparator implements Comparator<Describable> {
|
||||
|
||||
@Override
|
||||
public int compare(Describable o1, Describable o2) {
|
||||
return o1.getDescription().compareTo(o2.getDescription());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -54,8 +54,8 @@ public class Jre implements IValidatable {
|
||||
public static final String ARGS = "jvmArgs";
|
||||
|
||||
// __________________________________________________________________________________
|
||||
public static final String VERSION_PATTERN = "(\\d\\.){2}\\d(_\\d+)?";
|
||||
|
||||
public static final String VERSION_PATTERN = "(1\\.\\d\\.\\d(_\\d{1,3})?)|[1-9][0-9]{0,2}(\\.\\d{1,3}){0,2}";
|
||||
|
||||
public static final String JDK_PREFERENCE_JRE_ONLY = "jreOnly";
|
||||
public static final String JDK_PREFERENCE_PREFER_JRE = "preferJre";
|
||||
public static final String JDK_PREFERENCE_PREFER_JDK = "preferJdk";
|
||||
@@ -98,9 +98,9 @@ public class Jre implements IValidatable {
|
||||
private List<String> options;
|
||||
|
||||
public void checkInvariants() {
|
||||
Validator.checkOptString(minVersion, 10, VERSION_PATTERN,
|
||||
Validator.checkOptString(minVersion, 20, VERSION_PATTERN,
|
||||
"jre.minVersion", Messages.getString("Jre.min.version"));
|
||||
Validator.checkOptString(maxVersion, 10, VERSION_PATTERN,
|
||||
Validator.checkOptString(maxVersion, 20, VERSION_PATTERN,
|
||||
"jre.maxVersion", Messages.getString("Jre.max.version"));
|
||||
if (Validator.isEmpty(path)) {
|
||||
Validator.checkFalse(bundledJre64Bit, "jre.bundledJre64Bit",
|
||||
@@ -116,7 +116,7 @@ public class Jre implements IValidatable {
|
||||
if (!Validator.isEmpty(maxVersion)) {
|
||||
Validator.checkFalse(Validator.isEmpty(minVersion),
|
||||
"jre.minVersion", Messages.getString("Jre.specify.min.version"));
|
||||
Validator.checkTrue(minVersion.compareTo(maxVersion) < 0,
|
||||
Validator.checkTrue(JreVersion.parseString(minVersion).compareTo(JreVersion.parseString(maxVersion)) < 0,
|
||||
"jre.maxVersion", Messages.getString("Jre.max.greater.than.min"));
|
||||
}
|
||||
Validator.checkTrue(initialHeapSize == null || maxHeapSize != null,
|
||||
@@ -155,7 +155,7 @@ public class Jre implements IValidatable {
|
||||
Validator.checkOptStrings(options,
|
||||
Validator.MAX_ARGS,
|
||||
Validator.MAX_ARGS,
|
||||
"[^%]*|([^%]*([^%]*%[^%]+%[^%]*)+[^%]*)*",
|
||||
"[^%]*|([^%]*([^%]*%[^%]*%[^%]*)+[^%]*)*",
|
||||
"jre.options",
|
||||
Messages.getString("Jre.jvm.options"),
|
||||
Messages.getString("Jre.jvm.options.variable"));
|
||||
|
||||
124
launch4j/src/net/sf/launch4j/config/JreVersion.java
Normal file
124
launch4j/src/net/sf/launch4j/config/JreVersion.java
Normal file
@@ -0,0 +1,124 @@
|
||||
package net.sf.launch4j.config;
|
||||
|
||||
/**
|
||||
* This class will abstract application from JRE versioning schema and provide
|
||||
* comparing capabilities
|
||||
*
|
||||
* @author sergeyk
|
||||
*
|
||||
*/
|
||||
public class JreVersion implements Comparable<JreVersion> {
|
||||
private int x1;
|
||||
private int x2;
|
||||
private int x3;
|
||||
private int x4;
|
||||
|
||||
public static JreVersion parseString(String versionStr) {
|
||||
JreVersion ret = new JreVersion();
|
||||
if (versionStr == null || versionStr.trim().length() == 0) {
|
||||
return ret;
|
||||
}
|
||||
if (!versionStr.matches(Jre.VERSION_PATTERN)) {
|
||||
// NOTE: This is actually shouldn't happen because version format had to be
|
||||
// checked by Jre#checkInvariants BEFORE calling this method
|
||||
throw new IllegalArgumentException("JRE version is not in a right format.");
|
||||
}
|
||||
|
||||
String[] parts = versionStr.split("[\\._]");
|
||||
int first = Integer.parseInt(parts[0]);
|
||||
if (first > 1) {
|
||||
// java 9+ version schema
|
||||
ret.x1 = 1;
|
||||
ret.x2 = first;
|
||||
if (parts.length >= 2) {
|
||||
ret.x3 = Integer.parseInt(parts[1]);
|
||||
if (parts.length >= 3) {
|
||||
ret.x4 = Integer.parseInt(parts[2]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// java <= 1.8 version schema
|
||||
ret.x1 = first;
|
||||
if (parts.length >= 2) {
|
||||
ret.x2 = Integer.parseInt(parts[1]);
|
||||
if (parts.length >= 3) {
|
||||
ret.x3 = Integer.parseInt(parts[2]);
|
||||
if (parts.length == 4) {
|
||||
ret.x4 = Integer.parseInt(parts[3]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (x2 >= 9) {
|
||||
return x2 + "." + x3 + "." + x4;
|
||||
}
|
||||
|
||||
return x1 + "." + x2 + "." + x3 + (x4 > 0 ? "_" + x4 : "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + x1;
|
||||
result = prime * result + x2;
|
||||
result = prime * result + x3;
|
||||
result = prime * result + x4;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
JreVersion other = (JreVersion) obj;
|
||||
if (x1 != other.x1) {
|
||||
return false;
|
||||
}
|
||||
if (x2 != other.x2) {
|
||||
return false;
|
||||
}
|
||||
if (x3 != other.x3) {
|
||||
return false;
|
||||
}
|
||||
if (x4 != other.x4) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(JreVersion o) {
|
||||
if (this.equals(o)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (x1 != o.x1) {
|
||||
return x1 - o.x1;
|
||||
}
|
||||
if (x2 != o.x2) {
|
||||
return x2 - o.x2;
|
||||
}
|
||||
if (x3 != o.x3) {
|
||||
return x3 - o.x3;
|
||||
}
|
||||
if (x4 != o.x4) {
|
||||
return x4 - o.x4;
|
||||
}
|
||||
|
||||
throw new IllegalStateException("If you see this exception it means JreVersion::equals() method is buggy");
|
||||
}
|
||||
}
|
||||
132
launch4j/src/net/sf/launch4j/config/LanguageID.java
Normal file
132
launch4j/src/net/sf/launch4j/config/LanguageID.java
Normal file
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
Launch4j (http://launch4j.sourceforge.net/)
|
||||
Cross-platform Java application wrapper for creating Windows native executables.
|
||||
|
||||
Copyright (c) 2015 Sebastian Bögl
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package net.sf.launch4j.config;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @see <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058%28v=vs.85%29.aspx">VERSIONINFO resource</a>
|
||||
* @see <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa381057%28v=vs.85%29.aspx">VarFileInfo BLOCK</a>
|
||||
*/
|
||||
public enum LanguageID implements Describable {
|
||||
ALBANIAN(0x041C, Messages.getString("Language.albanian")),
|
||||
ARABIC(0x0401, Messages.getString("Language.arabic")),
|
||||
BAHASA(0x0421, Messages.getString("Language.bahasa")),
|
||||
DUTCH_BELGIAN(0x0813, Messages.getString("Language.belgian.dutch")),
|
||||
FRENCH_BELGIAN(0x080C, Messages.getString("Language.belgian.french")),
|
||||
BULGARIAN(0x0402, Messages.getString("Language.bulgarian")),
|
||||
FRENCH_CANADIAN(0x0C0C, Messages.getString("Language.canadian.french")),
|
||||
CASTILIAN_SPANISH(0x040A, Messages.getString("Language.spanish.castilian")),
|
||||
CATALAN(0x0403, Messages.getString("Language.catalan")),
|
||||
CROATO_SERBIAN_LATIN(0x041A, Messages.getString("Language.croato.serbian.latin")),
|
||||
CZECH(0x0405, Messages.getString("Language.czech")),
|
||||
DANISH(0x0406, Messages.getString("Language.danish")),
|
||||
DUTCH(0x0413, Messages.getString("Language.dutch")),
|
||||
ENGLISH_UK(0x0809, Messages.getString("Language.english.uk")),
|
||||
ENGLISH_US(0x0409, Messages.getString("Language.english.us")),
|
||||
FINNISH(0x040B, Messages.getString("Language.finnish")),
|
||||
FRENCH(0x040C, Messages.getString("Language.french")),
|
||||
GERMAN(0x0407, Messages.getString("Language.german")),
|
||||
GREEK(0x0408, Messages.getString("Language.greek")),
|
||||
HEBREW(0x040D, Messages.getString("Language.hebrew")),
|
||||
HUNGARIAN(0x040E, Messages.getString("Language.hungarian")),
|
||||
ICELANDIC(0x040F, Messages.getString("Language.icelandic")),
|
||||
ITALIAN(0x0410, Messages.getString("Language.italian")),
|
||||
JAPANESE(0x0411, Messages.getString("Language.japanese")),
|
||||
KOREAN(0x0412, Messages.getString("Language.korean")),
|
||||
NORWEGIAN_BOKMAL(0x0414, Messages.getString("Language.norwegian.bokmal")),
|
||||
NORWEGIAN_NYNORSK(0x0814, Messages.getString("Language.norwegian.nynorsk")),
|
||||
POLISH(0x0415, Messages.getString("Language.polish")),
|
||||
PORTUGUESE_BRAZIL(0x0416, Messages.getString("Language.portuguese.brazil")),
|
||||
PORTUGUESE_PORTUGAL(0x0816, Messages.getString("Language.portuguese.portugal")),
|
||||
RHAETO_ROMANIC(0x0417, Messages.getString("Language.rhaeto.romanic")),
|
||||
ROMANIAN(0x0418, Messages.getString("Language.romanian")),
|
||||
RUSSIAN(0x0419, Messages.getString("Language.russian")),
|
||||
SERBO_CROATIAN_CYRILLIC(0x081A, Messages.getString("Language.serbo.croatian.cyrillic")),
|
||||
SIMPLIFIED_CHINESE(0x0804, Messages.getString("Language.chinese.simplified")),
|
||||
SLOVAK(0x041B, Messages.getString("Language.slovak")),
|
||||
SPANISH_MEXICO(0x080A, Messages.getString("Language.spanish.mexico")),
|
||||
SWEDISH(0x041D, Messages.getString("Language.swedish")),
|
||||
FRENCH_SWISS(0x100C, Messages.getString("Language.swiss.french")),
|
||||
GERMAN_SWISS(0x0807, Messages.getString("Language.swiss.german")),
|
||||
ITALIAN_SWISS(0x0810, Messages.getString("Language.swiss.italian")),
|
||||
THAI(0x041E, Messages.getString("Language.thai")),
|
||||
TRADITIONAL_CHINESE(0x0404, Messages.getString("Language.chinese.traditional")),
|
||||
TURKISH(0x041F, Messages.getString("Language.turkish")),
|
||||
URDU(0x0420, Messages.getString("Language.urdu")),
|
||||
;
|
||||
|
||||
private static final LanguageID[] VALUES = LanguageID.values();
|
||||
|
||||
static {
|
||||
Arrays.sort(VALUES, new DescribableComparator());
|
||||
}
|
||||
|
||||
private final int id;
|
||||
private final String description;
|
||||
|
||||
LanguageID(int id, String description) {
|
||||
this.id = id;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIndex() {
|
||||
for (int i = 0; i < VALUES.length; i++) {
|
||||
if (VALUES[i] == this) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
// should never happen
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static LanguageID[] sortedValues() {
|
||||
return VALUES;
|
||||
}
|
||||
}
|
||||
@@ -36,22 +36,36 @@
|
||||
*/
|
||||
package net.sf.launch4j.config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class LdDefaults {
|
||||
|
||||
public static final List<String> GUI_HEADER_OBJECTS = Arrays.asList(new String[] {
|
||||
private static final List<String> GUI_OBJECTS = Arrays.asList(new String[] {
|
||||
"w32api/crt2.o",
|
||||
"head/guihead.o",
|
||||
"head/head.o" });
|
||||
|
||||
public static final List<String> CONSOLE_HEADER_OBJECTS = Arrays.asList(new String[] {
|
||||
private static final List<String> CONSOLE_OBJECTS = Arrays.asList(new String[] {
|
||||
"w32api/crt2.o",
|
||||
"head/consolehead.o",
|
||||
"head/head.o"});
|
||||
"head/head.o" });
|
||||
|
||||
private static final List<String> JNI_GUI_32_OBJECTS = Arrays.asList(new String[] {
|
||||
"w32api_jni/crt2.o",
|
||||
"head_jni_BETA/jniguihead.o",
|
||||
"head_jni_BETA/head.o",
|
||||
"head_jni_BETA/jnihead.o" });
|
||||
|
||||
public static final List<String> LIBS = Arrays.asList(new String[] {
|
||||
private static final List<String> JNI_CONSOLE_32_OBJECTS = Arrays.asList(new String[] {
|
||||
"w32api_jni/crt2.o",
|
||||
"head_jni_BETA/jniconsolehead.o",
|
||||
"head_jni_BETA/head.o",
|
||||
"head_jni_BETA/jnihead.o" });
|
||||
|
||||
private static final List<List<String>> HEADER_OBJECTS;
|
||||
|
||||
private static final List<String> LIBS = Arrays.asList(new String[] {
|
||||
"w32api/libmingw32.a",
|
||||
"w32api/libgcc.a",
|
||||
"w32api/libmsvcrt.a",
|
||||
@@ -59,4 +73,45 @@ public class LdDefaults {
|
||||
"w32api/libuser32.a",
|
||||
"w32api/libadvapi32.a",
|
||||
"w32api/libshell32.a" });
|
||||
|
||||
private static final List<String> JNI_LIBS = Arrays.asList(new String[] {
|
||||
"w32api_jni/libmingw32.a",
|
||||
"w32api_jni/libmingwex.a",
|
||||
"w32api_jni/libgcc.a",
|
||||
"w32api_jni/libmsvcrt.a",
|
||||
"w32api_jni/libmoldname.a",
|
||||
"w32api_jni/libkernel32.a",
|
||||
"w32api_jni/libuser32.a",
|
||||
"w32api_jni/libadvapi32.a",
|
||||
"w32api_jni/libshell32.a" });
|
||||
|
||||
static {
|
||||
HEADER_OBJECTS = new ArrayList<List<String>>();
|
||||
HEADER_OBJECTS.add(GUI_OBJECTS);
|
||||
HEADER_OBJECTS.add(CONSOLE_OBJECTS);
|
||||
HEADER_OBJECTS.add(JNI_GUI_32_OBJECTS);
|
||||
HEADER_OBJECTS.add(JNI_CONSOLE_32_OBJECTS);
|
||||
}
|
||||
|
||||
public static List<String> getHeaderObjects(int headerTypeIndex) {
|
||||
if (headerTypeIndex < 0 || headerTypeIndex > 3) {
|
||||
throw new IllegalArgumentException("headerTypeIndex is out of range: " + headerTypeIndex);
|
||||
}
|
||||
|
||||
return HEADER_OBJECTS.get(headerTypeIndex);
|
||||
}
|
||||
|
||||
public static List<String> getLibs(String headerType) {
|
||||
if (Config.GUI_HEADER.equals(headerType)
|
||||
|| Config.CONSOLE_HEADER.equals(headerType)) {
|
||||
return LIBS;
|
||||
}
|
||||
|
||||
if (Config.JNI_GUI_HEADER_32.equals(headerType)
|
||||
|| Config.JNI_CONSOLE_HEADER_32.equals(headerType)) {
|
||||
return JNI_LIBS;
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException("Unknown headerType: " + headerType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ import net.sf.launch4j.binding.Validator;
|
||||
*/
|
||||
public class VersionInfo implements IValidatable {
|
||||
public static final String VERSION_PATTERN = "(\\d+\\.){3}\\d+";
|
||||
public static final int DEFAULT_LANGUAGE_INDEX = LanguageID.ENGLISH_US.getIndex();
|
||||
|
||||
private String fileVersion;
|
||||
private String txtFileVersion;
|
||||
@@ -55,6 +56,8 @@ public class VersionInfo implements IValidatable {
|
||||
private String companyName;
|
||||
private String internalName;
|
||||
private String originalFilename;
|
||||
private String trademarks;
|
||||
private LanguageID language;
|
||||
|
||||
public void checkInvariants() {
|
||||
Validator.checkString(fileVersion, 20, VERSION_PATTERN,
|
||||
@@ -77,6 +80,8 @@ public class VersionInfo implements IValidatable {
|
||||
Messages.getString("VersionInfo.company.name"));
|
||||
Validator.checkString(internalName, 50, "versionInfo.internalName",
|
||||
Messages.getString("VersionInfo.internal.name"));
|
||||
Validator.checkOptString(trademarks, 150, "versionInfo.trademarks",
|
||||
Messages.getString("VersionInfo.trademarks"));
|
||||
Validator.checkTrue(!internalName.endsWith(".exe"), "versionInfo.internalName",
|
||||
Messages.getString("VersionInfo.internal.name.not.exe"));
|
||||
Validator.checkString(originalFilename, 50, "versionInfo.originalFilename",
|
||||
@@ -165,4 +170,28 @@ public class VersionInfo implements IValidatable {
|
||||
public void setTxtProductVersion(String txtProductVersion) {
|
||||
this.txtProductVersion = txtProductVersion;
|
||||
}
|
||||
|
||||
public String getTrademarks() {
|
||||
return trademarks;
|
||||
}
|
||||
|
||||
public void setTrademarks(String trademarks) {
|
||||
this.trademarks = trademarks;
|
||||
}
|
||||
|
||||
public LanguageID getLanguage() {
|
||||
return (language == null) ? LanguageID.sortedValues()[DEFAULT_LANGUAGE_INDEX] : language;
|
||||
}
|
||||
|
||||
public void setLanguage(LanguageID language) {
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
public int getLanguageIndex() {
|
||||
return (language == null) ? DEFAULT_LANGUAGE_INDEX : language.getIndex();
|
||||
}
|
||||
|
||||
public void setLanguageIndex(int index) {
|
||||
language = LanguageID.sortedValues()[index];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,13 +63,14 @@ VersionInfo.product.version=Product version, should be 'x.x.x.x'
|
||||
VersionInfo.txt.product.version=Free from product version
|
||||
VersionInfo.product.name=Product name
|
||||
VersionInfo.company.name=Company name
|
||||
VersionInfo.trademarks=Trademarks
|
||||
VersionInfo.internal.name=Internal name
|
||||
VersionInfo.internal.name.not.exe=Internal name shouldn't have the .exe extension.
|
||||
VersionInfo.original.filename=Original filename
|
||||
VersionInfo.original.filename.exe=Original filename should end with the .exe extension.
|
||||
|
||||
Jre.min.version=Minimum JRE version should be x.x.x[_xx]
|
||||
Jre.max.version=Maximum JRE version should be x.x.x[_xx]
|
||||
Jre.min.version=Minimum JRE version should be 1.x.x[_xxx] or the Java 9 new version scheme xxx[.xxx[.xxx]], e.g., 1.5, 1.8.0_121, 10.0.1
|
||||
Jre.max.version=Maximum JRE version should be 1.x.x[_xxx] or the Java 9 new version scheme xxx[.xxx[.xxx]], e.g., 1.5, 1.8.0_121, 10.0.1
|
||||
Jre.specify.jre.min.version.or.path=Specify minimum JRE version and/or bundled JRE path.
|
||||
Jre.bundled.path=Bundled JRE path
|
||||
Jre.bundled.64bit.invalid=The bundled JRE 64-bit option can only be used if the JRE path is specified.
|
||||
@@ -94,3 +95,57 @@ Msg.launcherErr=Launcher error message
|
||||
|
||||
SingleInstance.mutexName=Mutex name
|
||||
SingleInstance.windowTitle=Window title
|
||||
|
||||
Charset.ascii=7-bit ASCII
|
||||
Charset.unicode=Unicode
|
||||
Charset.multilingual=Multilingual
|
||||
Charset.shift.jis=Japan (Shift JIS X-0208)
|
||||
Charset.shift.ksc=Korea (Shift KSC 5601)
|
||||
Charset.big5=Taiwan (Big5)
|
||||
Charset.latin2=Latin-2 (Eastern European)
|
||||
Charset.cyrillic=Cyrillic
|
||||
Language.arabic=Arabic
|
||||
Language.bulgarian=Bulgarian
|
||||
Language.catalan=Catalan
|
||||
Language.chinese.traditional=Chinese (Traditional)
|
||||
Language.czech=Czech
|
||||
Language.danish=Danish
|
||||
Language.german=German
|
||||
Language.english.us=English U.S.
|
||||
Language.greek=Greek
|
||||
Language.hebrew=Hebrew
|
||||
Language.polish=Polish
|
||||
Language.portuguese.brazil=Portuguese (Brazil)
|
||||
Language.rhaeto.romanic=Rhaeto Romanic
|
||||
Language.romanian=Romanian
|
||||
Language.russian=Russian
|
||||
Language.spanish.castilian=Spanish (Castilian)
|
||||
Language.finnish=Finnish
|
||||
Language.french=French
|
||||
Language.hungarian=Hungarian
|
||||
Language.icelandic=Icelandic
|
||||
Language.italian=Italian
|
||||
Language.japanese=Japanese
|
||||
Language.korean=Korean
|
||||
Language.dutch=Dutch
|
||||
Language.norwegian.bokmal=Norwegian Bokm\u00E5l
|
||||
Language.croato.serbian.latin=Croato-Serbian (Latin)
|
||||
Language.slovak=Slovak
|
||||
Language.albanian=Albanian
|
||||
Language.swedish=Swedish
|
||||
Language.thai=Thai
|
||||
Language.turkish=Turkish
|
||||
Language.urdu=Urdu
|
||||
Language.bahasa=Bahasa
|
||||
Language.chinese.simplified=Chinese (Simplified)
|
||||
Language.swiss.german=Swiss German
|
||||
Language.english.uk=English U.K.
|
||||
Language.spanish.mexico=Spanish (Mexico)
|
||||
Language.belgian.french=Belgian French
|
||||
Language.canadian.french=Canadian French
|
||||
Language.swiss.italian=Swiss Italian
|
||||
Language.belgian.dutch=Belgian Dutch
|
||||
Language.norwegian.nynorsk=Norwegian Nynorsk
|
||||
Language.portuguese.portugal=Portuguese (Portugal)
|
||||
Language.serbo.croatian.cyrillic=Serbo-Croatian (Cyrillic)
|
||||
Language.swiss.french=Swiss French
|
||||
|
||||
@@ -229,7 +229,6 @@ public abstract class BasicForm extends JPanel
|
||||
_errorTitleField.setToolTipText(Messages.getString("errorTitleTip"));
|
||||
jpanel1.add(_errorTitleField,cc.xywh(4,24,7,1));
|
||||
|
||||
_downloadUrlLabel.setIcon(loadImage("images/asterix.gif"));
|
||||
_downloadUrlLabel.setName("downloadUrlLabel");
|
||||
_downloadUrlLabel.setText(Messages.getString("downloadUrl"));
|
||||
jpanel1.add(_downloadUrlLabel,cc.xy(2,26));
|
||||
|
||||
Binary file not shown.
@@ -4,6 +4,7 @@ import com.jeta.forms.components.separator.TitledSeparator;
|
||||
import com.jgoodies.forms.layout.CellConstraints;
|
||||
import com.jgoodies.forms.layout.FormLayout;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Container;
|
||||
import java.awt.Dimension;
|
||||
import javax.swing.Box;
|
||||
@@ -27,6 +28,8 @@ public abstract class HeaderForm extends JPanel
|
||||
protected final JCheckBox _headerObjectsCheck = new JCheckBox();
|
||||
protected final JCheckBox _libsCheck = new JCheckBox();
|
||||
protected final TitledSeparator _linkerOptionsSeparator = new TitledSeparator();
|
||||
protected final JRadioButton _jniGuiHeaderRadio = new JRadioButton();
|
||||
protected final JRadioButton _jniConsoleHeaderRadio = new JRadioButton();
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
@@ -106,7 +109,7 @@ public abstract class HeaderForm extends JPanel
|
||||
public JPanel createPanel()
|
||||
{
|
||||
JPanel jpanel1 = new JPanel();
|
||||
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(0.2),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE");
|
||||
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(0.2),CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE");
|
||||
CellConstraints cc = new CellConstraints();
|
||||
jpanel1.setLayout(formlayout1);
|
||||
|
||||
@@ -117,12 +120,14 @@ public abstract class HeaderForm extends JPanel
|
||||
_guiHeaderRadio.setActionCommand("GUI");
|
||||
_guiHeaderRadio.setName("guiHeaderRadio");
|
||||
_guiHeaderRadio.setText(Messages.getString("gui"));
|
||||
_guiHeaderRadio.setToolTipText(Messages.getString("guiTooltip"));
|
||||
_headerButtonGroup.add(_guiHeaderRadio);
|
||||
jpanel1.add(_guiHeaderRadio,cc.xy(4,2));
|
||||
|
||||
_consoleHeaderRadio.setActionCommand("Console");
|
||||
_consoleHeaderRadio.setName("consoleHeaderRadio");
|
||||
_consoleHeaderRadio.setText(Messages.getString("console"));
|
||||
_consoleHeaderRadio.setToolTipText(Messages.getString("consoleTooltip"));
|
||||
_headerButtonGroup.add(_consoleHeaderRadio);
|
||||
jpanel1.add(_consoleHeaderRadio,cc.xy(6,2));
|
||||
|
||||
@@ -131,14 +136,14 @@ public abstract class HeaderForm extends JPanel
|
||||
jscrollpane1.setViewportView(_headerObjectsTextArea);
|
||||
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
|
||||
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
jpanel1.add(jscrollpane1,cc.xywh(4,6,4,1));
|
||||
jpanel1.add(jscrollpane1,cc.xywh(4,6,8,1));
|
||||
|
||||
_libsTextArea.setName("libsTextArea");
|
||||
JScrollPane jscrollpane2 = new JScrollPane();
|
||||
jscrollpane2.setViewportView(_libsTextArea);
|
||||
jscrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
|
||||
jscrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
jpanel1.add(jscrollpane2,cc.xywh(4,8,4,1));
|
||||
jpanel1.add(jscrollpane2,cc.xywh(4,8,8,1));
|
||||
|
||||
_headerObjectsCheck.setActionCommand("Object files");
|
||||
_headerObjectsCheck.setName("headerObjectsCheck");
|
||||
@@ -152,9 +157,25 @@ public abstract class HeaderForm extends JPanel
|
||||
|
||||
_linkerOptionsSeparator.setName("linkerOptionsSeparator");
|
||||
_linkerOptionsSeparator.setText(Messages.getString("linkerOptions"));
|
||||
jpanel1.add(_linkerOptionsSeparator,cc.xywh(2,4,6,1));
|
||||
jpanel1.add(_linkerOptionsSeparator,cc.xywh(2,4,10,1));
|
||||
|
||||
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8 },new int[]{ 1,2,3,4,5,6,7,8,9 });
|
||||
_jniGuiHeaderRadio.setActionCommand(Messages.getString("jniGui"));
|
||||
_jniGuiHeaderRadio.setForeground(new Color(255,102,0));
|
||||
_jniGuiHeaderRadio.setName("jniGuiHeaderRadio");
|
||||
_jniGuiHeaderRadio.setText(Messages.getString("jniGui"));
|
||||
_jniGuiHeaderRadio.setToolTipText(Messages.getString("jniGuiTooltip"));
|
||||
_headerButtonGroup.add(_jniGuiHeaderRadio);
|
||||
jpanel1.add(_jniGuiHeaderRadio,cc.xy(8,2));
|
||||
|
||||
_jniConsoleHeaderRadio.setActionCommand(Messages.getString("jniConsole"));
|
||||
_jniConsoleHeaderRadio.setForeground(new Color(255,102,0));
|
||||
_jniConsoleHeaderRadio.setName("jniConsoleHeaderRadio");
|
||||
_jniConsoleHeaderRadio.setText(Messages.getString("jniConsole"));
|
||||
_jniConsoleHeaderRadio.setToolTipText(Messages.getString("jniConsoleTooltip"));
|
||||
_headerButtonGroup.add(_jniConsoleHeaderRadio);
|
||||
jpanel1.add(_jniConsoleHeaderRadio,cc.xy(10,2));
|
||||
|
||||
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12 },new int[]{ 1,2,3,4,5,6,7,8,9 });
|
||||
return jpanel1;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -9,6 +9,7 @@ import java.awt.Dimension;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
@@ -37,6 +38,10 @@ public abstract class VersionInfoForm extends JPanel
|
||||
protected final JTextField _internalNameField = new JTextField();
|
||||
protected final JLabel _companyNameLabel = new JLabel();
|
||||
protected final JTextField _companyNameField = new JTextField();
|
||||
protected final JLabel _languageLabel = new JLabel();
|
||||
protected final JComboBox _languageCombo = new JComboBox();
|
||||
protected final JLabel _trademarksLabel = new JLabel();
|
||||
protected final JTextField _trademarksField = new JTextField();
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
@@ -116,7 +121,7 @@ public abstract class VersionInfoForm extends JPanel
|
||||
public JPanel createPanel()
|
||||
{
|
||||
JPanel jpanel1 = new JPanel();
|
||||
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:7DLU:NONE,RIGHT:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
|
||||
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:60DLU:NONE,FILL:7DLU:NONE,RIGHT:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
|
||||
CellConstraints cc = new CellConstraints();
|
||||
jpanel1.setLayout(formlayout1);
|
||||
|
||||
@@ -215,7 +220,21 @@ public abstract class VersionInfoForm extends JPanel
|
||||
_companyNameField.setName("companyNameField");
|
||||
jpanel1.add(_companyNameField,cc.xywh(4,16,5,1));
|
||||
|
||||
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 });
|
||||
_languageLabel.setName("languageLabel");
|
||||
_languageLabel.setText(Messages.getString("language"));
|
||||
jpanel1.add(_languageLabel,cc.xy(2,24));
|
||||
|
||||
_languageCombo.setName("languageCombo");
|
||||
jpanel1.add(_languageCombo,cc.xywh(4,24,3,1));
|
||||
|
||||
_trademarksLabel.setName("trademarksLabel");
|
||||
_trademarksLabel.setText(Messages.getString("trademarks"));
|
||||
jpanel1.add(_trademarksLabel,cc.xy(2,22));
|
||||
|
||||
_trademarksField.setName("trademarksField");
|
||||
jpanel1.add(_trademarksField,cc.xywh(4,22,5,1));
|
||||
|
||||
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 });
|
||||
return jpanel1;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -71,7 +71,13 @@ importClassPath=Import attributes from a jar's manifest.
|
||||
|
||||
headerType=Header type:
|
||||
gui=GUI
|
||||
guiTooltip=Stable version of the GUI header which uses the javaw.exe launcher.
|
||||
console=Console
|
||||
consoleTooltip=Stable version of the console header which uses the java.exe launcher.
|
||||
jniGui=JNI GUI (beta)
|
||||
jniGuiTooltip=BETA version of the GUI header which launches the Java VM through JNI.
|
||||
jniConsole=JNI Console (beta)
|
||||
jniConsoleTooltip=BETA version of the console header which launches the Java VM through JNI.
|
||||
objectFiles=Object files:
|
||||
libs=w32api:
|
||||
linkerOptions=Custom header - linker options
|
||||
@@ -141,6 +147,9 @@ originalFilenameTip=Original name of the file without the path. Allows to determ
|
||||
internalName=Internal name:
|
||||
internalNameTip=Internal name without extension, original filename or module name for example.
|
||||
companyName=Company name:
|
||||
trademarks=Trademarks:
|
||||
language=Language:
|
||||
charset=Charset:
|
||||
|
||||
addMessages=Add custom messages
|
||||
startupErr=Startup error:
|
||||
|
||||
@@ -40,8 +40,6 @@ import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JRadioButton;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
import net.sf.launch4j.binding.Binding;
|
||||
import net.sf.launch4j.binding.Bindings;
|
||||
@@ -58,24 +56,45 @@ public class HeaderFormImpl extends HeaderForm {
|
||||
public HeaderFormImpl(Bindings bindings) {
|
||||
_bindings = bindings;
|
||||
_bindings.add("headerTypeIndex", new JRadioButton[] { _guiHeaderRadio,
|
||||
_consoleHeaderRadio })
|
||||
_consoleHeaderRadio,
|
||||
_jniGuiHeaderRadio,
|
||||
_jniConsoleHeaderRadio })
|
||||
.add("headerObjects", "customHeaderObjects", _headerObjectsCheck,
|
||||
_headerObjectsTextArea)
|
||||
.add("libs", "customLibs", _libsCheck, _libsTextArea);
|
||||
|
||||
_guiHeaderRadio.addChangeListener(new HeaderTypeChangeListener());
|
||||
_guiHeaderRadio.setActionCommand(Config.GUI_HEADER);
|
||||
_consoleHeaderRadio.setActionCommand(Config.CONSOLE_HEADER);
|
||||
_jniGuiHeaderRadio.setActionCommand(Config.JNI_GUI_HEADER_32);
|
||||
_jniConsoleHeaderRadio.setActionCommand(Config.JNI_CONSOLE_HEADER_32);
|
||||
|
||||
ActionListener headerTypeActionListener = new HeaderTypeActionListener();
|
||||
_guiHeaderRadio.addActionListener(headerTypeActionListener);
|
||||
_consoleHeaderRadio.addActionListener(headerTypeActionListener);
|
||||
_jniGuiHeaderRadio.addActionListener(headerTypeActionListener);
|
||||
_jniConsoleHeaderRadio.addActionListener(headerTypeActionListener);
|
||||
|
||||
_headerObjectsCheck.addActionListener(new HeaderObjectsActionListener());
|
||||
_libsCheck.addActionListener(new LibsActionListener());
|
||||
}
|
||||
|
||||
private void updateLibs() {
|
||||
if (!_libsCheck.isSelected()) {
|
||||
ConfigPersister.getInstance().getConfig().setLibs(null);
|
||||
Binding b = _bindings.getBinding("libs");
|
||||
b.put(ConfigPersister.getInstance().getConfig());
|
||||
}
|
||||
}
|
||||
|
||||
private class HeaderTypeChangeListener implements ChangeListener {
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
private class HeaderTypeActionListener implements ActionListener {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Config c = ConfigPersister.getInstance().getConfig();
|
||||
c.setHeaderType(_guiHeaderRadio.isSelected() ? Config.GUI_HEADER
|
||||
: Config.CONSOLE_HEADER);
|
||||
c.setHeaderType(e.getActionCommand());
|
||||
|
||||
if (!_headerObjectsCheck.isSelected()) {
|
||||
Binding b = _bindings.getBinding("headerObjects");
|
||||
b.put(c);
|
||||
updateLibs();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -92,11 +111,7 @@ public class HeaderFormImpl extends HeaderForm {
|
||||
|
||||
private class LibsActionListener implements ActionListener {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (!_libsCheck.isSelected()) {
|
||||
ConfigPersister.getInstance().getConfig().setLibs(null);
|
||||
Binding b = _bindings.getBinding("libs");
|
||||
b.put(ConfigPersister.getInstance().getConfig());
|
||||
}
|
||||
updateLibs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,6 @@ import net.sf.launch4j.Util;
|
||||
import net.sf.launch4j.binding.Binding;
|
||||
import net.sf.launch4j.binding.BindingException;
|
||||
import net.sf.launch4j.binding.InvariantViolationException;
|
||||
import net.sf.launch4j.config.Config;
|
||||
import net.sf.launch4j.config.ConfigPersister;
|
||||
import net.sf.launch4j.config.ConfigPersisterException;
|
||||
|
||||
@@ -226,7 +225,7 @@ public class MainFrame extends JFrame {
|
||||
}
|
||||
|
||||
private void showConfigName(File config) {
|
||||
setTitle(Main.getName() + " - " + (config != null ? config.getName()
|
||||
setTitle(Main.getName() + " - " + (config != null ? config.getName()
|
||||
: Messages.getString("MainFrame.untitled")));
|
||||
}
|
||||
|
||||
@@ -309,8 +308,8 @@ public class MainFrame extends JFrame {
|
||||
ConfigPersister.getInstance().getConfig().checkInvariants();
|
||||
Builder b = new Builder(log);
|
||||
_outfile = b.build();
|
||||
setRunEnabled(ConfigPersister.getInstance().getConfig()
|
||||
.getHeaderType() == Config.GUI_HEADER // TODO fix console app test
|
||||
setRunEnabled(ConfigPersister.getInstance().getConfig().isGuiApplication()
|
||||
// TODO fix console app test
|
||||
&& (Util.WINDOWS_OS || !ConfigPersister.getInstance()
|
||||
.getConfig().isDontWrapJar()));
|
||||
} catch (InvariantViolationException ex) {
|
||||
|
||||
@@ -36,9 +36,11 @@
|
||||
*/
|
||||
package net.sf.launch4j.formimpl;
|
||||
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JFileChooser;
|
||||
|
||||
import net.sf.launch4j.binding.Bindings;
|
||||
import net.sf.launch4j.config.LanguageID;
|
||||
import net.sf.launch4j.config.VersionInfo;
|
||||
import net.sf.launch4j.form.VersionInfoForm;
|
||||
|
||||
@@ -48,6 +50,7 @@ import net.sf.launch4j.form.VersionInfoForm;
|
||||
public class VersionInfoFormImpl extends VersionInfoForm {
|
||||
|
||||
public VersionInfoFormImpl(Bindings bindings, JFileChooser fc) {
|
||||
_languageCombo.setModel(new DefaultComboBoxModel(LanguageID.sortedValues()));
|
||||
bindings.addOptComponent("versionInfo", VersionInfo.class, _versionInfoCheck)
|
||||
.add("versionInfo.fileVersion", _fileVersionField)
|
||||
.add("versionInfo.productVersion", _productVersionField)
|
||||
@@ -58,6 +61,9 @@ public class VersionInfoFormImpl extends VersionInfoForm {
|
||||
.add("versionInfo.txtFileVersion", _txtFileVersionField)
|
||||
.add("versionInfo.txtProductVersion", _txtProductVersionField)
|
||||
.add("versionInfo.companyName", _companyNameField)
|
||||
.add("versionInfo.copyright", _copyrightField);
|
||||
.add("versionInfo.copyright", _copyrightField)
|
||||
.add("versionInfo.trademarks", _trademarksField)
|
||||
.add("versionInfo.languageIndex", _languageCombo, VersionInfo.DEFAULT_LANGUAGE_INDEX)
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ Main.usage=usage
|
||||
|
||||
Builder.compiling.resources=Compiling resources
|
||||
Builder.linking=Linking
|
||||
Builder.wrapping=Wrapping
|
||||
Builder.wrapping=Wrapping\nWARNING: Sign the executable to minimize antivirus false positives or use launching instead of wrapping.
|
||||
Builder.success=Successfully created
|
||||
Builder.generated.resource.file=Generated resource file...\n
|
||||
Builder.line.has.errors=Line {0} has errors...
|
||||
|
||||
25
launch4j/w32api_jni/MinGW.LICENSE.txt
Normal file
25
launch4j/w32api_jni/MinGW.LICENSE.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
MinGW - Licensing Terms
|
||||
|
||||
Various pieces distributed with MinGW come with its own copyright and license:
|
||||
|
||||
Basic MinGW runtime
|
||||
MinGW base runtime package is uncopyrighted and placed in the public domain.
|
||||
This basically means that you can do what you want with the code.
|
||||
|
||||
w32api
|
||||
You are free to use, modify and copy this package.
|
||||
No restrictions are imposed on programs or object files compiled with this library.
|
||||
You may not restrict the the usage of this library.
|
||||
You may distribute this library as part of another package or as a modified package
|
||||
if and only if you do not restrict the usage of the portions consisting
|
||||
of this (optionally modified) library.
|
||||
If distributed as a modified package then this file must be included.
|
||||
|
||||
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.
|
||||
|
||||
MinGW profiling code
|
||||
MinGW profiling code is distributed under the GNU General Public License.
|
||||
|
||||
The development tools such as GCC, GDB, GNU Make, etc all covered by GNU General Public License.
|
||||
BIN
launch4j/w32api_jni/crt2.o
Normal file
BIN
launch4j/w32api_jni/crt2.o
Normal file
Binary file not shown.
BIN
launch4j/w32api_jni/libadvapi32.a
Normal file
BIN
launch4j/w32api_jni/libadvapi32.a
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user