|
|
1.1 root 1: % Copyright Barbara Liskov 1985, 1986
2:
3: x_cursor = cluster is none, create, cons, scons, destroy, shape,
4: get_id, equal, similar, copy
5:
6: rep = int
7:
8: none = proc () returns (cvt)
9: return(0)
10: end none
11:
12: create = proc (image, mask: x_bitmap, fore, back, xoff, yoff, func: int)
13: returns (cvt) signals (error(string))
14: x_buf$setup(x_storecursor, func, 0, 0)
15: x_buf$set_l0s23(b2i(image), fore, back)
16: x_buf$set_l2s67(b2i(mask), xoff, yoff)
17: x_buf$receive()
18: resignal error
19: return(x_buf$get_lp0())
20: end create
21:
22: cons = proc (width, height: int, image, mask: _wordvec, fore, back: int,
23: xoff, yoff, func: int) returns (x_cursor) signals (error(string))
24: z: int := ((width + 15) / 16) * height * 2
25: x_buf$setup(x_storebitmap, 0, 0, 0)
26: x_buf$set_s01(height, width)
27: x_buf$send_data(w2b(image), 1, z)
28: if _wordvec$size(mask) ~= 0
29: then x_buf$setup(x_storebitmap, 0, 0, 0)
30: x_buf$set_s01(height, width)
31: x_buf$send_data(w2b(mask), 1, z)
32: end
33: x_buf$receive()
34: except when error (why: string):
35: if _wordvec$size(mask) ~= 0
36: then x_buf$receive()
37: resignal error
38: end
39: end
40: img: x_bitmap := _cvt[int, x_bitmap](x_buf$get_lp0())
41: msk: x_bitmap := _cvt[int, x_bitmap](0)
42: if _wordvec$size(mask) ~= 0
43: then x_buf$receive()
44: resignal error
45: msk := _cvt[int, x_bitmap](x_buf$get_lp0())
46: end
47: cursor: x_cursor := create(img, msk, fore, back, xoff, yoff, func)
48: resignal error
49: x_bitmap$destroy(img)
50: if _wordvec$size(mask) ~= 0
51: then x_bitmap$destroy(msk) end
52: return(cursor)
53: end cons
54:
55: scons = proc (width, height: int, image, mask: string, fore, back: int,
56: xoff, yoff, func: int) returns (x_cursor) signals (error(string))
57: img: _bytevec := _bytevec$create(string$size(image))
58: for i: int in int$from_to_by(1, string$size(image), 2) do
59: img[i] := image[i + 1]
60: img[i + 1] := image[i]
61: end
62: msk: _bytevec := _bytevec$create(string$size(mask))
63: for i: int in int$from_to_by(1, string$size(mask), 2) do
64: msk[i] := mask[i + 1]
65: msk[i + 1] := mask[i]
66: end
67: return(cons(width, height, b2w(img), b2w(msk),
68: fore, back, xoff, yoff, func))
69: resignal error
70: end scons
71:
72: destroy = proc (cursor: cvt)
73: x_buf$setup(x_freecursor, 0, 0, 0)
74: x_buf$set_l0(cursor)
75: end destroy
76:
77: shape = proc (width, height: int) returns (int, int) signals (error(string))
78: x_buf$setup(x_queryshape, CursorShape, 0, 0)
79: x_buf$set_s01(height, width)
80: x_buf$receive()
81: resignal error
82: return(x_buf$get_sp1(), x_buf$get_sp2())
83: end shape
84:
85: get_id = proc (cursor: cvt) returns (int)
86: return(cursor)
87: end get_id
88:
89: equal = proc (cursor1, cursor2: cvt) returns (bool)
90: return(cursor1 = cursor2)
91: end equal
92:
93: similar = proc (cursor1, cursor2: cvt) returns (bool)
94: return(cursor1 = cursor2)
95: end similar
96:
97: copy = proc (cursor: cvt) returns (cvt)
98: return(cursor)
99: end copy
100:
101: end x_cursor
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.