#include #include #include "morse.h" char *encode_data[256] = { // [0 ... 255] = 0, ['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'] = "----.", ['.'] = ".-.-.-", [','] = "--..--", ['?'] = "..--.." }; char * encode(unsigned char c) { return encode_data[toupper((int)c)]; } char decode_data[256] = { // [ 0 ... 255 ] = 0, [ 0x05 ] = 'A', [ 0x18 ] = 'B', [ 0x1a ] = 'C', [ 0x0c ] = 'D', [ 0x02 ] = 'E', [ 0x12 ] = 'F', [ 0x0e ] = 'G', [ 0x10 ] = 'H', [ 0x04 ] = 'I', [ 0x17 ] = 'J', [ 0x0d ] = 'K', [ 0x14 ] = 'L', [ 0x07 ] = 'M', [ 0x06 ] = 'N', [ 0x0f ] = 'O', [ 0x16 ] = 'P', [ 0x1d ] = 'Q', [ 0x0a ] = 'R', [ 0x08 ] = 'S', [ 0x03 ] = 'T', [ 0x09 ] = 'U', [ 0x11 ] = 'V', [ 0x0b ] = 'W', [ 0x19 ] = 'X', [ 0x1b ] = 'Y', [ 0x1c ] = 'Z', [ 0x01 ] = ' ', [ 0x3f ] = '0', [ 0x2f ] = '1', [ 0x27 ] = '2', [ 0x23 ] = '3', [ 0x21 ] = '4', [ 0x20 ] = '5', [ 0x30 ] = '6', [ 0x38 ] = '7', [ 0x3c ] = '8', [ 0x3e ] = '9', [ 0x55 ] = '.', [ 0x73 ] = ',', [ 0x4c ] = '?' }; /* ** Each morse sequence is coded into one byte (= 8 bits), ** which is used as index into decode_data[]: ** ** 1 ** ** (No character has a morse sequence longer than six signals.) */ unsigned char decode(char *cp) { int i = 1; for (; *cp; cp++) { i <<= 1; if (*cp == '-') { i++; } if (i > 255) { return 0; } } return decode_data[i]; }