All pastes #979237 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-04-10 05:12 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void checkParameters(int, char**);
char getNextChar(char* string);
int letterBump(char* string);
void printResults(char* table);

int main (int argc, char* argv[])
{
	char table[256];
	char temp;
	int i = 0;

	checkParameters(argc, argv);

	if(argc == 3)
	{
		for(i = 0; i < 256; i++)
		{
			table[i] = i;
		}
		
		if(!strcmp(argv[1], "-d"))
		{
			while((temp = getNextChar(argv[2])) != 0)
			{
				argv[2] = argv[2] + letterBump(argv[2]);
				table[temp] = 0;
			}
		}
		
		else
		{
			while((temp = getNextChar(argv[1])) != 0)
			{
				argv[1] = argv[1] + letterBump(argv[1]);
				if(strlen(argv[2]) == 1)
				{
					table[temp] = argv[2][0];
				}
				else
				{
					table[temp] = getNextChar(argv[2]);
					argv[2] = argv[2] + letterBump(argv[2]);
				}
			}
		}
		
		printResults(table);
	}
	return 0;
}

/* Checks to make sure there are enough parameters */
void checkParameters(int argc, char* argv[])
{
	switch(argc)
	{
		case 1:
			printf("tr: missing operand\n");
			break;
		case 2:
			printf("tr: missing operand after '%s'\n", argv[1]);
			break;
		case 3:
			break;
		default:
			printf("tr: extra operand '%s'\n", argv[3]);
			break;
	}
	return;
}

/* Returns the first character.  It will translate special characters. */
char getNextChar (char* string)
{
	if(string[0] == 0)
	{
		return 0;
	}

	if(string[0] == 92)
	{
		switch(string[1])
		{
			case 92:
				return 92;
				break;
			case 't':
				return '\t';
				break;
			case 'n':
				return '\n';
				break;
			default:
				exit(1);
				break;
		}
	}
	return string[0];
}

/* Finds out if a special character was translated. */
int letterBump(char* string)
{
	if(string[0] == 92)
	{
		return 2;
	}
	return 1;
}

/* Prints the resulting translation */
void printResults(char* table)
{
	char temp;
	while((temp = getc(stdin)) != EOF)
	{
		if(table[temp] != 0)
		{
			printf("%c", table[temp]);
		}
	}
	return;
}