|
|
1.1 root 1: .TH BIT 3
2: .SH NAME
3: bit \- screen graphics, mouse
4: .SH SYNOPSIS
5: .nf
6: .B bind -a #b /dev
7:
8: .B /dev/bitblt
9: .B /dev/mouse
10: .B /dev/mousectl
11: .B /dev/screen
12:
13: .ft L
14: #include <u.h>
15: #include <libg.h>
16:
17: .ta \w'ushort 'u
18: ushort BGSHORT(uchar *p)
19: ulong BGLONG(uchar *p)
20: void BPSHORT(uchar *p, ushort v)
21: void BPLONG(uchar *p, ulong v)
22: .ft P
23: .fi
24: .SH DESCRIPTION
25: The
26: .I bit
27: device provides the files
28: .BR bitblt ,
29: .BR mouse ,
30: .BR mousectl ,
31: and
32: .B screen
33: on machines with a bitmapped screen
34: and a mouse.
35: The device is exclusive use.
36: .PP
37: The
38: .I bit
39: device provides, through the
40: .B bitblt
41: file, access to
42: .IR bitmaps ,
43: .IR fonts ,
44: and
45: .I subfonts
46: in its private storage,
47: as described in
48: .IR graphics (2).
49: Each object is identified by a short, its
50: .IR id .
51: The bitmap with id zero is special: it represents the visible display.
52: The subfont with id zero is also special: it is initialized to
53: a default subfont that is always available.
54: There is no default font.
55: There is also a cursor associated with the screen;
56: it is always displayed at the current mouse position.
57: A process can write messages to
58: .B bitblt
59: to allocate and free bitmaps, fonts, and subfonts,
60: read or write portions of the bitmaps,
61: and draw line segments,
62: textures, and character strings in the bitmaps.
63: All graphics requests are clipped to their bitmaps.
64: Some messages return a response
65: to be recovered by reading
66: .BR bitblt .
67: .PP
68: The format of
69: messages written to
70: .B bitblt
71: is a single lower case letter
72: followed by binary parameters;
73: multibyte integers are transmitted with the low order byte first.
74: The
75: .B BPSHORT
76: and
77: .B BPLONG
78: macros place correctly formatted two- and four-byte integers into a character
79: buffer.
80: Some messages return a response formatted the same way;
81: it usually starts with the upper case version of the request character.
82: .B BGSHORT
83: and
84: .B BGLONG
85: retrieve values from a character buffer.
86: Points are two four-byte numbers:
87: .IR x ,
88: .IR y .
89: Rectangles are four four-byte numbers: min
90: .IR x ,
91: min
92: .IR y ,
93: max
94: .IR x ,
95: and max
96: .IR y .
97: .PP
98: The following requests are accepted by the
99: .B bitblt
100: file.
101: The numbers in brackets give the length in bytes of the parameters.
102: .HP .5i
103: .B a
104: .IR ldepth [1]
105: .IR rect [16]
106: .br
107: Allocate a bitmap.
108: .I Ldepth
109: is the log base 2 of the number of bits per pixel.
110: .I Rect
111: is a Rectangle giving the extent of the bitmap.
112: The bitmap is cleared to all zeros.
113: The id of the allocated bitmap is returned on a subsequent
114: .I read
115: from
116: .BR bitblt ,
117: returning the three bytes:
118: .L A
119: followed by the id.
120: .HP
121: .B b
122: .IR dstid [2]
123: .IR dstpt [8]
124: .IR srcid [2]
125: .IR srcrect [16]
126: .IR code [2]
127: .br
128: Bit-block transfer
129: .RB ( bitblt )
130: from a rectangle in the bitmap identified by
131: .I srcid
132: to a congruent
133: rectangle at Point
134: .B dstpt
135: in the bitmap identified by
136: .IR dstid .
137: The rectangle is clipped against both
138: source and destination bitmaps. See
139: .IR bitblt (2).
140: .HP
141: .B c
142: [
143: .IR pt [8]
144: .IR clr [32]
145: .IR set [32]
146: ]
147: .br
148: Switch mouse cursor.
149: See the description of
150: .B Cursors
151: in
152: .IR graphics (2)
153: for the meaning of the
154: .I pt
155: (the offset),
156: .IR set ,
157: and
158: .I clr
159: arguments.
160: If only
161: .L c
162: is provided \(em that is, if the message is one byte long \(em
163: the cursor changes to the default, typically an arrow.
164: .HP
165: .B e
166: .IR id [2]
167: .IR pt [8]
168: .IR value [1]
169: .IR code [2]
170: .IR n [2]
171: .IR pts [ n *2]
172: .br
173: Join the
174: .IR n +1
175: points
176: .I pt
177: and
178: .I pts
179: with
180: .I n
181: segments, exactly as for the
182: .I l
183: operator. The
184: .I pts
185: are specified by pairs of signed bytes
186: holding offsets from the previous point in the list.
187: .HP
188: .B f
189: .IR id [2]
190: .br
191: Free the resources associated with the allocated bitmap
192: identified by
193: .IR id .
194: .HP
195: .B g
196: .IR id [2]
197: .br
198: Free the resources associated with the allocated subfont identified by
199: .IR id ,
200: including its bitmap.
201: If the subfont is cached,
202: the associated data may be recoverable even after it has
203: been freed; see below.
204: .HP
205: .B h
206: .IR id [2]
207: .br
208: Free the resources associated with the allocated font identified by
209: .IR id .
210: .HP
211: .B i
212: .br
213: Initialize the device.
214: The next operation on
215: .B bitblt
216: should be a
217: .IR read (2).
218: A read of length 34 returns information about the display:
219: .RS 1i
220: .B I
221: .IR ldepth [1]
222: .IR rect [16]
223: .IR cliprect [16].
224: .RE
225: .IP
226: If the read count is large enough, the above information is followed
227: by the header and character information of the default
228: .BR Subfont ,
229: in the format expected by
230: .I rdsubfontfile
231: (see
232: .IR subfalloc (2)
233: and
234: .IR font (6)).
235: `Large enough' is 36 +
236: .RI 6 n ,
237: where
238: .I n
239: is the number of characters in the subfont.
240: The ids of the screen bitmap and default subfont are both zero.
241: .HP
242: .B j
243: .IR q0 [4]
244: .IR q1 [4]
245: .br
246: Check to see whether a subfont with tags
247: .I q0
248: and
249: .I q1
250: is in the cache.
251: If it is not, the write of the
252: .B j
253: message will draw an error.
254: If it is, the next read of
255: .B bitblt
256: will return
257: .RS 1i
258: .B J
259: .IR id [2]
260: .RE
261: .IP
262: followed by the subfont information in the same format
263: as returned by an init message; the subfont will then be available
264: for use.
265: .HP
266: .B k
267: .IR n [2]
268: .IR height [1]
269: .IR ascent [1]
270: .IR bitmapid [2]
271: .IR q0 [4]
272: .IR q1 [4]
273: .IR info [6*( n +1)]
274: .br
275: Allocate subfont.
276: The parameters are as described in
277: .IR subfalloc (2),
278: with
279: .I info
280: in external subfont file format.
281: .I Bitmapid
282: identifies a previously allocated bitmap containing the character images.
283: .I Q0
284: and
285: .I q1
286: are used as labels for the subfont in the cache; if all ones,
287: the subfont will not be cached and hence shared with other applications.
288: The id of the allocated subfont is recovered by reading
289: from
290: .B bitblt
291: the three bytes:
292: .L K
293: followed by the id.
294: Henceforth, the bitmap with id
295: .I bitmapid
296: is unavailable to the application; in effect, it has been freed.
297: .HP
298: .B l
299: .IR id [2]
300: .IR pt1 [8]
301: .IR pt2 [8]
302: .IR value [1]
303: .IR code [2]
304: .br
305: Draw a line segment from Point
306: .I pt1
307: to Point
308: .IR pt2 ,
309: using
310: .I code
311: for the drawing function, and
312: .I value
313: as the source pixel. See
314: .I segment
315: in
316: .IR bitblt (2).
317: .I Id
318: identifies the destination bitmap.
319: .HP
320: .B m
321: .IR id [2]
322: .br
323: Read the colormap associated with the bitmap with the specified
324: .IR id .
325: The next read of
326: .B bitblt
327: will return
328: .if t 12×2\u\s-2\fIn\fP\s+2\d
329: .if n 12*2^\fIn\fP
330: bytes of colormap data where
331: .I n
332: is the number of bits per pixel in the bitmap.
333: .HP
334: .B n
335: .IR height [1]
336: .IR ascent [1]
337: .IR ldepth [2]
338: .IR ncache [2]
339: .br
340: Allocate a font with the given
341: .IR height ,
342: .IR ascent ,
343: and
344: .IR ldepth .
345: The id of the allocated font is recovered by reading
346: from
347: .B bitblt
348: the three bytes:
349: .L N
350: followed by the id.
351: The initial cache associated with the font will have
352: .I ncache
353: character entries of zero width.
354: .HP
355: .B p
356: .IR id [2]
357: .IR pt [8]
358: .IR value [1]
359: .IR code [2]
360: .br
361: Change the pixel at Point
362: .I pt
363: using
364: .I code
365: for the drawing function, and
366: .I value
367: as the source pixel. See
368: .I point
369: in
370: .IR bitblt (2).
371: .HP
372: .B q
373: .IR id [2]
374: .IR rect [16]
375: .br
376: Set the clipping rectangle for the bitmap with specified
377: .I id
378: to the given rectangle, which will itself be clipped to the
379: bitmap's image rectangle.
380: .HP
381: .B r
382: .IR id [2]
383: .IR miny [4]
384: .IR maxy [4]
385: .br
386: Read rows
387: .IR ymin ,
388: .IR ymin "+1, ..."
389: .IR ymax \-1
390: of the bitmap with the given bitmap id.
391: See the description of
392: .I rdbitmap
393: in
394: .IR balloc (2).
395: A subsequent read of
396: .B bitblt
397: will return the requested rows of pixels.
398: Note: in this case, the response does not begin with an
399: .LR R ,
400: to simplify the reading of large bitmaps.
401: Also, the reply may be too large to fit in a single 9P message (see
402: .IR read (5)),
403: so multiple reads may be necessary; each read will return
404: only complete rows.
405: .HP
406: .B s
407: .IR id [2]
408: .IR pt [8]
409: .IR fontid [2]
410: .IR code [2]
411: .IR n [2]
412: .IR indices [2* n ]
413: .br
414: Draw using code
415: .I code
416: in the bitmap identified by
417: .I id
418: the text string
419: specified by the
420: .I n
421: cache
422: .I indices
423: in font
424: .IR fontid ,
425: starting with the upper left corner at
426: .IR pt .
427: .HP
428: .B t
429: .IR dstid [2]
430: .IR rect [16]
431: .IR srcid [2]
432: .IR code [2]
433: .br
434: Texture the given rectangle in the bitmap
435: identified by
436: .I dstid
437: by overlaying a tiling
438: of the bitmap identified by
439: .I srcid
440: (aligning (0,0) in the two bitmaps), and using
441: .I code
442: as a drawing code for
443: .IR bitblt ;
444: see
445: .I texture
446: in
447: .IR bitblt (2).
448: .HP
449: .B v
450: .IR id [2]
451: .IR ncache [2]
452: .IR width [2]
453: .br
454: Reset, resize, and clear the cache for font
455: .IR id ;
456: the maximum width of the
457: .I ncache
458: characters the cache may hold is set to
459: .IR width .
460: Must be done before the first load of a cache slot.
461: If the cache cannot be resized, the write of this message
462: will fail but the cache will be unaffected.
463: .HP
464: .B w
465: .IR id [2]
466: .IR miny [4]
467: .IR maxy [4]
468: .IR data [ n ]
469: .br
470: Replace rows
471: .IR ymin ,
472: .IR ymin "+1, ..."
473: .IR ymax \-1
474: of the bitmap with the given bitmap
475: .I id
476: with the values in
477: .IR data .
478: See the description of
479: .I wrbitmap
480: in
481: .IR balloc (2).
482: .HP
483: .B x
484: .IR x [4]
485: .IR y [4]
486: .br
487: Move the cursor so its origin is at
488: .RI ( x , y ).
489: .HP
490: .B y
491: .IR id [2]
492: .IR cacheindex [2]
493: .IR subfontid [2]
494: .IR subfontindex [2]
495: .br
496: Load the description and image of character
497: .I subfontindex
498: in subfont
499: .I subfontid
500: into slot
501: .I cacheindex
502: of font
503: .IR id .
504: .HP
505: .B z
506: .IR id [2]
507: .IR map [ m ]
508: .br
509: Replace the colormap associated with bitmap
510: .I id
511: with
512: .IR map ,
513: which contains
514: .if t \fIm\fP=12\(mu2\u\s-2\fIn\fP\s+2\d
515: .if n \fIm\fP=12*2^\fIn\fP
516: bytes of colormap data (see
517: .IR rgbpix (2)
518: for the format).
519: .PP
520: A read of the
521: .B mouse
522: file returns the mouse status: its position and button state.
523: The read blocks until the state has changed since the last read.
524: The read returns 14 bytes:
525: .RS
526: .B m
527: .IR buttons [1]
528: .IR x [4]
529: .IR y [4]
530: .IR msec [4]
531: .RE
532: where
533: .I x
534: and
535: .I y
536: are the mouse coordinates in the screen bitmap,
537: .I msec
538: is a time stamp, in units of milliseconds, and
539: .I buttons
540: has set the 1, 2, and 4 bits when the mouse's left, middle, and right
541: buttons, respectively, are down.
542: .PP
543: Writing to the
544: .B mousectl
545: file configures and controls the mouse.
546: The messages are:
547: .IP
548: .B serial \fIn\fR
549: sets serial port
550: .I n
551: to be the mouse port.
552: .IP
553: .B ps2
554: sets the PS2 port to be the mouse port.
555: .IP
556: .B accelerated
557: turns on mouse acceleration.
558: .IP
559: .B linear
560: turns off mouse acceleration
561: .IP
562: .B res \fIn\fR
563: sets mouse resolution to a setting between 0 and
564: 3 inclusive.
565: .IP
566: .B swap
567: swaps the left and right buttons on the mouse.
568: .br
569: Which messages are implemented is machine-dependent.
570: .PP
571: The
572: .B screen
573: file contains the screen bitmap in the format described in
574: .IR bitmap (6).
575: .SH SOURCE
576: .B /sys/src/9/port/devbit.c
577: .SH DIAGNOSTICS
578: Most messages to
579: .B bitblt
580: can return errors;
581: these can be detected by a system call error
582: on the
583: .IR write (see
584: .IR read (2))
585: of the data containing the erroneous message.
586: The most common error is a failure to allocate
587: because of insufficient free resources. Most other errors occur
588: only when the protocol is mishandled by the application.
589: .IR Errstr (2)
590: will report details.
591: .SH BUGS
592: Because each message must fit in a single 9P message,
593: subfonts are limited to about 1300 characters.
594: .br
595: Can only change the color map of bitmap 0.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.