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);
> 

Reply via email to