git: dd3de98073b1 - main - games/jin: refresh, make work with newer Java
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 16 Dec 2025 11:00:36 UTC
The branch main has been updated by ronald:
URL: https://cgit.FreeBSD.org/ports/commit/?id=dd3de98073b115d64f0144ca9911b46a28804538
commit dd3de98073b115d64f0144ca9911b46a28804538
Author: Mikhail Teterin <mi@FreeBSD.org>
AuthorDate: 2025-12-16 10:58:14 +0000
Commit: Ronald Klop <ronald@FreeBSD.org>
CommitDate: 2025-12-16 10:59:58 +0000
games/jin: refresh, make work with newer Java
In particular:
- don't try to compile the Sun's audio interface --
apparently, we never used it and it becomes a problem
with newer JDKs, where the long obsolete sun.audio.*
is finally removed ^
- try harder to find an audio format suitable for the
bundled sounds; this may still not be enough on modern
hardware, which expects sampling rates much higher than 8kHz.
- don't use AWT's getPeer() method -- long obsolete, it
is now removed too.
- constructing Integer from int and the likes are obsolete
too, generally, the primitives can be used directly --
all of these are concentrated in the (large) patch-warnings.
- use standard java.awt.Desktop function to open pages in
the user's web-browser.
PR: 291693
---
games/jin/Makefile | 5 +-
games/jin/files/patch-audio | 76 ++++
games/jin/files/patch-browser | 81 ++++
games/jin/files/patch-new-awt | 38 ++
games/jin/files/patch-warnings | 985 +++++++++++++++++++++++++++++++++++++++++
5 files changed, 1184 insertions(+), 1 deletion(-)
diff --git a/games/jin/Makefile b/games/jin/Makefile
index e11f27cba17a..b2f83995b00d 100644
--- a/games/jin/Makefile
+++ b/games/jin/Makefile
@@ -1,6 +1,6 @@
PORTNAME= jin
PORTVERSION= 2.14.1
-PORTREVISION= 6
+PORTREVISION= 7
CATEGORIES= games java
MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTNAME}-${PORTVERSION}
DISTNAME= ${PORTNAME}-${PORTVERSION}-source
@@ -27,6 +27,9 @@ DATADIR= ${JAVASHAREDIR}/${PORTNAME}
EXTRACT_AFTER_ARGS= --exclude 'bsh*.jar' \
--exclude os-specific/unix/jin \
+ --exclude os-specific/macosx \
+ --exclude SunAudioPlayer.java \
+ --exclude *Applet*.java \
--exclude jgoodies-windows.jar
JINJAR= ${PORTNAME}.jar
diff --git a/games/jin/files/patch-audio b/games/jin/files/patch-audio
new file mode 100644
index 000000000000..74b806e1094d
--- /dev/null
+++ b/games/jin/files/patch-audio
@@ -0,0 +1,76 @@
+Try harder to find an audio format suitable for the bundled
+collection of 8kHz sounds... Still likely to fail on modern
+hardware, which expects much higher sampling rates...
+
+ -mi (December 2025)
+
+--- src/free/util/audio/GenericJavaxSampledAudioPlayer.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/util/audio/GenericJavaxSampledAudioPlayer.java 2025-12-15 18:39:40.763246000 -0500
+@@ -38,4 +38,5 @@
+ public void run(){
+ SourceDataLine dataLine = null;
++ DataLine.Info info = null;
+ while (true){
+ try{
+@@ -43,10 +44,12 @@
+ byte [] data = audioClip.getData();
+ AudioFormat format = getFormatForPlaying(data);
++ System.err.println("Trying autio format: " + format);
+ data = convertAudioData(data, format);
+
+ if (dataLine == null){
+- DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
++ info = new DataLine.Info(SourceDataLine.class, format);
+ dataLine = (SourceDataLine)AudioSystem.getLine(info);
+ }
++ System.err.println("Trying autio with: " + info);
+
+ if (!dataLine.isOpen())
+--- src/free/util/audio/JavaxSampledAudioPlayer.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/util/audio/JavaxSampledAudioPlayer.java 2025-12-15 18:54:51.876119000 -0500
+@@ -95,19 +95,28 @@
+ protected static AudioFormat getFormatForPlaying(byte [] audioData)
+ throws UnsupportedAudioFileException, IOException{
+- AudioFormat format = AudioSystem.getAudioFileFormat(
+- new ByteArrayInputStream(audioData)).getFormat();
++ ByteArrayInputStream bais = new ByteArrayInputStream(audioData);
++ AudioFormat format = AudioSystem.getAudioFileFormat(bais).getFormat();
++ DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
+
+- // At present, ALAW and ULAW encodings must be converted
+- // to PCM_SIGNED before it can be played
+- if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED)
+- return new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
+- format.getSampleRate(), format.getSampleSizeInBits() * 2,
+- format.getChannels(), format.getFrameSize() * 2,
+- format.getFrameRate(), true);
+- else
++ if (AudioSystem.isLineSupported(info)) {
++ System.err.println("Audio format ``" + format + "'' can be used straight");
+ return format;
+- }
++ }
++ System.err.println("Audio format ``" + format + "'' can not be used straight");
+
++ AudioFormat[] possibleFormats = AudioSystem.getTargetFormats(
++ AudioFormat.Encoding.PCM_SIGNED, format);
+
++ for (AudioFormat newFormat : possibleFormats) {
++ info = new DataLine.Info(SourceDataLine.class, newFormat);
++ if (AudioSystem.isLineSupported(info)) {
++ System.err.println("Will try audio format " + newFormat + " instead of " + format);
++ return newFormat;
++ }
++ System.err.println("Format ``" + newFormat + "'' cannot be used");
++ }
++ throw new UnsupportedAudioFileException("No suitable audio format among " +
++ possibleFormats.length + " possibilities");
++ }
+
+ /**
+@@ -128,3 +137,3 @@
+ }
+
+-}
+\ No newline at end of file
++}
diff --git a/games/jin/files/patch-browser b/games/jin/files/patch-browser
new file mode 100644
index 000000000000..9c9f447f9344
--- /dev/null
+++ b/games/jin/files/patch-browser
@@ -0,0 +1,81 @@
+Use java.awt.Desktop instead of trying (and failing) to invoke
+some kind of browser ourselves.
+
+ -mi
+
+--- src/free/util/BrowserControl.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/util/BrowserControl.java 2025-12-15 21:39:55.153096000 -0500
+@@ -31,4 +31,6 @@
+ import java.io.InputStream;
+ import java.io.InterruptedIOException;
++import java.awt.Desktop;
++import java.net.URI;
+ import java.net.URL;
+ import java.util.Properties;
+@@ -81,63 +82,8 @@
+ if (appletContext != null){ // Running in an applet.
+ appletContext.showDocument(new URL(url), "_blank");
++ } else {
++ Desktop.getDesktop().browse(new URI(url));
+ }
+- else if (PlatformUtils.isWindows()){
+- if (url.endsWith(".html")||url.endsWith(".htm")){
+-
+- // url-encode the last character because windows refuses to display URLs
+- // ending with ".html" or ".htm", but works fine
+- // for ".htm%6c" or ".ht%6d"
+- int lastChar = url.charAt(url.length() -1);
+- url = url.substring(0, url.length() - 1) + "%" + Integer.toHexString(lastChar);
+- }
+- String cmd = "rundll32 url.dll,FileProtocolHandler "+url;
+- Runtime.getRuntime().exec(cmd);
+- }
+- else if (PlatformUtils.isMacOSX()){
+- String [] commandLine = new String[]{"open", url};
+- Runtime.getRuntime().exec(commandLine);
+- }
+- else if (PlatformUtils.isMacOS()){
+- String [] commandLine = new String[]{"netscape", url};
+- Runtime.getRuntime().exec(commandLine);
+- }
+- else{
+- synchronized(BrowserControl.class){
+- if (environment == null){
+- environment = new Properties();
+- try{
+- Process env = Runtime.getRuntime().exec("env");
+- InputStream in = env.getInputStream();
+- try{
+- environment.load(in);
+- } finally{
+- in.close();
+- }
+- } catch (IOException e){e.printStackTrace();}
+- }
+- }
+-
+- String browsers = environment.getProperty("BROWSER");
+- if ((browsers == null) || ("".equals(browsers))){
+- return tryMozilla(url);
+- }
+-
+- StringTokenizer tokenizer = new StringTokenizer(browsers, ":");
+- if (!tokenizer.hasMoreTokens())
+- return false;
+-
+- String browser = tokenizer.nextToken();
+- int percentPercentIndex;
+- while ((percentPercentIndex = browser.indexOf("%%")) != -1)
+- browser = browser.substring(0, percentPercentIndex)+"%"+browser.substring(percentPercentIndex+3);
+- int urlIndex = browser.indexOf("%s");
+- String commandline;
+- if (urlIndex != -1)
+- commandline = browser.substring(0, urlIndex)+url+browser.substring(urlIndex+2);
+- else
+- commandline = browser+" "+url;
+- Runtime.getRuntime().exec(commandline);
+- }
+- } catch (IOException e){
++ } catch (Exception e){
+ return false;
+ }
diff --git a/games/jin/files/patch-new-awt b/games/jin/files/patch-new-awt
new file mode 100644
index 000000000000..70183e393c74
--- /dev/null
+++ b/games/jin/files/patch-new-awt
@@ -0,0 +1,38 @@
+getPeer() has been obsolete for a while and is removed in JDK-23...
+
+ -mi
+
+--- src/free/jin/ui/AbstractUiProvider.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/jin/ui/AbstractUiProvider.java 2025-12-15 14:54:53.050790000 -0500
+@@ -266,5 +266,5 @@
+ // Bugfix for Java bug 4464714 - setExtendedState only works once the
+ // the window is realized.
+- if (frame.getPeer() == null)
++ if (!frame.isDisplayable())
+ frame.addNotify();
+
+--- src/free/jin/ui/AbstractPluginUIContainer.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/jin/ui/AbstractPluginUIContainer.java 2025-12-15 14:54:45.330812000 -0500
+@@ -246,5 +246,5 @@
+ // This makes the insets of the frame known, which is important for
+ // determining its real preferred size
+- if ((container instanceof Frame) && (container.getPeer() == null))
++ if (container instanceof Frame && !container.isDisplayable())
+ ((Frame)container).pack();
+
+--- src/free/jin/console/Console.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/console/Console.java 2025-12-15 15:06:29.671569000 -0500
+@@ -686,5 +686,5 @@
+ if (scrollToBottom && didScrollToBottom){
+ // This may be false if the frame containing us (for example), is iconified
+- if (getPeer() != null){
++ if (isDisplayable()) {
+ didScrollToBottom = false;
+ SwingUtilities.invokeLater(new BottomScroller(numAddToOutputCalls));
+@@ -977,5 +977,5 @@
+
+ String fontFamily = (String)prefs.lookup("font-family." + textType, "Monospaced");
+- Integer fontSize = (Integer)prefs.lookup("font-size." + textType, new Integer(14));
++ Integer fontSize = (Integer)prefs.lookup("font-size." + textType, 14);
+ Boolean bold = (Boolean)prefs.lookup("font-bold." + textType, Boolean.FALSE);
+ Boolean italic = (Boolean)prefs.lookup("font-italic." + textType, Boolean.FALSE);
diff --git a/games/jin/files/patch-warnings b/games/jin/files/patch-warnings
new file mode 100644
index 000000000000..fe1cc84e0041
--- /dev/null
+++ b/games/jin/files/patch-warnings
@@ -0,0 +1,985 @@
+Fix most (not all) compiler warnings raised by Java-23.
+
+ -mi
+--- src/free/chess/ImagePiecePainter.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/chess/ImagePiecePainter.java 2025-12-15 15:31:53.748755000 -0500
+@@ -299,5 +299,5 @@
+ return images;
+ else{
+- ImageDataReceiver receiver = (ImageDataReceiver)imageDataReceivers.get(new Integer(imageSize));
++ ImageDataReceiver receiver = (ImageDataReceiver)imageDataReceivers.get(imageSize);
+ if (receiver != null){ // We're already loading the images
+ receiver.addComponentToRepaint(target);
+@@ -318,5 +318,5 @@
+ Map shadedImages = shadedPieceImages[imageSize];
+ receiver = new ImageDataReceiver(asyncImageLoad ? target : null, imageSize, normalImages, shadedImages);
+- imageDataReceivers.put(new Integer(imageSize), receiver);
++ imageDataReceivers.put(imageSize, receiver);
+
+ if (asyncImageLoad){
+@@ -480,5 +480,5 @@
+ }
+
+- imageDataReceivers.remove(new Integer(imageSize));
++ imageDataReceivers.remove(imageSize);
+
+ for (Iterator i = componentsToRepaint.iterator(); i.hasNext();){
+--- src/free/chess/SquareImagesBoardPainter.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/chess/SquareImagesBoardPainter.java 2025-12-15 15:40:08.918160000 -0500
+@@ -250,5 +250,5 @@
+
+ if (def.getProperty("scaleSquares") != null) // Backward compatibility
+- mode = new Boolean(def.getProperty("scaleSquares", "false")).booleanValue() ? SCALE_MODE : SLICE_MODE;
++ mode = Boolean.parseBoolean(def.getProperty("scaleSquares", "false")) ? SCALE_MODE : SLICE_MODE;
+ else{
+ String modeString = def.getProperty("imageUseMode", "slice");
+--- src/free/chessclub/ChessclubConnection.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/chessclub/ChessclubConnection.java 2025-12-15 15:48:03.677166000 -0500
+@@ -661,5 +661,5 @@
+
+ public String getRatingCategoryName(int index){
+- return (String)ratingCategoryNames.get(new Integer(index));
++ return (String)ratingCategoryNames.get(index);
+ }
+
+@@ -676,5 +676,5 @@
+
+ public String getVariantName(int number){
+- return (String)variantNames.get(new Integer(number));
++ return (String)variantNames.get(number);
+ }
+
+@@ -701,10 +701,10 @@
+ int index = datagram.getInteger(0);
+ String name = datagram.getString(1);
+- ratingCategoryNames.put(new Integer(index), name);
++ ratingCategoryNames.put(index, name);
+ }
+ else if (id == Datagram.DG_WILD_KEY){
+ int number = datagram.getInteger(0);
+ String name = datagram.getString(1);
+- variantNames.put(new Integer(number), name);
++ variantNames.put(number, name);
+ }
+ else if (id == Datagram.DG_SET2){
+--- src/free/util/Struct.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/util/Struct.java 2025-12-15 15:49:35.081597000 -0500
+@@ -91,5 +91,5 @@
+
+ protected final void setIntegerProperty(String propertyName, int propertyValue){
+- setProperty(propertyName, new Integer(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+@@ -102,5 +102,5 @@
+
+ protected final void setCharProperty(String propertyName, char propertyValue){
+- setProperty(propertyName, new Character(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+--- src/free/freechess/Ivar.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/freechess/Ivar.java 2025-12-15 15:50:36.482285000 -0500
+@@ -364,7 +364,7 @@
+ this.index = index;
+
+- Object ivar = INDEX_TO_IVAR.put(new Integer(index), this);
++ Object ivar = INDEX_TO_IVAR.put(index, this);
+ if (ivar != null){
+- INDEX_TO_IVAR.put(new Integer(index), ivar);
++ INDEX_TO_IVAR.put(index, ivar);
+ throw new IllegalArgumentException("The index "+index+" is already taken by "+ivar);
+ }
+@@ -405,5 +405,5 @@
+
+ public static Ivar getByIndex(int index){
+- return (Ivar)INDEX_TO_IVAR.get(new Integer(index));
++ return (Ivar)INDEX_TO_IVAR.get(index);
+ }
+
+--- src/free/jin/Preferences.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/jin/Preferences.java 2025-12-15 15:55:56.517227000 -0500
+@@ -221,5 +221,5 @@
+
+ public int getInt(String prefName, int defaultValue){
+- return ((Integer)get(prefName, new Integer(defaultValue))).intValue();
++ return (int)get(prefName, defaultValue);
+ }
+
+@@ -233,5 +233,5 @@
+
+ public int getInt(String prefName){
+- return ((Integer)get(prefName)).intValue();
++ return (int)get(prefName);
+ }
+
+@@ -244,5 +244,5 @@
+
+ public double getDouble(String prefName, double defaultValue){
+- return ((Double)get(prefName, new Double(defaultValue))).doubleValue();
++ return (double)get(prefName, defaultValue);
+ }
+
+@@ -256,5 +256,5 @@
+
+ public double getDouble(String prefName){
+- return ((Double)get(prefName)).doubleValue();
++ return (double)get(prefName);
+ }
+
+@@ -391,5 +391,5 @@
+
+ public void setInt(String prefName, int prefValue){
+- set(prefName, new Integer(prefValue));
++ set(prefName, prefValue);
+ }
+
+@@ -401,5 +401,5 @@
+
+ public void setDouble(String prefName, double prefValue){
+- set(prefName, new Double(prefValue));
++ set(prefName, prefValue);
+ }
+
+@@ -655,7 +655,7 @@
+ return Boolean.valueOf(s.substring("boolean;".length()));
+ else if (s.startsWith("integer;"))
+- return new Integer(s.substring("integer;".length()));
++ return Integer.parseInt(s.substring("integer;".length()));
+ else if (s.startsWith("double;"))
+- return new Double(s.substring("double;".length()));
++ return Double.parseDouble(s.substring("double;".length()));
+ else if (s.startsWith("string;"))
+ return StringParser.parseString(s.substring("string;".length()));
+--- src/free/jin/Game.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/Game.java 2025-12-15 16:00:03.250357000 -0500
+@@ -767,5 +767,5 @@
+ throw new IllegalStateException("Unable to set the result more than once");
+
+- props.setProperty("result", new Integer(result));
++ props.setProperty("result", result);
+ }
+
+--- src/free/util/BeanProperties.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/util/BeanProperties.java 2025-12-15 16:04:51.507724000 -0500
+@@ -222,5 +222,5 @@
+
+ public void setByteProperty(String propertyName, byte propertyValue){
+- setProperty(propertyName, new Byte(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+@@ -262,5 +262,5 @@
+
+ public void setShortProperty(String propertyName, short propertyValue){
+- setProperty(propertyName, new Short(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+@@ -302,5 +302,5 @@
+
+ public void setIntegerProperty(String propertyName, int propertyValue){
+- setProperty(propertyName, new Integer(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+@@ -342,5 +342,5 @@
+
+ public void setLongProperty(String propertyName, int propertyValue){
+- setProperty(propertyName, new Long(propertyValue));
++ setProperty(propertyName, (long)(propertyValue));
+ }
+
+@@ -382,5 +382,5 @@
+
+ public void setFloatProperty(String propertyName, float propertyValue){
+- setProperty(propertyName, new Float(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+@@ -422,5 +422,5 @@
+
+ public void setDoubleProperty(String propertyName, double propertyValue){
+- setProperty(propertyName, new Double(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+@@ -462,5 +462,5 @@
+
+ public void setCharacterProperty(String propertyName, char propertyValue){
+- setProperty(propertyName, new Character(propertyValue));
++ setProperty(propertyName, propertyValue);
+ }
+
+--- src/free/jin/ConnectionManager.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/jin/ConnectionManager.java 2025-12-15 16:06:49.016423000 -0500
+@@ -155,5 +155,5 @@
+
+ // Application parameters
+- boolean isGuest = new Boolean(jin.getParameter("login.guest")).booleanValue();
++ boolean isGuest = Boolean.parseBoolean(jin.getParameter("login.guest"));
+ String username = jin.getParameter("login.username");
+ if (isGuest)
+@@ -210,5 +210,5 @@
+
+ String savePassString = jin.getParameter("login.savepassword");
+- boolean savePassword = new Boolean(savePassString).booleanValue();
++ boolean savePassword = Boolean.parseBoolean(savePassString);
+ if ((savePassString == null) && !connDetails.isGuest())
+ savePassword = connDetails.isSavePassword();
+@@ -232,5 +232,5 @@
+ connDetails = ConnectionDetails.create(server, user, user.getUsername(), password, savePassword, hostname, ports);
+
+- if (!(new Boolean(jin.getParameter("autologin")).booleanValue()))
++ if (!(Boolean.parseBoolean(jin.getParameter("autologin"))))
+ connDetails = new LoginPanel(connDetails).askConnectionDetails();
+
+--- src/free/jin/GameListItem.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/GameListItem.java 2025-12-15 16:08:17.799524000 -0500
+@@ -78,5 +78,5 @@
+ boolean isRated, String variantName, String ratingCategoryName, String eco){
+
+- setProperty("Index", new Integer(index));
++ setProperty("Index", index);
+ setProperty("GameID", gameID);
+ setProperty("DateString", dateString);
+@@ -84,10 +84,10 @@
+ setProperty("WhiteName", whiteName);
+ setProperty("BlackName", blackName);
+- setProperty("WhiteTime", new Integer(whiteTime));
+- setProperty("WhiteInc", new Integer(whiteInc));
+- setProperty("BlackTime", new Integer(blackTime));
+- setProperty("BlackInc", new Integer(blackInc));
+- setProperty("WhiteRating", new Integer(whiteRating));
+- setProperty("BlackRating", new Integer(blackRating));
++ setProperty("WhiteTime", whiteTime);
++ setProperty("WhiteInc", whiteInc);
++ setProperty("BlackTime", blackTime);
++ setProperty("BlackInc", blackInc);
++ setProperty("WhiteRating", whiteRating);
++ setProperty("BlackRating", blackRating);
+ setProperty("IsRated", isRated ? Boolean.TRUE : Boolean.FALSE);
+ setProperty("VariantName", variantName);
+--- src/free/jin/HistoryListItem.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/HistoryListItem.java 2025-12-15 16:09:28.478521000 -0500
+@@ -50,5 +50,5 @@
+
+ setProperty("EndExplanationString", endExplanationString);
+- setProperty("ResultStatus", new Integer(resultStatus));
++ setProperty("ResultStatus", resultStatus);
+ setProperty("Player", player);
+ }
+--- src/free/jin/LibListItem.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/LibListItem.java 2025-12-15 16:22:10.288560000 -0500
+@@ -47,5 +47,5 @@
+
+ setProperty("EndExplanationString", endExplanationString);
+- setProperty("ResultStatus", new Integer(resultStatus));
++ setProperty("ResultStatus", resultStatus);
+ setProperty("Note", note);
+ }
+--- src/free/jin/SearchListItem.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/SearchListItem.java 2025-12-15 16:23:32.007890000 -0500
+@@ -47,5 +47,5 @@
+
+ setProperty("EndExplanationString", endExplanationString);
+- setProperty("ResultStatus", new Integer(resultStatus));
++ setProperty("ResultStatus", resultStatus);
+ }
+
+--- src/free/jin/board/BoardPanel.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/jin/board/BoardPanel.java 2025-12-15 16:28:07.987648000 -0500
+@@ -414,11 +414,6 @@
+ // Fullscreen mode is broken under Java 1.5.0 when used as an Applet, see
+ // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5085648
+- if (!PlatformUtils.isJavaBetterThan("1.4") ||
+- (PlatformUtils.isMacOSX() && !PlatformUtils.isJavaBetterThan("1.4.2")) ||
+- ((System.getSecurityManager() != null) && PlatformUtils.isJavaBetterThan("1.5"))){
+- fullscreenButton.setEnabled(false);
+- fullscreenButton.setToolTipText(I18n.get(BoardPanel.class).getString("fullscreenUnavailableMessage"));
+- }
+- else{
++ /* The checks used deprecated API, always enable full screen now: */
++ {
+ KeyStroke fullscreenKeyStroke =
+ KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+--- src/free/jin/board/PlayedGameButtonPanel.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/jin/board/PlayedGameButtonPanel.java 2025-12-15 16:30:32.553679000 -0500
+@@ -408,7 +408,7 @@
+ Vector offers = isOppsOffer ? oppTakebacks : userTakebacks;
+ if (isOffered)
+- offers.addElement(new Integer(plyCount));
++ offers.addElement(plyCount);
+ else
+- offers.removeElement(new Integer(plyCount));
++ offers.removeElement(plyCount);
+
+ int newState;
+@@ -644,5 +644,5 @@
+ I18n i18n = I18n.get(PlayedGameButtonPanel.class);
+
+- Object [] plyCountArr = new Object[]{new Integer(plyCount)};
++ Object [] plyCountArr = new Object[]{plyCount};
+
+ String buttonTextPattern = i18n.getFormattedString("multipleTakebackButton.text", plyCountArr);
+--- src/free/jin/board/fics/FreechessBoardManager.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/board/fics/FreechessBoardManager.java 2025-12-15 16:56:15.309837000 -0500
+@@ -74,5 +74,5 @@
+ Integer oldValue = (Integer)evt.getOldValue();
+ Integer newValue = (Integer)evt.getNewValue();
+- Integer premoveValue = new Integer(PREMOVE_MOVE_SENDING_MODE);
++ Integer premoveValue = PREMOVE_MOVE_SENDING_MODE;
+
+ if (!newValue.equals(oldValue) &&
+--- src/free/jin/freechess/JinFreechessConnection.java 2007-03-04 19:55:00.000000000 -0500
++++ src/free/jin/freechess/JinFreechessConnection.java 2025-12-15 17:25:51.169363000 -0500
+@@ -232,5 +232,5 @@
+ Class tsSocketClass = Class.forName("free.freechess.timeseal.TimesealingSocket");
+ Constructor tsSocketConstructor = tsSocketClass.getConstructor(new Class[]{String.class, int.class});
+- result = (Socket)tsSocketConstructor.newInstance(new Object[]{hostname, new Integer(port)});
++ result = (Socket)tsSocketConstructor.newInstance(new Object[]{hostname, port});
+ } catch (ClassNotFoundException e){}
+ catch (SecurityException e){}
+@@ -303,5 +303,5 @@
+ protected boolean processSayTell(String username, String titles, int gameNumber, String message){
+ listenerManager.fireChatEvent(new ChatEvent(this, "say", ChatEvent.PERSON_TO_PERSON_CHAT_CATEGORY,
+- username, (titles == null ? "" : titles), -1, message, new Integer(gameNumber)));
++ username, (titles == null ? "" : titles), -1, message, gameNumber));
+
+ return true;
+@@ -333,5 +333,5 @@
+
+ listenerManager.fireChatEvent(new ChatEvent(this, "channel-tell", ChatEvent.ROOM_CHAT_CATEGORY,
+- username, (titles == null ? "" : titles), -1, message, new Integer(channelNumber)));
++ username, (titles == null ? "" : titles), -1, message, channelNumber));
+
+ return true;
+@@ -352,5 +352,5 @@
+
+ listenerManager.fireChatEvent(new ChatEvent(this, "kibitz", ChatEvent.GAME_CHAT_CATEGORY,
+- username, titles, rating, message, new Integer(gameNumber)));
++ username, titles, rating, message, gameNumber));
+
+ return true;
+@@ -370,5 +370,5 @@
+
+ listenerManager.fireChatEvent(new ChatEvent(this, "whisper", ChatEvent.GAME_CHAT_CATEGORY,
+- username, titles, rating, message, new Integer(gameNumber)));
++ username, titles, rating, message, gameNumber));
+
+ return true;
+@@ -398,5 +398,5 @@
+ if (title == null)
+ title = "";
+- Integer tourneyIndex = new Integer(matcher.group(3));
++ int tourneyIndex = Integer.parseInt(matcher.group(3));
+ message = matcher.group(4);
+ evt = new ChatEvent(this, "qtell.tourney", ChatEvent.TOURNEY_CHAT_CATEGORY,
+@@ -667,5 +667,5 @@
+
+ private InternalGameData getGameData(int gameNumber) throws NoSuchGameException{
+- InternalGameData gameData = (InternalGameData)ongoingGamesData.get(new Integer(gameNumber));
++ InternalGameData gameData = (InternalGameData)ongoingGamesData.get(gameNumber);
+ if (gameData == null)
+ throw new NoSuchGameException();
+@@ -687,5 +687,5 @@
+ Enumeration gameNumbers = ongoingGamesData.keys();
+ while (gameNumbers.hasMoreElements()){
+- Integer gameNumber = (Integer)gameNumbers.nextElement();
++ int gameNumber = (int)gameNumbers.nextElement();
+ InternalGameData gameData = (InternalGameData)ongoingGamesData.get(gameNumber);
+ Game game = gameData.game;
+@@ -707,5 +707,5 @@
+ Enumeration gameNumbers = ongoingGamesData.keys();
+ while (gameNumbers.hasMoreElements()){
+- Integer gameNumber = (Integer)gameNumbers.nextElement();
++ int gameNumber = (int)gameNumbers.nextElement();
+ InternalGameData gameData = (InternalGameData)ongoingGamesData.get(gameNumber);
+ Game game = gameData.game;
+@@ -730,5 +730,5 @@
+
+ protected boolean processGameInfo(GameInfoStruct data){
+- unstartedGamesData.put(new Integer(data.getGameNumber()), data);
++ unstartedGamesData.put(data.getGameNumber(), data);
+
+ return true;
+@@ -742,5 +742,5 @@
+
+ protected boolean processStyle12(Style12Struct boardData){
+- Integer gameNumber = new Integer(boardData.getGameNumber());
++ int gameNumber = boardData.getGameNumber();
+ InternalGameData gameData = (InternalGameData)ongoingGamesData.get(gameNumber);
+ GameInfoStruct unstartedGameInfo = (GameInfoStruct)unstartedGamesData.remove(gameNumber);
+@@ -809,5 +809,5 @@
+
+ protected boolean processDeltaBoard(DeltaBoardStruct data){
+- Integer gameNumber = new Integer(data.getGameNumber());
++ int gameNumber = data.getGameNumber();
+ InternalGameData gameData = (InternalGameData)ongoingGamesData.get(gameNumber);
+
+@@ -872,5 +872,5 @@
+ Style12Struct boardData = new Style12Struct(boardLexigraphic, currentPlayer, doublePawnPushFile,
+ canWhiteCastleKingside, canWhiteCastleQueenside, canBlackCastleKingside, canBlackCastleQueenside,
+- pliesSinceIrreversible, gameNumber.intValue(), whiteName, blackName, gameType, isPlayedGame,
++ pliesSinceIrreversible, gameNumber, whiteName, blackName, gameType, isPlayedGame,
+ isMyTurn, initTime, inc, whiteStrength, blackStrength, whiteTime, blackTime, nextMoveNumber,
+ moveVerbose, moveSAN, moveTime, isBoardFlipped, isClockRunning, lag);
+@@ -1103,5 +1103,5 @@
+
+ public boolean isOffered(int offerId, Player player){
+- return offers.containsKey(new Pair(player, new Integer(offerId)));
++ return offers.containsKey(new Pair(player, offerId));
+ }
+
+@@ -1114,5 +1114,5 @@
+
+ public void setOffer(int offerId, Player player, boolean isMade){
+- Pair offer = new Pair(player, new Integer(offerId));
++ Pair offer = new Pair(player, offerId);
+ if (isMade)
+ offers.put(offer, offer);
+@@ -1281,5 +1281,5 @@
+ if (variant == null){
+ warnVariantUnsupported(categoryName);
+- unsupportedGames.addElement(new Integer(gameInfo.getGameNumber()));
++ unsupportedGames.addElement(gameInfo.getGameNumber());
+ return null;
+ }
+@@ -1330,5 +1330,5 @@
+ InternalGameData gameData = new InternalGameData(game);
+
+- ongoingGamesData.put(new Integer(gameInfo.getGameNumber()), gameData);
++ ongoingGamesData.put(gameInfo.getGameNumber(), gameData);
+
+ listenerManager.fireGameEvent(new GameStartEvent(this, game));
+@@ -1479,12 +1479,11 @@
+
+ private void closeGame(int gameNumber, int result){
+- Integer gameID = new Integer(gameNumber);
+
+- if (gameID.intValue() == primaryPlayedGame)
++ if (gameNumber == primaryPlayedGame)
+ primaryPlayedGame = -1;
+- else if (gameID.intValue() == primaryObservedGame)
++ else if (gameNumber == primaryObservedGame)
+ primaryObservedGame = -1;
+
+- InternalGameData gameData = (InternalGameData)ongoingGamesData.remove(gameID);
++ InternalGameData gameData = (InternalGameData)ongoingGamesData.remove(gameNumber);
+ if (gameData != null){
+ Game game = gameData.game;
+@@ -1497,5 +1496,5 @@
+ }
+ else
+- unsupportedGames.removeElement(gameID);
++ unsupportedGames.removeElement(gameNumber);
+ }
+
+@@ -1708,5 +1707,5 @@
+ !seekInfo.isAutomaticAccept(), seekInfo.isFormulaUsed());
+
+- Integer seekIndex = new Integer(seekInfo.getSeekIndex());
++ int seekIndex = seekInfo.getSeekIndex();
+
+ Seek oldSeek = (Seek)seeks.get(seekIndex);
+@@ -1731,5 +1730,5 @@
+ protected boolean processSeeksRemoved(int [] removedSeeks){
+ for (int i = 0; i < removedSeeks.length; i++){
+- Integer seekIndex = new Integer(removedSeeks[i]);
++ int seekIndex = removedSeeks[i];
+ Seek seek = (Seek)seeks.get(seekIndex);
+ if (seek == null) // Happens if the seek is one we didn't fire an event for,
+@@ -1867,7 +1866,7 @@
+ Player player = toUser ? userPlayer.getOpponent() : userPlayer;
+
+- offerIndicesToGameData.put(new Integer(offerIndex), gameData);
+- gameData.indicesToTakebackOffers.put(new Integer(offerIndex),
+- new Pair(player, new Integer(takebackCount)));
++ offerIndicesToGameData.put(offerIndex, gameData);
++ gameData.indicesToTakebackOffers.put(offerIndex,
++ new Pair(player, takebackCount));
+
+ updateTakebackOffer(gameData, player, takebackCount);
+@@ -1933,7 +1932,7 @@
+ Player player = toUser ? userPlayer.getOpponent() : userPlayer;
+
+- offerIndicesToGameData.put(new Integer(offerIndex), gameData);
+- gameData.indicesToOffers.put(new Integer(offerIndex),
+- new Pair(player, new Integer(offerId)));
++ offerIndicesToGameData.put(offerIndex, gameData);
++ gameData.indicesToOffers.put(offerIndex,
++ new Pair(player, offerId));
+
+ updateOffers(gameData, offerId, player, true);
+@@ -1951,17 +1950,17 @@
+
+ InternalGameData gameData =
+- (InternalGameData)offerIndicesToGameData.remove(new Integer(offerIndex));
++ (InternalGameData)offerIndicesToGameData.remove(offerIndex);
+
+ if (gameData != null){
+ // Check regular offers
+- Pair offer = (Pair)gameData.indicesToOffers.remove(new Integer(offerIndex));
++ Pair offer = (Pair)gameData.indicesToOffers.remove(offerIndex);
+ if (offer != null){
+ Player player = (Player)offer.getFirst();
+- int offerId = ((Integer)offer.getSecond()).intValue();
++ int offerId = (int)offer.getSecond();
+ updateOffers(gameData, offerId, player, false);
+ }
+ else{
+ // Check takeback offers
+- offer = (Pair)gameData.indicesToTakebackOffers.remove(new Integer(offerIndex));
++ offer = (Pair)gameData.indicesToTakebackOffers.remove(offerIndex);
+ if (offer != null){
+ Player player = (Player)offer.getFirst();
+--- src/free/jin/chessclub/JinChessclubConnection.java 2007-03-04 19:54:59.000000000 -0500
++++ src/free/jin/chessclub/JinChessclubConnection.java 2025-12-15 17:33:24.032823000 -0500
+@@ -269,5 +269,5 @@
+ Class tsSocketClass = Class.forName("free.chessclub.timestamp.TimestampingSocket");
+ Constructor tsSocketConstructor = tsSocketClass.getConstructor(new Class[]{String.class, int.class});
+- result = (Socket)tsSocketConstructor.newInstance(new Object[]{hostname, new Integer(port)});
++ result = (Socket)tsSocketConstructor.newInstance(new Object[]{hostname, port});
+ } catch (ClassNotFoundException e){}
+ catch (SecurityException e){}
+@@ -677,5 +677,5 @@
+
+ ChatEvent evt = new ChatEvent(this, tellTypeString, ChatEvent.ROOM_CHAT_CATEGORY,
+- playerName, title, -1, message, new Integer(channel));
++ playerName, title, -1, message, channel);
+
+ listenerManager.fireChatEvent(evt);
+@@ -702,5 +702,5 @@
+ protected void processChannelQTell(int channel, String name, String titles, String message){
+ ChatEvent evt = new ChatEvent(this, "channel-qtell", ChatEvent.ROOM_CHAT_CATEGORY,
+- name, displayableTitle(titles), -1, message, new Integer(channel));
++ name, displayableTitle(titles), -1, message, channel);
+
+ listenerManager.fireChatEvent(evt);
+@@ -731,5 +731,5 @@
+
+ ChatEvent evt = new ChatEvent(this, tellTypeString, ChatEvent.GAME_CHAT_CATEGORY,
+- playerName, title, -1, message, new Integer(gameNumber));
++ playerName, title, -1, message, gameNumber);
+ listenerManager.fireChatEvent(evt);
+ }
+@@ -813,5 +813,5 @@
+
+ private GameInfo getGameInfo(int gameNumber) throws NoSuchGameException{
+- GameInfo gameInfo = (GameInfo)gameNumbersToGameInfo.get(new Integer(gameNumber));
++ GameInfo gameInfo = (GameInfo)gameNumbersToGameInfo.get(gameNumber);
+ if (gameInfo == null)
+ throw new NoSuchGameException();
+@@ -829,5 +829,5 @@
+
+ private void addGameInfo(int gameNumber, GameInfo gameInfo){
+- gameNumbersToGameInfo.put(new Integer(gameNumber), gameInfo);
++ gameNumbersToGameInfo.put(gameNumber, gameInfo);
+ if (gameInfo.game.getGameType() == Game.MY_GAME)
+ userGamesCount++;
+@@ -843,5 +843,5 @@
+
+ private GameInfo removeGameInfo(int gameNumber){
+- GameInfo gameInfo = (GameInfo)gameNumbersToGameInfo.remove(new Integer(gameNumber));
++ GameInfo gameInfo = (GameInfo)gameNumbersToGameInfo.remove(gameNumber);
+ if ((gameInfo != null) && (gameInfo.game.getGameType() == Game.MY_GAME))
+ userGamesCount--;
+@@ -859,5 +859,5 @@
+
+ private boolean gameExists(int gameNumber){
+- return gameNumbersToGameInfo.containsKey(new Integer(gameNumber));
++ return gameNumbersToGameInfo.containsKey(gameNumber);
+ }
+
+@@ -887,17 +887,17 @@
+ gameProps.put("RatingCategoryString", ratingCategoryString);
+ gameProps.put("IsRated", isRated ? Boolean.TRUE : Boolean.FALSE);
+- gameProps.put("WhiteInitial", new Integer(whiteInitial));
+- gameProps.put("WhiteIncrement", new Integer(whiteIncrement));
+- gameProps.put("BlackInitial", new Integer(blackInitial));
+- gameProps.put("BlackIncrement", new Integer(blackIncrement));
++ gameProps.put("WhiteInitial", whiteInitial);
++ gameProps.put("WhiteIncrement", whiteIncrement);
++ gameProps.put("BlackInitial", blackInitial);
++ gameProps.put("BlackIncrement", blackIncrement);
+ gameProps.put("IsPlayedGame", isPlayedGame ? Boolean.TRUE : Boolean.FALSE);
+- gameProps.put("WhiteRating", new Integer(whiteRating));
+- gameProps.put("BlackRating", new Integer(blackRating));
++ gameProps.put("WhiteRating", whiteRating);
++ gameProps.put("BlackRating", blackRating);
+ gameProps.put("WhiteTitles", displayableTitle(whiteTitles));
+ gameProps.put("BlackTitles", displayableTitle(blackTitles));
+
+- gameProps.put("GameType", new Integer(gameType));
++ gameProps.put("GameType", gameType);
+
+- nonStartedGames.put(new Integer(gameNumber), gameProps);
++ nonStartedGames.put(gameNumber, gameProps);
+ }
+
+@@ -910,5 +910,5 @@
+
+ private boolean existsNonStarted(int gameNumber){
+- return nonStartedGames.containsKey(new Integer(gameNumber));
++ return nonStartedGames.containsKey(gameNumber);
+ }
+
+@@ -921,5 +921,5 @@
+
+ private Object getPropertyForNonStarted(int gameNumber, String propertyName){
+- Hashtable gameProps = (Hashtable)nonStartedGames.get(new Integer(gameNumber));
++ Hashtable gameProps = (Hashtable)nonStartedGames.get(gameNumber);
+ return gameProps.get(propertyName);
+ }
+@@ -933,5 +933,5 @@
+
+ private void putPropertyForNonStarted(int gameNumber, String propertyName, Object propertyValue){
+- Hashtable gameProps = (Hashtable)nonStartedGames.get(new Integer(gameNumber));
++ Hashtable gameProps = (Hashtable)nonStartedGames.get(gameNumber);
+ gameProps.put(propertyName, propertyValue);
+ }
+@@ -950,5 +950,5 @@
+ private Game createGameFromNonStarted(int gameNumber, Position initialPosition){
+
+- Hashtable gameProps = (Hashtable)nonStartedGames.remove(new Integer(gameNumber));
++ Hashtable gameProps = (Hashtable)nonStartedGames.remove(gameNumber);
+
+ String whiteName = (String)gameProps.get("WhiteName");
+@@ -987,5 +987,5 @@
+ return new Game(gameType, initialPosition, 0, whiteName, blackName, whiteInitial,
+ whiteIncrement, blackInitial, blackIncrement, whiteRating, blackRating,
+- new Integer(gameNumber), ratingCategoryString, isRated, isPlayedGame, whiteTitles,
++ gameNumber, ratingCategoryString, isRated, isPlayedGame, whiteTitles,
+ blackTitles, isInitiallyFlipped, userPlayer);
+ }
+@@ -1313,5 +1313,5 @@
+
+ game.setGameType(gameType);
+- game.setId(new Integer(gameNumber));
++ game.setId(gameNumber);
+ game.setWhiteName(whiteName);
+ game.setBlackName(blackName);
+@@ -1447,5 +1447,5 @@
+
+ if (existsNonStarted(gameNumber)) // This way we know it's a non-started game.
+- putPropertyForNonStarted(gameNumber, "GameType", new Integer(newGameType));
++ putPropertyForNonStarted(gameNumber, "GameType", newGameType);
+ else
+ return;
+@@ -2557,5 +2557,5 @@
+
+ public void setOffer(int offerId, Player player, boolean isMade){
+- Pair offer = new Pair(player, new Integer(offerId));
++ Pair offer = new Pair(player, offerId);
+ if (isMade)
+ offers.put(offer, offer);
+@@ -2586,5 +2586,5 @@
+
+ public boolean isOfferred(int offerId, Player player){
+- return offers.containsKey(new Pair(player, new Integer(offerId)));
++ return offers.containsKey(new Pair(player, offerId));
+ }
+
+@@ -2717,5 +2717,5 @@
+ ratingCategoryString, time*60*1000, inc*1000, isRated, player, isRatingLimited, minRating, maxRating, !autoaccept, formula);
+
+- seeks.put(new Integer(index), seek);
++ seeks.put(index, seek);
+
+ listenerManager.fireSeekEvent(new SeekEvent(this, SeekEvent.SEEK_ADDED, seek));
+@@ -2738,5 +2738,5 @@
+
+ protected void processSeekRemoved(int index, int reasonCode){
+- Seek seek = (Seek)seeks.remove(new Integer(index));
++ Seek seek = (Seek)seeks.remove(index);
+
+ if (seek == null)
+@@ -3240,5 +3240,5 @@
+ ChessEvent newEvent = new ChessEvent(id, description, joinCommands.length == 0 ? null : joinCommands,
+ watchCommands.length == 0 ? null : watchCommands, infoCommands.length == 0 ? null : infoCommands, confirmText);
+- ChessEvent existingEvent = (ChessEvent)chessEvents.put(new Integer(id), newEvent);
++ ChessEvent existingEvent = (ChessEvent)chessEvents.put(id, newEvent);
+
+ if (existingEvent != null)
+@@ -3266,5 +3266,5 @@
+
+ protected void processRemoveTourney(int id){
+- ChessEvent evt = (ChessEvent)chessEvents.get(new Integer(id));
++ ChessEvent evt = (ChessEvent)chessEvents.get(id);
*** 277 LINES SKIPPED ***