XIint.h revision 3e256790
1c43cc173Smrg/* $XFree86: xc/lib/Xi/XIint.h,v 3.2 2003/07/07 15:34:22 eich Exp $ */ 2c43cc173Smrg 3c43cc173Smrg/* 4c43cc173Smrg * XIint.h - Header definition and support file for the internal 5c43cc173Smrg * support routines used by the Xi library. 6c43cc173Smrg */ 7c43cc173Smrg 8c43cc173Smrg#ifndef _XIINT_H_ 9c43cc173Smrg#define _XIINT_H_ 10c27c18e8Smrg#include <X11/extensions/XI.h> 11c43cc173Smrg 12c43cc173Smrgextern XExtDisplayInfo *XInput_find_display(Display *); 13c43cc173Smrg 14c43cc173Smrgextern int _XiCheckExtInit(Display *, int, XExtDisplayInfo *); 15c43cc173Smrg 16c43cc173Smrgextern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *, XExtDisplayInfo *); 173e256790Smrgextern XExtensionVersion* _XiGetExtensionVersionRequest(Display *dpy, _Xconst char *name, int xi_opcode); 18c27c18e8Smrgextern Status _xiQueryVersion(Display *dpy, int*, int*, XExtDisplayInfo *); 19c27c18e8Smrg 20c27c18e8Smrgextern Status _XiEventToWire( 21c27c18e8Smrg register Display * /* dpy */, 22c27c18e8Smrg register XEvent * /* re */, 23c27c18e8Smrg register xEvent ** /* event */, 24c27c18e8Smrg register int * /* count */ 25c27c18e8Smrg); 26c27c18e8Smrg 27c27c18e8Smrgtypedef struct _XInputData 28c27c18e8Smrg{ 29c27c18e8Smrg XEvent data; 30c27c18e8Smrg XExtensionVersion *vers; 31c27c18e8Smrg} XInputData; 32c27c18e8Smrg 33c27c18e8Smrg 34c27c18e8Smrg/** 35c27c18e8Smrg * Returns the next valid memory block of the given size within the block 36c27c18e8Smrg * previously allocated. 37c27c18e8Smrg * Use letting pointers inside a struct point to bytes after the same 38c27c18e8Smrg * struct, e.g. during protocol parsing etc. 39c27c18e8Smrg * 40c27c18e8Smrg * Caller is responsible for allocating enough memory. 41c27c18e8Smrg * 42c27c18e8Smrg * Example: 43c27c18e8Smrg * void *ptr; 44c27c18e8Smrg * struct foo { 45c27c18e8Smrg * int num_a; 46c27c18e8Smrg * int num_b; 47c27c18e8Smrg * int *a; 48c27c18e8Smrg * int *b; 49c27c18e8Smrg * } bar; 50c27c18e8Smrg * 51c27c18e8Smrg * ptr = malloc(large_enough); 52c27c18e8Smrg * bar = next_block(&ptr, sizeof(struct foo)); 53c27c18e8Smrg * bar->num_a = 10; 54c27c18e8Smrg * bar->num_b = 20; 55c27c18e8Smrg * bar->a = next_block(&ptr, bar->num_a); 56c27c18e8Smrg * bar->b = next_block(&ptr, bar->num_b); 57c27c18e8Smrg */ 58c27c18e8Smrgstatic inline void* 59c27c18e8Smrgnext_block(void **ptr, int size) { 60c27c18e8Smrg void *ret = *ptr; 61c27c18e8Smrg 62c27c18e8Smrg if (!*ptr) 63c27c18e8Smrg return NULL; 64c27c18e8Smrg 65c27c18e8Smrg *(unsigned char**)ptr += size; 66c27c18e8Smrg 67c27c18e8Smrg return ret; 68c27c18e8Smrg} 69c43cc173Smrg 70c43cc173Smrg#endif 71