@ -2,22 +2,21 @@
# include <string.h>
# include <string.h>
# include <unistd.h>
# include <unistd.h>
# include <ctype.h>
# include <ctype.h>
# include <stdbool.h>
# include <limits.h>
# define MAX_STRING_LENGTH 1024
# define MAX_ INPUT_SIZE USHRT_MAX
# define NUM_OF_LETTERS 36
# define NUM_OF_LETTERS 36
# define DASH_PAUSE_LENGTH 1000000
# define DASH_PAUSE_LENGTH 1000000
# define DOT_PAUSE_LENGTH 500000
# define DOT_PAUSE_LENGTH 500000
static char * CHRISTMAS_PHRASES [ ] = { " Merry Christmas " , " Happy Haunika " , " Happy Holidays! " , " Jingle bells! Jingle bells! " } ;
static const char LOWERCASE_LETTERS [ NUM_OF_LETTERS ] = { ' a ' , ' b ' , ' c ' , ' d ' , ' e ' , ' f ' , ' g ' , ' h ' , ' i ' , ' j ' , ' k ' , ' l ' , ' m ' , ' n ' , ' o ' , ' p ' , ' q ' , ' r ' , ' s ' , ' t ' , ' u ' , ' v ' , ' w ' , ' x ' , ' y ' , ' z ' , ' 0 ' , ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , ' 7 ' , ' 8 ' , ' 9 ' } ;
static const char LOWERCASE_LETTERS [ NUM_OF_LETTERS ] = { ' a ' , ' b ' , ' c ' , ' d ' , ' e ' , ' f ' , ' g ' , ' h ' , ' i ' , ' j ' , ' k ' , ' l ' , ' m ' , ' n ' , ' o ' , ' p ' , ' q ' , ' r ' , ' s ' , ' t ' , ' u ' , ' v ' , ' w ' , ' x ' , ' y ' , ' z ' , ' 0 ' , ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , ' 7 ' , ' 8 ' , ' 9 ' } ;
static const char UPPERCASE_LETTERS [ NUM_OF_LETTERS ] = { ' A ' , ' B ' , ' C ' , ' D ' , ' E ' , ' F ' , ' G ' , ' H ' , ' I ' , ' J ' , ' K ' , ' L ' , ' M ' , ' N ' , ' O ' , ' P ' , ' Q ' , ' R ' , ' S ' , ' T ' , ' U ' , ' V ' , ' W ' , ' X ' , ' Y ' , ' Z ' } ;
static const char UPPERCASE_LETTERS [ NUM_OF_LETTERS ] = { ' A ' , ' B ' , ' C ' , ' D ' , ' E ' , ' F ' , ' G ' , ' H ' , ' I ' , ' J ' , ' K ' , ' L ' , ' M ' , ' N ' , ' O ' , ' P ' , ' Q ' , ' R ' , ' S ' , ' T ' , ' U ' , ' V ' , ' W ' , ' X ' , ' Y ' , ' Z ' } ;
static const char MORSE [ NUM_OF_LETTERS ] [ 6 ] = { " .- " , " -... " , " -.-. " , " -.. " , " . " , " ..-. " , " --. " , " .... " , " .. " , " .--- " , " -.- " , " .-.. " , " -- " , " -. " , " --- " , " .--. " , " --.- " , " .-. " , " ... " , " - " , " ..- " , " ...- " , " .-- " , " -..- " , " -.-- " , " --.. " , " .---- " , " ..--- " , " ...-- " , " ....- " , " ..... " , " -.... " , " --... " , " ---.. " , " ----. " , " ----- " } ;
static const char MORSE [ NUM_OF_LETTERS ] [ 6 ] = { " .- " , " -... " , " -.-. " , " -.. " , " . " , " ..-. " , " --. " , " .... " , " .. " , " .--- " , " -.- " , " .-.. " , " -- " , " -. " , " --- " , " .--. " , " --.- " , " .-. " , " ... " , " - " , " ..- " , " ...- " , " .-- " , " -..- " , " -.-- " , " --.. " , " .---- " , " ..--- " , " ...-- " , " ....- " , " ..... " , " -.... " , " --... " , " ---.. " , " ----. " , " ----- " } ;
void print_single_morse ( char charToMorse ){
void print_single_morse ( char charToMorse , bool isSlow , bool addLetter ){
int sizeOfMorseCode ;
int sizeOfMorseCode ;
// Loop through every character in the list of letters
// Loop through every character in the list of letters
for ( int j = 0 ; j < NUM_OF_LETTERS ; j + + ) {
for ( int j = 0 ; j < NUM_OF_LETTERS ; j + + ) {
@ -25,44 +24,58 @@ void print_single_morse(char charToMorse){
if ( charToMorse = = LOWERCASE_LETTERS [ j ] | | charToMorse = = UPPERCASE_LETTERS [ j ] ) {
if ( charToMorse = = LOWERCASE_LETTERS [ j ] | | charToMorse = = UPPERCASE_LETTERS [ j ] ) {
sizeOfMorseCode = strlen ( MORSE [ j ] ) ;
sizeOfMorseCode = strlen ( MORSE [ j ] ) ;
// Print chracter in ascii in brackets before the morse code
// Print chracter in ascii in brackets before the morse code
printf ( " (%c) " , charToMorse , sizeOfMorseCode ) ;
if ( addLetter ) {
// Loop through each character in the morse code for that chracter
printf ( " (%c) " , charToMorse , sizeOfMorseCode ) ;
for ( int k = 0 ; k < sizeOfMorseCode ; k + + ) {
}
printf ( " %c " , MORSE [ j ] [ k ] ) ;
// if speed restraints are being added for effect
// Force flush buffer so it is garunteed to be written to, with the delays in between
if ( isSlow ) {
fflush ( stdout ) ;
// Loop through each character in the morse code for that chracter
// If the morse character is a dash
for ( int k = 0 ; k < sizeOfMorseCode ; k + + ) {
if ( MORSE [ j ] [ k ] = = ' - ' ) {
printf ( " %c " , MORSE [ j ] [ k ] ) ;
// ******* TODO: Replace with Arduino light code
// Force flush buffer so it is garunteed to be written to, with the delays in between
// Long delay code
fflush ( stdout ) ;
usleep ( DASH_PAUSE_LENGTH ) ;
// If the morse character is a dash
} else {
if ( MORSE [ j ] [ k ] = = ' - ' ) {
// ******* TODO: Replace with Arduino light code
// ******* TODO: Replace with Arduino light code
// Short delay code
// Long delay code
usleep ( DOT_PAUSE_LENGTH ) ;
usleep ( DASH_PAUSE_LENGTH ) ;
} else {
// ******* TODO: Replace with Arduino light code
// Short delay code
usleep ( DOT_PAUSE_LENGTH ) ;
}
}
}
printf ( " " ) ;
// If not slow
} else {
printf ( " %s " , MORSE [ j ] ) ;
}
}
printf ( " " ) ;
}
}
}
}
}
}
void print_morse ( char * strToMorse ){
void print_morse ( char * strToMorse , bool isSlow , bool addLetter ){
int sizeOfInputString ;
int sizeOfInputString ;
sizeOfInputString = strlen ( strToMorse ) ;
sizeOfInputString = strlen ( strToMorse ) ;
// Loop through every character in the input string
// Loop through every character in the input string
for ( int i = 0 ; i < sizeOfInputString ; i + + ) {
for ( int i = 0 ; i < sizeOfInputString ; i + + ) {
print_single_morse ( strToMorse [ i ] );
print_single_morse ( strToMorse [ i ] , isSlow , addLetter );
}
}
}
}
int main ( int argc , char * argv [ ] ) {
int main ( int argc , char * argv [ ] ) {
if ( argc > 1 ) {
if ( strcmp ( argv [ 1 ] , " --interactive " ) = = 0 | | strcmp ( argv [ 1 ] , " -i " ) = = 0 ) {
bool addLetterBeforeMorse = false ;
bool isSlow = false ;
char inputString [ MAX_INPUT_SIZE ] ;
for ( int argi = 0 ; argi < argc ; argi + + ) {
char * arg = argv [ argi ] ;
if ( strcmp ( arg , " --interactive " ) = = 0 | | strcmp ( arg , " -i " ) = = 0 ) {
printf ( " Entering interactive mode! \n " ) ;
printf ( " Entering interactive mode! \n " ) ;
int sizeOfInputString ;
int sizeOfInputString ;
char inputString [ MAX_STRING_LENGTH ] ;
printf ( " Enter a string: " ) ;
printf ( " Enter a string: " ) ;
scanf ( " %[^ \n ]s " , inputString ) ;
scanf ( " %[^ \n ]s " , inputString ) ;
sizeOfInputString = strlen ( inputString ) ;
sizeOfInputString = strlen ( inputString ) ;
@ -70,16 +83,18 @@ int main(int argc, char *argv[]){
printf ( " \" %s \" has length of %d \n " , inputString , sizeOfInputString ) ;
printf ( " \" %s \" has length of %d \n " , inputString , sizeOfInputString ) ;
printf ( " \n " ) ;
printf ( " \n " ) ;
print_morse ( inputString );
print_morse ( inputString , isSlow , addLetterBeforeMorse );
printf ( " \n " ) ;
printf ( " \n " ) ;
}
} else if ( strcmp ( arg , " --slow " ) = = 0 | | strcmp ( arg , " -s " ) = = 0 ) {
// If not interactive mode
isSlow = true ;
} else {
} else if ( strcmp ( arg , " --verbose " ) = = 0 | | strcmp ( arg , " -v " ) = = 0 ) {
for ( int i = 0 ; i < 4 ; i + + ) {
addLetterBeforeMorse = true ;
print_morse ( CHRISTMAS_PHRASES [ i ] ) ;
printf ( " \n \n " ) ;
}
}
}
}
scanf ( " %[^ \n ]s " , inputString ) ;
print_morse ( inputString , isSlow , addLetterBeforeMorse ) ;
printf ( " \n " ) ;
return 0 ;
return 0 ;
}
}