view src/protocols/zephyr/ZMakeAscii.c @ 11184:044645e8a679

[gaim-migrate @ 13296] .cvsignore files are used to "ignore" files that you don't want in your CVS repository. This typically includes files created during the build processes, temp files created by editors, etc. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Wed, 03 Aug 2005 02:59:39 +0000
parents 64895571248f
children 26e316f9e136
line wrap: on
line source

/* This file is part of the Project Athena Zephyr Notification System.
 * It contains source for the ZMakeAscii function.
 *
 *	Created by:	Robert French
 *
 *	Copyright (c) 1987 by the Massachusetts Institute of Technology.
 *	For copying and distribution information, see the file
 *	"mit-copyright.h". 
 */

#include "internal.h"
#include <assert.h>

static char *itox_chars = "0123456789ABCDEF";

Code_t ZMakeAscii(ptr, len, field, num)
    register char *ptr;
    int len;
    unsigned char *field;
    int num;
{
    int i;

    for (i=0;i<num;i++) {
	/* we need to add "0x" if we are between 4 byte pieces */
	if ((i & 3) == 0) {
	    if (len < (i?4:3))
		return ZERR_FIELDLEN;
	    /* except at the beginning, put a space in before the "0x" */
	    if (i) {
		*ptr++ = ' ';
		len--;
	    }
	    *ptr++ = '0';
	    *ptr++ = 'x';
	    len -= 2;
	} 
	if (len < 3)
	    return ZERR_FIELDLEN;
	*ptr++ = itox_chars[(int) (field[i] >> 4)];
	*ptr++ = itox_chars[(int) (field[i] & 0xf)];
	len -= 2;
    }

    *ptr = '\0';
    return ZERR_NONE;
}

Code_t ZMakeAscii32(ptr, len, value)
    register char *ptr;
    int len;
    unsigned long value;
{
    if (len < 11)
	return ZERR_FIELDLEN;
    *ptr++ = '0';
    *ptr++ = 'x';
    *ptr++ = itox_chars[(value >> 28) & 0xf];
    *ptr++ = itox_chars[(value >> 24) & 0xf];
    *ptr++ = itox_chars[(value >> 20) & 0xf];
    *ptr++ = itox_chars[(value >> 16) & 0xf];
    *ptr++ = itox_chars[(value >> 12) & 0xf];
    *ptr++ = itox_chars[(value >>  8) & 0xf];
    *ptr++ = itox_chars[(value >>  4) & 0xf];
    *ptr++ = itox_chars[(value >>  0) & 0xf];
    *ptr = 0;
    return ZERR_NONE;
}

Code_t ZMakeAscii16(ptr, len, value)
    register char *ptr;
    int len;
    unsigned int value;
{
    if (len < 7)
	return ZERR_FIELDLEN;
    *ptr++ = '0';
    *ptr++ = 'x';
    *ptr++ = itox_chars[(value >> 12) & 0xf];
    *ptr++ = itox_chars[(value >>  8) & 0xf];
    *ptr++ = itox_chars[(value >>  4) & 0xf];
    *ptr++ = itox_chars[(value >>  0) & 0xf];
    *ptr = 0;
    return ZERR_NONE;
}