Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package bluemoon for openSUSE:Factory 
checked in at 2026-02-02 14:58:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/bluemoon (Old)
 and      /work/SRC/openSUSE:Factory/.bluemoon.new.1995 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "bluemoon"

Mon Feb  2 14:58:30 2026 rev:3 rq:1330355 version:2.13

Changes:
--------
--- /work/SRC/openSUSE:Factory/bluemoon/bluemoon.changes        2024-03-07 
22:02:26.866836414 +0100
+++ /work/SRC/openSUSE:Factory/.bluemoon.new.1995/bluemoon.changes      
2026-02-02 14:58:38.287252011 +0100
@@ -1,0 +2,15 @@
+Sun Feb  1 23:01:17 UTC 2026 - Stanislav Brabec <[email protected]>
+
+- Update to version 2.13:
+  * License changed to BSD 2-Clause.
+  * Refresh bluemoon-2.12-bluemoon.c.patch,
+    rewrite bluemoon-2.12-Makefile.patch and rename to
+    bluemoon-2.13-Makefile.patch.
+
+-------------------------------------------------------------------
+Sun Feb  1 22:56:18 UTC 2026 - Stanislav Brabec <[email protected]>
+
+- Add translations from update-desktop-files project
+  (bluemoon-desktop-translation.patch).
+
+-------------------------------------------------------------------

Old:
----
  bluemoon-2.12-Makefile.patch
  bluemoon-2.12.tar.gz

New:
----
  bluemoon-2.13-Makefile.patch
  bluemoon-2.13.tar.gz
  bluemoon-desktop-translation.patch

----------(Old B)----------
  Old:  * Refresh bluemoon-2.12-bluemoon.c.patch,
    rewrite bluemoon-2.12-Makefile.patch and rename to
    bluemoon-2.13-Makefile.patch.
----------(Old E)----------

----------(New B)----------
  New:    rewrite bluemoon-2.12-Makefile.patch and rename to
    bluemoon-2.13-Makefile.patch.
  New:- Add translations from update-desktop-files project
  (bluemoon-desktop-translation.patch).
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ bluemoon.spec ++++++
--- /var/tmp/diff_new_pack.n842kF/_old  2026-02-02 14:58:38.995281937 +0100
+++ /var/tmp/diff_new_pack.n842kF/_new  2026-02-02 14:58:38.995281937 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package bluemoon
 #
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,27 +12,28 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 Name:           bluemoon
-Version:        2.12
+Version:        2.13
 Release:        0
 Summary:        Blue Moon card solitaire
-License:        BSD-3-Clause
+License:        BSD-2-Clause
 Group:          Amusements/Games/Board/Card
-Url:            http://www.catb.org/~esr/bluemoon/
+URL:            http://www.catb.org/~esr/bluemoon/
 Source0:        http://www.catb.org/~esr/%{name}/%{name}-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM - bluemoon-2.12-Makefile.patch -- add $(DESTDIR), png and 
desktop, fix conflict with bluez
-Patch0:         %{name}-2.12-Makefile.patch
+# PATCH-FIX-SUSE - bluemoon-2.13-Makefile.patch -- fix conflict with bluez
+Patch0:         %{name}-2.13-Makefile.patch
 # PATCH-FIX-UPSTREAM - bluemoon-2.12-bluemoon.desktop.patch -- change 
executable
 Patch1:         %{name}-2.12-bluemoon.desktop.patch
 # PATCH-FIX-UPSTREAM - bluemoon-2.12-bluemoon.c.patch -- fix 'File is compiled 
without RPM_OPT_FLAGS'
 Patch2:         %{name}-2.12-bluemoon.c.patch
+# PATCH-FEATURE-SUSE bluemoon-desktop-translation.patch -- Add translations 
from update-desktop-files
+Patch3:         %{name}-desktop-translation.patch
 %if 0%{?suse_version}
 BuildRequires:  hicolor-icon-theme
-BuildRequires:  update-desktop-files
 %endif
 BuildRequires:  ncurses-devel
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -64,13 +65,10 @@
 %install
 %make_install
 
-%if 0%{?suse_version}
-    %suse_update_desktop_file %{name}
-%endif
-
 %files
 %defattr(-,root,root,-)
-%doc COPYING NEWS README
+%doc NEWS.adoc README
+%license COPYING
 %{_bindir}/%{name}-catb
 %{_mandir}/man6/%{name}-catb.6%{ext_man}
 %{_datadir}/appdata/

++++++ bluemoon-2.12-bluemoon.c.patch ++++++
--- /var/tmp/diff_new_pack.n842kF/_old  2026-02-02 14:58:39.027283290 +0100
+++ /var/tmp/diff_new_pack.n842kF/_new  2026-02-02 14:58:39.031283459 +0100
@@ -1,10 +1,12 @@
---- bluemoon.c.orig    2014-05-21 14:25:41.000000000 +0200
-+++ bluemoon.c 2014-12-14 08:53:36.687883630 +0100
-@@ -416,6 +416,7 @@
-     game_finished(deal_number);
+Index: bluemoon.c
+===================================================================
+--- bluemoon.c.orig
++++ bluemoon.c
+@@ -401,6 +401,7 @@ int main(int argc, char *argv[]) {
+       game_finished(deal_number);
  
-     die(0);
-+    return 0;
+       die(0);
++      return 0;
  }
  
  /* blue.c ends here */

++++++ bluemoon-2.12-Makefile.patch -> bluemoon-2.13-Makefile.patch ++++++
--- /work/SRC/openSUSE:Factory/bluemoon/bluemoon-2.12-Makefile.patch    
2015-01-09 20:50:18.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.bluemoon.new.1995/bluemoon-2.13-Makefile.patch  
2026-02-02 14:58:38.219249136 +0100
@@ -1,30 +1,13 @@
---- Makefile.orig      2014-05-21 14:29:36.000000000 +0200
-+++ Makefile   2014-12-14 20:31:09.364589436 +0100
-@@ -23,13 +23,23 @@
- clean:
-       rm -f bluemoon *.tar.gz *.6 *.html *~
+Index: Makefile
+===================================================================
+--- Makefile.orig
++++ Makefile
+@@ -3,7 +3,7 @@
+ VERSION=$(shell sed -n <NEWS.adoc '/::/s/^\([0-9][^:]*\).*/\1/p' | head -1)
  
--# Note: does not intall the desktop file
- install: bluemoon.6 uninstall
--      cp bluemoon /usr/bin
--      cp bluemoon.6 /usr/share/man/man6/bluemoon.6
-+      install -m 0755 -d $(DESTDIR)/usr/bin
-+      install -m 0755 -d $(DESTDIR)/usr/share/man/man6
-+      install -m 0755 -d $(DESTDIR)//usr/share/applications/
-+      install -m 0755 -d $(DESTDIR)/usr/share/icons/hicolor/48x48/apps/
-+      install -m 0755 -d $(DESTDIR)/usr/share/appdata/
-+      install -m 0755 bluemoon $(DESTDIR)/usr/bin/bluemoon-catb
-+      install -m 0644 bluemoon.6 $(DESTDIR)/usr/share/man/man6/bluemoon-catb.6
-+      install -m 0644 bluemoon.desktop $(DESTDIR)/usr/share/applications/
-+      install -m 0644 bluemoon.png 
$(DESTDIR)/usr/share/icons/hicolor/48x48/apps/
-+      install -m 0644 bluemoon.xml $(DESTDIR)/usr/share/appdata/
- 
- uninstall:
--      rm -f /usr/bin/bluemoon /usr/share/man/man6/bluemoon.6
-+      rm -f /usr/bin/bluemoon-catb /usr/share/man/man6/bluemoon-catb.6
-+      rm -f /usr/share/applications/bluemoon.desktop
-+      rm -f /usr/share/icons/hicolor/48x48/apps/bluemoon.png
-+      rm -f /usr/share/appdata/bluemoon.xml
- 
- dist: bluemoon-$(VERS).tar.gz
+ # In case the name of the installed binary and man page needs to change.
+-BLUEMOON_TARGET = bluemoon
++BLUEMOON_TARGET = bluemoon-catb
  
+ SOURCES = README COPYING NEWS.adoc Makefile control bluemoon.c bluemoon.adoc 
bluemoon.png bluemoon.desktop
+ CFLAGS=-O

++++++ bluemoon-2.12.tar.gz -> bluemoon-2.13.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/COPYING new/bluemoon-2.13/COPYING
--- old/bluemoon-2.12/COPYING   2010-10-19 07:56:00.000000000 +0200
+++ new/bluemoon-2.13/COPYING   2015-10-17 16:02:43.000000000 +0200
@@ -1,28 +1,27 @@
                        BSD LICENSE
 
+Copyright (c) 2015, Eric S. Raymond
+All rights reserved.
+
 Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+modification, are permitted provided that the following conditions are
+met:
 
-Redistributions of source code must retain the above copyright
+1. Redistributions of source code must retain the above copyright
 notice, this list of conditions and the following disclaimer.
 
-Redistributions in binary form must reproduce the above copyright
+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.
 
-Neither name of the this project 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
+"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 REGENTS 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.
+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.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/Makefile new/bluemoon-2.13/Makefile
--- old/bluemoon-2.12/Makefile  2014-05-21 14:29:36.000000000 +0200
+++ new/bluemoon-2.13/Makefile  2024-02-01 17:05:24.000000000 +0100
@@ -1,37 +1,67 @@
 # Makefile for bluemoon, the Blue Moon solitaire game
 
-VERS=2.12
+VERSION=$(shell sed -n <NEWS.adoc '/::/s/^\([0-9][^:]*\).*/\1/p' | head -1)
 
-SOURCES = README COPYING NEWS Makefile control bluemoon.c bluemoon.xml 
bluemoon.png bluemoon.desktop
+# In case the name of the installed binary and man page needs to change.
+BLUEMOON_TARGET = bluemoon
+
+SOURCES = README COPYING NEWS.adoc Makefile control bluemoon.c bluemoon.adoc 
bluemoon.png bluemoon.desktop
 CFLAGS=-O
 
 bluemoon: bluemoon.c
-       cc $(CFLAGS) -DRELEASE=\"$(VERS)\" bluemoon.c -lncurses -o bluemoon
-
-bluemoon.6: bluemoon.xml
-       xmlto man bluemoon.xml
+       cc $(CFLAGS) -DRELEASE=\"$(VERSION)\" bluemoon.c -lncurses -o bluemoon
 
-bluemoon.html: bluemoon.xml
-       xmlto html-nochunks bluemoon.xml 
-
-bluemoon-$(VERS).tar.gz: $(SOURCES) bluemoon.6
-       @ls $(SOURCES) bluemoon.6 | sed s:^:bluemoon-$(VERS)/: >MANIFEST
-       @(cd ..; ln -s bluemoon bluemoon-$(VERS))
-       @(cd ..; tar -czf bluemoon/bluemoon-$(VERS).tar.gz `cat 
bluemoon/MANIFEST`)
-       @(cd ..; rm bluemoon-$(VERS))
+# Note: to suppress the footers with timestamps being generated in HTML,
+# we use "-a nofooter".
+# To debug asciidoc problems, you may need to run "xmllint --nonet --noout 
--valid"
+# on the intermediate XML that throws an error.
+.SUFFIXES: .html .adoc .6
+
+.adoc.6:
+       asciidoctor -D. -a nofooter -b manpage $<
+.adoc.html:
+       asciidoctor -D. -a nofooter -a webfonts! $<
+
+bluemoon-$(VERSION).tar.gz: $(SOURCES) bluemoon.6
+       @ls $(SOURCES) bluemoon.6 | sed s:^:bluemoon-$(VERSION)/: >MANIFEST
+       @(cd ..; ln -s bluemoon bluemoon-$(VERSION))
+       @(cd ..; tar -czf bluemoon/bluemoon-$(VERSION).tar.gz `cat 
bluemoon/MANIFEST`)
+       @(cd ..; rm bluemoon-$(VERSION))
 
 clean:
        rm -f bluemoon *.tar.gz *.6 *.html *~
 
-# Note: does not intall the desktop file
+cppcheck:
+       cppcheck bluemoon.c
+
+reflow:
+       @clang-format --style="{IndentWidth: 8, UseTab: ForIndentation}" -i 
$$(find . -name "*.[ch]")
+
 install: bluemoon.6 uninstall
-       cp bluemoon /usr/bin
-       cp bluemoon.6 /usr/share/man/man6/bluemoon.6
+       install -m 0755 -d $(DESTDIR)/usr/bin
+       install -m 0755 -d $(DESTDIR)/usr/share/man/man6
+       install -m 0755 -d $(DESTDIR)//usr/share/applications/
+       install -m 0755 -d $(DESTDIR)/usr/share/icons/hicolor/48x48/apps/
+       install -m 0755 -d $(DESTDIR)/usr/share/appdata/
+       install -m 0755 bluemoon $(DESTDIR)/usr/bin/$(BLUEMOON_TARGET)
+       install -m 0644 bluemoon.6 
$(DESTDIR)/usr/share/man/man6/$(BLUEMOON_TARGET).6
+       install -m 0644 bluemoon.desktop $(DESTDIR)/usr/share/applications/
+       install -m 0644 bluemoon.png 
$(DESTDIR)/usr/share/icons/hicolor/48x48/apps/
+       install -m 0644 bluemoon.adoc $(DESTDIR)/usr/share/appdata/
 
 uninstall:
-       rm -f /usr/bin/bluemoon /usr/share/man/man6/bluemoon.6
+       rm -f /usr/bin/$(BLUEMOON_TARGET) 
/usr/share/man/man6/$(BLUEMOON_TARGET).6
+       rm -f /usr/share/applications/bluemoon.desktop
+       rm -f /usr/share/icons/hicolor/48x48/apps/bluemoon.png
+       rm -f /usr/share/appdata/bluemoon.adoc
+
+version:
+       @echo $(VERSION)
+
+dist: bluemoon-$(VERSION).tar.gz
 
-dist: bluemoon-$(VERS).tar.gz
+release: bluemoon-$(VERSION).tar.gz bluemoon.html
+       shipper version=$(VERSION) | sh -e -x
 
-release: bluemoon-$(VERS).tar.gz bluemoon.html
-       shipper version=$(VERS) | sh -e -x
+refresh: bluemoon.html
+       shipper -N -w version=$(VERSION) | sh -e -x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/NEWS new/bluemoon-2.13/NEWS
--- old/bluemoon-2.12/NEWS      2014-05-21 14:30:19.000000000 +0200
+++ new/bluemoon-2.13/NEWS      1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-               bluemoon project news
-
-2.12: 2014-05-30
-  Add desktop file and a minor cleanup patch.
-
-2.11: 2012-11-23
-  Minor packaging fixes.
-
-2.10: 2010-10-19 
-  Change license to BSD. Polish code to full ANSI with prototypes.
-
-2.9: 2004-01-11 
-  RPM spec file cleanup, new distribution machinery based on shipper.
-
-2.8: 2003-12-29 
-  Source RPMs no longer require --define myversion.
-
-2.7: 2003-12-24 
-  Fixed build machinery to use rpmbuild.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/NEWS.adoc new/bluemoon-2.13/NEWS.adoc
--- old/bluemoon-2.12/NEWS.adoc 1970-01-01 01:00:00.000000000 +0100
+++ new/bluemoon-2.13/NEWS.adoc 2024-02-08 02:19:16.000000000 +0100
@@ -0,0 +1,23 @@
+= bluemoon project news =
+
+2.13: 2024-02-07::
+  License changed to BSD 2-Clause.
+
+2.12: 2014-05-30::
+  Add desktop file and a minor cleanup patch.
+
+2.11: 2012-11-23::
+  Minor packaging fixes.
+
+2.10: 2010-10-19::
+  Change license to BSD. Polish code to full ANSI with prototypes.
+
+2.9: 2004-01-11::
+  RPM spec file cleanup, new distribution machinery based on shipper.
+
+2.8: 2003-12-29::
+  Source RPMs no longer require --define myversion.
+
+2.7: 2003-12-24::
+  Fixed build machinery to use rpmbuild.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/bluemoon.6 new/bluemoon-2.13/bluemoon.6
--- old/bluemoon-2.12/bluemoon.6        2014-05-21 14:31:08.000000000 +0200
+++ new/bluemoon-2.13/bluemoon.6        2024-02-08 02:20:00.000000000 +0100
@@ -1,47 +1,62 @@
 '\" t
 .\"     Title: bluemoon
-.\"    Author: [see the "AUTHORS" section]
-.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
-.\"      Date: 05/21/2014
-.\"    Manual: Games
-.\"    Source: bluemoon
+.\"    Author: [see the "AUTHOR(S)" section]
+.\" Generator: Asciidoctor 2.0.16
+.\"      Date: 2024-02-07
+.\"    Manual: \ \&
+.\"    Source: \ \&
 .\"  Language: English
 .\"
-.TH "BLUEMOON" "6" "05/21/2014" "bluemoon" "Games"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.TH "BLUEMOON" "6" "2024-02-07" "\ \&" "\ \&"
 .ie \n(.g .ds Aq \(aq
 .el       .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
+.ss \n[.ss] 0
 .nh
-.\" disable justification (adjust text to left margin only)
 .ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
+.de URL
+\fI\\$2\fP <\\$1>\\$3
+..
+.als MTO URL
+.if \n[.g] \{\
+.  mso www.tmac
+.  am URL
+.    ad l
+.  .
+.  am MTO
+.    ad l
+.  .
+.  LINKSTYLE blue R < >
+.\}
 .SH "NAME"
-bluemoon \- Blue Moon card solitaire
+bluemoon \- the Blue Moon solitaire
 .SH "SYNOPSIS"
-.HP \w'\fBbluemoon\fR\ 'u
-\fBbluemoon\fR
+.sp
+\fBbluemoon\fP
 .SH "DESCRIPTION"
-.PP
-This 52\-card solitaire starts with the entire deck shuffled and dealt out in 
four rows\&. The aces are then moved to the left end of the layout, making 4 
initial free spaces\&. You may move to a space only the card that matches the 
left neighbor in suit, and is one greater in rank\&. Kings are high, so no 
cards may be placed to their right (they create dead spaces)\&.
-.PP
-When no moves can be made, cards still out of sequence are reshuffled and 
dealt face up after the ends of the partial sequences, leaving a card space 
after each sequence, so that each row looks like a partial sequence followed by 
a space, followed by enough cards to make a row of 14\&.
-.PP
-A moment\*(Aqs reflection will show that this game cannot take more than 13 
deals\&. A good score is 1\-3 deals, 4\-7 is average, 8 or more is poor\&.
+.sp
+This 52\-card solitaire starts with the entire deck shuffled and
+dealt out in four rows.  The aces are then moved to the left end of
+the layout, making 4 initial free spaces.  You may move to a space
+only the card that matches the left neighbor in suit, and is one
+greater in rank.  Kings are high, so no cards may be placed to their
+right (they create dead spaces).
+.sp
+When no moves can be made, cards still out of sequence are
+reshuffled and dealt face up after the ends of the partial sequences,
+leaving a card space after each sequence, so that each row looks like
+a partial sequence followed by a space, followed by enough cards to
+make a row of 14.
+.sp
+A moment\(cqs reflection will show that this game cannot take more
+than 13 deals. A good score is 1\-3 deals, 4\-7 is average, 8 or more is
+poor.
 .SH "AUTHORS"
-.PP
-Originally written by Tim Lister\&. Visual user interface and color support by 
Eric S\&. Raymond
-<esr@snark\&.thyrsus\&.com>\&. The ncurses version was written in November 
1994\&. See
-\m[blue]\fBhttp://www\&.catb\&.org/~esr/\fR\m[]
-for updates, also other software and resources by ESR\&.
+.sp
+Originally written by Tim Lister.  Visual user interface and color
+support by Eric S. Raymond \c
+.MTO "esr\(atsnark.thyrsus.com" "" "."
+The ncurses
+version was written in November 1994.  See <ulink
+.URL "http://www.catb.org/~esr/"; "" ""
+for updates, also other software and
+resources by ESR.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/bluemoon.adoc 
new/bluemoon-2.13/bluemoon.adoc
--- old/bluemoon-2.12/bluemoon.adoc     1970-01-01 01:00:00.000000000 +0100
+++ new/bluemoon-2.13/bluemoon.adoc     2024-02-08 02:18:14.000000000 +0100
@@ -0,0 +1,41 @@
+= bluemoon(6) =
+:doctype: manpage
+
+== NAME ==
+bluemoon - the Blue Moon solitaire
+
+== SYNOPSIS ==
+*bluemoon*
+
+[[description]]
+== DESCRIPTION ==
+
+This 52-card solitaire starts with the entire deck shuffled and
+dealt out in four rows.  The aces are then moved to the left end of
+the layout, making 4 initial free spaces.  You may move to a space
+only the card that matches the left neighbor in suit, and is one
+greater in rank.  Kings are high, so no cards may be placed to their
+right (they create dead spaces).
+
+When no moves can be made, cards still out of sequence are
+reshuffled and dealt face up after the ends of the partial sequences,
+leaving a card space after each sequence, so that each row looks like
+a partial sequence followed by a space, followed by enough cards to
+make a row of 14.  
+
+A moment's reflection will show that this game cannot take more
+than 13 deals. A good score is 1-3 deals, 4-7 is average, 8 or more is
+poor.  
+
+
+[[authors]]
+== AUTHORS ==
+
+Originally written by Tim Lister.  Visual user interface and color
+support by Eric S. Raymond <[email protected]>. The ncurses
+version was written in November 1994.  See <ulink
+http://www.catb.org/~esr/ for updates, also other software and
+resources by ESR.
+
+
+// end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/bluemoon.c new/bluemoon-2.13/bluemoon.c
--- old/bluemoon-2.12/bluemoon.c        2014-05-21 14:25:41.000000000 +0200
+++ new/bluemoon-2.13/bluemoon.c        2024-01-29 17:08:28.000000000 +0100
@@ -8,7 +8,7 @@
  *****************************************************************************/
 
 /*
- * Compile this with the command `cc -O bluemoon.c -lcurses -o bluemoon'. 
+ * Compile this with the command `cc -O bluemoon.c -lcurses -o bluemoon'.
  * For best results, use the open-source ncurses(3) library.  On non-Intel
  * machines, SVr4 curses is just as good.
  *
@@ -22,166 +22,162 @@
 > in interesting times as the Chinese curse goes...
 
  *
- * Debugging note:  The command `x' causes the game to terminate and write 
+ * Debugging note:  The command `x' causes the game to terminate and write
  * a line consisting of the token `blue' followed by the random-number
  * seed used for the game, followed by a list of the moves.
+ *
+ * SPDX-FileCopyrightText: (C) Eric S. Raymond <[email protected]>
+ * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <curses.h>
+#include <signal.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
-#include <signal.h>
-#include <time.h>
-#include <curses.h>
 #include <term.h>
+#include <time.h>
+#include <unistd.h>
 
-#define NOCARD         (-1)
+#define NOCARD (-1)
 
-#define ACE            0
-#define KING           12
-#define SUIT_LENGTH    13
-
-#define HEARTS         0
-#define SPADES         1
-#define DIAMONDS       2
-#define CLUBS          3
-#define NSUITS         4
-
-#define GRID_WIDTH     (SUIT_LENGTH + 1)
-#define GRID_LENGTH    (NSUITS * GRID_WIDTH)
-#define PACK_SIZE      52
+#define ACE 0
+#define KING 12
+#define SUIT_LENGTH 13
+
+#define HEARTS 0
+#define SPADES 1
+#define DIAMONDS 2
+#define CLUBS 3
+#define NSUITS 4
+
+#define GRID_WIDTH (SUIT_LENGTH + 1)
+#define GRID_LENGTH (NSUITS * GRID_WIDTH)
+#define PACK_SIZE 52
 
-#define BASEROW                1
-#define PROMPTROW      11
+#define BASEROW 1
+#define PROMPTROW 11
 
 static int seed, nmove;
 static char journal[PACK_SIZE];
 
-static int deck_size = PACK_SIZE;      /* initial deck */
+static int deck_size = PACK_SIZE; /* initial deck */
 static int deck[PACK_SIZE];
 
-static int grid[GRID_LENGTH];  /* card layout grid */
-static int freeptr[4];         /* free card space pointers */
+static int grid[GRID_LENGTH]; /* card layout grid */
+static int freeptr[4];        /* free card space pointers */
 
-static int deal_number=0;
+static int deal_number = 0;
 
-static char *ranks[SUIT_LENGTH] =
-       {" A"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10"," J"," Q"," K"};
+static char *ranks[SUIT_LENGTH] = {" A", " 2", " 3", " 4", " 5", " 6", " 7",
+                                   " 8", " 9", "10", " J", " Q", " K"};
 
-static chtype letters[] =
-{
-    'h' | COLOR_PAIR(COLOR_RED),       /* hearts */
-    's' | COLOR_PAIR(COLOR_GREEN),     /* spades */
-    'd' | COLOR_PAIR(COLOR_RED),       /* diamonds */
-    'c' | COLOR_PAIR(COLOR_GREEN),     /* clubs */
+static chtype letters[] = {
+    'h' | COLOR_PAIR(COLOR_RED),   /* hearts */
+    's' | COLOR_PAIR(COLOR_GREEN), /* spades */
+    'd' | COLOR_PAIR(COLOR_RED),   /* diamonds */
+    'c' | COLOR_PAIR(COLOR_GREEN), /* clubs */
 };
 
 #if defined(__i386__) && defined(A_PCCHARSET)
-static chtype glyphs[] =
-{
-    '\003' | A_PCCHARSET | COLOR_PAIR(COLOR_RED),      /* hearts */
-    '\006' | A_PCCHARSET | COLOR_PAIR(COLOR_GREEN),    /* spades */
-    '\004' | A_PCCHARSET | COLOR_PAIR(COLOR_RED),      /* diamonds */
-    '\005' | A_PCCHARSET | COLOR_PAIR(COLOR_GREEN),    /* clubs */
+static chtype glyphs[] = {
+    '\003' | A_PCCHARSET | COLOR_PAIR(COLOR_RED),   /* hearts */
+    '\006' | A_PCCHARSET | COLOR_PAIR(COLOR_GREEN), /* spades */
+    '\004' | A_PCCHARSET | COLOR_PAIR(COLOR_RED),   /* diamonds */
+    '\005' | A_PCCHARSET | COLOR_PAIR(COLOR_GREEN), /* clubs */
 };
 #endif /* __i386__ && A_PCCHARSET */
 
-static chtype *suits = letters;        /* this may change to glyphs below */
+static chtype *suits = letters; /* this may change to glyphs below */
+
+static void die(int onsig) {
+       signal(onsig, SIG_IGN);
+       endwin();
+       if (seed) {
+               printf("bluemoon %d %s\n", seed, journal);
+       }
+       exit(0);
+}
+
+static void init_vars(void) {
+       int i;
+
+       deck_size = PACK_SIZE;
+       for (i = 0; i < PACK_SIZE; i++) {
+               deck[i] = i;
+       }
+       for (i = 0; i < 4; i++) {
+               freeptr[i] = i * GRID_WIDTH;
+       }
+}
+
+static void shuffle(int size) {
+       int i, j, numswaps, swapnum, temp;
+
+       numswaps = size * 10; /* an arbitrary figure */
+
+       for (swapnum = 0; swapnum < numswaps; swapnum++) {
+               i = rand() % size;
+               j = rand() % size;
+               temp = deck[i];
+               deck[i] = deck[j];
+               deck[j] = temp;
+       }
+}
+
+static void deal_cards(void) {
+       int ptr, card = 0, value, csuit, crank, suit, aces[4];
+
+       for (suit = HEARTS; suit <= CLUBS; suit++) {
+               ptr = freeptr[suit];
+               grid[ptr++] = NOCARD; /* 1st card space is blank */
+               while ((ptr % GRID_WIDTH) != 0) {
+                       value = deck[card++];
+                       crank = value % SUIT_LENGTH;
+                       csuit = value / SUIT_LENGTH;
+                       if (crank == ACE) {
+                               aces[csuit] = ptr;
+                       }
+                       grid[ptr++] = value;
+               }
+       }
+
+       if (deal_number == 1) { /* shift the aces down to the 1st column */
+               for (suit = HEARTS; suit <= CLUBS; suit++) {
+                       grid[suit * GRID_WIDTH] = suit * SUIT_LENGTH;
+                       grid[aces[suit]] = NOCARD;
+                       freeptr[suit] = aces[suit];
+               }
+       }
+}
 
-static void die(int onsig)
-{
-    signal(onsig, SIG_IGN);
-    endwin();
-    if (seed)
-       printf("bluemoon %d %s\n", seed, journal);
-    exit(0);
-}
-
-static void init_vars(void)
-{
-    int i;
-
-    deck_size = PACK_SIZE;
-    for (i=0; i < PACK_SIZE; i++)
-       deck[i]=i;
-    for (i = 0; i < 4; i++)
-       freeptr[i]=i * GRID_WIDTH;
-}
-
-static void shuffle(int size)
-{
-    int i,j,numswaps,swapnum,temp;
-
-    numswaps=size*10;          /* an arbitrary figure */
-
-    for (swapnum=0;swapnum<numswaps;swapnum++)
-    {
-       i=rand() % size;
-       j=rand() % size;
-       temp=deck[i];
-       deck[i]=deck[j];
-       deck[j]=temp;
-    }
-}
-
-static void deal_cards(void)
-{
-    int ptr, card=0, value, csuit, crank, suit, aces[4];
-
-    for (suit=HEARTS;suit<=CLUBS;suit++)
-    {
-       ptr=freeptr[suit];
-       grid[ptr++]=NOCARD;     /* 1st card space is blank */
-       while ((ptr % GRID_WIDTH) != 0)
-       {
-           value=deck[card++];
-           crank=value % SUIT_LENGTH;
-           csuit=value / SUIT_LENGTH;
-           if (crank==ACE)
-               aces[csuit]=ptr;
-           grid[ptr++]=value;
-       }
-    }
-
-    if (deal_number==1)                /* shift the aces down to the 1st 
column */
-       for (suit=HEARTS;suit<=CLUBS;suit++)
-       {
-           grid[suit * GRID_WIDTH] = suit * SUIT_LENGTH;
-           grid[aces[suit]]=NOCARD;
-           freeptr[suit]=aces[suit];
-       }
-}
-
-static void printcard(int value)
-{
-    (void) addch(' ');
-    if (value == NOCARD)
-       (void) addstr("   ");
-    else
-    {
-       addch(ranks[value % SUIT_LENGTH][0] | COLOR_PAIR(COLOR_BLUE));
-       addch(ranks[value % SUIT_LENGTH][1] | COLOR_PAIR(COLOR_BLUE));
-       addch(suits[value / SUIT_LENGTH]);
-    }
-    (void) addch(' ');
-}
-
-static void display_cards(int deal)
-{
-    int row, card;
-
-    clear();
-    (void)printw(
-                "Blue Moon %s - by Tim Lister & Eric Raymond - Deal %d.\n",
-                RELEASE, deal);
-    for(row=HEARTS;row<=CLUBS;row++)
-    {
-       move(BASEROW + row + row + 2, 1);
-       for(card=0;card<GRID_WIDTH;card++)
-           printcard(grid[row * GRID_WIDTH + card]);
-    }
+static void printcard(int value) {
+       (void)addch(' ');
+       if (value == NOCARD) {
+               (void)addstr("   ");
+       } else {
+               addch(ranks[value % SUIT_LENGTH][0] | COLOR_PAIR(COLOR_BLUE));
+               addch(ranks[value % SUIT_LENGTH][1] | COLOR_PAIR(COLOR_BLUE));
+               addch(suits[value / SUIT_LENGTH]);
+       }
+       (void)addch(' ');
+}
+
+static void display_cards(int deal) {
+       int row, card;
+
+       clear();
+       (void)printw("Blue Moon %s - by Tim Lister & Eric Raymond - Deal %d.\n",
+                    RELEASE, deal);
+       for (row = HEARTS; row <= CLUBS; row++) {
+               move(BASEROW + row + row + 2, 1);
+               for (card = 0; card < GRID_WIDTH; card++) {
+                       printcard(grid[row * GRID_WIDTH + card]);
+               }
+       }
 
-    move(PROMPTROW + 2, 0); refresh();
+       move(PROMPTROW + 2, 0);
+       refresh();
+       // clang-format off
 #define P(x)   (void)printw("%s\n", x)
 P("   This 52-card solitaire starts with  the entire deck shuffled and dealt");
 P("out in four rows.  The aces are then moved to the left end of the layout,");
@@ -195,227 +191,216 @@
 P("  A moment's reflection will show that this game cannot take more than 13");
 P("deals. A good score is 1-3 deals, 4-7 is average, 8 or more is poor.     ");
 #undef P
-    refresh();
+       // clang-format on
+       refresh();
 }
 
-static int find(int card)
-{
-    int i;
-
-    if ((card<0) || (card>=PACK_SIZE))
-       return(NOCARD);
-    for(i = 0; i < GRID_LENGTH; i++)
-       if (grid[i] == card)
-           return i;
-    return(NOCARD);
-}
-
-static void movecard(int src, int dst)
-{
-    grid[dst]=grid[src];
-    grid[src]=NOCARD;
-
-    move( BASEROW + (dst / GRID_WIDTH)*2+2, (dst % GRID_WIDTH)*5 + 1);
-    printcard(grid[dst]);
-
-    move( BASEROW + (src / GRID_WIDTH)*2+2, (src % GRID_WIDTH)*5 + 1);
-    printcard(grid[src]);
-
-    refresh();
-}
-
-static void play_game(void)
-{
-    int dead=0, i, j;
-    char c;
-    int select[NSUITS], card;
-
-    nmove = 0;
-    memset(journal, '\0', sizeof(journal));
-    while (dead<4)
-    {
-       dead=0;
-       for (i=0;i<4;i++)
-       {
-           card=grid[freeptr[i]-1];
-
-           if (        ((card % SUIT_LENGTH)==KING)
-               ||
-               (card==NOCARD)  )
-               select[i]=NOCARD;
-           else
-               select[i]=find(card+1);
-
-           if (select[i]==NOCARD)
-               dead++;
-       };
-
-       if (dead < 4)
-       {
-           char        live[NSUITS+1], *lp = live;
-
-           for (i=0;i<4;i++)
-           {
-               if (select[i] != NOCARD)
-               {
-                   move(BASEROW + (select[i] / GRID_WIDTH)*2+3,
-                        (select[i] % GRID_WIDTH)*5);
-                   (void)printw("   %c ", *lp++ = 'a' + i);
+static int find(int card) {
+       int i;
+
+       if ((card < 0) || (card >= PACK_SIZE)) {
+               return (NOCARD);
+       }
+       for (i = 0; i < GRID_LENGTH; i++) {
+               if (grid[i] == card) {
+                       return i;
                }
-           };
-           *lp = '\0';
+       }
+       return (NOCARD);
+}
 
-           if (strlen(live) == 1)
-           {
-               move(PROMPTROW,0);
-               (void)printw(
-                   "Making forced moves...                                 ");
-               refresh();
-               (void) sleep(1);
-               c = live[0];
-           }
-           else
-           {
-               char    buf[BUFSIZ];
-
-               (void)sprintf(buf,
-                       "Type [%s] to move, r to redraw, q or INTR to quit: ",
-                       live);
-
-               do {
-                   move(PROMPTROW,0);
-                   (void) addstr(buf);
-                   move(PROMPTROW, strlen(buf));
-                   clrtoeol();
-                   (void) addch(' ');
-               } while
-                   (!(c = getch()) || !strchr("abcdqrx", c));
-           }
-
-           for (j = 0; j < 4; j++)
-               if (select[j]!=NOCARD)
-               {
-                   move(BASEROW + (select[j] / GRID_WIDTH)*2+3,
-                        (select[j] % GRID_WIDTH)*5);
-                   (void)printw("     ");
+static void movecard(int src, int dst) {
+       grid[dst] = grid[src];
+       grid[src] = NOCARD;
+
+       move(BASEROW + (dst / GRID_WIDTH) * 2 + 2, (dst % GRID_WIDTH) * 5 + 1);
+       printcard(grid[dst]);
+
+       move(BASEROW + (src / GRID_WIDTH) * 2 + 2, (src % GRID_WIDTH) * 5 + 1);
+       printcard(grid[src]);
+
+       refresh();
+}
+
+static void play_game(void) {
+       int dead = 0, i, j;
+       char c;
+       int select[NSUITS], card;
+
+       nmove = 0;
+       memset(journal, '\0', sizeof(journal));
+       while (dead < 4) {
+               dead = 0;
+               for (i = 0; i < 4; i++) {
+                       card = grid[freeptr[i] - 1];
+
+                       if (((card % SUIT_LENGTH) == KING) ||
+                           (card == NOCARD)) {
+                               select[i] = NOCARD;
+                       } else {
+                               select[i] = find(card + 1);
+                       }
+                       if (select[i] == NOCARD) {
+                               dead++;
+                       }
+               };
+
+               if (dead < 4) {
+                       char live[NSUITS + 1], *lp = live;
+
+                       for (i = 0; i < 4; i++) {
+                               if (select[i] != NOCARD) {
+                                       move(BASEROW +
+                                                (select[i] / GRID_WIDTH) * 2 +
+                                                3,
+                                            (select[i] % GRID_WIDTH) * 5);
+                                       (void)printw("   %c ", *lp++ = 'a' + i);
+                               }
+                       };
+                       *lp = '\0';
+
+                       if (strlen(live) == 1) {
+                               move(PROMPTROW, 0);
+                               (void)printw("Making forced moves...           "
+                                            "                      ");
+                               refresh();
+                               (void)sleep(1);
+                               c = live[0];
+                       } else {
+                               char buf[BUFSIZ];
+
+                               (void)sprintf(buf,
+                                             "Type [%s] to move, r to redraw, "
+                                             "q or INTR to quit: ",
+                                             live);
+
+                               do {
+                                       move(PROMPTROW, 0);
+                                       (void)addstr(buf);
+                                       move(PROMPTROW, strlen(buf));
+                                       clrtoeol();
+                                       (void)addch(' ');
+                               } while (!(c = getch()) ||
+                                        !strchr("abcdqrx", c));
+                       }
+
+                       for (j = 0; j < 4; j++) {
+                               if (select[j] != NOCARD) {
+                                       move(BASEROW +
+                                                (select[j] / GRID_WIDTH) * 2 +
+                                                3,
+                                            (select[j] % GRID_WIDTH) * 5);
+                                       (void)printw("     ");
+                               }
+                       }
+
+                       if (c == 'r') {
+                               clearok(stdscr, TRUE);
+                               display_cards(deal_number);
+                       } else if (c == 'x') {
+                               die(0);
+                       } else if (c == 'q') {
+                               seed = 0;
+                               die(0);
+                       } else {
+                               i = c - 'a';
+                               if (select[i] == NOCARD) {
+                                       beep();
+                               } else {
+                                       movecard(select[i], freeptr[i]);
+                                       freeptr[i] = select[i];
+                               }
+                       }
+                       journal[nmove++] = c;
                }
+       }
 
-           if (c == 'r')
-           {
-               clearok(stdscr, TRUE);
-               display_cards(deal_number);
-           }
-           else if (c == 'x')
-               die(0);
-           else if (c == 'q')
-           {
-               seed = 0;
-               die(0);
-           }
-           else
-           {
-               i = c-'a';
-               if (select[i] == NOCARD)
-                   beep();
-               else
-               {
-                   movecard(select[i], freeptr[i]);
-                   freeptr[i]=select[i];
+       move(PROMPTROW, 0);
+       standout();
+       (void)printw("Finished deal %d - type any character to continue...",
+                    deal_number);
+       standend();
+       (void)getch();
+}
+
+static int collect_discards(void) {
+       int row, col, cardno = 0, finish, gridno;
+
+       for (row = HEARTS; row <= CLUBS; row++) {
+               finish = 0;
+               for (col = 1; col < GRID_WIDTH; col++) {
+                       gridno = row * GRID_WIDTH + col;
+
+                       if ((grid[gridno] != (grid[gridno - 1] + 1)) &&
+                           (finish == 0)) {
+                               finish = 1;
+                               freeptr[row] = gridno;
+                       };
+
+                       if ((finish != 0) && (grid[gridno] != NOCARD)) {
+                               deck[cardno++] = grid[gridno];
+                       }
                }
-           }
-           journal[nmove++] = c;
        }
-    }
+       return cardno;
+}
 
-    move(PROMPTROW, 0);
-    standout();
-    (void)printw("Finished deal %d - type any character to continue...", 
deal_number);
-    standend();
-    (void) getch();
-}
-
-static int collect_discards(void)
-{
-    int row, col, cardno=0, finish, gridno;
-
-    for (row=HEARTS;row<=CLUBS;row++)
-    {
-       finish=0;
-       for (col=1;col<GRID_WIDTH;col++)
-       {
-           gridno=row * GRID_WIDTH + col;
-
-           if ((grid[gridno]!=(grid[gridno-1]+1))&&(finish==0))
-           {
-               finish=1;
-               freeptr[row]=gridno;
-           };
-
-           if ((finish!=0)&&(grid[gridno]!=NOCARD))
-               deck[cardno++]=grid[gridno];
-       }
-    }
-    return cardno;
-}
-
-static void game_finished(int deal)
-{
-    clear();
-    (void)printw("You finished the game in %d deals. This is ",deal);
-    standout();
-    if (deal<2)
-       (void)addstr("excellent");
-    else if (deal<4)
-       (void)addstr("good");
-    else if (deal<8)
-       (void)addstr("average");
-    else
-       (void)addstr("poor");
-    standend();
-    (void) addstr(".         ");
-    refresh();
-}
-
-int main(int argc, char *argv[])
-{
-    (void) signal(SIGINT, die);
-    initscr();
-
-    /*
-     * We use COLOR_GREEN because COLOR_BLACK is wired to the wrong thing.
-     */
-    start_color();
-    init_pair(COLOR_RED,     COLOR_RED,   COLOR_WHITE);
-    init_pair(COLOR_BLUE,    COLOR_BLUE,  COLOR_WHITE);
-    init_pair(COLOR_GREEN,   COLOR_BLACK, COLOR_WHITE);
+static void game_finished(int deal) {
+       clear();
+       (void)printw("You finished the game in %d deals. This is ", deal);
+       standout();
+       if (deal < 2) {
+               (void)addstr("excellent");
+       } else if (deal < 4) {
+               (void)addstr("good");
+       } else if (deal < 8) {
+               (void)addstr("average");
+       } else {
+               (void)addstr("poor");
+       }
+       standend();
+       (void)addstr(".         ");
+       refresh();
+}
+
+int main(int argc, char *argv[]) {
+       (void)signal(SIGINT, die);
+       initscr();
+
+       /*
+        * We use COLOR_GREEN because COLOR_BLACK is wired to the wrong thing.
+        */
+       start_color();
+       init_pair(COLOR_RED, COLOR_RED, COLOR_WHITE);
+       init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_WHITE);
+       init_pair(COLOR_GREEN, COLOR_BLACK, COLOR_WHITE);
 
 #if defined(__i386__) && defined(A_PCCHARSET)
-    if (tigetstr("smpch"))
-       suits = glyphs;
+       if (tigetstr("smpch")) {
+               suits = glyphs;
+       }
 #endif /* __i386__ && A_PCCHARSET */
 
-    cbreak();
+       cbreak();
 
-    if (argc == 2)
-       srand(seed = atoi(argv[1]));
-    else
-       srand(seed = (int)time((long *)0));
-
-    init_vars();
-
-    do{
-       deal_number++;
-       shuffle(deck_size);
-       deal_cards();
-       display_cards(deal_number);
-       play_game();
-    }
-    while
-       ((deck_size=collect_discards()) != 0);
+       if (argc == 2) {
+               srand(seed = atoi(argv[1]));
+       } else {
+               srand(seed = (int)time((long *)0));
+       }
+       init_vars();
+
+       do {
+               deal_number++;
+               shuffle(deck_size);
+               deal_cards();
+               display_cards(deal_number);
+               play_game();
+       } while ((deck_size = collect_discards()) != 0);
 
-    game_finished(deal_number);
+       game_finished(deal_number);
 
-    die(0);
+       die(0);
 }
 
 /* blue.c ends here */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/bluemoon.xml 
new/bluemoon-2.13/bluemoon.xml
--- old/bluemoon-2.12/bluemoon.xml      2010-10-22 21:20:26.000000000 +0200
+++ new/bluemoon-2.13/bluemoon.xml      1970-01-01 01:00:00.000000000 +0100
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE refentry PUBLIC 
-   "-//OASIS//DTD DocBook XML V4.1.2//EN"
-   "docbook/docbookx.dtd">
-<refentry id='bluemoon.6'>
-<refmeta>
-<refentrytitle>bluemoon</refentrytitle>
-<manvolnum>6</manvolnum>
-<refmiscinfo class='date'>Nov 31 1994</refmiscinfo>
-<refmiscinfo class='productname'>bluemoon</refmiscinfo>
-<refmiscinfo class='source'>bluemoon</refmiscinfo>
-<refmiscinfo class='manual'>Games</refmiscinfo>
-</refmeta>
-<refnamediv id='name'>
-<refname>bluemoon</refname>
-<refpurpose>Blue Moon card solitaire</refpurpose>
-</refnamediv>
-<refsynopsisdiv id='synopsis'>
-
-<cmdsynopsis>
-  <command>bluemoon</command>
-</cmdsynopsis>
-
-</refsynopsisdiv>
-
-<refsect1 id='description'><title>DESCRIPTION</title>
-
-<para>This 52-card solitaire starts with the entire deck shuffled and
-dealt out in four rows.  The aces are then moved to the left end of
-the layout, making 4 initial free spaces.  You may move to a space
-only the card that matches the left neighbor in suit, and is one
-greater in rank.  Kings are high, so no cards may be placed to their
-right (they create dead spaces).</para>
-
-<para>When no moves can be made, cards still out of sequence are
-reshuffled and dealt face up after the ends of the partial sequences,
-leaving a card space after each sequence, so that each row looks like
-a partial sequence followed by a space, followed by enough cards to
-make a row of 14.  </para>
-
-<para>A moment's reflection will show that this game cannot take more
-than 13 deals. A good score is 1-3 deals, 4-7 is average, 8 or more is
-poor.  </para>
-</refsect1>
-
-<refsect1 id='authors'><title>AUTHORS</title>
-
-<para>Originally written by Tim Lister.  Visual user interface and
-color support by Eric S. Raymond <email>[email protected]</email>. The
-ncurses version was written in November 1994.  See <ulink
-url='http://www.catb.org/~esr/'>http://www.catb.org/~esr/</ulink> for
-updates, also other software and resources by ESR.</para>
-
-</refsect1>
-</refentry>
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bluemoon-2.12/control new/bluemoon-2.13/control
--- old/bluemoon-2.12/control   2013-12-01 05:24:54.000000000 +0100
+++ new/bluemoon-2.13/control   2019-06-12 13:18:25.000000000 +0200
@@ -16,12 +16,11 @@
    A moment's reflection will show that this game cannot take more than 13
  deals. A good score is 1-3 deals, 4-7 is average, 8 or more is poor.
 
-XBS-Gitorious-URL: https://gitorious.org/blue-moon
+XBS-Repository-URL: https://gitlab.com/esr/bluemoon
 
-XBS-Ohloh-URL: http://www.ohloh.net/p/blue-moon-solitaire
+XBS-OpenHub-URL: http://www.ohloh.net/p/blue-moon-solitaire
 
-XBS-Destinations: freecode
-XBS-Freecode-Name: bluemoon-game
+XBS-Destinations: mailto:[email protected]
 
 Homepage: http://www.catb.org/~esr/bluemoon
 
@@ -29,6 +28,6 @@
 
 XBS-Logo: bluemoon.png
 
-XBS-Freecode-Tags: game, card, solitaire
+#XBS-Freecode-Tags: game, card, solitaire
 
 XBS-VC-Tag-Template: %(version)s

++++++ bluemoon-desktop-translation.patch ++++++
--- bluemoon.desktop    2026-02-01 20:58:23.087819561 +0000
+++ bluemoon.desktop    2026-02-01 20:58:29.554859879 +0000
@@ -2,9 +2,59 @@
 Type=Application
 Version=1.0
 Name=Blue Moon
+Name[ar]=القمر الازرق
+Name[ca]=Lluna blava
+Name[cs]=Modrý měsíc
+Name[de]=Blue Moon
+Name[es]=Blue Moon
+Name[id]=Bulan Biru
+Name[it]=Blue Moon
+Name[ja]=Blue Moon
+Name[lt]=Mėlynasis mėnulis
+Name[nl]=Blue Moon
+Name[pt_BR]=Lua Azul
+Name[ru]=Blue Moon
+Name[sk]=Blue Moon
+Name[sv]=Blue Moon
+Name[uk]=Блакитний місяць
+Name[zh_CN]=Blue Moon
 GenericName=Blue Moon game
+GenericName[ar]=لعبة القمر الازرق
+GenericName[ca]=Joc Blue Moon
+GenericName[cs]=Hra Modrý měsíc
+GenericName[de]=Blue Moon Kartenspiel
+GenericName[es]=Juego Blue Moon
+GenericName[fi]=Blue Moon peli
+GenericName[id]=Permainan Blue Moon
+GenericName[it]=Gioco Blue Moon
+GenericName[ja]=Blue Moon ゲーム
+GenericName[lt]=Žaidimas „Mėlynasis mėnulis“
+GenericName[nl]=Blue Moon-spel
+GenericName[pt_BR]=Jogo Blue Moon
+GenericName[ru]=Игра «Голубая луна»
+GenericName[sk]=Hra Blue Moon
+GenericName[sv]=Blue Moon spel
+GenericName[uk]=Гра Блакитний місяць
+GenericName[zh_CN]=Blue Moon 游戏
 Comment=Blue Moon card solitaire
+Comment[ar]=بطاقات لعب القمر الازرق
+Comment[ca]=Cartes del solitari de Blue Moon
+Comment[cs]=Karetní solitér Modrý měsíc
+Comment[de]=Blue Moon Solitaire
+Comment[es]=Juego solitario de cartas Blue Moon
+Comment[fi]=Blue Moon pasianssi korttipeli
+Comment[id]=Kartu Solitaire Blue Moon
+Comment[it]=Solitario di carte Blue Moon
+Comment[ja]=Blue Moon カードソリティア
+Comment[lt]=Kortų žaidimas „Mėlynasis mėnulis“
+Comment[nl]=Blue Moon solitair kaartspel
+Comment[pt_BR]=Blue Moon - jogo estilo Paciência
+Comment[ru]=Пасьянс «Голубая луна»
+Comment[sk]=Kartový solitér Blue Moon
+Comment[uk]=Солітер із карт „Блакитний місяць“
+Comment[zh_CN]=Blue Moon 纸牌游戏
 Icon=bluemoon
 Exec=bluemoon-catb
 Categories=Game;CardGame;
 Terminal=true
+

Reply via email to