some progress :)
This commit is contained in:
parent
0876bef079
commit
9e1ee97095
201
rtxMask.py
201
rtxMask.py
@ -12,104 +12,141 @@ import config
|
||||
import cept
|
||||
|
||||
class rtxMask:
|
||||
""" Klasse zur Verarbeitung einer Eingabemaske
|
||||
"""
|
||||
""" Klasse zur Verarbeitung einer Eingabemaske
|
||||
"""
|
||||
|
||||
lines = []
|
||||
answers = []
|
||||
lines = []
|
||||
answers = []
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self):
|
||||
|
||||
def addLine(x, y, length):
|
||||
""" adds a new line for the mask to the object """
|
||||
newLine['x'] = x
|
||||
newLine['y'] = y
|
||||
newLine['length'] = length
|
||||
self.lines.append(newLine)
|
||||
def addLine(x, y, length):
|
||||
""" adds a new line for the mask to the object """
|
||||
newLine['x'] = x
|
||||
newLine['y'] = y
|
||||
newLine['length'] = length
|
||||
self.lines.append(newLine)
|
||||
|
||||
def get_answer(self, nr):
|
||||
""" returns the answer for a specific line """
|
||||
if nr >= 0 and nr <= len(self.answers):
|
||||
return self.answers[nr]
|
||||
else
|
||||
return False
|
||||
def get_answer(self, nr):
|
||||
""" returns the answer for a specific line """
|
||||
if nr >= 0 and nr <= len(self.answers):
|
||||
return self.answers[nr]
|
||||
else
|
||||
return False
|
||||
|
||||
def get_answers(self):
|
||||
""" returns the array of all answers """
|
||||
return self.answers
|
||||
def get_answers(self):
|
||||
""" returns the array of all answers """
|
||||
return self.answers
|
||||
|
||||
def _pos_cur_to_line(self, line):
|
||||
""" positions the cursor to the beginning of a line """
|
||||
zeile=self.lines[line]
|
||||
self._pos_cur_to_xy(zeile['x'], zeile['y'])
|
||||
def _pos_cur_to_line(self, line):
|
||||
""" positions the cursor to the beginning of a line """
|
||||
zeile=self.lines[line]
|
||||
self._pos_cur_to_xy(zeile['x'], zeile['y'])
|
||||
|
||||
def _pos_cur_to_xy(self, x, y):
|
||||
""" positions the cursor to a (x,y) position on screen """
|
||||
toX=0x41 + x
|
||||
toY=0x41 + y
|
||||
gotoString = "\x1f" + chr(toX) + chr(toY)
|
||||
glob.ser.write(bytes(gotoString, "latin-1"))
|
||||
def _pos_cur_to_xy(self, x, y):
|
||||
""" positions the cursor to a (x,y) position on screen """
|
||||
toX=0x41 + x
|
||||
toY=0x41 + y
|
||||
gotoString = "\x1f" + chr(toX) + chr(toY)
|
||||
glob.ser.write(bytes(gotoString, "latin-1"))
|
||||
|
||||
def _set_str_at_pos(self, char, pos, line):
|
||||
""" changes the 'char' at a position 'pos' of a specific answer 'line' """
|
||||
zeile = self.answers[line]
|
||||
def _set_str_at_pos(self, char, pos, line):
|
||||
""" changes the 'char' at a position 'pos' of a specific answer 'line' """
|
||||
zeile = self.answers[line]
|
||||
|
||||
# if the line is shorter than the position, add spaces
|
||||
while len(zeile) < pos:
|
||||
zeile += " "
|
||||
# if the line is shorter than the position, add spaces
|
||||
while len(zeile) < pos:
|
||||
zeile += " "
|
||||
|
||||
zeile = zeile[:pos-1] + char + zeile[pos:]
|
||||
answers[line] = zeile
|
||||
zeile = zeile[:pos-1] + char + zeile[pos:]
|
||||
answers[line] = zeile
|
||||
"""
|
||||
def _cut_off_rest_of_line(self, line, pos):
|
||||
""" erases the rest of the line from the 'lines' variable and from the screen """
|
||||
zeile = self.answers[line]
|
||||
self.answers[line] = zeile[:pos]
|
||||
|
||||
def _cut_off_rest_of_line(self, line, pos):
|
||||
""" erases the rest of the line from the 'lines' variable and from the screen """
|
||||
zeile = self.answers[line]
|
||||
self.answers[line] = zeile[:pos]
|
||||
if zeile[pos:] != "":
|
||||
numOfSpaces = len(zeile[pos:])
|
||||
spaces = " " * numOfSpaces
|
||||
backSpaces = cept.BSP * numOfSpaces
|
||||
glob.ser.write(bytes(spaces + backSpaces, "latin-1"))
|
||||
"""
|
||||
def process_input(self):
|
||||
""" reads the input from the client, fills the mask and gets the input """
|
||||
|
||||
if zeile[pos:] != "":
|
||||
numOfSpaces = len(zeile[pos:])
|
||||
spaces = " " * numOfSpaces
|
||||
backSpaces = "\x08" * numOfSpaces
|
||||
glob.ser.write(bytes(spaces + backSpaces, "latin-1"))
|
||||
# if there have no input lines been defined, no input can be processed - so exit the function
|
||||
if len(lines) == 0:
|
||||
logging.debug("Keine Zeilen in der Maske definiert!")
|
||||
return False
|
||||
|
||||
def process_input(self):
|
||||
""" reads the input from the client, fills the mask and gets the input """
|
||||
# position the cursor into the first field
|
||||
self._pos_cur_to_line(lines[0])
|
||||
|
||||
if len(lines) == 0:
|
||||
logging.debug("Keine Zeilen in der Maske definiert!")
|
||||
return False
|
||||
posx = 0 # cursor position inside the line - max. position is length-1
|
||||
posy = 0 # the current line - max. number is len(lines)-1
|
||||
|
||||
# position the cursor into the first field
|
||||
self._pos_cur_to_line(lines[1])
|
||||
posx = 0 # cursor position inside the line - max. position is length-1
|
||||
posy = 0 # the current line - max. number is len(lines)-1
|
||||
weiter = True
|
||||
# read input and interpret it
|
||||
while weiter==True:
|
||||
# if the modem hangs up, exit the function:
|
||||
#if config.MODE == "modem" and glob.ser.getCD() == False:
|
||||
# weiter=False
|
||||
in_byte = glob.ser.read(1)
|
||||
instr = str(in_byte, encoding="latin-1")
|
||||
echostr = instr
|
||||
|
||||
weiter = True
|
||||
# read input and interpret it
|
||||
while weiter==True:
|
||||
# if the modem hangs up, exit the function:
|
||||
#if config.MODE == "modem" and glob.ser.getCD() == False:
|
||||
# weiter=False
|
||||
in_byte = glob.ser.read(1)
|
||||
instr = str(in_byte, encoding="latin-1")
|
||||
echostr = instr
|
||||
if instr == cept.TER or instr == cept.CR:
|
||||
# go to the beginning of the next line
|
||||
# or finish the mask
|
||||
if posy == len(lines)-1:
|
||||
# this was the last line, now send the data
|
||||
# TODO: weitermachen
|
||||
else:
|
||||
# go to the beginning of the next line
|
||||
posy += 1
|
||||
posx = 0
|
||||
self._pos_cur_to_line(lines[posy])
|
||||
elif instr == cept.BSP:
|
||||
answers[posy] = answers[posy][:-1]
|
||||
posx -= 1
|
||||
elif instr == cept.UP:
|
||||
# if the cursor is in the first line, we can't go higher...
|
||||
# so we ignore the keypress
|
||||
echostr = "" # no echo needed, we position the curser ourselves
|
||||
if posy > 0:
|
||||
posy -= 1
|
||||
posx = 0
|
||||
self._pos_cur_to_line(lines[posy])
|
||||
elif instr == cept.DOWN:
|
||||
# same here: last line => it can't go lower => ignore
|
||||
echostr = "" # no echo needed, we position the curser ourselves
|
||||
if posy < len(self.lines):
|
||||
posy += 1
|
||||
posx = 0
|
||||
self._pos_cur_to_line(lines[posy])
|
||||
elif instr == cept.LEFT:
|
||||
if posx > 0:
|
||||
posx -= 1
|
||||
else:
|
||||
echostr = ""
|
||||
elif instr == cept.RIGHT:
|
||||
if posx < len(answers[posy]):
|
||||
posx += 1
|
||||
else:
|
||||
echostr = ""
|
||||
elif instr == cept.SEND: # ist das DCT??
|
||||
# TODO: send data
|
||||
elif instr.isalnum():
|
||||
# "normal" input
|
||||
# TODO: lineinput == Zeilenende beachten
|
||||
self._set_str_at_pos(instr, posx, posy)
|
||||
posx += 1
|
||||
else:
|
||||
# ignore the rest and do not echo it :)
|
||||
echostr = ""
|
||||
|
||||
if instr == cept.TER or instr == cept.CR:
|
||||
if posy == len(lines)-1:
|
||||
# this was the last line, now send the data
|
||||
# TODO
|
||||
weiter = False
|
||||
elif instr.isalnum():
|
||||
self._set_str_at_pos(instr, posx, posy)
|
||||
posx += 1
|
||||
elif instr == cept.BSP:
|
||||
answers[posy] = answers[posy][:-1]
|
||||
posx -= 1
|
||||
else:
|
||||
echostr = ""
|
||||
|
||||
# lineinput == Zeilenende beachten
|
||||
|
||||
glob.ser.write(bytes(echostr, "latin-1"))
|
||||
# now send the echo
|
||||
glob.ser.write(bytes(echostr, "latin-1"))
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user