// From thymos@umich.edu Sat Oct 5 11:19:35 1996 /* AUTHOR: Students in SI609 INSTRUCTOR: Dr. Sandra L. Bartlett COURSE: SI 609, C++ Module PROJECT: Assignment #4 DUE DATE: Sunday October 6, 1996 SUBMISSION DATE: Saturday October 5, 1996 SUMMARY: This program translates English text (ASCII) files to Morse Code files. It can also translates Morse Code files into English text (ASCII) files. It also creates a Morse Code "cheat sheet" INPUT: Input is a text (ASCII) file. BAD DATA CHECKING: None OUTPUT: Output is a text (ASCII) file. CLASS HIERARCHY: None ASSUMPTIONS: Any user is expected to be able to input a text (ASCII) file and then retrieve the output the file. */ // #include #include #include class Node { public: char character; Node * left; Node * right; // From stewkat@umich.edu Sat Oct 5 10:41:38 1996 char convert(char* morse_string) { int counter = 0; Node * tmp=this; do { if (morse_string[counter] == '\0') { return tmp -> character; } if(morse_string[counter] == '.') { tmp = tmp -> left; } else { tmp = tmp -> right; } counter += 1; }while (tmp); cout << "character not found"; return morse_string[counter]; } // convert }; // class Node // From wsto@inst.strykercorp.com Sat Oct 5 18:19:39 1996 Node * Buildtree() { int i; Node * LHS[20]; Node * RHS[20]; for (i = 0; i < 20; i++) { LHS[i] = new Node; RHS[i] = new Node; } LHS[0]->character = 'e'; LHS[0]->left = LHS[1]; LHS[0]->right = LHS[2]; LHS[1]->character = 'i'; LHS[1]->left = LHS[3]; LHS[1]->right = LHS[4]; LHS[2]->character = 'a'; LHS[2]->left = LHS[12]; LHS[2]->right = LHS[13]; LHS[3]->character = 's'; LHS[3]->left = LHS[5]; LHS[3]->right = LHS[6]; LHS[4]->character = 'u'; LHS[4]->left = LHS[7]; LHS[4]->right = LHS[8]; LHS[5]->character = 'h'; LHS[5]->left = LHS[9]; LHS[5]->right = LHS[10]; LHS[6]->character = 'v'; LHS[6]->left = NULL; LHS[6]->right = LHS[11]; LHS[7]->character = 'f'; LHS[7]->left = NULL; LHS[7]->right = NULL; LHS[8]->character = '0'; LHS[8]->left = NULL; LHS[8]->right = LHS[17]; LHS[9]->character = '5'; LHS[9]->left = NULL; LHS[9]->right = NULL; LHS[10]->character = '4'; LHS[10]->left = NULL; LHS[10]->right = NULL; LHS[11]->character ='3' ; LHS[11]->left = NULL; LHS[11]->right = NULL; LHS[12]->character = 'r'; LHS[12]->left = LHS[14]; LHS[12]->right = NULL; LHS[13]->character = 'w'; LHS[13]->left = LHS[15]; LHS[13]->right = LHS[16]; LHS[14]->character = 'l'; LHS[14]->left = NULL; LHS[14]->right = NULL; LHS[15]->character = 'p'; LHS[15]->left = NULL; LHS[15]->right = NULL; LHS[16]->character = 'j'; LHS[16]->left = NULL; LHS[16]->right = NULL; LHS[17]->character = '2'; LHS[17]->left = NULL; LHS[17]->right = LHS[18]; LHS[18]->character ='1' ; LHS[18]->left = NULL; LHS[18]->right = NULL; RHS[0] -> character = 't'; RHS[0] -> left = RHS[1]; RHS[0] -> right = RHS[2]; RHS[1] -> character = 'n'; RHS[1] -> left = RHS[3]; RHS[1] -> right = RHS[4]; RHS[2] -> character = 'm'; RHS[2] -> left = RHS[5]; RHS[2] -> right = RHS[6]; RHS[3] -> character = 'd'; RHS[3] -> left = RHS[7]; RHS[3] -> right = RHS[8]; RHS[4] -> character = 'k'; RHS[4] -> left = RHS[9]; RHS[4] -> right = RHS[10]; RHS[5] -> character = 'g'; RHS[5] -> left = RHS[11]; RHS[5] -> right = RHS[12]; RHS[6] -> character = 'o'; RHS[6] -> left = RHS[13]; RHS[6] -> right = RHS[14]; RHS[7] -> character = 'b'; RHS[7] -> left = RHS[15]; RHS[7] -> right = NULL; RHS[8] -> character = 'x'; RHS[8] -> left = NULL; RHS[8] -> right = NULL; RHS[9] -> character = 'c'; RHS[9] -> left = NULL; RHS[9] -> right = NULL; RHS[10] -> character = 'y'; RHS[10] -> left = NULL; RHS[10] -> right = NULL; RHS[11] -> character = 'z'; RHS[11] -> left = RHS[16]; RHS[11] -> right = NULL; RHS[12] -> character = 'q'; RHS[12] -> left = NULL; RHS[12] -> right = NULL; RHS[13] -> character = '\n'; RHS[13] -> left = RHS[17]; RHS[13] -> right = NULL; RHS[14] -> character = '\n'; RHS[14] -> left = RHS[18]; RHS[14] -> right = RHS[19]; RHS[15] -> character = '6'; RHS[15] -> left = NULL; RHS[15] -> right = NULL; RHS[16] -> character = '7'; RHS[16] -> left = NULL; RHS[16] -> right = NULL; RHS[17] -> character = '8'; RHS[17] -> left = NULL; RHS[17] -> right = NULL; RHS[18] -> character = '9'; RHS[18] -> left = NULL; RHS[18] -> right = NULL; RHS[19] -> character = '0'; RHS[19] -> left = NULL; RHS[19] -> right = NULL; Node * Midas = new Node; Midas ->left = LHS[0]; Midas ->right = RHS[0]; return Midas; }// build-tree // From thymos@umich.edu Sat Oct 5 11:19:35 1996 void main() { char new_char; int Switch; Node * root = Buildtree(); int spaces = 0; char morse_string[10]; char morse_char[2]; // From jensen@engin.umich.edu Sat Oct 5 16:06:18 1996 // create morse code key for letters char* key[]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}; // create morse code key for digits char* key2[]={"-----",".----","..----","...--","....-",".....","-....","--...","---..","----."}; /************************/ cin >> new_char; // this was missing /************************/ if(new_char =='.' || new_char =='-') Switch = 1; else Switch = 2; // From xiaolong@umich.edu Sat Oct 5 11:12:55 1996 // use this code for getting file names from the user, instead of redirecting I/O /* FILE *fp; char chFileName[20]; char chWordIn[200]; printf("Please input the file name:"); scanf("%s",chFileName); if ((fp=fopen(chFileName,"r"))==NULL) { printf("%s","File open error!\n"); exit(1); } while(!feof(fp)) { fgets(chWordIn,200,fp); } fclose(fp); */ /***********************************************/ switch(Switch) { case 1: // Morse-English // From jbcohen@umich.edu Sat Oct 5 10:36:02 1996 morse_string[0] = '\0'; while (!cin.eof()) { morse_char[0] = new_char; morse_char[1] = '\0'; switch(new_char) { case '.' : case '-': spaces = 0; strcat(morse_string, morse_char); break; case '|': spaces = 0; cout << "."; break; case '~': spaces = 0; cout << "-"; break; case ' ': if (spaces == 0) { cout << root->convert(morse_string); morse_string[0] = '\0'; spaces++; } else cout << " "; break; default: spaces = 0; cout << new_char; break; } // switch cin.get(new_char); } // while cout << endl << endl; break; case 2: // English-Morse; // receive character to convert while (!cin.eof()) { // convert // convert uppercase letters and print out morse equivalent if (new_char>='A' && new_char<='Z') cout << key[new_char - 'A'] << " "; // convert lowercase letters and print out morse equivalent else if (new_char>='a' && new_char <='z') cout << key[new_char - 'a'] << " "; // convert numbers and print out morse equivalent else if (new_char>='0' && new_char<='9') cout << key2[new_char - '0'] << " "; // convert periods in text to a pipe else if (new_char == '.') cout << '|'; // convert underscores to tildas else if (new_char == '-') cout << '~'; // print out any other character as it is else cout << new_char; cin.get(new_char); } // while cout << endl << endl; break; } // switch // From jensen@engin.umich.edu Sat Oct 5 16:06:18 1996 // Print out cheat sheet /* // print out letters and more equivalent for (char t= 'A'; t<= 'Z'; t++) cout << t << " = " << key[t - 'A'] << endl; // print out numbers and morse equivalent for (int j= 0; j<=9; j++) cout << j << " = " << key2[j] << endl; */ } //main