Пример #1
0
def sendstr(text):
    concsym =False
    concword=''

    for ch in list(text):
        try:
            if key.abort_requested():
                return False
            if concsym:
                if ch == ']':
                    print('[', end='')
                    chars(concword)
                    print(']', end='')
                    sys.stdout.flush()
                    concsym =False
                    concword=''
                else:
                    concword=concword + ch
            else:
                if ch == '[':
                    concsym =True
                    concword=''
                else:
                    chars(ch)

        except KeyboardInterrupt:
            key.space()
            return False

    return True
Пример #2
0
def speedstr():
    if speed_unit == 'CPM':
        return "{:.1f}CPM".format(5.0 * key.getspeed())
    elif speed_unit == 'QRS':
        if key.dotlen < 1.0:
            return "QRS{:.3f}".format(key.dotlen)
        else:
            return "QRS{:g}".format(key.dotlen)
    else:
        return "{:.1f}WPM".format(key.getspeed())
Пример #3
0
def replay(speed, barlen=0):
    if recording:
        print("? Now recording, can't replay")
        return False

    if not (0.0 < speed and speed <= 10):
        print('? Replay speed is too fast or too slow.')
        return False

    if not tstamp:
        print('? nothing to play')
        return False

    print('Replay keying:', len(tstamp), 'marks and spaces...')
    print('(Dots or marks longer than', maxdelay, 'seconds will be trucated)')

    # setups for progress bar
    #
    if 1 <= barlen:
        progbar = utl.ProgressBar(barlen, int(len(tstamp)))
        progbar.begin()

        barstep = int(len(tstamp) / barlen / 2) + 1  # frequency of bar update
        barcount = 0

    try:
        # replay loop
        #
        for i in range(len(tstamp) - 1):
            if key.abort_requested():
                key.space()
                progbar.end(False)
                return False
            elif keystat[i] == key.PRESSED:
                key.mark()
            elif keystat[i] == key.RELEASED:
                key.space()

            if 1 <= barlen:
                barcount += 1
                if barstep < barcount:
                    progbar.update(i)
                    barcount = 0

            if 0 <= maxdelay:
                time.sleep(min(maxdelay, (tstamp[i + 1] - tstamp[i]) / speed))
            else:
                time.sleep((tstamp[i + 1] - tstamp[i]) / speed)

        if 1 <= barlen:
            # complete progressbar
            progbar.end(True)

    except KeyboardInterrupt:
        if 1 <= barlen:
            print()
        key.space()

    return True
Пример #4
0
def lettergap(gaprate=None):
    if gaprate == None:
        print('letter gap is', key.getlettergap(), 'times of dot length.')
        return True

    if not re.match(r"[0-9.]+$", gaprate) or float(gaprate) <= 0:
        return True

    key.setlettergap(float(gaprate))
    print('letter gap is set to', key.getlettergap(), 'times of dot length.')

    return True
Пример #5
0
def training(*chartypes):

    #character type
    #
    number = '0123456789'
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    symbol = '.,:?-/()"=+*@' + "'"

    letters = ''
    for ctype in chartypes:
        if ctype in 'Nn':
            letters = letters + number
        elif ctype in 'Aa':
            letters = letters + alphabet
        elif ctype in 'Ss':
            letters = letters + symbol
        else:
            for ch in ctype:
                if ch.upper() in number + alphabet + symbol:
                    letters = letters + ch

    # default character type
    #
    if letters == '':
        letters = number * 3 + alphabet * 20 + symbol
        # appearance: number:alhapet:symbol=3:20:1

    # size of test
    #
    lines = 10  # total lines
    words = 10  # words in a line
    maxwords = lines * words
    chars = 5  # characters in a word

    print('Tranining mode: transmit', maxwords, 'words with', chars,
          'letters...')
    print()
    time.sleep(5)
    print('       : ', end='')
    txt.sendstr('HR HR = ')
    print()
    for line in range(lines):
        print('{:3d}/{:3d}: '.format(line * words + 1, maxwords), end='')
        for word in range(words):
            for char in range(chars):
                if key.abort_requested() or not txt.sendstr(
                        random.choice(letters)):
                    print()
                    return True
            txt.sendstr(' ')
        print()
    print('       : ', end='')
    txt.sendstr('+')

    print()
    return True
Пример #6
0
def show(act=None):
    print('Current settings:')
    print('  Paddle and computer speed:', utl.speedstr())
    print('   Gap between every letter:', key.getlettergap(), 'of dots.')
    print('                 TX control:', 'ON' if key.tx_enable else 'OFF')
    print('                  Side tone:', 'ON' if key.beep_enable else 'OFF',
          ', freq', port.get_beepfreq(), 'Hz')
    print('               Straight key:', 'ON' if stk.getaction() else 'OFF')
    print('                Paddle type:', pdl.gettype())
    print('                Iambic Type:', 'Mode B' if pdl.modeB else 'Mode A')
    print('              Record keying:', 'ON' if mem.recording else 'OFF')
    return True
Пример #7
0
def chars(chrs):
    for ch in list(chrs):
        if ch=='>':
            key.setspeed(key.getspeed()+0.5)
            print('<'+utl.speedstr()+'>', end='')
            sys.stdout.flush()
            return
        elif ch=='<':
            key.setspeed(key.getspeed()-0.5)
            print('<'+utl.speedstr()+'>', end='')
            sys.stdout.flush()
            return
        elif ch in codetab:
            sys.stdout.write(ch.upper())
            sys.stdout.flush()
            for dd in list(codetab[ch]):
                functab[dd]()
        else:
            print(ch, end='')
            sys.stdout.flush()
            key.wspc()
    key.cspc()
Пример #8
0
def parser(line):
    # set speed of Message Keyer and Iambic Keyer
    # in WPM, CPM or QRS
    #
    if re.match(r"[0-9.]+", line):
        try:
            key.setspeed(utl.speed2float(line))
        except:
            pass  # in case of float() fails
        return True

    # change speed by +/- 0.5WPM
    #
    elif re.match(r"[<>]+$", line):
        key.setspeed(key.getspeed() + (0.5 *
                                       (line.count('>') - line.count('<'))))
        return True

    # send text message using TextKeyer module
    #
    elif re.match(r" .+", line):
        key.reset_abort_request()
        txt.sendstr(line[1:])
        return True

    # call console commands
    #
    else:
        params = re.findall(r"[^\x00-\x20]+", line)
        if params:
            cmd = params.pop(0).upper()
            if cmd in cmds.keys():
                key.reset_abort_request()
                return cmds[cmd][FN](*params)
            else:
                print("? Eh")
                return True
        else:
            return True
Пример #9
0
def action(state):
    global pressing

    # almost pass-through
    #
    if state == key.PRESSED:
        key.mark()
        key.abort_request()  # request to abort text keyer
        pressing = True
    elif state == key.RELEASED:
        key.space()
        pressing = False
Пример #10
0
def kb_send(act=None):
    def charfunc(ch):
        if ch == "\x08" or ch == "\x7f":
            txt.sendstr('[HH]')
        else:
            txt.sendstr(ch)

    print('Entering keyboard transmission mode...')
    print("    '$', <ESC> or Ctrl-C  - exit this mode.")
    print("              (or Press straight or paddle.)")
    print("    '<' or '>'            - change speed by 0.5WPM")
    print("    <BS> or <Delete>      - send [HH]")

    # start transmission
    #
    utl.with_keytyping(
        charfunc,
        lambda ch: ch == '$' or ch == "\x1b" or key.abort_requested())
    return True
Пример #11
0
port.bind(port.In_B, stk.null_action)
port.bind(port.In_C, stk.null_action)

# monitoring TX control port
# for maxcount*interval seconds
#
# If TX control port being
# activated whole continuously,
# deactivate the port.

interval = 1

# sync to timeout of sendable_dots
maxcount = max(int(key.sendable_dots * key.dotlen * 2 / interval), 1)

count = 0
while True:
    for i in (range(maxcount)):
        time.sleep(interval)
        stat = port.check_port(port.Out_T)
        if stat == 1:
            count += 1
            if maxcount <= count:
                key.space()
                count = 0
        else:
            count = 0
        sys.stdout.write(str(stat))
        sys.stdout.flush()
    print(' : {:2d}'.format(count))
Пример #12
0
def null_action(state):
    if state == key.PRESSED:
        key.abort_request()
Пример #13
0
#!/usr/bin/python3

import argparse
import sys
import InputOutputPort as port
import KeyingControl   as key
import TextKeyer       as txt

cmdopt = argparse.ArgumentParser()
cmdopt.add_argument("-s", type=int, default=30)
cmdopt.add_argument("-f", type=int, default=500)
args = cmdopt.parse_args()

key.setspeed(args.s)
port.set_beepfreq(args.f)

# termination process
#
def terminate():
    port.terminate()
    print()
    print("Bye bye...")

# main read loop
#
try :
    for line in sys.stdin :
        if not txt.sendstr(line):
            break

    terminate()