#include <stdio.h>
#define ccase(a)	(a>='A' && a<='Z') ? a+=32 : (a>='a' && a <='z') ? a -= 32 : a 
#define VERSION "1.11 XaD/NiGHTFALL VeRsIoN"

unsigned int rand(void);
void srand(unsigned int seed);
unsigned int atoi (char s[]);

unsigned long int next = 1;

main(int argc, char *argv[])
{
	FILE *in; /* , *out; */
	char *prog = argv[0], *file, alt = 0, flag = 0;
	unsigned char car;
	unsigned int perc1 = 50, perc2 = 50;
	
	if (argc == 1)
	{
		printf ("\n[33;1m%s[0m - version %s - by [1mPhalanx[0m\n",prog, VERSION);
		printf ((argc == 1) ? "" : "Wrong Syntax.\n");
		printf ("Syntax: [1m%s[0m file1 [>file2] [c1%% c2%%]\n\n",prog);
		return (argc == 1) ? 0 : 5;
	}	
	if (argc >= 3)
	{
		if ((perc1 = atoi(argv[2])) > 100)
		{
			printf ("\nbad argument for c1%%\n\n");
			return 20;
		}
	}
	if (argc == 4)
	{
		if ((perc2 = atoi(argv[3])) > 100)
		{
			printf ("\nbad argument for c2%%\n\n");
			return 20;
		}
	}
	if ((perc1 == 0) && (perc2 == 0))
		alt = 1;
	if ((in = fopen ((file = argv[1]), "r")) == NULL)
	{
		printf ("\n%s: can't open %s\n\n", prog, file);
		return 20;
	}
	srand (5230927);
	while ((car = getc (in)) != EOF)
	{
		switch(alt)
		{
			case 0:
			if (rand() <= perc1)
				ccase(car);
			if (rand() <= perc2)
				switch(car)
				{
					case 'a': car = 230;break;
					case 'c': car = 162;break;
					case 'd': car = 240;break;
					case 'e': car = 230;break;
					case 'o': car = 248;break;
					case 'r': car = 174;break;
					case 'u': car = 181;break;
					case 'x': car = 215;break;
					case 'y': car = 221;break;
					case 'A': car = 198;break;
					case 'B': car = 223;break;
					case 'C': car = 169;break;
					case 'D': car = 208;break;
					case 'E': car = 198;break;
					case 'I': car = '|';break;
					case 'L': car = 163;break;
					case 'O': car = 216;break;
					case 'P': car = 254;break;
					case 'R': car = 174;break;
					case 'S': car = 167;break;
					case 'T': car = '7';break;
					case 'U': car = 220;break;
					case 'Y': car = 165;break;
					case  34: car = 169;break;
					case  58: car = 166;break;
				}
			break;
			case 1:
			if (flag == 0)
			{
				if ((car >= 'a' && car <= 'z') || (car >= 'A' && car <= 'Z'))
					flag = 1;
				if (car >= 'a' && car <= 'z')
					ccase(car);
			}
			else
			{
				if ((car >= 'a' && car <= 'z') || (car >= 'A' && car <= 'Z'))
					flag = 0;
				if (car >= 'A' && car <= 'Z')
					ccase(car);
			}
		}
		printf("%c",car);
	}
	printf("\n > Converted by l00zer v. %s <\n",VERSION);
	fclose(in);
	return 0;
}


unsigned int rand(void)
{
	next = next * 1103515245 + 12345;
	return (unsigned int) ((next/65536) % 101) + 1;
}
void srand(unsigned int seed)
{
	next = seed;
}
unsigned int atoi (char s[])
{
	int i;
	unsigned int n = 0;
	for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
		n = 10 * n + s[i] - '0';
	return n;
}
