#!/usr/bin/python3
# ==================================================================
# Morse code translator (enter text, output Morse code)
# ==================================================================
#
# Each dit or dah within an encoded character is followed by a
# period of signal absence, called a space, equal to the dit
# duration. The letters of a word are separated by a space of
# duration equal to three dits, and words are separated by a
# space equal to seven dits.
#
# ==================================================================
#
# Question for the student:
# What is the flaw in this solution (code)?
#
# Answer:
# (O4( RK! !ZKMO!7 WY?!O MYNO RK! ZK1!O! YP NSPPO?OX( VOXQ(R7
# RY3 NY 5Y1 MYX2O? LO(3OOX (ROW8
#
# To decode the answer use the program developed for
# project: "Send and receive secret messages" (shift 10)
# plaintext alphabet for shift cipher:
# ['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', '.', '?', '!', '(',
# '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
# ')']
#
# ==================================================================
import sys
import user_interface as ui
abc = { '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' : '--..',
'1' : '.----',
'2' : '..---',
'3' : '...--',
'4' : '....-',
'5' : '.....',
'6' : '-....',
'7' : '--...',
'8' : '---..',
'9' : '----.',
'0' : '-----',
'.' : '.-.-.-',
',' : '--..--',
'?' : '..--..',
'!' : '-.-.--',
':' : '---...',
';' : '-.-.-.',
'/' : '-..-.',
'=' : '-...-',
'+' : '.-.-.',
'-' : '-....-' }
xabc = { 'A' : 'dot,dash',
'B' : 'dash,dot,dot',
'C' : 'dash,dot,dash,dot',
'D' : 'dash,dot,dot',
'E' : 'dot',
'F' : 'dot,dot,dash,dot',
'G' : 'dash,dash,dot',
'H' : 'dot,dot,dot,dot',
'I' : 'dot,dot',
'J' : 'dot,dash,dash',
'K' : 'dash,dot,dash',
'L' : 'dot,dash,dot,dot',
'M' : 'dash,dash',
'N' : 'dash,dot',
'O' : 'dash,dash,dash',
'p' : 'dot,dash,dash,dot',
'Q' : 'dash,dash,dot,dash',
'R' : 'dot,dash,dot',
'S' : 'dot,dot,dot',
'T' : 'dash',
'U' : 'dot,dot,dash',
'V' : 'dot,dot,dot,dash',
'W' : 'dot,dash,dash',
'X' : 'dash,dot,dot,dash',
'Y' : 'dash,dot,dash,dash',
'Z' : 'dash,dash,dot,dot',
'1' : 'dot,dash,dash,dash,dash',
'2' : 'dot,dot,dash,dash,dash',
'3' : 'dot,dot,dot,dash,dash',
'4' : 'dot,dot,dot,dot,dash',
'5' : 'dot,dot,dot,dot,dot',
'6' : 'dash,dot,dot,dot,dot',
'7' : 'dash,dash,dot,dot,dot',
'8' : 'dash,dash,dash,dot,dot',
'9' : 'dash,dash,dash,dash,dot',
'0' : 'dash,dash,dash,dash,dash',
'.' : 'dot,dash,dot,dash,dot,dash',
',' : 'dash,dash,dot,dot,dash,dash',
'?' : 'dot,dot,dash,dash,dot,dot',
'!' : 'dash,dot,dash,dot,dash,dash',
':' : 'dash,dash,dash,dot,dot,dot',
';' : 'dash,dot,dash,dot,dash,dot',
'/' : 'dash,dot,dot,dash,dot',
'=' : 'dash,dot,dot,dot,dash',
'+' : 'dot,dash,dot,dash,dot',
'-' : 'dash,dot,dot,dot,dot,dash' }
# -------------------------------------------------------------------
# ---- directory entry exists?
# -------------------------------------------------------------------
def checkKey(dict,k):
if k in dict:
return True
return False
# -------------------------------------------------------------------
# ---- main
# -------------------------------------------------------------------
if __name__ == '__main__':
def verifyList(abc):
print()
print('verify abc dictionary only contains . or -')
err = 0
for k,v in abc.items():
lst = list(v)
for x in lst:
if x == '.' or x == '-':
continue
print(f'error in key="{k}" value="{v}"')
err += 1
print()
print(f'{err} dot/dash errors found')
while(True):
# ---- ask the user for input
print()
s = ui.get_user_input('Enter text: ')
if not s: # empty string?
break
# ---- process each character after converting to uppercase
for c in list(s.upper()):
if not checkKey(abc,c):
print()
print(f'key {c} not in dictionary - end program')
print()
sys.exit()
print(abc[c],end='')
print(' ',end='')
print()
print()