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