#include #include #include 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]); table[temp] = getNextChar(argv[2]); if(strlen(argv[2]) != letterBump(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; }