/***************************************************************************
 * rot.c  written 1990 by R.Bless                                          *
 * rot - a variable rot program for amiga computers                        *
 * usage: rot [number]                                                     *
 * Description:                                                            *
 * rot reads from stdin and puts the en-/decrypted text to stdout.         *
 * rot rotates each letter from ('A'..'Z' and  'a'..'z') with number.      *
 * Default number is 13. If you've a text with rot 8 encrypted, you must   *
 * decrypt it with rot 18 (8+18=26, you see?).                             *
 *                                                                         *
 * This program is FREEWARE. You're allowed to eat it!                     *
 * Version 0.02 - 12.9.1990                                                *
 * A Byteable Software Product                                             *
 ***************************************************************************/

#include <stdio.h>
#undef BUFSIZ
#define BUFSIZ 4096
#define STRINGSIZE 1024L

#ifdef AMIGA
char *AllocMem();
#endif
#ifdef UNIX
void *malloc();
void free();
#endif
char *fgets();
long atol();

char *rot(s,n)
register char *s;
int n;
{
  char *t=s;

  while(*s!='\0')
  {
    if (*s>='A' && *s<='Z')
       *s='\x41'+(*s-'\x41'+n)%26;
    else
    if (*s>='a' && *s<='z')
       *s='\x61'+(*s-'\x61'+n)%26;
    s++;
  }
  return t;
}


int
main(argc,argv)
int argc;
char *argv[];
{
  char *tmp;
  int number=13;

  if (argc>2)
  {
    fprintf(stderr,"usage: rot [number]\n");
    return 1;
  }
  else
  {
    if (argc==2)
      number= (int) atol(argv[1]);
    else
      number=13;
#ifdef AMIGA
    if (!(tmp= AllocMem(STRINGSIZE, NULL)))
#endif
#ifdef UNIX
    if (!(tmp= malloc(STRINGSIZE)))
#endif
    {
      fprintf(stderr,"rot: no memory available!\n");
      return 2;
    }
    else
    {
      while (gets(tmp, STRINGSIZE))
      {
        fputs(rot(tmp,number),stdout);fputc('\n',stdout);
      }
      fflush(stdout);
    }
#ifdef AMIGA
    if (tmp) FreeMem(tmp, STRINGSIZE);
#endif
#ifdef UNIX
    if (tmp) free(tmp);
#endif

  }
  return 0;
}
