diff mbox series

[bug#49235,v3] gnu: Add oneko.

Message ID 20210628170237.6721-1-timotej.lazar@araneo.si
State Accepted
Headers show
Series [bug#49235,v3] gnu: Add oneko. | expand

Commit Message

Timotej Lazar June 28, 2021, 5:02 p.m. UTC
* gnu/packages/toys.scm (oneko): New variable.
---
I’ve changed the snippet to also delete all files related to nonfree
bitmaps. I also adjusted the name & comment for the patch.

On closer inspection it turns out that iconv messes up the Japanese
manpage a bit, so I copied it as is. I see some other options:

  1. don’t include it at all;
  2. use some fork from github where this has already been done; or
  3. convert and fix it manually, and include it as a patch.

I’m inclined to include it as is, for the “historical value” of using
the original source (1,2), and to avoid having to carry another patch in
Guix (3). Let me know if you’d prefer another solution!

 gnu/local.mk                                  |   1 +
 .../oneko-remove-nonfree-characters.patch     | 307 ++++++++++++++++++
 gnu/packages/toys.scm                         |  63 +++-
 3 files changed, 370 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/oneko-remove-nonfree-characters.patch

Comments

Leo Prikler June 28, 2021, 7:05 p.m. UTC | #1
Am Montag, den 28.06.2021, 19:02 +0200 schrieb Timotej Lazar:
> * gnu/packages/toys.scm (oneko): New variable.
> ---
> I’ve changed the snippet to also delete all files related to nonfree
> bitmaps. I also adjusted the name & comment for the patch.
> 
> On closer inspection it turns out that iconv messes up the Japanese
> manpage a bit, so I copied it as is. I see some other options:
> 
>   1. don’t include it at all;
>   2. use some fork from github where this has already been done; or
>   3. convert and fix it manually, and include it as a patch.
> 
> I’m inclined to include it as is, for the “historical value” of using
> the original source (1,2), and to avoid having to carry another patch
> in
> Guix (3). Let me know if you’d prefer another solution!
For now I've pushed your patch as-is, since it's not really detrimental
to the functionality of the package.  That being said, I do think we
should seek out patches that have been made from the github forks
mentioned in (2) and apply them as in (3).  Perhaps we might want to
cherry-pick among hunks, so as to not mention the removed bitmaps any
longer.

Another thing I could think is that iconv is either called with the
wrong parameters or that patching the manpage actually breaks it.  In
the case of the latter, you'd have to add the patch as input to the
package, then apply it in the snippet after running iconv.  Of course,
since the character encoding changes, you'd also have to update the
patch, but that's a minor issue imo.

Regards,
Leo

>  gnu/local.mk                                  |   1 +
>  .../oneko-remove-nonfree-characters.patch     | 307
> ++++++++++++++++++
>  gnu/packages/toys.scm                         |  63 +++-
>  3 files changed, 370 insertions(+), 1 deletion(-)
>  create mode 100644 gnu/packages/patches/oneko-remove-nonfree-
> characters.patch
> 
> diff --git a/gnu/local.mk b/gnu/local.mk
> index f507fe566f..7d1fc8157c 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -1499,6 +1499,7 @@ dist_patch_DATA =				
> 		\
>    %D%/packages/patches/ocaml-dose3-dont-make-printconf.patch	\
>    %D%/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch	\
>    %D%/packages/patches/omake-fix-non-determinism.patch	\
> +  %D%/packages/patches/oneko-remove-nonfree-characters.patch	\
>    %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch	
> \
>    %D%/packages/patches/opencascade-oce-glibc-2.26.patch		
> \
>    %D%/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch	
> \
> diff --git a/gnu/packages/patches/oneko-remove-nonfree-
> characters.patch b/gnu/packages/patches/oneko-remove-nonfree-
> characters.patch
> new file mode 100644
> index 0000000000..4f80e53995
> --- /dev/null
> +++ b/gnu/packages/patches/oneko-remove-nonfree-characters.patch
> @@ -0,0 +1,307 @@
> +Remove options and code to use bitmaps of the BSD daemon and other
> characters
> +with copyright issues. The bitmaps themselves are deleted in a
> source snippet.
> +diff --git a/cursors/cursor.include b/cursors/cursor.include
> +index ef96d72..1dc3dc2 100644
> +--- a/cursors/cursor.include
> ++++ b/cursors/cursor.include
> +@@ -2,9 +2,3 @@
> + #include "mouse_cursor_mask.xbm"
> + #include "bone_cursor.xbm"
> + #include "bone_cursor_mask.xbm"
> +-#include "bsd_cursor.xbm"
> +-#include "bsd_cursor_mask.xbm"
> +-#include "card_cursor.xbm"
> +-#include "card_cursor_mask.xbm"
> +-#include "petal_cursor.xbm"
> +-#include "petal_cursor_mask.xbm"
> +diff --git a/oneko.c b/oneko.c
> +index d2b81fe..04fa59f 100644
> +--- a/oneko.c
> ++++ b/oneko.c
> +@@ -33,7 +33,7 @@ XColor	theBackgroundColor;		/*
> $@?'(J ($@%P%C%/%0%i%&%s%I(J) */
> + 
> + int Synchronous = False;
> + /* Types of animals */
> +-#define BITMAPTYPES 6
> ++#define BITMAPTYPES 3
> + typedef struct _AnimalDefaults {
> +   char *name;
> +   int speed, idle, bitmap_width, bitmap_height;
> +@@ -51,12 +51,6 @@ AnimalDefaultsData AnimalDefaultsDataTable[] =
> +       mouse_cursor_width,mouse_cursor_height,
> mouse_cursor_x_hot,mouse_cursor_y_hot },
> +   { "dog" , 10, 6, 32, 32, 125000L, 0, 0,
> bone_cursor_bits,bone_cursor_mask_bits,
> +       bone_cursor_width,bone_cursor_height,
> bone_cursor_x_hot,bone_cursor_y_hot },
> +-  { "bsd_daemon" , 16, 6, 32, 32, 300000L, 22, 20,
> bsd_cursor_bits,bsd_cursor_mask_bits,
> +-      bsd_cursor_width,bsd_cursor_height,
> bsd_cursor_x_hot,bsd_cursor_y_hot },
> +-  { "sakura" , 13, 6, 32, 32, 125000L, 0, 0,
> card_cursor_bits,card_cursor_mask_bits,
> +-      card_cursor_width,card_cursor_height,
> card_cursor_x_hot,card_cursor_y_hot },
> +-  { "tomoyo" , 10, 6, 32, 32, 125000L, 32, 32,
> petal_cursor_bits,petal_cursor_mask_bits,
> +-      petal_cursor_width,petal_cursor_height,
> petal_cursor_x_hot,petal_cursor_y_hot },
> + };
> + 
> + /*
> +@@ -154,70 +148,70 @@ typedef struct {
> + 
> + BitmapGCData	BitmapGCDataTable[] =
> + {
> +-    { &Mati2GC, &Mati2Xbm,  mati2_bits, mati2_tora_bits,
> mati2_dog_bits, mati2_bsd_bits, mati2_sakura_bits, mati2_tomoyo_bits,
> +-      &Mati2Msk, mati2_mask_bits, mati2_mask_bits,
> mati2_dog_mask_bits, mati2_bsd_mask_bits, mati2_sakura_mask_bits,
> mati2_tomoyo_mask_bits },
> +-    { &Jare2GC, &Jare2Xbm,  jare2_bits, jare2_tora_bits,
> jare2_dog_bits, jare2_bsd_bits, jare2_sakura_bits, jare2_tomoyo_bits,
> +-      &Jare2Msk, jare2_mask_bits, jare2_mask_bits,
> jare2_dog_mask_bits, jare2_bsd_mask_bits, jare2_sakura_mask_bits,
> jare2_tomoyo_mask_bits },
> +-    { &Kaki1GC, &Kaki1Xbm,  kaki1_bits, kaki1_tora_bits,
> kaki1_dog_bits, kaki1_bsd_bits, kaki1_sakura_bits, kaki1_tomoyo_bits,
> +-      &Kaki1Msk, kaki1_mask_bits, kaki1_mask_bits,
> kaki1_dog_mask_bits, kaki1_bsd_mask_bits, kaki1_sakura_mask_bits,
> kaki1_tomoyo_mask_bits },
> +-    { &Kaki2GC, &Kaki2Xbm,  kaki2_bits, kaki2_tora_bits,
> kaki2_dog_bits, kaki2_bsd_bits, kaki2_sakura_bits, kaki2_tomoyo_bits,
> +-      &Kaki2Msk, kaki2_mask_bits, kaki2_mask_bits,
> kaki2_dog_mask_bits, kaki2_bsd_mask_bits, kaki2_sakura_mask_bits,
> kaki2_tomoyo_mask_bits },
> +-    { &Mati3GC, &Mati3Xbm,  mati3_bits, mati3_tora_bits,
> mati3_dog_bits, mati3_bsd_bits, mati3_sakura_bits, mati3_tomoyo_bits,
> +-      &Mati3Msk, mati3_mask_bits, mati3_mask_bits,
> mati3_dog_mask_bits, mati3_bsd_mask_bits, mati3_sakura_mask_bits,
> mati3_tomoyo_mask_bits },
> +-    { &Sleep1GC, &Sleep1Xbm,  sleep1_bits, sleep1_tora_bits,
> sleep1_dog_bits, sleep1_bsd_bits, sleep1_sakura_bits,
> sleep1_tomoyo_bits,
> +-      &Sleep1Msk, sleep1_mask_bits, sleep1_mask_bits,
> sleep1_dog_mask_bits, sleep1_bsd_mask_bits, sleep1_sakura_mask_bits,
> sleep1_tomoyo_mask_bits },
> +-    { &Sleep2GC, &Sleep2Xbm,  sleep2_bits, sleep2_tora_bits,
> sleep2_dog_bits, sleep2_bsd_bits, sleep2_sakura_bits,
> sleep2_tomoyo_bits,
> +-      &Sleep2Msk, sleep2_mask_bits, sleep2_mask_bits,
> sleep2_dog_mask_bits, sleep2_bsd_mask_bits, sleep2_sakura_mask_bits,
> sleep2_tomoyo_mask_bits },
> +-    { &AwakeGC, &AwakeXbm,  awake_bits, awake_tora_bits,
> awake_dog_bits, awake_bsd_bits, awake_sakura_bits, awake_tomoyo_bits,
> +-      &AwakeMsk, awake_mask_bits, awake_mask_bits,
> awake_dog_mask_bits, awake_bsd_mask_bits, awake_sakura_mask_bits,
> awake_tomoyo_mask_bits },
> +-    { &Up1GC, &Up1Xbm,  up1_bits, up1_tora_bits, up1_dog_bits,
> up1_bsd_bits, up1_sakura_bits, up1_tomoyo_bits,
> +-      &Up1Msk, up1_mask_bits, up1_mask_bits, up1_dog_mask_bits,
> up1_bsd_mask_bits, up1_sakura_mask_bits, up1_tomoyo_mask_bits },
> +-    { &Up2GC, &Up2Xbm,  up2_bits, up2_tora_bits, up2_dog_bits,
> up2_bsd_bits, up2_sakura_bits, up2_tomoyo_bits,
> +-      &Up2Msk, up2_mask_bits, up2_mask_bits, up2_dog_mask_bits,
> up2_bsd_mask_bits, up2_sakura_mask_bits, up2_tomoyo_mask_bits },
> +-    { &Down1GC, &Down1Xbm,  down1_bits, down1_tora_bits,
> down1_dog_bits, down1_bsd_bits, down1_sakura_bits, down1_tomoyo_bits,
> +-      &Down1Msk, down1_mask_bits, down1_mask_bits,
> down1_dog_mask_bits, down1_bsd_mask_bits, down1_sakura_mask_bits,
> down1_tomoyo_mask_bits },
> +-    { &Down2GC, &Down2Xbm,  down2_bits, down2_tora_bits,
> down2_dog_bits, down2_bsd_bits, down2_sakura_bits, down2_tomoyo_bits,
> +-      &Down2Msk, down2_mask_bits, down2_mask_bits,
> down2_dog_mask_bits, down2_bsd_mask_bits, down2_sakura_mask_bits,
> down2_tomoyo_mask_bits },
> +-    { &Left1GC, &Left1Xbm,  left1_bits, left1_tora_bits,
> left1_dog_bits, left1_bsd_bits, left1_sakura_bits, left1_tomoyo_bits,
> +-      &Left1Msk, left1_mask_bits, left1_mask_bits,
> left1_dog_mask_bits, left1_bsd_mask_bits, left1_sakura_mask_bits,
> left1_tomoyo_mask_bits },
> +-    { &Left2GC, &Left2Xbm,  left2_bits, left2_tora_bits,
> left2_dog_bits, left2_bsd_bits, left2_sakura_bits, left2_tomoyo_bits,
> +-      &Left2Msk, left2_mask_bits, left2_mask_bits,
> left2_dog_mask_bits, left2_bsd_mask_bits, left2_sakura_mask_bits,
> left2_tomoyo_mask_bits },
> +-    { &Right1GC, &Right1Xbm,  right1_bits, right1_tora_bits,
> right1_dog_bits, right1_bsd_bits, right1_sakura_bits,
> right1_tomoyo_bits,
> +-      &Right1Msk, right1_mask_bits,
> right1_mask_bits,right1_dog_mask_bits, right1_bsd_mask_bits,
> right1_sakura_mask_bits, right1_tomoyo_mask_bits },
> +-    { &Right2GC, &Right2Xbm,  right2_bits, right2_tora_bits,
> right2_dog_bits, right2_bsd_bits, right2_sakura_bits,
> right2_tomoyo_bits,
> +-      &Right2Msk, right2_mask_bits, right2_mask_bits,
> right2_dog_mask_bits, right2_bsd_mask_bits, right2_sakura_mask_bits,
> right2_tomoyo_mask_bits },
> +-    { &UpLeft1GC, &UpLeft1Xbm,  upleft1_bits, upleft1_tora_bits,
> upleft1_dog_bits, upleft1_bsd_bits, upleft1_sakura_bits,
> upleft1_tomoyo_bits,
> +-      &UpLeft1Msk, upleft1_mask_bits, upleft1_mask_bits,
> upleft1_dog_mask_bits, upleft1_bsd_mask_bits,
> upleft1_sakura_mask_bits, upleft1_tomoyo_mask_bits },
> +-    { &UpLeft2GC, &UpLeft2Xbm,  upleft2_bits, upleft2_tora_bits,
> upleft2_dog_bits, upleft2_bsd_bits, upleft2_sakura_bits,
> upleft2_tomoyo_bits,
> +-      &UpLeft2Msk, upleft2_mask_bits,
> upleft2_mask_bits,upleft2_dog_mask_bits, upleft2_bsd_mask_bits,
> upleft2_sakura_mask_bits, upleft2_tomoyo_mask_bits },
> +-    { &UpRight1GC, &UpRight1Xbm,  upright1_bits,
> upright1_tora_bits, upright1_dog_bits, upright1_bsd_bits,
> upright1_sakura_bits, upright1_tomoyo_bits,
> +-      &UpRight1Msk, upright1_mask_bits,
> upright1_mask_bits,upright1_dog_mask_bits, upright1_bsd_mask_bits,
> upright1_sakura_mask_bits, upright1_tomoyo_mask_bits },
> +-    { &UpRight2GC, &UpRight2Xbm,  upright2_bits,
> upright2_tora_bits, upright2_dog_bits, upright2_bsd_bits,
> upright2_sakura_bits, upright2_tomoyo_bits,
> +-      &UpRight2Msk, upright2_mask_bits,
> upright2_mask_bits,upright2_dog_mask_bits, upright2_bsd_mask_bits,
> upright2_sakura_mask_bits, upright2_tomoyo_mask_bits },
> +-    { &DownLeft1GC, &DownLeft1Xbm,  dwleft1_bits,
> dwleft1_tora_bits, dwleft1_dog_bits, dwleft1_bsd_bits,
> dwleft1_sakura_bits, dwleft1_tomoyo_bits,
> +-      &DownLeft1Msk, dwleft1_mask_bits, dwleft1_mask_bits,
> dwleft1_dog_mask_bits, dwleft1_bsd_mask_bits,
> dwleft1_sakura_mask_bits, dwleft1_tomoyo_mask_bits },
> +-    { &DownLeft2GC, &DownLeft2Xbm,  dwleft2_bits,
> dwleft2_tora_bits, dwleft2_dog_bits, dwleft2_bsd_bits,
> dwleft2_sakura_bits, dwleft2_tomoyo_bits,
> +-      &DownLeft2Msk, dwleft2_mask_bits, dwleft2_mask_bits,
> dwleft2_dog_mask_bits, dwleft2_bsd_mask_bits,
> dwleft2_sakura_mask_bits, dwleft2_tomoyo_mask_bits },
> +-    { &DownRight1GC, &DownRight1Xbm,  dwright1_bits,
> dwright1_tora_bits, dwright1_dog_bits, dwright1_bsd_bits,
> dwright1_sakura_bits, dwright1_tomoyo_bits,
> +-      &DownRight1Msk, dwright1_mask_bits, dwright1_mask_bits,
> dwright1_dog_mask_bits, dwright1_bsd_mask_bits,
> dwright1_sakura_mask_bits, dwright1_tomoyo_mask_bits },
> +-    { &DownRight2GC, &DownRight2Xbm,  dwright2_bits,
> dwright2_tora_bits, dwright2_dog_bits, dwright2_bsd_bits,
> dwright2_sakura_bits, dwright2_tomoyo_bits,
> +-      &DownRight2Msk, dwright2_mask_bits, dwright2_mask_bits,
> dwright2_dog_mask_bits, dwright2_bsd_mask_bits,
> dwright2_sakura_mask_bits, dwright2_tomoyo_mask_bits },
> +-    { &UpTogi1GC, &UpTogi1Xbm,  utogi1_bits, utogi1_tora_bits,
> utogi1_dog_bits, utogi1_bsd_bits, utogi1_sakura_bits,
> utogi1_tomoyo_bits,
> +-      &UpTogi1Msk, utogi1_mask_bits, utogi1_mask_bits,
> utogi1_dog_mask_bits, utogi1_bsd_mask_bits, utogi1_sakura_mask_bits,
> utogi1_tomoyo_mask_bits },
> +-    { &UpTogi2GC, &UpTogi2Xbm,  utogi2_bits, utogi2_tora_bits,
> utogi2_dog_bits, utogi2_bsd_bits, utogi2_sakura_bits,
> utogi2_tomoyo_bits,
> +-      &UpTogi2Msk, utogi2_mask_bits, utogi2_mask_bits,
> utogi2_dog_mask_bits, utogi2_bsd_mask_bits, utogi2_sakura_mask_bits,
> utogi2_tomoyo_mask_bits },
> +-    { &DownTogi1GC, &DownTogi1Xbm,  dtogi1_bits, dtogi1_tora_bits,
> dtogi1_dog_bits, dtogi1_bsd_bits, dtogi1_sakura_bits,
> dtogi1_tomoyo_bits,
> +-      &DownTogi1Msk, dtogi1_mask_bits, dtogi1_mask_bits,
> dtogi1_dog_mask_bits, dtogi1_bsd_mask_bits, dtogi1_sakura_mask_bits,
> dtogi1_tomoyo_mask_bits },
> +-    { &DownTogi2GC, &DownTogi2Xbm,  dtogi2_bits, dtogi2_tora_bits,
> dtogi2_dog_bits, dtogi2_bsd_bits, dtogi2_sakura_bits,
> dtogi2_tomoyo_bits,
> +-      &DownTogi2Msk, dtogi2_mask_bits, dtogi2_mask_bits,
> dtogi2_dog_mask_bits, dtogi2_bsd_mask_bits, dtogi2_sakura_mask_bits,
> dtogi2_tomoyo_mask_bits },
> +-    { &LeftTogi1GC, &LeftTogi1Xbm,  ltogi1_bits, ltogi1_tora_bits,
> ltogi1_dog_bits, ltogi1_bsd_bits, ltogi1_sakura_bits,
> ltogi1_tomoyo_bits,
> +-      &LeftTogi1Msk, ltogi1_mask_bits,
> ltogi1_mask_bits,ltogi1_dog_mask_bits, ltogi1_bsd_mask_bits,
> ltogi1_sakura_mask_bits, ltogi1_tomoyo_mask_bits },
> +-    { &LeftTogi2GC, &LeftTogi2Xbm,  ltogi2_bits, ltogi2_tora_bits,
> ltogi2_dog_bits, ltogi2_bsd_bits, ltogi2_sakura_bits,
> ltogi2_tomoyo_bits,
> +-      &LeftTogi2Msk, ltogi2_mask_bits,
> ltogi2_mask_bits,ltogi2_dog_mask_bits, ltogi2_bsd_mask_bits,
> ltogi2_sakura_mask_bits, ltogi2_tomoyo_mask_bits },
> +-    { &RightTogi1GC, &RightTogi1Xbm,  rtogi1_bits,
> rtogi1_tora_bits, rtogi1_dog_bits, rtogi1_bsd_bits,
> rtogi1_sakura_bits, rtogi1_tomoyo_bits,
> +-      &RightTogi1Msk, rtogi1_mask_bits,
> rtogi1_mask_bits,rtogi1_dog_mask_bits, rtogi1_bsd_mask_bits,
> rtogi1_sakura_mask_bits, rtogi1_tomoyo_mask_bits },
> +-    { &RightTogi2GC, &RightTogi2Xbm,  rtogi2_bits,
> rtogi2_tora_bits, rtogi2_dog_bits, rtogi2_bsd_bits,
> rtogi2_sakura_bits, rtogi2_tomoyo_bits,
> +-      &RightTogi2Msk, rtogi2_mask_bits,
> rtogi2_mask_bits,rtogi2_dog_mask_bits, rtogi2_bsd_mask_bits,
> rtogi2_sakura_mask_bits, rtogi2_tomoyo_mask_bits },
> ++    { &Mati2GC, &Mati2Xbm,  mati2_bits, mati2_tora_bits,
> mati2_dog_bits,
> ++      &Mati2Msk, mati2_mask_bits, mati2_mask_bits,
> mati2_dog_mask_bits },
> ++    { &Jare2GC, &Jare2Xbm,  jare2_bits, jare2_tora_bits,
> jare2_dog_bits,
> ++      &Jare2Msk, jare2_mask_bits, jare2_mask_bits,
> jare2_dog_mask_bits },
> ++    { &Kaki1GC, &Kaki1Xbm,  kaki1_bits, kaki1_tora_bits,
> kaki1_dog_bits,
> ++      &Kaki1Msk, kaki1_mask_bits, kaki1_mask_bits,
> kaki1_dog_mask_bits },
> ++    { &Kaki2GC, &Kaki2Xbm,  kaki2_bits, kaki2_tora_bits,
> kaki2_dog_bits,
> ++      &Kaki2Msk, kaki2_mask_bits, kaki2_mask_bits,
> kaki2_dog_mask_bits },
> ++    { &Mati3GC, &Mati3Xbm,  mati3_bits, mati3_tora_bits,
> mati3_dog_bits,
> ++      &Mati3Msk, mati3_mask_bits, mati3_mask_bits,
> mati3_dog_mask_bits },
> ++    { &Sleep1GC, &Sleep1Xbm,  sleep1_bits, sleep1_tora_bits,
> sleep1_dog_bits,
> ++      &Sleep1Msk, sleep1_mask_bits, sleep1_mask_bits,
> sleep1_dog_mask_bits },
> ++    { &Sleep2GC, &Sleep2Xbm,  sleep2_bits, sleep2_tora_bits,
> sleep2_dog_bits,
> ++      &Sleep2Msk, sleep2_mask_bits, sleep2_mask_bits,
> sleep2_dog_mask_bits },
> ++    { &AwakeGC, &AwakeXbm,  awake_bits, awake_tora_bits,
> awake_dog_bits,
> ++      &AwakeMsk, awake_mask_bits, awake_mask_bits,
> awake_dog_mask_bits },
> ++    { &Up1GC, &Up1Xbm,  up1_bits, up1_tora_bits, up1_dog_bits,
> ++      &Up1Msk, up1_mask_bits, up1_mask_bits, up1_dog_mask_bits },
> ++    { &Up2GC, &Up2Xbm,  up2_bits, up2_tora_bits, up2_dog_bits,
> ++      &Up2Msk, up2_mask_bits, up2_mask_bits, up2_dog_mask_bits },
> ++    { &Down1GC, &Down1Xbm,  down1_bits, down1_tora_bits,
> down1_dog_bits,
> ++      &Down1Msk, down1_mask_bits, down1_mask_bits,
> down1_dog_mask_bits },
> ++    { &Down2GC, &Down2Xbm,  down2_bits, down2_tora_bits,
> down2_dog_bits,
> ++      &Down2Msk, down2_mask_bits, down2_mask_bits,
> down2_dog_mask_bits },
> ++    { &Left1GC, &Left1Xbm,  left1_bits, left1_tora_bits,
> left1_dog_bits,
> ++      &Left1Msk, left1_mask_bits, left1_mask_bits,
> left1_dog_mask_bits },
> ++    { &Left2GC, &Left2Xbm,  left2_bits, left2_tora_bits,
> left2_dog_bits,
> ++      &Left2Msk, left2_mask_bits, left2_mask_bits,
> left2_dog_mask_bits },
> ++    { &Right1GC, &Right1Xbm,  right1_bits, right1_tora_bits,
> right1_dog_bits,
> ++      &Right1Msk, right1_mask_bits,
> right1_mask_bits,right1_dog_mask_bits },
> ++    { &Right2GC, &Right2Xbm,  right2_bits, right2_tora_bits,
> right2_dog_bits,
> ++      &Right2Msk, right2_mask_bits, right2_mask_bits,
> right2_dog_mask_bits },
> ++    { &UpLeft1GC, &UpLeft1Xbm,  upleft1_bits, upleft1_tora_bits,
> upleft1_dog_bits,
> ++      &UpLeft1Msk, upleft1_mask_bits, upleft1_mask_bits,
> upleft1_dog_mask_bits },
> ++    { &UpLeft2GC, &UpLeft2Xbm,  upleft2_bits, upleft2_tora_bits,
> upleft2_dog_bits,
> ++      &UpLeft2Msk, upleft2_mask_bits,
> upleft2_mask_bits,upleft2_dog_mask_bits },
> ++    { &UpRight1GC, &UpRight1Xbm,  upright1_bits,
> upright1_tora_bits, upright1_dog_bits,
> ++      &UpRight1Msk, upright1_mask_bits,
> upright1_mask_bits,upright1_dog_mask_bits },
> ++    { &UpRight2GC, &UpRight2Xbm,  upright2_bits,
> upright2_tora_bits, upright2_dog_bits,
> ++      &UpRight2Msk, upright2_mask_bits,
> upright2_mask_bits,upright2_dog_mask_bits },
> ++    { &DownLeft1GC, &DownLeft1Xbm,  dwleft1_bits,
> dwleft1_tora_bits, dwleft1_dog_bits,
> ++      &DownLeft1Msk, dwleft1_mask_bits, dwleft1_mask_bits,
> dwleft1_dog_mask_bits },
> ++    { &DownLeft2GC, &DownLeft2Xbm,  dwleft2_bits,
> dwleft2_tora_bits, dwleft2_dog_bits,
> ++      &DownLeft2Msk, dwleft2_mask_bits, dwleft2_mask_bits,
> dwleft2_dog_mask_bits },
> ++    { &DownRight1GC, &DownRight1Xbm,  dwright1_bits,
> dwright1_tora_bits, dwright1_dog_bits,
> ++      &DownRight1Msk, dwright1_mask_bits, dwright1_mask_bits,
> dwright1_dog_mask_bits },
> ++    { &DownRight2GC, &DownRight2Xbm,  dwright2_bits,
> dwright2_tora_bits, dwright2_dog_bits,
> ++      &DownRight2Msk, dwright2_mask_bits, dwright2_mask_bits,
> dwright2_dog_mask_bits },
> ++    { &UpTogi1GC, &UpTogi1Xbm,  utogi1_bits, utogi1_tora_bits,
> utogi1_dog_bits,
> ++      &UpTogi1Msk, utogi1_mask_bits, utogi1_mask_bits,
> utogi1_dog_mask_bits },
> ++    { &UpTogi2GC, &UpTogi2Xbm,  utogi2_bits, utogi2_tora_bits,
> utogi2_dog_bits,
> ++      &UpTogi2Msk, utogi2_mask_bits, utogi2_mask_bits,
> utogi2_dog_mask_bits },
> ++    { &DownTogi1GC, &DownTogi1Xbm,  dtogi1_bits, dtogi1_tora_bits,
> dtogi1_dog_bits,
> ++      &DownTogi1Msk, dtogi1_mask_bits, dtogi1_mask_bits,
> dtogi1_dog_mask_bits },
> ++    { &DownTogi2GC, &DownTogi2Xbm,  dtogi2_bits, dtogi2_tora_bits,
> dtogi2_dog_bits,
> ++      &DownTogi2Msk, dtogi2_mask_bits, dtogi2_mask_bits,
> dtogi2_dog_mask_bits },
> ++    { &LeftTogi1GC, &LeftTogi1Xbm,  ltogi1_bits, ltogi1_tora_bits,
> ltogi1_dog_bits,
> ++      &LeftTogi1Msk, ltogi1_mask_bits,
> ltogi1_mask_bits,ltogi1_dog_mask_bits },
> ++    { &LeftTogi2GC, &LeftTogi2Xbm,  ltogi2_bits, ltogi2_tora_bits,
> ltogi2_dog_bits,
> ++      &LeftTogi2Msk, ltogi2_mask_bits,
> ltogi2_mask_bits,ltogi2_dog_mask_bits },
> ++    { &RightTogi1GC, &RightTogi1Xbm,  rtogi1_bits,
> rtogi1_tora_bits, rtogi1_dog_bits,
> ++      &RightTogi1Msk, rtogi1_mask_bits,
> rtogi1_mask_bits,rtogi1_dog_mask_bits },
> ++    { &RightTogi2GC, &RightTogi2Xbm,  rtogi2_bits,
> rtogi2_tora_bits, rtogi2_dog_bits,
> ++      &RightTogi2Msk, rtogi2_mask_bits,
> rtogi2_mask_bits,rtogi2_dog_mask_bits },
> +     { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
> + };
> + 
> +@@ -1512,8 +1506,6 @@ GetArguments(argc, argv, theDisplayName)
> +     }
> +     else {
> +       char *av = argv[ArgCounter] + 1;
> +-      if (strcmp(av, "bsd") == 0)
> +-	av = "bsd_daemon";
> +       for (loop=0;loop<BITMAPTYPES;loop++) {
> + 	if (strcmp(av,AnimalDefaultsDataTable[loop].name)==0)
> + 	  {NekoMoyou = loop;found=1;}
> +diff --git a/oneko.h b/oneko.h
> +index 414e12f..38281fd 100644
> +--- a/oneko.h
> ++++ b/oneko.h
> +@@ -36,17 +36,11 @@
> + #include "bitmaps/neko/neko.include"
> + #include "bitmaps/tora/tora.include"
> + #include "bitmaps/dog/dog.include"
> +-#include "bitmaps/bsd/bsd.include"
> +-#include "bitmaps/sakura/sakura.include"
> +-#include "bitmaps/tomoyo/tomoyo.include"
> + 
> + /* These are the bitmasks that allow the use of the shape
> extension. */
> + 
> + #include "bitmasks/neko/neko.mask.include"
> + #include "bitmasks/dog/dog.mask.include"
> +-#include "bitmasks/bsd/bsd.mask.include"
> +-#include "bitmasks/sakura/sakura.mask.include"
> +-#include "bitmasks/tomoyo/tomoyo.mask.include"
> + 
> + /*
> +  *	$@Dj?tDj5A(J
> +diff --git a/oneko.man b/oneko.man
> +index d6d2b40..0e9b09d 100644
> +--- a/oneko.man
> ++++ b/oneko.man
> +@@ -3,9 +3,7 @@
> + The program oneko creates a cute cat chasing around your mouse
> cursor.
> + .SH SYNOPSIS
> + .B oneko
> +-[\fB-help\fP] [\fB-tora\fP]
> +-[\fB-dog\fP] [\fB-bsd_daemon\fP] [\fB-bsd\fP]
> +-[\fB-sakura\fP] [\fB-tomoyo\fP]
> ++[\fB-help\fP] [\fB-tora\fP] [\fB-dog\fP]
> + [\fB-time\fP \fIn\fP] [\fB-speed\fP \fIn\fP] [\fB-idle\fP \fIn\fP]
> + [\fB-name\fP \fIname\fP] [\fB-towindow\fP] [\fB-toname\fP
> \fIname\fP]
> + [\fB-tofocus\fP]
> +@@ -28,19 +26,6 @@ I don't know how to say it in English.
> + .B -dog
> + Runs a dog instead of a cat.
> + .TP
> +-.B -bsd_daemon
> +-Runs a 4.3BSD daemon instead of a cat.
> +-.TP
> +-.B -bsd
> +-Same as
> +-.B -bsd_daemon.
> +-.TP
> +-.B -sakura
> +-Runs Sakura Kinomoto instead of a cat.
> +-.TP
> +-.B -tomoyo
> +-Runs Tomoyo Daidouji instead of a cat.
> +-.TP
> + .BI \-time " interval"
> + Sets interval timer which determine intervals for cat animation.
> + Default value is 125000 and unit is micro-second.  Smaller value
> makes cat
> +@@ -129,12 +114,6 @@ Background color.
> + While this program uses XGetDefault, be sure to use "neko.resouce"
> form.
> + If you run this program as "tora", by hard of soft link, the \fB-
> tora\fP
> + option is enabled by default.
> +-.PP
> +-BSD Daemon Copyright 1988 by Marshall Kirk McKusick. All Rights
> Reserved.
> +-.PP
> +-Sakura Kinomoto and Tomoyo Daidouji are characters in a comic strip
> +-"CARDCAPTOR SAKURA" (CLAMP, Kodansha), with the sanction indicated
> in
> +-CLAMP SCHOOL WEB CAMPUS (http://www.clamp.f-2.co.jp/).
> + .SH AUTHOR
> + Original
> + .I xneko
> +diff --git a/oneko.man.jp b/oneko.man.jp
> +index 96f9e3a..9a885df 100644
> +--- a/oneko.man.jp
> ++++ b/oneko.man.jp
> +@@ -3,9 +3,7 @@
> + $@$+$o$$$$G-$,%^%&%9%+!<%=%k$rDI$$$+$1$k%W%m%0%i%`(J
> + .SH $@=q<0(J
> + .B oneko
> +-[\fB-help\fP] [\fB-tora\fP]
> +-[\fB-dog\fP] [\fB-bsd_daemon\fP] [\fB-bsd\fP]
> +-[\fB-sakura\fP] [\fB-tomoyo\fP]
> ++[\fB-help\fP] [\fB-tora\fP] [\fB-dog\fP]
> + [\fB-time\fP \fIn\fP] [\fB-speed\fP \fIn\fP] [\fB-idle\fP \fIn\fP]
> + [\fB-name\fP \fIname\fP] [\fB-towindow\fP] [\fB-toname\fP
> \fIname\fP]
> + [\fB-tofocus\fP]
> +@@ -27,19 +25,6 @@
> + .B -dog
> + $@G-$KBe$o$j8$$,Av$j$^$9!#(J
> + .TP
> +-.B -bsd_daemon
> +-$@G-$KBe$o$j(J 4.3BSD $@%G!<%b%s$,Av$j$^$9!#(J
> +-.TP
> +-.B -bsd
> +-.B -bsd_daemon
> +-$@$KF1$8!#(J
> +-.TP
> +-.B -sakura
> +-$@G-$KBe$o$jLZG7K\:y$,Av$j$^$9!#(J
> +-.TP
> +-.B -tomoyo
> +-$@G-$KBe$o$jBgF;;{CN@$$,Av$j$^$9!#(J
> +-.TP
> + .BI \-time " interval"
> + $@G-%"%K%a!<%7%g%s$N4V3V$r;XDj$7$^$9!#(J
> + $@%G%U%)%k%HCM$O(J 125000 $@$GC10L$O%^%$%/%mIC$G$9!#(J
> +@@ -127,15 +112,6 @@ SHAPE extension $@$r;H$$$?$/$J$$>l9g(J True
> $@$H$7$^$9!#(J
> + $@$r;H$&$3$H$KN10U$7$F$/$@$5$$!#(J
> + $@%O!<%I%j%s%/$"$k$$$O%=%U%H%j%s%/$K$h$C$F!"$3$N%W%m%0%i%`$r(J
> tora $@$H$7$F(J
> + $@5/F0$7$?>l9g$K$O!"%G%U%)%k%H$G(J \fB-tora\fP $@%*%W%7%g%s$,M-
> 8z$H$J$j$^$9!#(J
> +-.PP
> +-BSD $@%G!<%b%s$O(J  Marshall Kirk McKusick
> $@;a$NCx:nJ*$G$9!#$9$Y$F$N8"Mx$O(J
> +-$@J];}$5$l$F$$$^$9!#(J
> +-BSD Daemon Copyright 1988 by Marshall Kirk McKusick. All Rights
> Reserved.
> +-.PP
> +-$@LZG7K\:y$*$h$SBgF;;{CN@$$OL!2h!X%+!<%I%-
> %c%W%?!<$5$/$i!Y!J(JCLAMP, $@9VCL(J
> +-$@<R!K$N%-%c%i%/%?!<$G$"$j!"(JCLAMP $@3X1`EE;RJ,9;(J
> +-$@!J(J
> http://www.clamp.f-2.co.jp/$@!K$K<($5$l$F$$$kMFG'$N$b$H$KMxMQ$5$l$F$$(J
> +-$@$^$9!#(J
> + .SH $@:n<T(J
> + $@%*%j%8%J%k$N(J
> + .I xneko
> diff --git a/gnu/packages/toys.scm b/gnu/packages/toys.scm
> index bbd5753841..a277bce453 100644
> --- a/gnu/packages/toys.scm
> +++ b/gnu/packages/toys.scm
> @@ -1,7 +1,7 @@
>  ;;; GNU Guix --- Functional package management for GNU
>  ;;; Copyright © 2017, 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr
> >
>  ;;; Copyright © 2019 Jesse Gibbons <jgibbons2357+guix@gmail.com>
> -;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
> +;;; Copyright © 2019, 2020, 2021 Timotej Lazar <
> timotej.lazar@araneo.si>
>  ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
>  ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
>  ;;;
> @@ -21,6 +21,7 @@
>  ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>
> ;.
>  
>  (define-module (gnu packages toys)
> +  #:use-module (gnu packages)
>    #:use-module (gnu packages bison)
>    #:use-module (gnu packages flex)
>    #:use-module (gnu packages gtk)
> @@ -36,6 +37,66 @@
>    #:use-module (guix packages)
>    #:use-module (guix utils))
>  
> +(define-public oneko
> +  (package
> +    (name "oneko")
> +    (version "1.2.sakura.5")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (string-append
> +             "http://www.daidouji.com/oneko/distfiles/oneko-"
> version ".tar.gz"))
> +       (sha256
> +        (base32
> "0bxjlbafn10sfi5d06420pg70rpvsiy5gdbm8kspd6qy4kqhabic"))
> +       (patches (search-patches "oneko-remove-nonfree-
> characters.patch"))
> +       (modules '((guix build utils)))
> +       (snippet
> +        ;; Remove bitmaps with copyright issues.
> +        '(begin
> +           (for-each delete-file-recursively
> +                     (cons* "bitmaps/bsd" "bitmaps/sakura"
> "bitmaps/tomoyo"
> +                            "bitmasks/bsd" "bitmasks/sakura"
> "bitmasks/tomoyo"
> +                            (find-files "cursors"
> "(bsd|card|petal).*\\.xbm")))
> +           #t))))
> +    (build-system gnu-build-system)
> +    (native-inputs
> +     `(("imake" ,imake)))
> +    (inputs
> +     `(("libx11" ,libx11)
> +       ("libxext" ,libxext)))
> +    (arguments
> +     `(#:tests? #f ; no tests
> +       #:phases
> +       (modify-phases %standard-phases
> +         (replace 'configure
> +           (lambda _
> +             (invoke "xmkmf")
> +             ;; Fix incorrectly generated compiler flags.
> +             (substitute* "Makefile"
> +               (("(CDEBUGFLAGS = ).*" _ front) (string-append front
> "-O2\n")))
> +             #t))
> +         (replace 'install
> +           (lambda* (#:key outputs make-flags #:allow-other-keys)
> +             (let* ((out (assoc-ref outputs "out"))
> +                    (bin (string-append out "/bin"))
> +                    (doc (string-append out "/share/doc/" ,name "-"
> ,version))
> +                    (man (string-append out "/share/man"))
> +                    (man6 (string-append man "/man6"))
> +                    (man6-ja (string-append man "/ja/man6")))
> +               (install-file "oneko" bin)
> +               (mkdir-p man6)
> +               (mkdir-p man6-ja)
> +               (copy-file "oneko.man" (string-append man6
> "/oneko.6"))
> +               (copy-file "oneko.man.jp" (string-append man6-ja
> "/oneko.6"))
> +               (for-each (lambda (file) (install-file file doc))
> +                         (find-files "." "README.*")))
> +             #t)))))
> +    (home-page "http://www.daidouji.com/oneko/")
> +    (synopsis "Cute cat chasing your mouse pointer")
> +    (description "Displays a cat or another animated character that
> chases the
> +mouse pointer around the screen while you work.")
> +    (license license:public-domain))) ; see 
> https://directory.fsf.org/wiki/Oneko
> +
>  (define-public sl
>    (package
>      (name "sl")
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f507fe566f..7d1fc8157c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1499,6 +1499,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/ocaml-dose3-dont-make-printconf.patch	\
   %D%/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch	\
   %D%/packages/patches/omake-fix-non-determinism.patch	\
+  %D%/packages/patches/oneko-remove-nonfree-characters.patch	\
   %D%/packages/patches/openbabel-fix-crash-on-nwchem-output.patch	\
   %D%/packages/patches/opencascade-oce-glibc-2.26.patch		\
   %D%/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch	\
diff --git a/gnu/packages/patches/oneko-remove-nonfree-characters.patch b/gnu/packages/patches/oneko-remove-nonfree-characters.patch
new file mode 100644
index 0000000000..4f80e53995
--- /dev/null
+++ b/gnu/packages/patches/oneko-remove-nonfree-characters.patch
@@ -0,0 +1,307 @@ 
+Remove options and code to use bitmaps of the BSD daemon and other characters
+with copyright issues. The bitmaps themselves are deleted in a source snippet.
+diff --git a/cursors/cursor.include b/cursors/cursor.include
+index ef96d72..1dc3dc2 100644
+--- a/cursors/cursor.include
++++ b/cursors/cursor.include
+@@ -2,9 +2,3 @@
+ #include "mouse_cursor_mask.xbm"
+ #include "bone_cursor.xbm"
+ #include "bone_cursor_mask.xbm"
+-#include "bsd_cursor.xbm"
+-#include "bsd_cursor_mask.xbm"
+-#include "card_cursor.xbm"
+-#include "card_cursor_mask.xbm"
+-#include "petal_cursor.xbm"
+-#include "petal_cursor_mask.xbm"
+diff --git a/oneko.c b/oneko.c
+index d2b81fe..04fa59f 100644
+--- a/oneko.c
++++ b/oneko.c
+@@ -33,7 +33,7 @@ XColor	theBackgroundColor;		/* $@?'(J ($@%P%C%/%0%i%&%s%I(J) */
+ 
+ int Synchronous = False;
+ /* Types of animals */
+-#define BITMAPTYPES 6
++#define BITMAPTYPES 3
+ typedef struct _AnimalDefaults {
+   char *name;
+   int speed, idle, bitmap_width, bitmap_height;
+@@ -51,12 +51,6 @@ AnimalDefaultsData AnimalDefaultsDataTable[] =
+       mouse_cursor_width,mouse_cursor_height, mouse_cursor_x_hot,mouse_cursor_y_hot },
+   { "dog" , 10, 6, 32, 32, 125000L, 0, 0, bone_cursor_bits,bone_cursor_mask_bits,
+       bone_cursor_width,bone_cursor_height, bone_cursor_x_hot,bone_cursor_y_hot },
+-  { "bsd_daemon" , 16, 6, 32, 32, 300000L, 22, 20, bsd_cursor_bits,bsd_cursor_mask_bits,
+-      bsd_cursor_width,bsd_cursor_height, bsd_cursor_x_hot,bsd_cursor_y_hot },
+-  { "sakura" , 13, 6, 32, 32, 125000L, 0, 0, card_cursor_bits,card_cursor_mask_bits,
+-      card_cursor_width,card_cursor_height, card_cursor_x_hot,card_cursor_y_hot },
+-  { "tomoyo" , 10, 6, 32, 32, 125000L, 32, 32, petal_cursor_bits,petal_cursor_mask_bits,
+-      petal_cursor_width,petal_cursor_height, petal_cursor_x_hot,petal_cursor_y_hot },
+ };
+ 
+ /*
+@@ -154,70 +148,70 @@ typedef struct {
+ 
+ BitmapGCData	BitmapGCDataTable[] =
+ {
+-    { &Mati2GC, &Mati2Xbm,  mati2_bits, mati2_tora_bits, mati2_dog_bits, mati2_bsd_bits, mati2_sakura_bits, mati2_tomoyo_bits,
+-      &Mati2Msk, mati2_mask_bits, mati2_mask_bits, mati2_dog_mask_bits, mati2_bsd_mask_bits, mati2_sakura_mask_bits, mati2_tomoyo_mask_bits },
+-    { &Jare2GC, &Jare2Xbm,  jare2_bits, jare2_tora_bits, jare2_dog_bits, jare2_bsd_bits, jare2_sakura_bits, jare2_tomoyo_bits,
+-      &Jare2Msk, jare2_mask_bits, jare2_mask_bits, jare2_dog_mask_bits, jare2_bsd_mask_bits, jare2_sakura_mask_bits, jare2_tomoyo_mask_bits },
+-    { &Kaki1GC, &Kaki1Xbm,  kaki1_bits, kaki1_tora_bits, kaki1_dog_bits, kaki1_bsd_bits, kaki1_sakura_bits, kaki1_tomoyo_bits,
+-      &Kaki1Msk, kaki1_mask_bits, kaki1_mask_bits, kaki1_dog_mask_bits, kaki1_bsd_mask_bits, kaki1_sakura_mask_bits, kaki1_tomoyo_mask_bits },
+-    { &Kaki2GC, &Kaki2Xbm,  kaki2_bits, kaki2_tora_bits, kaki2_dog_bits, kaki2_bsd_bits, kaki2_sakura_bits, kaki2_tomoyo_bits,
+-      &Kaki2Msk, kaki2_mask_bits, kaki2_mask_bits, kaki2_dog_mask_bits, kaki2_bsd_mask_bits, kaki2_sakura_mask_bits, kaki2_tomoyo_mask_bits },
+-    { &Mati3GC, &Mati3Xbm,  mati3_bits, mati3_tora_bits, mati3_dog_bits, mati3_bsd_bits, mati3_sakura_bits, mati3_tomoyo_bits,
+-      &Mati3Msk, mati3_mask_bits, mati3_mask_bits, mati3_dog_mask_bits, mati3_bsd_mask_bits, mati3_sakura_mask_bits, mati3_tomoyo_mask_bits },
+-    { &Sleep1GC, &Sleep1Xbm,  sleep1_bits, sleep1_tora_bits, sleep1_dog_bits, sleep1_bsd_bits, sleep1_sakura_bits, sleep1_tomoyo_bits,
+-      &Sleep1Msk, sleep1_mask_bits, sleep1_mask_bits, sleep1_dog_mask_bits, sleep1_bsd_mask_bits, sleep1_sakura_mask_bits, sleep1_tomoyo_mask_bits },
+-    { &Sleep2GC, &Sleep2Xbm,  sleep2_bits, sleep2_tora_bits, sleep2_dog_bits, sleep2_bsd_bits, sleep2_sakura_bits, sleep2_tomoyo_bits,
+-      &Sleep2Msk, sleep2_mask_bits, sleep2_mask_bits, sleep2_dog_mask_bits, sleep2_bsd_mask_bits, sleep2_sakura_mask_bits, sleep2_tomoyo_mask_bits },
+-    { &AwakeGC, &AwakeXbm,  awake_bits, awake_tora_bits, awake_dog_bits, awake_bsd_bits, awake_sakura_bits, awake_tomoyo_bits,
+-      &AwakeMsk, awake_mask_bits, awake_mask_bits, awake_dog_mask_bits, awake_bsd_mask_bits, awake_sakura_mask_bits, awake_tomoyo_mask_bits },
+-    { &Up1GC, &Up1Xbm,  up1_bits, up1_tora_bits, up1_dog_bits, up1_bsd_bits, up1_sakura_bits, up1_tomoyo_bits,
+-      &Up1Msk, up1_mask_bits, up1_mask_bits, up1_dog_mask_bits, up1_bsd_mask_bits, up1_sakura_mask_bits, up1_tomoyo_mask_bits },
+-    { &Up2GC, &Up2Xbm,  up2_bits, up2_tora_bits, up2_dog_bits, up2_bsd_bits, up2_sakura_bits, up2_tomoyo_bits,
+-      &Up2Msk, up2_mask_bits, up2_mask_bits, up2_dog_mask_bits, up2_bsd_mask_bits, up2_sakura_mask_bits, up2_tomoyo_mask_bits },
+-    { &Down1GC, &Down1Xbm,  down1_bits, down1_tora_bits, down1_dog_bits, down1_bsd_bits, down1_sakura_bits, down1_tomoyo_bits,
+-      &Down1Msk, down1_mask_bits, down1_mask_bits, down1_dog_mask_bits, down1_bsd_mask_bits, down1_sakura_mask_bits, down1_tomoyo_mask_bits },
+-    { &Down2GC, &Down2Xbm,  down2_bits, down2_tora_bits, down2_dog_bits, down2_bsd_bits, down2_sakura_bits, down2_tomoyo_bits,
+-      &Down2Msk, down2_mask_bits, down2_mask_bits, down2_dog_mask_bits, down2_bsd_mask_bits, down2_sakura_mask_bits, down2_tomoyo_mask_bits },
+-    { &Left1GC, &Left1Xbm,  left1_bits, left1_tora_bits, left1_dog_bits, left1_bsd_bits, left1_sakura_bits, left1_tomoyo_bits,
+-      &Left1Msk, left1_mask_bits, left1_mask_bits, left1_dog_mask_bits, left1_bsd_mask_bits, left1_sakura_mask_bits, left1_tomoyo_mask_bits },
+-    { &Left2GC, &Left2Xbm,  left2_bits, left2_tora_bits, left2_dog_bits, left2_bsd_bits, left2_sakura_bits, left2_tomoyo_bits,
+-      &Left2Msk, left2_mask_bits, left2_mask_bits, left2_dog_mask_bits, left2_bsd_mask_bits, left2_sakura_mask_bits, left2_tomoyo_mask_bits },
+-    { &Right1GC, &Right1Xbm,  right1_bits, right1_tora_bits, right1_dog_bits, right1_bsd_bits, right1_sakura_bits, right1_tomoyo_bits,
+-      &Right1Msk, right1_mask_bits, right1_mask_bits,right1_dog_mask_bits, right1_bsd_mask_bits, right1_sakura_mask_bits, right1_tomoyo_mask_bits },
+-    { &Right2GC, &Right2Xbm,  right2_bits, right2_tora_bits, right2_dog_bits, right2_bsd_bits, right2_sakura_bits, right2_tomoyo_bits,
+-      &Right2Msk, right2_mask_bits, right2_mask_bits, right2_dog_mask_bits, right2_bsd_mask_bits, right2_sakura_mask_bits, right2_tomoyo_mask_bits },
+-    { &UpLeft1GC, &UpLeft1Xbm,  upleft1_bits, upleft1_tora_bits, upleft1_dog_bits, upleft1_bsd_bits, upleft1_sakura_bits, upleft1_tomoyo_bits,
+-      &UpLeft1Msk, upleft1_mask_bits, upleft1_mask_bits, upleft1_dog_mask_bits, upleft1_bsd_mask_bits, upleft1_sakura_mask_bits, upleft1_tomoyo_mask_bits },
+-    { &UpLeft2GC, &UpLeft2Xbm,  upleft2_bits, upleft2_tora_bits, upleft2_dog_bits, upleft2_bsd_bits, upleft2_sakura_bits, upleft2_tomoyo_bits,
+-      &UpLeft2Msk, upleft2_mask_bits, upleft2_mask_bits,upleft2_dog_mask_bits, upleft2_bsd_mask_bits, upleft2_sakura_mask_bits, upleft2_tomoyo_mask_bits },
+-    { &UpRight1GC, &UpRight1Xbm,  upright1_bits, upright1_tora_bits, upright1_dog_bits, upright1_bsd_bits, upright1_sakura_bits, upright1_tomoyo_bits,
+-      &UpRight1Msk, upright1_mask_bits, upright1_mask_bits,upright1_dog_mask_bits, upright1_bsd_mask_bits, upright1_sakura_mask_bits, upright1_tomoyo_mask_bits },
+-    { &UpRight2GC, &UpRight2Xbm,  upright2_bits, upright2_tora_bits, upright2_dog_bits, upright2_bsd_bits, upright2_sakura_bits, upright2_tomoyo_bits,
+-      &UpRight2Msk, upright2_mask_bits, upright2_mask_bits,upright2_dog_mask_bits, upright2_bsd_mask_bits, upright2_sakura_mask_bits, upright2_tomoyo_mask_bits },
+-    { &DownLeft1GC, &DownLeft1Xbm,  dwleft1_bits, dwleft1_tora_bits, dwleft1_dog_bits, dwleft1_bsd_bits, dwleft1_sakura_bits, dwleft1_tomoyo_bits,
+-      &DownLeft1Msk, dwleft1_mask_bits, dwleft1_mask_bits, dwleft1_dog_mask_bits, dwleft1_bsd_mask_bits, dwleft1_sakura_mask_bits, dwleft1_tomoyo_mask_bits },
+-    { &DownLeft2GC, &DownLeft2Xbm,  dwleft2_bits, dwleft2_tora_bits, dwleft2_dog_bits, dwleft2_bsd_bits, dwleft2_sakura_bits, dwleft2_tomoyo_bits,
+-      &DownLeft2Msk, dwleft2_mask_bits, dwleft2_mask_bits, dwleft2_dog_mask_bits, dwleft2_bsd_mask_bits, dwleft2_sakura_mask_bits, dwleft2_tomoyo_mask_bits },
+-    { &DownRight1GC, &DownRight1Xbm,  dwright1_bits, dwright1_tora_bits, dwright1_dog_bits, dwright1_bsd_bits, dwright1_sakura_bits, dwright1_tomoyo_bits,
+-      &DownRight1Msk, dwright1_mask_bits, dwright1_mask_bits, dwright1_dog_mask_bits, dwright1_bsd_mask_bits, dwright1_sakura_mask_bits, dwright1_tomoyo_mask_bits },
+-    { &DownRight2GC, &DownRight2Xbm,  dwright2_bits, dwright2_tora_bits, dwright2_dog_bits, dwright2_bsd_bits, dwright2_sakura_bits, dwright2_tomoyo_bits,
+-      &DownRight2Msk, dwright2_mask_bits, dwright2_mask_bits, dwright2_dog_mask_bits, dwright2_bsd_mask_bits, dwright2_sakura_mask_bits, dwright2_tomoyo_mask_bits },
+-    { &UpTogi1GC, &UpTogi1Xbm,  utogi1_bits, utogi1_tora_bits, utogi1_dog_bits, utogi1_bsd_bits, utogi1_sakura_bits, utogi1_tomoyo_bits,
+-      &UpTogi1Msk, utogi1_mask_bits, utogi1_mask_bits, utogi1_dog_mask_bits, utogi1_bsd_mask_bits, utogi1_sakura_mask_bits, utogi1_tomoyo_mask_bits },
+-    { &UpTogi2GC, &UpTogi2Xbm,  utogi2_bits, utogi2_tora_bits, utogi2_dog_bits, utogi2_bsd_bits, utogi2_sakura_bits, utogi2_tomoyo_bits,
+-      &UpTogi2Msk, utogi2_mask_bits, utogi2_mask_bits, utogi2_dog_mask_bits, utogi2_bsd_mask_bits, utogi2_sakura_mask_bits, utogi2_tomoyo_mask_bits },
+-    { &DownTogi1GC, &DownTogi1Xbm,  dtogi1_bits, dtogi1_tora_bits, dtogi1_dog_bits, dtogi1_bsd_bits, dtogi1_sakura_bits, dtogi1_tomoyo_bits,
+-      &DownTogi1Msk, dtogi1_mask_bits, dtogi1_mask_bits, dtogi1_dog_mask_bits, dtogi1_bsd_mask_bits, dtogi1_sakura_mask_bits, dtogi1_tomoyo_mask_bits },
+-    { &DownTogi2GC, &DownTogi2Xbm,  dtogi2_bits, dtogi2_tora_bits, dtogi2_dog_bits, dtogi2_bsd_bits, dtogi2_sakura_bits, dtogi2_tomoyo_bits,
+-      &DownTogi2Msk, dtogi2_mask_bits, dtogi2_mask_bits, dtogi2_dog_mask_bits, dtogi2_bsd_mask_bits, dtogi2_sakura_mask_bits, dtogi2_tomoyo_mask_bits },
+-    { &LeftTogi1GC, &LeftTogi1Xbm,  ltogi1_bits, ltogi1_tora_bits, ltogi1_dog_bits, ltogi1_bsd_bits, ltogi1_sakura_bits, ltogi1_tomoyo_bits,
+-      &LeftTogi1Msk, ltogi1_mask_bits, ltogi1_mask_bits,ltogi1_dog_mask_bits, ltogi1_bsd_mask_bits, ltogi1_sakura_mask_bits, ltogi1_tomoyo_mask_bits },
+-    { &LeftTogi2GC, &LeftTogi2Xbm,  ltogi2_bits, ltogi2_tora_bits, ltogi2_dog_bits, ltogi2_bsd_bits, ltogi2_sakura_bits, ltogi2_tomoyo_bits,
+-      &LeftTogi2Msk, ltogi2_mask_bits, ltogi2_mask_bits,ltogi2_dog_mask_bits, ltogi2_bsd_mask_bits, ltogi2_sakura_mask_bits, ltogi2_tomoyo_mask_bits },
+-    { &RightTogi1GC, &RightTogi1Xbm,  rtogi1_bits, rtogi1_tora_bits, rtogi1_dog_bits, rtogi1_bsd_bits, rtogi1_sakura_bits, rtogi1_tomoyo_bits,
+-      &RightTogi1Msk, rtogi1_mask_bits, rtogi1_mask_bits,rtogi1_dog_mask_bits, rtogi1_bsd_mask_bits, rtogi1_sakura_mask_bits, rtogi1_tomoyo_mask_bits },
+-    { &RightTogi2GC, &RightTogi2Xbm,  rtogi2_bits, rtogi2_tora_bits, rtogi2_dog_bits, rtogi2_bsd_bits, rtogi2_sakura_bits, rtogi2_tomoyo_bits,
+-      &RightTogi2Msk, rtogi2_mask_bits, rtogi2_mask_bits,rtogi2_dog_mask_bits, rtogi2_bsd_mask_bits, rtogi2_sakura_mask_bits, rtogi2_tomoyo_mask_bits },
++    { &Mati2GC, &Mati2Xbm,  mati2_bits, mati2_tora_bits, mati2_dog_bits,
++      &Mati2Msk, mati2_mask_bits, mati2_mask_bits, mati2_dog_mask_bits },
++    { &Jare2GC, &Jare2Xbm,  jare2_bits, jare2_tora_bits, jare2_dog_bits,
++      &Jare2Msk, jare2_mask_bits, jare2_mask_bits, jare2_dog_mask_bits },
++    { &Kaki1GC, &Kaki1Xbm,  kaki1_bits, kaki1_tora_bits, kaki1_dog_bits,
++      &Kaki1Msk, kaki1_mask_bits, kaki1_mask_bits, kaki1_dog_mask_bits },
++    { &Kaki2GC, &Kaki2Xbm,  kaki2_bits, kaki2_tora_bits, kaki2_dog_bits,
++      &Kaki2Msk, kaki2_mask_bits, kaki2_mask_bits, kaki2_dog_mask_bits },
++    { &Mati3GC, &Mati3Xbm,  mati3_bits, mati3_tora_bits, mati3_dog_bits,
++      &Mati3Msk, mati3_mask_bits, mati3_mask_bits, mati3_dog_mask_bits },
++    { &Sleep1GC, &Sleep1Xbm,  sleep1_bits, sleep1_tora_bits, sleep1_dog_bits,
++      &Sleep1Msk, sleep1_mask_bits, sleep1_mask_bits, sleep1_dog_mask_bits },
++    { &Sleep2GC, &Sleep2Xbm,  sleep2_bits, sleep2_tora_bits, sleep2_dog_bits,
++      &Sleep2Msk, sleep2_mask_bits, sleep2_mask_bits, sleep2_dog_mask_bits },
++    { &AwakeGC, &AwakeXbm,  awake_bits, awake_tora_bits, awake_dog_bits,
++      &AwakeMsk, awake_mask_bits, awake_mask_bits, awake_dog_mask_bits },
++    { &Up1GC, &Up1Xbm,  up1_bits, up1_tora_bits, up1_dog_bits,
++      &Up1Msk, up1_mask_bits, up1_mask_bits, up1_dog_mask_bits },
++    { &Up2GC, &Up2Xbm,  up2_bits, up2_tora_bits, up2_dog_bits,
++      &Up2Msk, up2_mask_bits, up2_mask_bits, up2_dog_mask_bits },
++    { &Down1GC, &Down1Xbm,  down1_bits, down1_tora_bits, down1_dog_bits,
++      &Down1Msk, down1_mask_bits, down1_mask_bits, down1_dog_mask_bits },
++    { &Down2GC, &Down2Xbm,  down2_bits, down2_tora_bits, down2_dog_bits,
++      &Down2Msk, down2_mask_bits, down2_mask_bits, down2_dog_mask_bits },
++    { &Left1GC, &Left1Xbm,  left1_bits, left1_tora_bits, left1_dog_bits,
++      &Left1Msk, left1_mask_bits, left1_mask_bits, left1_dog_mask_bits },
++    { &Left2GC, &Left2Xbm,  left2_bits, left2_tora_bits, left2_dog_bits,
++      &Left2Msk, left2_mask_bits, left2_mask_bits, left2_dog_mask_bits },
++    { &Right1GC, &Right1Xbm,  right1_bits, right1_tora_bits, right1_dog_bits,
++      &Right1Msk, right1_mask_bits, right1_mask_bits,right1_dog_mask_bits },
++    { &Right2GC, &Right2Xbm,  right2_bits, right2_tora_bits, right2_dog_bits,
++      &Right2Msk, right2_mask_bits, right2_mask_bits, right2_dog_mask_bits },
++    { &UpLeft1GC, &UpLeft1Xbm,  upleft1_bits, upleft1_tora_bits, upleft1_dog_bits,
++      &UpLeft1Msk, upleft1_mask_bits, upleft1_mask_bits, upleft1_dog_mask_bits },
++    { &UpLeft2GC, &UpLeft2Xbm,  upleft2_bits, upleft2_tora_bits, upleft2_dog_bits,
++      &UpLeft2Msk, upleft2_mask_bits, upleft2_mask_bits,upleft2_dog_mask_bits },
++    { &UpRight1GC, &UpRight1Xbm,  upright1_bits, upright1_tora_bits, upright1_dog_bits,
++      &UpRight1Msk, upright1_mask_bits, upright1_mask_bits,upright1_dog_mask_bits },
++    { &UpRight2GC, &UpRight2Xbm,  upright2_bits, upright2_tora_bits, upright2_dog_bits,
++      &UpRight2Msk, upright2_mask_bits, upright2_mask_bits,upright2_dog_mask_bits },
++    { &DownLeft1GC, &DownLeft1Xbm,  dwleft1_bits, dwleft1_tora_bits, dwleft1_dog_bits,
++      &DownLeft1Msk, dwleft1_mask_bits, dwleft1_mask_bits, dwleft1_dog_mask_bits },
++    { &DownLeft2GC, &DownLeft2Xbm,  dwleft2_bits, dwleft2_tora_bits, dwleft2_dog_bits,
++      &DownLeft2Msk, dwleft2_mask_bits, dwleft2_mask_bits, dwleft2_dog_mask_bits },
++    { &DownRight1GC, &DownRight1Xbm,  dwright1_bits, dwright1_tora_bits, dwright1_dog_bits,
++      &DownRight1Msk, dwright1_mask_bits, dwright1_mask_bits, dwright1_dog_mask_bits },
++    { &DownRight2GC, &DownRight2Xbm,  dwright2_bits, dwright2_tora_bits, dwright2_dog_bits,
++      &DownRight2Msk, dwright2_mask_bits, dwright2_mask_bits, dwright2_dog_mask_bits },
++    { &UpTogi1GC, &UpTogi1Xbm,  utogi1_bits, utogi1_tora_bits, utogi1_dog_bits,
++      &UpTogi1Msk, utogi1_mask_bits, utogi1_mask_bits, utogi1_dog_mask_bits },
++    { &UpTogi2GC, &UpTogi2Xbm,  utogi2_bits, utogi2_tora_bits, utogi2_dog_bits,
++      &UpTogi2Msk, utogi2_mask_bits, utogi2_mask_bits, utogi2_dog_mask_bits },
++    { &DownTogi1GC, &DownTogi1Xbm,  dtogi1_bits, dtogi1_tora_bits, dtogi1_dog_bits,
++      &DownTogi1Msk, dtogi1_mask_bits, dtogi1_mask_bits, dtogi1_dog_mask_bits },
++    { &DownTogi2GC, &DownTogi2Xbm,  dtogi2_bits, dtogi2_tora_bits, dtogi2_dog_bits,
++      &DownTogi2Msk, dtogi2_mask_bits, dtogi2_mask_bits, dtogi2_dog_mask_bits },
++    { &LeftTogi1GC, &LeftTogi1Xbm,  ltogi1_bits, ltogi1_tora_bits, ltogi1_dog_bits,
++      &LeftTogi1Msk, ltogi1_mask_bits, ltogi1_mask_bits,ltogi1_dog_mask_bits },
++    { &LeftTogi2GC, &LeftTogi2Xbm,  ltogi2_bits, ltogi2_tora_bits, ltogi2_dog_bits,
++      &LeftTogi2Msk, ltogi2_mask_bits, ltogi2_mask_bits,ltogi2_dog_mask_bits },
++    { &RightTogi1GC, &RightTogi1Xbm,  rtogi1_bits, rtogi1_tora_bits, rtogi1_dog_bits,
++      &RightTogi1Msk, rtogi1_mask_bits, rtogi1_mask_bits,rtogi1_dog_mask_bits },
++    { &RightTogi2GC, &RightTogi2Xbm,  rtogi2_bits, rtogi2_tora_bits, rtogi2_dog_bits,
++      &RightTogi2Msk, rtogi2_mask_bits, rtogi2_mask_bits,rtogi2_dog_mask_bits },
+     { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
+ };
+ 
+@@ -1512,8 +1506,6 @@ GetArguments(argc, argv, theDisplayName)
+     }
+     else {
+       char *av = argv[ArgCounter] + 1;
+-      if (strcmp(av, "bsd") == 0)
+-	av = "bsd_daemon";
+       for (loop=0;loop<BITMAPTYPES;loop++) {
+ 	if (strcmp(av,AnimalDefaultsDataTable[loop].name)==0)
+ 	  {NekoMoyou = loop;found=1;}
+diff --git a/oneko.h b/oneko.h
+index 414e12f..38281fd 100644
+--- a/oneko.h
++++ b/oneko.h
+@@ -36,17 +36,11 @@
+ #include "bitmaps/neko/neko.include"
+ #include "bitmaps/tora/tora.include"
+ #include "bitmaps/dog/dog.include"
+-#include "bitmaps/bsd/bsd.include"
+-#include "bitmaps/sakura/sakura.include"
+-#include "bitmaps/tomoyo/tomoyo.include"
+ 
+ /* These are the bitmasks that allow the use of the shape extension. */
+ 
+ #include "bitmasks/neko/neko.mask.include"
+ #include "bitmasks/dog/dog.mask.include"
+-#include "bitmasks/bsd/bsd.mask.include"
+-#include "bitmasks/sakura/sakura.mask.include"
+-#include "bitmasks/tomoyo/tomoyo.mask.include"
+ 
+ /*
+  *	$@Dj?tDj5A(J
+diff --git a/oneko.man b/oneko.man
+index d6d2b40..0e9b09d 100644
+--- a/oneko.man
++++ b/oneko.man
+@@ -3,9 +3,7 @@
+ The program oneko creates a cute cat chasing around your mouse cursor.
+ .SH SYNOPSIS
+ .B oneko
+-[\fB-help\fP] [\fB-tora\fP]
+-[\fB-dog\fP] [\fB-bsd_daemon\fP] [\fB-bsd\fP]
+-[\fB-sakura\fP] [\fB-tomoyo\fP]
++[\fB-help\fP] [\fB-tora\fP] [\fB-dog\fP]
+ [\fB-time\fP \fIn\fP] [\fB-speed\fP \fIn\fP] [\fB-idle\fP \fIn\fP]
+ [\fB-name\fP \fIname\fP] [\fB-towindow\fP] [\fB-toname\fP \fIname\fP]
+ [\fB-tofocus\fP]
+@@ -28,19 +26,6 @@ I don't know how to say it in English.
+ .B -dog
+ Runs a dog instead of a cat.
+ .TP
+-.B -bsd_daemon
+-Runs a 4.3BSD daemon instead of a cat.
+-.TP
+-.B -bsd
+-Same as
+-.B -bsd_daemon.
+-.TP
+-.B -sakura
+-Runs Sakura Kinomoto instead of a cat.
+-.TP
+-.B -tomoyo
+-Runs Tomoyo Daidouji instead of a cat.
+-.TP
+ .BI \-time " interval"
+ Sets interval timer which determine intervals for cat animation.
+ Default value is 125000 and unit is micro-second.  Smaller value makes cat
+@@ -129,12 +114,6 @@ Background color.
+ While this program uses XGetDefault, be sure to use "neko.resouce" form.
+ If you run this program as "tora", by hard of soft link, the \fB-tora\fP
+ option is enabled by default.
+-.PP
+-BSD Daemon Copyright 1988 by Marshall Kirk McKusick. All Rights Reserved.
+-.PP
+-Sakura Kinomoto and Tomoyo Daidouji are characters in a comic strip
+-"CARDCAPTOR SAKURA" (CLAMP, Kodansha), with the sanction indicated in
+-CLAMP SCHOOL WEB CAMPUS (http://www.clamp.f-2.co.jp/).
+ .SH AUTHOR
+ Original
+ .I xneko
+diff --git a/oneko.man.jp b/oneko.man.jp
+index 96f9e3a..9a885df 100644
+--- a/oneko.man.jp
++++ b/oneko.man.jp
+@@ -3,9 +3,7 @@
+ $@$+$o$$$$G-$,%^%&%9%+!<%=%k$rDI$$$+$1$k%W%m%0%i%`(J
+ .SH $@=q<0(J
+ .B oneko
+-[\fB-help\fP] [\fB-tora\fP]
+-[\fB-dog\fP] [\fB-bsd_daemon\fP] [\fB-bsd\fP]
+-[\fB-sakura\fP] [\fB-tomoyo\fP]
++[\fB-help\fP] [\fB-tora\fP] [\fB-dog\fP]
+ [\fB-time\fP \fIn\fP] [\fB-speed\fP \fIn\fP] [\fB-idle\fP \fIn\fP]
+ [\fB-name\fP \fIname\fP] [\fB-towindow\fP] [\fB-toname\fP \fIname\fP]
+ [\fB-tofocus\fP]
+@@ -27,19 +25,6 @@
+ .B -dog
+ $@G-$KBe$o$j8$$,Av$j$^$9!#(J
+ .TP
+-.B -bsd_daemon
+-$@G-$KBe$o$j(J 4.3BSD $@%G!<%b%s$,Av$j$^$9!#(J
+-.TP
+-.B -bsd
+-.B -bsd_daemon
+-$@$KF1$8!#(J
+-.TP
+-.B -sakura
+-$@G-$KBe$o$jLZG7K\:y$,Av$j$^$9!#(J
+-.TP
+-.B -tomoyo
+-$@G-$KBe$o$jBgF;;{CN@$$,Av$j$^$9!#(J
+-.TP
+ .BI \-time " interval"
+ $@G-%"%K%a!<%7%g%s$N4V3V$r;XDj$7$^$9!#(J
+ $@%G%U%)%k%HCM$O(J 125000 $@$GC10L$O%^%$%/%mIC$G$9!#(J
+@@ -127,15 +112,6 @@ SHAPE extension $@$r;H$$$?$/$J$$>l9g(J True $@$H$7$^$9!#(J
+ $@$r;H$&$3$H$KN10U$7$F$/$@$5$$!#(J
+ $@%O!<%I%j%s%/$"$k$$$O%=%U%H%j%s%/$K$h$C$F!"$3$N%W%m%0%i%`$r(J tora $@$H$7$F(J
+ $@5/F0$7$?>l9g$K$O!"%G%U%)%k%H$G(J \fB-tora\fP $@%*%W%7%g%s$,M-8z$H$J$j$^$9!#(J
+-.PP
+-BSD $@%G!<%b%s$O(J  Marshall Kirk McKusick $@;a$NCx:nJ*$G$9!#$9$Y$F$N8"Mx$O(J
+-$@J];}$5$l$F$$$^$9!#(J
+-BSD Daemon Copyright 1988 by Marshall Kirk McKusick. All Rights Reserved.
+-.PP
+-$@LZG7K\:y$*$h$SBgF;;{CN@$$OL!2h!X%+!<%I%-%c%W%?!<$5$/$i!Y!J(JCLAMP, $@9VCL(J
+-$@<R!K$N%-%c%i%/%?!<$G$"$j!"(JCLAMP $@3X1`EE;RJ,9;(J
+-$@!J(Jhttp://www.clamp.f-2.co.jp/$@!K$K<($5$l$F$$$kMFG'$N$b$H$KMxMQ$5$l$F$$(J
+-$@$^$9!#(J
+ .SH $@:n<T(J
+ $@%*%j%8%J%k$N(J
+ .I xneko
diff --git a/gnu/packages/toys.scm b/gnu/packages/toys.scm
index bbd5753841..a277bce453 100644
--- a/gnu/packages/toys.scm
+++ b/gnu/packages/toys.scm
@@ -1,7 +1,7 @@ 
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Jesse Gibbons <jgibbons2357+guix@gmail.com>
-;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
+;;; Copyright © 2019, 2020, 2021 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;;
@@ -21,6 +21,7 @@ 
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages toys)
+  #:use-module (gnu packages)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gtk)
@@ -36,6 +37,66 @@ 
   #:use-module (guix packages)
   #:use-module (guix utils))
 
+(define-public oneko
+  (package
+    (name "oneko")
+    (version "1.2.sakura.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://www.daidouji.com/oneko/distfiles/oneko-" version ".tar.gz"))
+       (sha256
+        (base32 "0bxjlbafn10sfi5d06420pg70rpvsiy5gdbm8kspd6qy4kqhabic"))
+       (patches (search-patches "oneko-remove-nonfree-characters.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Remove bitmaps with copyright issues.
+        '(begin
+           (for-each delete-file-recursively
+                     (cons* "bitmaps/bsd" "bitmaps/sakura" "bitmaps/tomoyo"
+                            "bitmasks/bsd" "bitmasks/sakura" "bitmasks/tomoyo"
+                            (find-files "cursors" "(bsd|card|petal).*\\.xbm")))
+           #t))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("imake" ,imake)))
+    (inputs
+     `(("libx11" ,libx11)
+       ("libxext" ,libxext)))
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (invoke "xmkmf")
+             ;; Fix incorrectly generated compiler flags.
+             (substitute* "Makefile"
+               (("(CDEBUGFLAGS = ).*" _ front) (string-append front "-O2\n")))
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (doc (string-append out "/share/doc/" ,name "-" ,version))
+                    (man (string-append out "/share/man"))
+                    (man6 (string-append man "/man6"))
+                    (man6-ja (string-append man "/ja/man6")))
+               (install-file "oneko" bin)
+               (mkdir-p man6)
+               (mkdir-p man6-ja)
+               (copy-file "oneko.man" (string-append man6 "/oneko.6"))
+               (copy-file "oneko.man.jp" (string-append man6-ja "/oneko.6"))
+               (for-each (lambda (file) (install-file file doc))
+                         (find-files "." "README.*")))
+             #t)))))
+    (home-page "http://www.daidouji.com/oneko/")
+    (synopsis "Cute cat chasing your mouse pointer")
+    (description "Displays a cat or another animated character that chases the
+mouse pointer around the screen while you work.")
+    (license license:public-domain))) ; see https://directory.fsf.org/wiki/Oneko
+
 (define-public sl
   (package
     (name "sl")