git: dd3de98073b1 - main - games/jin: refresh, make work with newer Java

From: Ronald Klop <ronald_at_FreeBSD.org>
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 ***