On Wed, May 15, 2019 at 03:36:57PM +0100, tleguern wrote:
> Hi,
>
> This little patch makes caesar(6) useful at both encrypting and
> decrypting texts by allowing a negative rotation.
>
> Example:
>
> $ echo Ceci est un test | caesar 10
> Moms ocd ex docd
> $ echo Ceci est un test | caesar 10 | caesar -10
> Ceci est un test
>
> A similar patch was proposed by Dieter Rauschenberger in 2008 with
> little response so perhaps explaining why this is useful will help.
> Without spoiling too much: one of the puzzle in the Infocom game Leather
> Goddesses of Phobos requires to decipher such a text.
>
> I did not touch the man page as it was unclear about rotation boundaries
> anyway.
$ echo Ceci est un test | caesar 10 | caesar 16
Ceci est un test
We're computing modulo 26 here. Negative numbers have a positive
equivalent. So you diff adds code for no benefit.
-Otto
>
> Regards.
>
> Index: caesar.c
> ===================================================================
> RCS file: /cvs/src/games/caesar/caesar.c,v
> retrieving revision 1.20
> diff -u -p -u -p -r1.20 caesar.c
> --- caesar.c 10 Aug 2017 17:24:30 -0000 1.20
> +++ caesar.c 15 May 2019 14:34:49 -0000
> @@ -80,7 +80,7 @@ main(int argc, char *argv[])
> printit(13);
>
> if (argc > 1) {
> - i = strtonum(argv[1], 0, 25, &errstr);
> + i = strtonum(argv[1], -25, 25, &errstr);
> if (errstr)
> errx(1, "rotation is %s: %s", errstr, argv[1]);
> else
> @@ -134,7 +134,9 @@ void
> printit(int rot)
> {
> int ch;
> -
> +
> + if (rot < 0)
> + rot = rot + 26;
> while ((ch = getchar()) != EOF)
> putchar(ROTATE(ch, rot));
> exit(0);
>