/* Morse program created by ok1tin version 240129 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Input : text file Output: PC speaker buit.sh #!/bin/bash s1="morse2" g++ $s1.cpp -o $s1.exe ./$s1.exe -f 1000 -l 80 */ #include #include #include #include #include #include //access() #include //kbhit() #include //kbhit() #include #include using namespace std; //associative array morse_map['A'] = ".-" map morse_map { {' '," "}, {'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',"----."},{'.',".-.-.-"},{',',"--..--"},{'?',"..--.."}, {'!',"-.-.--"},{'/',"-..-."},{'(',"-.--."},{')',"-.--.-"},{'&',".-..."}, {':',"---..."},{';',"-.-.-."},{'=',"-...-"},{'+',".-.-."},{'-',"-....-"}, {'_',"..--.-"},{'\\',".-..-."},{'$',"...-..-"},{'@',".--.-."},{'"',".-..-."} ,{'\'',".----."}} ; // // // //Timing //___ . ___ . ___ ___ ___ . ___ ___ . . . ___ ____ ____ ___ . _ void dot(unsigned int fr,unsigned int sp){ //fr freq sp speed char buf[32]; sprintf(buf,"beep -f%d -l%d -D%d ",fr,sp,sp); // dot . system(buf); } void dash(unsigned int fr,unsigned int sp){ char buf[32]; sprintf(buf,"beep -f%d -l%d -D%d ",fr,3*sp,sp); // dash - system(buf); } void space3(unsigned int fr,unsigned int sp){ char buf[32]; sprintf(buf,"beep -f1 -l%d ",3*sp); // 3 spaces system(buf); } void space7(unsigned int fr,unsigned int sp){ char buf[32]; sprintf(buf,"beep -f1 -l%d ",7*sp); // 7 spaces system(buf); } void playchr(char c1, unsigned int freq, unsigned int speed ){ if ((int)c1 < 0x20) return; if ((int)c1 > 0xFE) return; c1=toupper(c1); printf("%c %s \n",c1,morse_map[c1].c_str()); for (unsigned int j = 0; j < morse_map[c1].length(); j++) { switch(morse_map[c1][j]){ case '.' : dot(freq,speed); break; case '-' : dash(freq,speed); break; case ' ' : space3(freq,speed); break; } } space3(freq,speed); } int kbhit(void) { struct termios oldt, newt; int ch; int oldf; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); oldf = fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); fcntl(STDIN_FILENO, F_SETFL, oldf); if(ch != EOF) { ungetc(ch, stdin); return 1; } return 0; } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX int main(int ac,char*av[]) { unsigned int freq,speed; unsigned int i,j; char c; string str1; //test //for (c=0x20; c<0x7F; c++) {printf("%X %c ",c,c); playchr(c,1000,5);} printf("Morse program,invoked by : \n"); for (i=0; i /morse2 av[0]=strtok(av[0], "/"); // /morse2 -> morse2 // av[0]=strtok(av[0], "./"); // sprintf(av[0],"%s%s", av[0],".txt"); printf("Program read text from %s \n",av[0]); if (access(av[0],F_OK)){ // printf("%s not exist ...create it, please !\n",fname1); playchr('e',freq,speed); playchr('e',freq,speed); printf("Press any key ...\n"); getchar(); return 0; }; FILE *fp; fp=fopen(av[0],"r"); if (fp == NULL) { // Handle error printf("Error open file: %s \n",av[0]); getchar(); return 0; } while (((c = getc(fp)) != EOF) && !kbhit()) { playchr(c,freq,speed); } if (fclose(fp)==EOF) printf("Error close file: \%s \007\n",av[0]); printf("\nDone ..\n"); sleep(2); //sec getchar(); return 0; }