--- nand.py- +++ nand.py @@ -5,10 +5,11 @@ import select class Obj: - def __init__(self, parent, name, latency=None): + def __init__(self, parent, name, latency=None, pos=(0,0)): self.parent = parent self.name = name self.latency = latency + self.pos = pos if parent: setattr(parent, name, self) @@ -23,6 +24,11 @@ def enque(self, f, *args): sched.enque(self.latency, f, *args) + def get_pos(self): + (px, py) = self.parent.get_pos() if self.parent else (0,0) + (x, y) = self.pos + return (px + x, py + y) + class Pin(Obj): def __init__(self, parent, name, v=None): Obj.__init__(self, parent, name) @@ -302,13 +308,26 @@ self.not_.out.conn = Pin(self, 'out') class Lamp(Obj): - def __init__(self, parent, name='lamp', latency=None): - Obj.__init__(self, parent, name, latency) + def __init__(self, parent, name='lamp', latency=None, pos=(0,0)): + Obj.__init__(self, parent, name, latency, pos) Pin(self, 'inp') def update(self): - msg = str_v( self.inp.v ) + v = self.inp.v + msg = str_v(v) self.enque( self.dbgout, (msg, True) ) + self.enque( self.show, v ) + + def show(self, v): + (x, y) = self.get_pos() + lst = [ + 'ESC[{};{}H'.format(y+1, x+1), # move + 'ESC[{}m'.format(7) if v else '', # reverse on if v + self.name, + 'ESC[{}m'.format(27) if v else '', # reverse off if v + ] + print ''.join(lst) + sys.stdout.flush() class Sched: def __init__(self):