diff options
Diffstat (limited to 'nx-X11/lib/src/xkb/XKBRdBuf.c')
-rw-r--r-- | nx-X11/lib/src/xkb/XKBRdBuf.c | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/nx-X11/lib/src/xkb/XKBRdBuf.c b/nx-X11/lib/src/xkb/XKBRdBuf.c new file mode 100644 index 000000000..381f4c900 --- /dev/null +++ b/nx-X11/lib/src/xkb/XKBRdBuf.c @@ -0,0 +1,203 @@ +/************************************************************ +Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + +********************************************************/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include <stdio.h> +#include "Xlibint.h" +#include "XKBlibint.h" +#include <nx-X11/extensions/XKBproto.h> + +/***====================================================================***/ + +int +_XkbInitReadBuffer(Display *dpy, XkbReadBufferPtr buf, int size) +{ + if ((dpy != NULL) && (buf != NULL) && (size > 0)) { + buf->error = 0; + buf->size = size; + buf->start = buf->data = _XkbAlloc(size); + if (buf->start) { + _XRead(dpy, buf->start, size); + return 1; + } + } + return 0; +} + +#define _XkbReadBufferDataLeft(b) (((b)->size)-((b)->data-(b)->start)) + +int +_XkbSkipReadBufferData(XkbReadBufferPtr from, int size) +{ + if (size == 0) + return 1; + if ((from == NULL) || (from->error) || (size < 1) || + (_XkbReadBufferDataLeft(from) < size)) + return 0; + from->data += size; + return 1; +} + +int +_XkbCopyFromReadBuffer(XkbReadBufferPtr from, char *to, int size) +{ + if (size == 0) + return 1; + if ((from == NULL) || (from->error) || (to == NULL) || (size < 1) || + (_XkbReadBufferDataLeft(from) < size)) + return 0; + memcpy(to, from->data, size); + from->data += size; + return 1; +} + +#ifdef XKB_FORCE_INT_KEYSYM +int +_XkbReadCopyKeySyms(int *wire, KeySym * to, int num_words) +{ + while (num_words-- > 0) { + *to++ = *wire++; + } + return 1; +} + +int +_XkbReadBufferCopyKeySyms(XkbReadBufferPtr from, KeySym * to, int num_words) +{ + if ((unsigned) (num_words * 4) > _XkbReadBufferDataLeft(from)) + return 0; + _XkbReadCopyKeySyms((int *) from->data, to, num_words); + from->data += (4 * num_words); + return True; +} + +int +_XkbWriteCopyKeySyms(register KeySym * from, CARD32 *to, int len) +{ + while (len-- > 0) { + *to++ = (CARD32) *from++; + } + return True; +} +#endif + +#ifdef LONG64 +int +_XkbReadCopyData32(int *wire, long *to, int num_words) +{ + while (num_words-- > 0) { + *to++ = *wire++; + } + return 1; +} + +int +_XkbReadBufferCopy32(XkbReadBufferPtr from, long *to, int num_words) +{ + if ((unsigned) (num_words * 4) > _XkbReadBufferDataLeft(from)) + return 0; + _XkbReadCopyData32((int *) from->data, to, num_words); + from->data += (4 * num_words); + return True; +} + +int +_XkbWriteCopyData32(register unsigned long *from, CARD32 *to, int len) +{ + while (len-- > 0) { + *to++ = (CARD32) *from++; + } + return True; +} +#endif /* LONG64 */ + + +char * +_XkbPeekAtReadBuffer(XkbReadBufferPtr from, int size) +{ + if ((from == NULL) || (from->error) || (size < 1) || + (_XkbReadBufferDataLeft(from) < size)) + return NULL; + return from->data; +} + +char * +_XkbGetReadBufferPtr(XkbReadBufferPtr from, int size) +{ + char *ptr; + + if ((from == NULL) || (from->error) || (size < 1) || + (_XkbReadBufferDataLeft(from) < size)) + return NULL; + ptr = from->data; + from->data += size; + return ptr; +} + + +int +_XkbFreeReadBuffer(XkbReadBufferPtr buf) +{ + if ((buf != NULL) && (buf->start != NULL)) { + int left; + + left = (int) _XkbReadBufferDataLeft(buf); + + Xfree(buf->start); + buf->size = 0; + buf->start = buf->data = NULL; + return left; + } + return 0; +} + +Bool +_XkbGetReadBufferCountedString(XkbReadBufferPtr buf, char **rtrn) +{ + CARD16 len, *pLen; + int left; + char *str = NULL; + + if ((buf == NULL) || (buf->error) || + ((left = (int) _XkbReadBufferDataLeft(buf)) < 4)) + return False; + pLen = (CARD16 *) buf->data; + len = *pLen; + if (len > 0) { + if (XkbPaddedSize(len + 2) > left) + return False; + str = _XkbAlloc(len + 1); + if (str) { + memcpy(str, &buf->data[2], len); + str[len] = '\0'; + } + } + buf->data += XkbPaddedSize(len + 2); + *rtrn = str; + return True; +} |