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 +
