diff plugins/zephyr/ZReadAscii.c @ 1700:1e0fa7e130d0

[gaim-migrate @ 1710] Zephyr. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Thu, 12 Apr 2001 09:21:16 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/zephyr/ZReadAscii.c	Thu Apr 12 09:21:16 2001 +0000
@@ -0,0 +1,108 @@
+/* This file is part of the Project Athena Zephyr Notification System.
+ * It contains source for the ZReadAscii function.
+ *
+ *	Created by:	Robert French
+ *
+ *	$Source$
+ *	$Author: warmenhoven $
+ *
+ *	Copyright (c) 1987, 1990 by the Massachusetts Institute of Technology.
+ *	For copying and distribution information, see the file
+ *	"mit-copyright.h". 
+ */
+/* $Header$ */
+
+#ifndef lint
+static char rcsid_ZReadAscii_c[] = "$Header$";
+#endif /* lint */
+
+#include <internal.h>
+#include <assert.h>
+
+#if 0
+static __inline__
+int
+Z_cnvt_xtoi (char c)
+{
+    c -= '0';
+    if (c < 10)
+	return c;
+    c -= 'A'-'9'-1;
+    if (c < 16)
+	return c;
+    return -1;
+}
+#endif
+
+#define Z_cnvt_xtoi(c)  ((temp=(c)-'0'),(temp<10)?temp:((temp-='A'-'9'-1),(temp<16)?temp:-1))
+
+Code_t ZReadAscii(ptr, len, field, num)
+    char *ptr;
+    int len;
+    unsigned char *field;
+    int num;
+{
+    int i;
+    unsigned int hexbyte;
+    register int c1, c2;
+    register unsigned int temp;
+
+    for (i=0;i<num;i++) {
+	if (*ptr == ' ') {
+	    ptr++;
+	    if (--len < 0)
+		return ZERR_BADFIELD;
+	} 
+	if (ptr[0] == '0' && ptr[1] == 'x') {
+	    ptr += 2;
+	    len -= 2;
+	    if (len < 0)
+		return ZERR_BADFIELD;
+	} 
+	c1 = Z_cnvt_xtoi(ptr[0]);
+	if (c1 < 0)
+		return ZERR_BADFIELD;
+	c2 = Z_cnvt_xtoi(ptr[1]);
+	if (c2 < 0)
+		return ZERR_BADFIELD;
+	hexbyte = (c1 << 4) | c2;
+	field[i] = hexbyte;
+	ptr += 2;
+	len -= 2;
+	if (len < 0)
+	    return ZERR_BADFIELD;
+    }
+
+    return *ptr ? ZERR_BADFIELD : ZERR_NONE;
+}
+
+Code_t ZReadAscii32(ptr, len, value_ptr)
+    char *ptr;
+    int len;
+    unsigned long *value_ptr;
+{
+    unsigned char buf[4];
+    Code_t retval;
+
+    retval = ZReadAscii(ptr, len, buf, 4);
+    if (retval != ZERR_NONE)
+	return retval;
+    *value_ptr = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+    return ZERR_NONE;
+}
+
+Code_t ZReadAscii16(ptr, len, value_ptr)
+    char *ptr;
+    int len;
+    unsigned short *value_ptr;
+{
+    unsigned char buf[2];
+    Code_t retval;
+
+    retval = ZReadAscii(ptr, len, buf, 2);
+    if (retval != ZERR_NONE)
+	return retval;
+    *value_ptr = (buf[0] << 8) | buf[1];
+    return ZERR_NONE;
+}
+