File: vt100win.py

package info (click to toggle)
python1.5 1.5.2-23.3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 13,244 kB
  • ctags: 36,908
  • sloc: ansic: 97,127; python: 90,600; makefile: 2,676; lisp: 2,356; sh: 808
file content (78 lines) | stat: -rwxr-xr-x 1,962 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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.charwidth = stdwin.textwidth('m')
		self.lineheight = stdwin.lineheight()
		self.docwidth = self.width * self.charwidth
		self.docheight = self.height * self.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.window.change(((-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 = self.lineheight
		cw = self.charwidth
		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 not self.window: return
		if self.y != self.last_y:
			self.window.change((0, self.last_y * self.lineheight),
				  (self.width*self.charwidth,
				  (self.last_y+1) * self.lineheight))
		self.last_x = self.x
		self.last_y = y
		self.window.change((0, self.y * self.lineheight),
			  (self.width*self.charwidth,
			  (self.y+1) * self.lineheight))

	def send(self, str):
		VT100.send(self, str)
##		self.show()