|
||||
File indexing completed on 2025-01-18 10:14:42
0001 #ifndef __XCB_IMAGE_H__ 0002 #define __XCB_IMAGE_H__ 0003 0004 /* Copyright (C) 2007 Bart Massey 0005 * 0006 * Permission is hereby granted, free of charge, to any person obtaining a 0007 * copy of this software and associated documentation files (the "Software"), 0008 * to deal in the Software without restriction, including without limitation 0009 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 0010 * and/or sell copies of the Software, and to permit persons to whom the 0011 * Software is furnished to do so, subject to the following conditions: 0012 * 0013 * The above copyright notice and this permission notice shall be included in 0014 * all copies or substantial portions of the Software. 0015 * 0016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 0017 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 0018 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 0019 * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 0020 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 0021 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 0022 * 0023 * Except as contained in this notice, the names of the authors or their 0024 * institutions shall not be used in advertising or otherwise to promote the 0025 * sale, use or other dealings in this Software without prior written 0026 * authorization from the authors. 0027 */ 0028 0029 #include <xcb/xcb.h> 0030 #include <xcb/shm.h> 0031 0032 0033 #ifdef __cplusplus 0034 extern "C" { 0035 #endif 0036 0037 0038 /** 0039 * @defgroup xcb__image_t XCB Image Functions 0040 * 0041 * These are functions used to create and manipulate X images. 0042 * 0043 * The X image format we use is specific to this software, 0044 * which is probably a bug; it represents an intermediate 0045 * position between the wire format used by the X GetImage 0046 * and PutImage requests and standard formats like PBM. An 0047 * image consists of a header of type @ref xcb_image_t 0048 * describing the properties of the image, together with a 0049 * pointer to the image data itself. 0050 * 0051 * X wire images come in three formats. An xy-bitmap is a 0052 * bit-packed format that will be expanded to a two-color 0053 * pixmap using a GC when sent over the wire by PutImage. 0054 * An xy-pixmap is one or more bit-planes, each in the same 0055 * format as xy-bitmap. A z-pixmap is a more conventional 0056 * pixmap representation, with each pixel packed into a 0057 * word. Pixmaps are sent and received over the wire only 0058 * to/from drawables of their depth. 0059 * 0060 * Each X server defines, for each depth and format, 0061 * properties of images in that format that are sent and 0062 * received on the wire. We refer to this as a "native" 0063 * image for a given X server. It is not uncommon to want 0064 * to work with non-native images on the client side, or to 0065 * convert between the native images of different servers. 0066 * 0067 * This library provides several things. Facilities for 0068 * creating and destroying images are, of course, provided. 0069 * Wrappers for xcb_get_image() and xcb_put_image() are 0070 * provided; these utilize the image header to simplify the 0071 * interface. Routines for getting and putting image pixels 0072 * are provided: both a generic form that works with 0073 * arbitrary images, and fastpath forms for some common 0074 * cases. Conversion routines are provided for X images; 0075 * these routines have been fairly well optimized for the 0076 * common cases, and should run fast even on older hardware. 0077 * A routine analogous to Xlib's XCreate*FromBitmapData() is 0078 * provided for creating X images from xbm-format data; this 0079 * routine is in this library only because it is a trivial 0080 * use case for the library. 0081 * 0082 * @{ 0083 */ 0084 0085 0086 typedef struct xcb_image_t xcb_image_t; 0087 0088 /** 0089 * @struct xcb_image_t 0090 * A structure that describes an xcb_image_t. 0091 */ 0092 struct xcb_image_t 0093 { 0094 uint16_t width; /**< Width in pixels, excluding pads etc. */ 0095 uint16_t height; /**< Height in pixels. */ 0096 xcb_image_format_t format; /**< Format. */ 0097 uint8_t scanline_pad; /**< Right pad in bits. Valid pads 0098 * are 8, 16, 32. 0099 */ 0100 uint8_t depth; /**< Depth in bits. Valid depths 0101 * are 1, 4, 8, 16, 24 for z format, 0102 * 1 for xy-bitmap-format, anything 0103 * for xy-pixmap-format. 0104 */ 0105 uint8_t bpp; /**< Storage per pixel in bits. 0106 * Must be >= depth. Valid bpp 0107 * are 1, 4, 8, 16, 24, 32 for z 0108 * format, 1 for xy-bitmap format, 0109 * anything for xy-pixmap-format. 0110 */ 0111 uint8_t unit; /**< Scanline unit in bits for 0112 * xy formats and for bpp == 1, 0113 * in which case valid scanline 0114 * units are 8, 16, 32. Otherwise, 0115 * will be max(8, bpp). Must be >= bpp. 0116 */ 0117 uint32_t plane_mask; /**< When format is 0118 * xy-pixmap and depth > 0119 * 1, this says which 0120 * planes are "valid" in 0121 * some vague sense. 0122 * Currently used only 0123 * by xcb_image_get/put_pixel(), 0124 * and set only by 0125 * xcb_image_get(). 0126 */ 0127 xcb_image_order_t byte_order; /**< Component byte order 0128 * for z-pixmap, byte 0129 * order of scanline unit 0130 * for xy-bitmap and 0131 * xy-pixmap. Nybble 0132 * order for z-pixmap 0133 * when bpp == 4. 0134 */ 0135 xcb_image_order_t bit_order; /**< Bit order of 0136 * scanline unit for 0137 * xy-bitmap and 0138 * xy-pixmap. 0139 */ 0140 uint32_t stride; /**< Bytes per image row. 0141 * Computable from other 0142 * data, but cached for 0143 * convenience/performance. 0144 */ 0145 uint32_t size; /**< Size of image data in bytes. 0146 * Computable from other 0147 * data, but cached for 0148 * convenience/performance. 0149 */ 0150 void * base; /**< Malloced block of storage that 0151 * will be freed by 0152 * @ref xcb_image_destroy() if non-null. 0153 */ 0154 uint8_t * data; /**< The actual image. */ 0155 }; 0156 0157 typedef struct xcb_shm_segment_info_t xcb_shm_segment_info_t; 0158 0159 /** 0160 * @struct xcb_shm_segment_info_t 0161 * A structure that stores the informations needed by the MIT Shm 0162 * Extension. 0163 */ 0164 struct xcb_shm_segment_info_t 0165 { 0166 xcb_shm_seg_t shmseg; 0167 uint32_t shmid; 0168 uint8_t *shmaddr; 0169 }; 0170 0171 0172 /** 0173 * Update the cached data of an image. 0174 * @param image The image. 0175 * 0176 * An image's size and stride, among other things, are 0177 * cached in its structure. This function recomputes those 0178 * cached values for the given image. 0179 * @ingroup xcb__image_t 0180 */ 0181 void 0182 xcb_image_annotate (xcb_image_t *image); 0183 0184 /** 0185 * Create a new image. 0186 * @param width The width of the image, in pixels. 0187 * @param height The height of the image, in pixels. 0188 * @param format The format of the image. 0189 * @param xpad The scanline pad of the image. 0190 * @param depth The depth of the image. 0191 * @param bpp The depth of the image storage. 0192 * @param unit The unit of image representation, in bits. 0193 * @param byte_order The byte order of the image. 0194 * @param bit_order The bit order of the image. 0195 * @param base The base address of malloced image data. 0196 * @param bytes The size in bytes of the storage pointed to by base. 0197 * If base == 0 and bytes == ~0 and data == 0 on 0198 * entry, no storage will be auto-allocated. 0199 * @param data The image data. If data is null and bytes != ~0, then 0200 * an attempt will be made to fill in data; from 0201 * base if it is non-null (and bytes is large enough), else 0202 * by mallocing sufficient storage and filling in base. 0203 * @return The new image. 0204 * 0205 * This function allocates the memory needed for an @ref xcb_image_t structure 0206 * with the given properties. See the description of xcb_image_t for details. 0207 * This function initializes and returns a pointer to the 0208 * xcb_image_t structure. It may try to allocate or reserve data for the 0209 * structure, depending on how @p base, @p bytes and @p data are set. 0210 * 0211 * The image must be destroyed with xcb_image_destroy(). 0212 * @ingroup xcb__image_t 0213 */ 0214 xcb_image_t * 0215 xcb_image_create (uint16_t width, 0216 uint16_t height, 0217 xcb_image_format_t format, 0218 uint8_t xpad, 0219 uint8_t depth, 0220 uint8_t bpp, 0221 uint8_t unit, 0222 xcb_image_order_t byte_order, 0223 xcb_image_order_t bit_order, 0224 void * base, 0225 uint32_t bytes, 0226 uint8_t * data); 0227 0228 0229 /** 0230 * Create a new image in connection-native format. 0231 * @param c The connection. 0232 * @param width The width of the image, in pixels. 0233 * @param height The height of the image, in pixels. 0234 * @param format The format of the image. 0235 * @param depth The depth of the image. 0236 * @param base The base address of malloced image data. 0237 * @param bytes The size in bytes of the storage pointed to by base. 0238 * If base == 0 and bytes == ~0 and data == 0 on 0239 * entry, no storage will be auto-allocated. 0240 * @param data The image data. If data is null and bytes != ~0, then 0241 * an attempt will be made to fill in data; from 0242 * base if it is non-null (and bytes is large enough), else 0243 * by mallocing sufficient storage and filling in base. 0244 * @return The new image. 0245 * 0246 * This function calls @ref xcb_image_create() with the given 0247 * properties, and with the remaining properties chosen 0248 * according to the "native format" with the given 0249 * properties on the current connection. 0250 * 0251 * It is usual to use this rather 0252 * than calling xcb_image_create() directly. 0253 * @ingroup xcb__image_t 0254 */ 0255 xcb_image_t * 0256 xcb_image_create_native (xcb_connection_t * c, 0257 uint16_t width, 0258 uint16_t height, 0259 xcb_image_format_t format, 0260 uint8_t depth, 0261 void * base, 0262 uint32_t bytes, 0263 uint8_t * data); 0264 0265 0266 /** 0267 * Destroy an image. 0268 * @param image The image to be destroyed. 0269 * 0270 * This function frees the memory associated with the @p image 0271 * parameter. If its base pointer is non-null, it frees 0272 * that also. 0273 * @ingroup xcb__image_t 0274 */ 0275 void 0276 xcb_image_destroy (xcb_image_t *image); 0277 0278 0279 /** 0280 * Get an image from the X server. 0281 * @param conn The connection to the X server. 0282 * @param draw The drawable to get the image from. 0283 * @param x The x coordinate in pixels, relative to the origin of the 0284 * drawable and defining the upper-left corner of the rectangle. 0285 * @param y The y coordinate in pixels, relative to the origin of the 0286 * drawable and defining the upper-left corner of the rectangle. 0287 * @param width The width of the subimage in pixels. 0288 * @param height The height of the subimage in pixels. 0289 * @param plane_mask The plane mask. See the protocol document for details. 0290 * @param format The format of the image. 0291 * @return The subimage of @p draw defined by @p x, @p y, @p w, @p h. 0292 * 0293 0294 * This function returns a new image taken from the 0295 * given drawable @p draw. 0296 * The image will be in connection native format. If the @p format 0297 * is xy-bitmap and the @p plane_mask masks bit planes out, those 0298 * bit planes will be made part of the returned image anyway, 0299 * by zero-filling them; this will require a fresh memory allocation 0300 * and some copying. Otherwise, the resulting image will use the 0301 * xcb_get_image_reply() record as its backing store. 0302 * 0303 * If a problem occurs, the function returns null. 0304 * @ingroup xcb__image_t 0305 */ 0306 xcb_image_t * 0307 xcb_image_get (xcb_connection_t * conn, 0308 xcb_drawable_t draw, 0309 int16_t x, 0310 int16_t y, 0311 uint16_t width, 0312 uint16_t height, 0313 uint32_t plane_mask, 0314 xcb_image_format_t format); 0315 0316 0317 /** 0318 * Put an image onto the X server. 0319 * @param conn The connection to the X server. 0320 * @param draw The draw you get the image from. 0321 * @param gc The graphic context. 0322 * @param image The image you want to combine with the rectangle. 0323 * @param x The x coordinate, which is relative to the origin of the 0324 * drawable and defines the x coordinate of the upper-left corner of the 0325 * rectangle. 0326 * @param y The y coordinate, which is relative to the origin of the 0327 * drawable and defines the x coordinate of the upper-left corner of 0328 * the rectangle. 0329 * @param left_pad Notionally shift an xy-bitmap or xy-pixmap image 0330 * to the right some small amount, for some reason. XXX Not clear 0331 * this is currently supported correctly. 0332 * @return The cookie returned by xcb_put_image(). 0333 * 0334 * This function combines an image with a rectangle of the 0335 * specified drawable @p draw. The image must be in native 0336 * format for the connection. The image is drawn at the 0337 * specified location in the drawable. For the xy-bitmap 0338 * format, the foreground pixel in @p gc defines the source 0339 * for the one bits in the image, and the background pixel 0340 * defines the source for the zero bits. For xy-pixmap and 0341 * z-pixmap formats, the depth of the image must match the 0342 * depth of the drawable; the gc is ignored. 0343 * 0344 * @ingroup xcb__image_t 0345 */ 0346 xcb_void_cookie_t 0347 xcb_image_put (xcb_connection_t * conn, 0348 xcb_drawable_t draw, 0349 xcb_gcontext_t gc, 0350 xcb_image_t * image, 0351 int16_t x, 0352 int16_t y, 0353 uint8_t left_pad); 0354 0355 0356 /** 0357 * Check image for or convert image to native format. 0358 * @param c The connection to the X server. 0359 * @param image The image. 0360 * @param convert If 0, just check the image for native format. 0361 * Otherwise, actually convert it. 0362 * @return Null if the image is not in native format and can or will not 0363 * be converted. Otherwise, the native format image. 0364 * 0365 * Each X display has its own "native format" for images of a given 0366 * format and depth. This function either checks whether the given 0367 * @p image is in native format for the given connection @p c, or 0368 * actually tries to convert the image to native format, depending 0369 * on whether @p convert is true or false. 0370 * 0371 * When @p convert is true, and the image is not in native format 0372 * but can be converted, it will be, and a pointer to the new image 0373 * will be returned. The image passed in will be unharmed in this 0374 * case; it is the caller's responsibility to check that the returned 0375 * pointer is different and to dispose of the old image if desired. 0376 * @ingroup xcb__image_t 0377 */ 0378 xcb_image_t * 0379 xcb_image_native (xcb_connection_t * c, 0380 xcb_image_t * image, 0381 int convert); 0382 0383 0384 /** 0385 * Put a pixel to an image. 0386 * @param image The image. 0387 * @param x The x coordinate of the pixel. 0388 * @param y The y coordinate of the pixel. 0389 * @param pixel The new pixel value. 0390 * 0391 * This function overwrites the pixel in the given @p image with the 0392 * specified @p pixel value (in client format). The image must contain the @p x 0393 * and @p y coordinates, as no clipping is done. This function honors 0394 * the plane-mask for xy-pixmap images. 0395 * @ingroup xcb__image_t 0396 */ 0397 void 0398 xcb_image_put_pixel (xcb_image_t *image, 0399 uint32_t x, 0400 uint32_t y, 0401 uint32_t pixel); 0402 0403 /** 0404 * Get a pixel from an image. 0405 * @param image The image. 0406 * @param x The x coordinate of the pixel. 0407 * @param y The y coordinate of the pixel. 0408 * @return The pixel value. 0409 * 0410 * This function retrieves a pixel from the given @p image. 0411 * The image must contain the @p x 0412 * and @p y coordinates, as no clipping is done. This function honors 0413 * the plane-mask for xy-pixmap images. 0414 * @ingroup xcb__image_t 0415 */ 0416 uint32_t 0417 xcb_image_get_pixel (xcb_image_t *image, 0418 uint32_t x, 0419 uint32_t y); 0420 0421 0422 /** 0423 * Convert an image to a new format. 0424 * @param src Source image. 0425 * @param dst Destination image. 0426 * @return The @p dst image, or null on error. 0427 * 0428 * This function tries to convert the image data of the @p 0429 * src image to the format implied by the @p dst image, 0430 * overwriting the current destination image data. 0431 * The source and destination must have the same 0432 * width, height, and depth. When the source and destination 0433 * are already the same format, a simple copy is done. Otherwise, 0434 * when the destination has the same bits-per-pixel/scanline-unit 0435 * as the source, an optimized copy routine (thanks to Keith Packard) 0436 * is used for the conversion. Otherwise, the copy is done the 0437 * slow, slow way with @ref xcb_image_get_pixel() and 0438 * @ref xcb_image_put_pixel() calls. 0439 * @ingroup xcb__image_t 0440 */ 0441 xcb_image_t * 0442 xcb_image_convert (xcb_image_t * src, 0443 xcb_image_t * dst); 0444 0445 0446 /** 0447 * Extract a subimage of an image. 0448 * @param image Source image. 0449 * @param x X coordinate of subimage. 0450 * @param y Y coordinate of subimage. 0451 * @param width Width of subimage. 0452 * @param height Height of subimage. 0453 * @param base Base of memory allocation. 0454 * @param bytes Size of base allocation. 0455 * @param data Memory allocation. 0456 * @return The subimage, or null on error. 0457 * 0458 * Given an image, this function extracts the subimage at the 0459 * given coordinates. The requested subimage must be entirely 0460 * contained in the source @p image. The resulting image will have the same 0461 * general image parameters as the source image. The @p base, @p bytes, 0462 * and @p data arguments are passed to @ref xcb_create_image() unaltered 0463 * to create the destination image---see its documentation for details. 0464 * 0465 * @ingroup xcb__image_t 0466 */ 0467 xcb_image_t * 0468 xcb_image_subimage(xcb_image_t * image, 0469 uint32_t x, 0470 uint32_t y, 0471 uint32_t width, 0472 uint32_t height, 0473 void * base, 0474 uint32_t bytes, 0475 uint8_t * data); 0476 0477 0478 /* 0479 * Shm stuff 0480 */ 0481 0482 /** 0483 * Put the data of an xcb_image_t onto a drawable using the MIT Shm 0484 * Extension. 0485 * @param conn The connection to the X server. 0486 * @param draw The draw you get the image from. 0487 * @param gc The graphic context. 0488 * @param image The image you want to combine with the rectangle. 0489 * @param shminfo A @ref xcb_shm_segment_info_t structure. 0490 * @param src_x The offset in x from the left edge of the image 0491 * defined by the xcb_image_t structure. 0492 * @param src_y The offset in y from the left edge of the image 0493 * defined by the xcb_image_t structure. 0494 * @param dest_x The x coordinate, which is relative to the origin of the 0495 * drawable and defines the x coordinate of the upper-left corner of the 0496 * rectangle. 0497 * @param dest_y The y coordinate, which is relative to the origin of the 0498 * drawable and defines the x coordinate of the upper-left corner of 0499 * the rectangle. 0500 * @param src_width The width of the subimage, in pixels. 0501 * @param src_height The height of the subimage, in pixels. 0502 * @param send_event Indicates whether or not a completion event 0503 * should occur when the image write is complete. 0504 * @return a pointer to the source image if no problem occurs, otherwise 0. 0505 * 0506 * This function combines an image in memory with a shape of the 0507 * specified drawable. The section of the image defined by the @p x, @p y, 0508 * @p width, and @p height arguments is drawn on the specified part of 0509 * the drawable. If XYBitmap format is used, the depth must be 0510 * one, or a``BadMatch'' error results. The foreground pixel in the 0511 * Graphic Context @p gc defines the source for the one bits in the 0512 * image, and the background pixel defines the source for the zero 0513 * bits. For XYPixmap and ZPixmap, the depth must match the depth of 0514 * the drawable, or a ``BadMatch'' error results. 0515 * 0516 * @ingroup xcb__image_t 0517 */ 0518 xcb_image_t * 0519 xcb_image_shm_put (xcb_connection_t * conn, 0520 xcb_drawable_t draw, 0521 xcb_gcontext_t gc, 0522 xcb_image_t * image, 0523 xcb_shm_segment_info_t shminfo, 0524 int16_t src_x, 0525 int16_t src_y, 0526 int16_t dest_x, 0527 int16_t dest_y, 0528 uint16_t src_width, 0529 uint16_t src_height, 0530 uint8_t send_event); 0531 0532 0533 /** 0534 * Read image data into a shared memory xcb_image_t. 0535 * @param conn The connection to the X server. 0536 * @param draw The draw you get the image from. 0537 * @param image The image you want to combine with the rectangle. 0538 * @param shminfo A @ref xcb_shm_segment_info_t structure. 0539 * @param x The x coordinate, which are relative to the origin of the 0540 * drawable and define the upper-left corner of the rectangle. 0541 * @param y The y coordinate, which are relative to the origin of the 0542 * drawable and define the upper-left corner of the rectangle. 0543 * @param plane_mask The plane mask. 0544 * @return The subimage of @p draw defined by @p x, @p y, @p w, @p h. 0545 * 0546 * This function reads image data into a shared memory xcb_image_t where 0547 * @p conn is the connection to the X server, @p draw is the source 0548 * drawable, @p image is the destination xcb_image_t, @p x and @p y are offsets 0549 * within the drawable, and @p plane_mask defines which planes are to be 0550 * read. 0551 * 0552 * If a problem occurs, the function returns @c 0. It returns 1 0553 * otherwise. 0554 * @ingroup xcb__image_t 0555 */ 0556 int xcb_image_shm_get (xcb_connection_t * conn, 0557 xcb_drawable_t draw, 0558 xcb_image_t * image, 0559 xcb_shm_segment_info_t shminfo, 0560 int16_t x, 0561 int16_t y, 0562 uint32_t plane_mask); 0563 0564 0565 /** 0566 * Create an image from user-supplied bitmap data. 0567 * @param data Image data in packed bitmap format. 0568 * @param width Width in bits of image data. 0569 * @param height Height in bits of image data. 0570 * @return The image constructed from the image data, or 0 on error. 0571 * 0572 * This function creates an image from the user-supplied 0573 * bitmap @p data. The bitmap data is assumed to be in 0574 * xbm format (i.e., 8-bit scanline unit, LSB-first, 8-bit pad). 0575 * @ingroup xcb__image_t 0576 */ 0577 xcb_image_t * 0578 xcb_image_create_from_bitmap_data (uint8_t * data, 0579 uint32_t width, 0580 uint32_t height); 0581 0582 /** 0583 * Create a pixmap from user-supplied bitmap data. 0584 * @param display The connection to the X server. 0585 * @param d The parent drawable for the pixmap. 0586 * @param data Image data in packed bitmap format. 0587 * @param width Width in bits of image data. 0588 * @param height Height in bits of image data. 0589 * @param depth Depth of the desired pixmap. 0590 * @param fg Pixel for one-bits of pixmaps with depth larger than one. 0591 * @param bg Pixel for zero-bits of pixmaps with depth larger than one. 0592 * @param gcp If this pointer is non-null, the GC created to 0593 * fill in the pixmap is stored here; it will have its foreground 0594 * and background set to the supplied value. Otherwise, the GC 0595 * will be freed. 0596 * @return The pixmap constructed from the image data, or 0 on error. 0597 * 0598 * This function creates a pixmap from the user-supplied 0599 * bitmap @p data. The bitmap data is assumed to be in 0600 * xbm format (i.e., 8-bit scanline unit, LSB-first, 8-bit pad). 0601 * If @p depth is greater than 1, the 0602 * bitmap will be expanded to a pixmap using the given 0603 * foreground and background pixels @p fg and @p bg. 0604 * @ingroup xcb__image_t 0605 */ 0606 xcb_pixmap_t 0607 xcb_create_pixmap_from_bitmap_data (xcb_connection_t * display, 0608 xcb_drawable_t d, 0609 uint8_t * data, 0610 uint32_t width, 0611 uint32_t height, 0612 uint32_t depth, 0613 uint32_t fg, 0614 uint32_t bg, 0615 xcb_gcontext_t * gcp); 0616 0617 0618 /** 0619 * @} 0620 */ 0621 0622 0623 #ifdef __cplusplus 0624 } 0625 #endif 0626 0627 0628 #endif /* __XCB_IMAGE_H__ */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |