aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/src/xkb/XKBRdBuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/src/xkb/XKBRdBuf.c')
-rw-r--r--nx-X11/lib/src/xkb/XKBRdBuf.c203
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;
+}