|
|
1.1 root 1: % Copyright Barbara Liskov 1985
2:
3: x_cursor = cluster is none, create, cons, 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: or: oreq, er: ereq := x_buf$get()
15: er.code := x_storecursor + (func * 2**8)
16: lr(er).l0 := b2i(image)
17: er.s2 := fore
18: or.s3 := back
19: lr(er).l2 := b2i(mask)
20: er.s6 := xoff
21: or.s7 := yoff
22: x_buf$receive()
23: resignal error
24: return(x_buf$get_lp0())
25: end create
26:
27: cons = proc (width, height: int, image, mask: _wordvec, fore, back: int,
28: xoff, yoff, func: int) returns (x_cursor) signals (error(string))
29: z: int := ((width + 15) / 16) * height * 2
30: or: oreq, er: ereq := x_buf$get()
31: er.code := x_storebitmap
32: er.s0 := height
33: or.s1 := width
34: x_buf$send_data(w2b(image), 1, z)
35: if _wordvec$size(mask) ~= 0
36: then or, er := x_buf$get()
37: er.code := x_storebitmap
38: er.s0 := height
39: or.s1 := width
40: x_buf$send_data(w2b(mask), 1, z)
41: end
42: x_buf$receive()
43: except when error (why: string):
44: if _wordvec$size(mask) ~= 0
45: then x_buf$receive()
46: resignal error
47: end
48: end
49: img: x_bitmap := _cvt[int, x_bitmap](x_buf$get_lp0())
50: msk: x_bitmap := _cvt[int, x_bitmap](0)
51: if _wordvec$size(mask) ~= 0
52: then x_buf$receive()
53: resignal error
54: msk := _cvt[int, x_bitmap](x_buf$get_lp0())
55: end
56: cursor: x_cursor := create(img, msk, fore, back, xoff, yoff, func)
57: resignal error
58: x_bitmap$destroy(img)
59: if _wordvec$size(mask) ~= 0
60: then x_bitmap$destroy(msk) end
61: return(cursor)
62: end cons
63:
64: destroy = proc (cursor: cvt)
65: or: oreq, er: ereq := x_buf$get()
66: er.code := x_freecursor
67: lr(er).l0 := cursor
68: end destroy
69:
70: shape = proc (width, height: int) returns (int, int) signals (error(string))
71: or: oreq, er: ereq := x_buf$get()
72: er.code := x_queryshape + (CursorShape * 2**8)
73: er.s0 := height
74: or.s1 := width
75: x_buf$receive()
76: resignal error
77: return(x_buf$get_sp1(), x_buf$get_sp2())
78: end shape
79:
80: get_id = proc (cursor: cvt) returns (int)
81: return(cursor)
82: end get_id
83:
84: equal = proc (cursor1, cursor2: cvt) returns (bool)
85: return(cursor1 = cursor2)
86: end equal
87:
88: similar = proc (cursor1, cursor2: cvt) returns (bool)
89: return(cursor1 = cursor2)
90: end similar
91:
92: copy = proc (cursor: cvt) returns (cvt)
93: return(cursor)
94: end copy
95:
96: end x_cursor
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.