#if !defined(__HEADER_SCRAMBLER1)
#define __HEADER_SCRAMBLER1

#define A1 'r'
#define B1 'i'
#define C1 'u'
#define D1 'l'
#define E1 's'
#define F1 't'
#define G1 'e'
#define H1 'h'
#define I1 'k'
#define J1 'd'
#define K1 'y'
#define L1 'a'
#define M1 'v'
#define N1 'o'
#define O1 'w'
#define P1 'n'
#define Q1 'j'
#define R1 'c'
#define S1 'g'
#define T1 'z'
#define U1 'f'
#define V1 'x'
#define W1 'q'
#define X1 'm'
#define Y1 'p'
#define Z1 'b'

char scrambler1_go(char *ch){
switch(*ch){
case 'a':*ch=A1;break;
case 'b':*ch=B1;break;
case 'c':*ch=C1;break;
case 'd':*ch=D1;break;
case 'e':*ch=E1;break;
case 'f':*ch=F1;break;
case 'g':*ch=G1;break;
case 'h':*ch=H1;break;
case 'i':*ch=I1;break;
case 'j':*ch=J1;break;
case 'k':*ch=K1;break;
case 'l':*ch=L1;break;
case 'm':*ch=M1;break;
case 'n':*ch=N1;break;
case 'o':*ch=O1;break;
case 'p':*ch=P1;break;
case 'q':*ch=Q1;break;
case 'r':*ch=R1;break;
case 's':*ch=S1;break;
case 't':*ch=T1;break;
case 'u':*ch=U1;break;
case 'v':*ch=V1;break;
case 'w':*ch=W1;break;
case 'x':*ch=X1;break;
case 'y':*ch=Y1;break;
case 'z':*ch=Z1;break;
}
return(*ch);
}

char scrambler1_back(char *ch){
switch(*ch){
case A1:*ch='a';break;
case B1:*ch='b';break;
case C1:*ch='c';break;
case D1:*ch='d';break;
case E1:*ch='e';break;
case F1:*ch='f';break;
case G1:*ch='g';break;
case H1:*ch='h';break;
case I1:*ch='i';break;
case J1:*ch='j';break;
case K1:*ch='k';break;
case L1:*ch='l';break;
case M1:*ch='m';break;
case N1:*ch='n';break;
case O1:*ch='o';break;
case P1:*ch='p';break;
case Q1:*ch='q';break;
case R1:*ch='r';break;
case S1:*ch='s';break;
case T1:*ch='t';break;
case U1:*ch='u';break;
case V1:*ch='v';break;
case W1:*ch='w';break;
case X1:*ch='x';break;
case Y1:*ch='y';break;
case Z1:*ch='z';break;
}
return(*ch);
}

#undef A1
#undef B1
#undef C1
#undef D1
#undef E1
#undef F1
#undef G1
#undef H1
#undef I1
#undef J1
#undef K1
#undef L1
#undef M1
#undef N1
#undef O1
#undef P1
#undef Q1
#undef R1
#undef S1
#undef T1
#undef U1
#undef V1
#undef W1
#undef X1
#undef Y1
#undef Z1

#endif

#if !defined(__HEADER_SCRAMBLE)
#define __HEADER_SCRAMBLE

#include"scrambler1.h"
#include"scrambler2.h"
#include"scrambler3.h"
#include"shift.h"
#include"reflector.h"

#define SC1 1
#define SC2 2
#define SC3 3

short shift_times(short i,short n){
switch(n){
case 3:i/=26;
case 2:i/=26;
case 1:return(i%26);
}
return(0);
}

char scramble(char *ch,short key){
#if SC1
shift_go(ch,shift_times(key,SC1));
scrambler1_go(ch);
shift_back(ch,shift_times(key,SC1));
#endif
#if SC2
shift_go(ch,shift_times(key,SC2));
scrambler2_go(ch);
shift_back(ch,shift_times(key,SC2));
#endif
#if SC3
shift_go(ch,shift_times(key,SC3));
scrambler3_go(ch);
shift_back(ch,shift_times(key,SC3));
#endif

reflector(ch);

#if SC3
shift_go(ch,shift_times(key,SC3));
scrambler3_back(ch);
shift_back(ch,shift_times(key,SC3));
#endif
#if SC2
shift_go(ch,shift_times(key,SC2));
scrambler2_back(ch);
shift_back(ch,shift_times(key,SC2));
#endif
#if SC1
shift_go(ch,shift_times(key,SC1));
scrambler1_back(ch);
shift_back(ch,shift_times(key,SC1));
#endif
return(*ch);
}
#endif

#if !defined(__HEADER_REFLECTOR)
#define __HEADER_REFLECTOR

char reflector(char *ch){
switch(*ch){
case 'a':*ch='z';break;
case 'b':*ch='y';break;
case 'c':*ch='x';break;
case 'd':*ch='w';break;
case 'e':*ch='v';break;
case 'f':*ch='u';break;
case 'g':*ch='t';break;
case 'h':*ch='s';break;
case 'i':*ch='r';break;
case 'j':*ch='q';break;
case 'k':*ch='p';break;
case 'l':*ch='o';break;
case 'm':*ch='n';break;
case 'n':*ch='m';break;
case 'o':*ch='l';break;
case 'p':*ch='k';break;
case 'q':*ch='j';break;
case 'r':*ch='i';break;
case 's':*ch='h';break;
case 't':*ch='g';break;
case 'u':*ch='f';break;
case 'v':*ch='e';break;
case 'w':*ch='d';break;
case 'x':*ch='c';break;
case 'y':*ch='b';break;
case 'z':*ch='a';break;
}
return(*ch);
}

#endif