summaryrefslogtreecommitdiffstats
path: root/Demo/cwilib/vt100win.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/cwilib/vt100win.py')
-rwxr-xr-xDemo/cwilib/vt100win.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/Demo/cwilib/vt100win.py b/Demo/cwilib/vt100win.py
new file mode 100755
index 0000000..dcaf17b
--- /dev/null
+++ b/Demo/cwilib/vt100win.py
@@ -0,0 +1,68 @@
+# VT100 terminal emulator in a STDWIN window.
+
+import stdwin
+from stdwinevents import *
+from vt100 import VT100
+
+class VT100win(VT100):
+
+ def __init__(self):
+ VT100.__init__(self)
+ self.window = None
+## self.last_x = -1
+## self.last_y = -1
+
+ def __del__(self):
+ self.close()
+
+ def open(self, title):
+ stdwin.setfont('7x14')
+ self.docwidth = self.width * stdwin.textwidth('m')
+ self.docheight = self.height * stdwin.lineheight()
+ stdwin.setdefwinsize(self.docwidth + 2, self.docheight + 2)
+ stdwin.setdefscrollbars(0, 0)
+ self.window = stdwin.open(title)
+ self.window.setdocsize(self.docwidth + 2, self.docheight + 2)
+
+ def close(self):
+ if self.window:
+ self.window.close()
+ self.window = None
+
+ def show(self):
+ if not self.window: return
+ self.draw(((-10, -10), (self.docwidth+10, self.docheight+10)))
+
+ def draw(self, detail):
+ d = self.window.begindrawing()
+ fg = stdwin.getfgcolor()
+ red = stdwin.fetchcolor('red')
+ d.cliprect(detail)
+ d.erase(detail)
+ lh = d.lineheight()
+ cw = d.textwidth('m')
+ for y in range(self.height):
+ d.text((0, y*lh), self.lines[y].tostring())
+ if self.attrs[y] <> self.blankattr:
+ for x in range(len(self.attrs[y])):
+ if self.attrs[y][x] == 7:
+ p1 = x*cw, y*lh
+ p2 = (x+1)*cw, (y+1)*lh
+ d.invert((p1, p2))
+ x = self.x * cw
+ y = self.y * lh
+ d.setfgcolor(red)
+ d.invert((x, y), (x+cw, y+lh))
+ d.setfgcolor(fg)
+ d.close()
+
+## def move_to(self, x, y):
+## VT100.move_to(self, x, y)
+## if self.y != self.last_y:
+## self.show()
+## self.last_x = self.x
+## self.last_y = y
+
+ def send(self, str):
+ VT100.send(self, str)
+ self.show()