v0.1 fertig machen
This commit is contained in:
parent
793da44300
commit
2ba39a7495
101
rtxMask.py
101
rtxMask.py
@ -1,101 +0,0 @@
|
|||||||
# -*- coding: UTF-8 -*-
|
|
||||||
'''
|
|
||||||
rtx - RetroText
|
|
||||||
rtxMask: Klasse zur Verarbeitung einer Eingabemaske
|
|
||||||
by Anna Christina Naß <acn@acn.wtf>
|
|
||||||
released under GPL
|
|
||||||
'''
|
|
||||||
|
|
||||||
import glob
|
|
||||||
import logging
|
|
||||||
import config
|
|
||||||
import cept
|
|
||||||
|
|
||||||
class rtxMask:
|
|
||||||
""" Klasse zur Verarbeitung einer Eingabemaske
|
|
||||||
"""
|
|
||||||
|
|
||||||
lines = []
|
|
||||||
answers = []
|
|
||||||
|
|
||||||
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 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 _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 _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 += " "
|
|
||||||
|
|
||||||
zeile = zeile[:pos-1] + char + zeile[pos:]
|
|
||||||
answers[line] = zeile
|
|
||||||
|
|
||||||
def process_input(self):
|
|
||||||
""" reads the input from the client, fills the mask and gets the input """
|
|
||||||
|
|
||||||
if len(lines) == 0:
|
|
||||||
logging.debug("Keine Zeilen in der Maske definiert!")
|
|
||||||
return False
|
|
||||||
|
|
||||||
# position the cursor into the first field
|
|
||||||
self._pos_cur_to_line(lines[1])
|
|
||||||
posx = 1 # cursor position inside the line
|
|
||||||
posy = 0 # the current line
|
|
||||||
|
|
||||||
weiter = True
|
|
||||||
# read input and interpret it
|
|
||||||
while weiter==True:
|
|
||||||
#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:
|
|
||||||
# TODO: weiter in nächster Zeile
|
|
||||||
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
|
|
||||||
# dafür aber die Konstruktion von lines nochmal umbauen, um auf "length" zugreifen zu können...
|
|
||||||
|
|
||||||
glob.ser.write(bytes(echostr, "latin-1"))
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user