|
|
1.1 root 1: .TH BITMAP 1 "29 January 1986" "X Version 10"
2: .SH NAME
3: bitmap \- bitmap editor for X window system
4:
5: .SH SYNOPSIS
6: .B bitmap
7: filename [\fIdimensions\fP] [\fIhost\fP:\fIdisplay\fP] [=\fIgeometry\fP]
8:
9: .SH DESCRIPTION
10:
11: .I bitmap
12: lets you interactively create small bitmaps, or edit previously created
13: bitmaps. A bitmap is a small picture, represented as a rectangular
14: array of 0 and 1 bits. The X window system uses bitmaps to represent
15: cursors and icons, among other things.
16:
17: When you run
18: .I bitmap,
19: you are given a magnified version of the bitmap, with each
20: pixel blown up into a large square, like a piece of graph paper. You
21: can then use the mouse to set, clear, or invert individual pixels, and
22: can invoke commands to set, clear or invert larger rectangular areas of
23: the bitmap. Other commands allow you to move or copy rectangular areas
24: from one part of the bitmap to another, and to define a `hot spot'--a
25: special single point on the bitmap, which is useful when the bitmap is
26: used as an X cursor.
27:
28: The output of the
29: .I bitmap
30: program is a small program fragment. By #include'ing such a program
31: fragment in your C program, you can easily declare the size and contents
32: of cursors, icons, and other bitmaps that your program creates to deal
33: with the X window system.
34:
35: When
36: .I bitmap
37: starts, it first tries to read the specified file
38: (see FILE FORMAT). If the file already exists, it
39: creates a window containing a grid of the
40: appropriate dimensions.
41:
42: If the file does not exist,
43: .I bitmap
44: will create a window for a
45: bitmap of the size specified by
46: .I dimensions
47: , which should be two
48: numbers separated by the letter `x' (e.g. 7x9, 13x21). The first number
49: is the bitmap's width; the second is its height. The bitmap will start
50: out empty. If no dimensions are specified on the command line, a
51: 16x16 bitmap will be created. The absolute limit is 99x99; the practical
52: limit is somewhat lower, and depends on the size and resolution of your
53: display.
54:
55: .I bitmap
56: accepts two other optional command line arguments. You may specify a
57: display name in the form \fIhost\fP:\fIdisplay\fP (see \fIX(1)\fP).
58: And you may provide
59: a geometry specification. If you don't give a geometry specification,
60: .I bitmap
61: will ask you where you want to put the window when it starts up. See
62: .I X(1)
63: for a full explanation.
64:
65: The window that
66: .I bitmap
67: creates has four parts. The largest
68: section is the checkerboard grid, which is a magnified version of the
69: bitmap you are editing. At the upper left is a set of commands that you
70: can invoke with any mouse button. Below the commands is an "actual size"
71: picture of the bitmap you are editing; below that is an inverted
72: version of the same bitmap. Each time you change the grid, the same
73: change will occur in the actual-size bitmap and its inverse.
74:
75: If you use a window manager to make the
76: .I bitmap
77: window larger or smaller, the grid squares will automatically
78: get larger or smaller as well.
79:
80: .SH COMMANDS
81:
82: (Note for users of color displays: In all of the following,
83: ``white'' means the background color, and ``black'' means the
84: foreground color. You may specify a foreground and background
85: color in your \fI.Xdefaults\fP file; see the X DEFAULTS section below.)
86:
87: When the cursor is in the checkerboard region, each mouse button has
88: a different effect upon the single square that the cursor is over.
89:
90: The
91: .I left mouse button
92: turns a grid square black and sets the corresponding
93: bitmap bit to 1.
94:
95: The
96: .I right mouse button
97: turns a grid square white and sets the corresponding
98: bitmap bit to 0.
99:
100: The
101: .I middle mouse button
102: inverts a grid square, turning it white if it was
103: black, or black if it was white. It also inverts the corresponding bitmap
104: bit, setting it to 0 if it was 1, and to 1 if it was 0.
105:
106: You can also invoke more sophisticated commands by moving the mouse over
107: one of the command boxes at the upper right corner, and pressing any
108: mouse button.
109:
110: .PP
111: .TP 8
112: .I Clear All
113: turns all the grid squares white and
114: sets all bitmap bits to 0. This is irreversible, so invoke it with care.
115:
116: .PP
117: .TP 8
118: .I Set All
119: turns all the grid squares black and sets all bitmap bits to 1.
120: This is also irreversible.
121:
122: .PP
123: .TP 8
124: .I Invert All
125: inverts all the grid squares and bitmap bits, as if you had pressed
126: the middle mouse button over each square.
127:
128: .PP
129: .TP 8
130: .I Clear Area
131: clears a rectangular area of the grid, turning it white and setting the
132: corresponding bitmap bits to 0. After you click over this command, the
133: cursor turns into an `upper-left corner'. Press any mouse button over the
134: upper-left corner of the area you want to invert, and
135: .I hold the button down
136: while moving the mouse to the lower-right corner of the area you
137: want to invert, then let the button up.
138:
139: While you are holding down the button, the selected area will be
140: covered with X's, and the cursor will change to a `lower-right corner'.
141: If you now wish to abort the command without clearing an area, either press
142: another mouse button, move the cursor outside the grid, or move the
143: cursor to the left of or above the upper-left corner.
144:
145: .PP
146: .TP 8
147: .I Set Area
148: turns a rectangular area of the grid black and sets the corresponding
149: bitmap bits to 1. It works the same way as the
150: .I Clear Area
151: command.
152:
153: .PP
154: .TP 8
155: .I Invert Area
156: inverts a rectangular area of
157: the grid. It works the same way as the
158: .I Clear Area
159: command.
160:
161: .PP
162: .TP 8
163: .I Copy Area
164: copies a rectangular area from
165: one part of the grid to another. First, you select the rectangle to be
166: copied, in the manner described under
167: .I Clear Area
168: above. Then, the
169: cursor will change to an "upper-left corner". When you press a mouse
170: button, a destination rectangle will overlay the grid; moving the mouse
171: while holding down the button will move this destination rectangle. The
172: copy will occur when you let up the button. To cancel the copy, move
173: the mouse outside the grid and then let up the button.
174: .PP
175: .TP 8
176: .I Move Area
177: works identically to
178: .I Copy Area, except
179: that it clears the source rectangle after copying to the destination.
180:
181: .PP
182: .TP 8
183: .I Line
184: will draw a line between two points.
185:
186: .PP
187: .TP 8
188: .I Circle
189: will draw a circle specifying the center and a radius
190:
191: .PP
192: .TP 8
193: .I Filled Circle
194: will draw a filled circle given the center and radius of the circle.
195: .PP
196: .TP 8
197: .I Set Hotspot
198: designates a point on the bitmap as the "hot spot". If a program
199: is using your bitmap as a cursor, the hot spot indicates which point on
200: the bitmap is the "actual" location of the cursor. For instance, if
201: your cursor is an arrow, the hot spot should be the tip of the arrow; if
202: your cursor is a cross, the hot spot should be where the perpendicular
203: lines intersect.
204:
205: .PP
206: .TP 8
207: .I Clear Hotspot
208: removes any hot spot that was defined on this bitmap.
209:
210: .PP
211: .TP 8
212: .I Write Output
213: writes the current bitmap value to the
214: file specified in the original command line. If the file already
215: exists, the original file is first renamed to
216: .B filename~
217: (in the manner of \fIemacs(1)\fP and other text editors).
218:
219: If either the renaming or the writing cause an error (e.g.
220: ``Permission denied'), a Macintosh-style dialog window will appear, asking
221: if you want to write the file \fI/tmp/filename\fP instead. If you say yes,
222: all future ``Write Output'' commands will write to \fI/tmp/filename\fP as well.
223: See below for the format of the output file.
224:
225: .PP
226: .TP 8
227: .I Quit
228: exits the
229: .I bitmap
230: program. If you have edited
231: the bitmap and have not invoked
232: .I Write Output,
233: or you have edited it
234: since the last time you invoked
235: .I Write Output,
236: a Macintosh-style dialog
237: window will appear, asking if you want to save changes before quitting.
238: ``Yes'' does a ``Write Output'' before exiting; ``No'' just exits, losing
239: the edits; ``Cancel'' means you decided not to quit after all.
240:
241:
242: .SH FILE FORMAT
243:
244: \fIBitmap\fP reads and writes files in the following format,
245: which is suitable for #include'ing in a C program:
246: .nf
247: #define foo_width 9
248: #define foo_height 13
249: #define foo_x_hot 4
250: #define foo_y_hot 6
251: static short foo_bits[] = {
252: 0x0010, 0x0038, 0x007c, 0x0010,
253: 0x0010, 0x0010, 0x01ff, 0x0010,
254: 0x0010, 0x0010, 0x007c, 0x0038,
255: 0x0010};
256: .fi
257:
258: The variables ending with
259: .I _x_hot
260: and
261: .I _y_hot
262: are optional; they will be present only if a hot spot has been
263: defined for this bitmap. The other variables must be present.
264:
265: In place of ``foo'', the five variables will be prefixed
266: with a string derived from the name of the file that you specified
267: on the original command line by
268: (1) deleting the directory path (all characters up to and including
269: the last `/', if one is present)
270: (2) deleting the extension (the first `.', if one is present,
271: and all characters beyond it)
272:
273: For example, invoking
274: .I bitmap
275: with filename
276: .I /usr/include/bitmaps/cross.bitmap
277: will produce a file with variable
278: names
279: .I cross_width, cross_height,
280: and
281: .I cross_bits
282: (and
283: .I cross_x_hot
284: and
285: .I cross_y_hot
286: if a hot spot is defined).
287:
288: It's easy to define a bitmap or cursor in an X program by simply #include'ing
289: a bitmap file and referring to its variables. For instance, to use a cursor
290: defined in the files
291: .I this.cursor
292: and
293: .I this_mask.cursor,
294: one simply writes
295: .sp
296: .nf
297: #include "this.cursor"
298: #include "this_mask.cursor"
299: XCreateCursor (this_width, this_height, this_bits, this_mask_bits,
300: this_x_hot, this_y_hot, foreground, background, func);
301: .sp
302: .fi
303: where
304: .I foreground
305: and
306: .I background
307: are color values, and
308: .I func
309: is a display function (normally GXcopy).
310:
311: An X program can also read a bitmap file at runtime by using the function
312: .I XReadBitmapFile.
313:
314: .SH X DEFAULTS
315: .PP
316: .PP
317: .TP 8
318: .B Background
319: The window's background color. Bits which are 0 in the bitmap are
320: displayed in this color. This option is useful only on color
321: displays. Default: white.
322: .PP
323: .TP 8
324: .B Border
325: The border color. This option is useful only on color displays.
326: Default: black.
327: .PP
328: .TP 8
329: .B BorderWidth
330: The border width. Default: 3.
331: .PP
332: .TP 8
333: .B BodyFont
334: The text font. Default: vtsingle.
335: .PP
336: .TP 8
337: .B Foreground
338: The foreground color. Bits which are 1 in the bitmap are
339: displayed in this color. This option is useful only on color
340: displays. Default: black.
341: .PP
342: .TP 8
343: .B Highlight
344: The highlight color.
345: .I bitmap
346: uses this color to show the hot spot and to indicate rectangular areas
347: that will be affected by the
348: .I Move Area, Copy Area, Set Area, Clear Area,
349: and
350: .I Invert Area
351: commands. If a highlight color is not given, then
352: .I bitmap
353: will highlight by inverting. This option is useful only on color displays.
354:
355: .PP
356: .TP 8
357: .B Mouse
358: The mouse cursor's color. This option is useful only on color displays.
359: Default: black.
360:
361: .SH ENVIRONMENT
362: DISPLAY - the default host and display number.
363:
364: .SH SEE ALSO
365: X(1), Xlib Documentation.
366:
367:
368: .SH DIAGNOSTICS
369:
370: The following messages may be displayed in the C-shell that you invoked
371: .I bitmap
372: with. Any of these conditions aborts
373: .I bitmap
374: before it can create its window.
375:
376:
377: ``bitmap: could not connect to X server on \fIhost\fP:\fIdisplay\fP''
378:
379: Either the display given on the command line or the DISPLAY
380: environment variable has an invalid host name or display number, or
381: the host is down, or the host is unreachable, or the host is not
382: running an X server, or the host is refusing connections.
383:
384: ``bitmap: no file name specified''
385:
386: You invoked
387: .I bitmap
388: with no command line arguments. You must give a
389: file name as the first argument.
390:
391:
392: ``bitmap: could not open file \fIfilename\fP for reading -- \fImessage\fP''
393:
394: The specified file exists but cannot be read, for the reason given in
395: <message> (e.g., permission denied).
396:
397:
398: ``bitmap: invalid dimensions \fIstring\fP''
399: ``bitmap: dimensions must be positive''
400:
401: The second command line argument was not a valid dimension
402: specification.
403:
404:
405: ``bitmap: file \fIfilename\fP does not have a valid width dimension''
406: ``bitmap: file \fIfilename\fP does not have a valid height dimension''
407: ``bitmap: file \fIfilename\fP has an invalid \fIn\fPth array element''
408:
409: The input file is not in the correct format; the program gave up when
410: trying to read the specified data.
411:
412:
413: The following messages may be displayed in the C-shell after \fIbitmap\fP
414: creates its window:
415:
416: ``bitmap: Unrecognized variable \fIname\fP in file \fIfilename\fP''
417:
418: .I bitmap
419: encountered a variable ending in something other than
420: .I _x_hot, _y_hot, _width,
421: or
422: .I _height
423: while parsing the input file. It will ignore this variable and
424: continue parsing the file.
425:
426:
427: ``bitmap: XError: \fImessage\fP''
428: ``bitmap: XIOError''
429:
430: A protocol error occurred. Something is wrong with either the X server
431: or the X library which the program was compiled with. Possibly they are
432: incompatible. If the server is not on the local host, maybe the
433: connection broke.
434:
435:
436: .SH BUGS
437: Doesn't take enough command line options yet. Most options can be
438: specified only through .\fIXdefaults\fP.
439:
440: If you move the mouse too fast while holding a mouse button down,
441: some squares may be `missed'. This is caused by limitations in how
442: frequently the X server can sample the mouse location.
443:
444: There is no way to write to a file other than that specified on the
445: command line.
446:
447: There is no way to change the size of the bitmap once the program
448: is started.
449:
450: Edits are unrecoverably lost if you terminate the program with a ^C
451: or ^\ in the shell which invoked it, or if you kill it with the shell's
452: ``kill'' command.
453:
454: Dimensions greater than 99 are not read properly from the command
455: line or input file. Generally such dimensions would not be useful anyway,
456: since they would produce a window larger than most displays.
457:
458: .SH AUTHOR
459: Copyright (c) 1986 by Massachusetts Institute of Technology.
460: .br
461: Ron Newman, MIT Project Athena
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.