#include #include #include #include #include #include #define FREQUENCY 880 #define ERROR_FREQUENCY 700 // ein dah ist dreimal so lang wie ein dit, eine pause zwischen zwei symbolen ist ein dit lang, // zwischen zwei buchstaben beträgt die pause drei dit, zwischen zwei wörtern sieben dit. #define DAH_LENGTH 180 #define DIT_LENGTH 60 #define PAUSE_LENGTH 60 #define SPACE_LENGTH 300 #define ERROR_LENGTH 180 int fd = 0; void dah(); void dit(); void pause(); void space(); void errorbeep(); int main(int argc, char *argv[]) { fd = open("/dev/tty0", O_RDONLY); char c; while(scanf("%c",&c) != EOF) { switch(c) { case ' ': space(); break; case 'a': case 'A': dit();dah();pause(); break; case 'b': case 'B': dah();dit();dit();dit();pause(); break; case 'c': case 'C': dah();dit();dah();dit();pause(); break; case 'd': case 'D': dah();dit();dit();pause(); break; case 'e': case 'E': dit();pause(); break; case 'f': case 'F': dit();dit();dah();dit();pause(); break; case 'g': case 'G': dah();dah();dit();pause(); break; case 'h': case 'H': dit();dit();dit();dit();pause(); break; case 'i': case 'I': dit();dit();pause(); break; case 'j': case 'J': dit();dah();dah();dah();pause(); break; case 'k': case 'K': dah();dit();dah();pause(); break; case 'l': case 'L': dit();dah();dit();dit();pause(); break; case 'm': case 'M': dah();dah();pause(); break; case 'n': case 'N': dah();dit();pause(); break; case 'o': case 'O': dah();dah();dah();pause(); break; case 'p': case 'P': dit();dah();dah();dit();pause(); break; case 'q': case 'Q': dah();dah();dit();dah();pause(); break; case 'r': case 'R': dit();dah();dit();pause(); break; case 's': case 'S': dit();dit();dit();pause(); break; case 't': case 'T': dah();pause(); break; case 'u': case 'U': dit();dit();dah();pause(); break; case 'v': case 'V': dit();dit();dit();dah();pause(); break; case 'w': case 'W': dit();dah();dah();pause(); break; case 'x': case 'X': dah();dit();dit();dah();pause(); break; case 'y': case 'Y': dah();dit();dah();dah();pause(); break; case 'z': case 'Z': dah();dah();dit();dit();pause(); break; case '1': dit();dah();dah();dah();dah();pause(); break; case '2': dit();dit();dah();dah();dah();pause(); break; case '3': dit();dit();dit();dah();dah();pause(); break; case '4': dit();dit();dit();dit();dah();pause(); break; case '5': dit();dit();dit();dit();dit();pause(); break; case '6': dah();dit();dit();dit();dit();pause(); break; case '7': dah();dah();dit();dit();dit();pause(); break; case '8': dah();dah();dah();dit();dit();pause(); break; case '9': dah();dah();dah();dah();dit();pause(); break; case '0': dah();dah();dah();dah();dah();pause(); break; case '.': dit();dah();dit();dah();dit();dah();pause(); break; case ',': dah();dah();dit();dit();dah(),dah();pause(); break; case ':': dah();dah();dah();dit();dit();dit();pause(); break; case ';': dah();dit();dah();dit();dah();dit();pause(); break; case '?': dit();dit();dah();dah();dit();dit();pause(); break; case '-': dah();dit();dit();dit();dit();dah();pause(); break; case '(': dah();dit();dah();dah();dit();dah();pause(); break; case ')': dah();dit();dah();dah();dah();dit();pause(); break; case '\'': dit();dah();dah();dah();dah();dit();pause(); break; case '=': dah();dit();dit();dit();dah();pause(); break; case '+': dit();dah();dit();dah();dit();pause(); break; case '/': dah();dit();dit();dah();dit();pause(); break; case '@': dit();dah();dah();dit();dah();dit();pause(); break; default: errorbeep(); break; } } return 0; } void dah() { int arg = (DAH_LENGTH << 16) + (1193180/FREQUENCY); ioctl(fd,KDMKTONE,arg); usleep(DAH_LENGTH * 1000); usleep(PAUSE_LENGTH * 1000); } void dit() { int arg = (DIT_LENGTH << 16) + (1193180/FREQUENCY); ioctl(fd,KDMKTONE,arg); usleep(DIT_LENGTH * 1000); usleep(PAUSE_LENGTH * 1000); } void pause() { usleep(PAUSE_LENGTH * 2000); // zwischen Buchstaben eine pause von einem dah = 3dit // da an jedem symbol schon eine pause ist, // hier also noch 2*dit = 2*pause. } void space() { usleep(SPACE_LENGTH * 1000); } void errorbeep() { int arg = (ERROR_LENGTH << 16) + (1193180/ERROR_FREQUENCY); ioctl(fd,KDMKTONE,arg); usleep(ERROR_LENGTH * 1000); usleep(DIT_LENGTH * 1000); }