diff options
Diffstat (limited to 'contrib/opie/libopie/atob8.c')
-rw-r--r-- | contrib/opie/libopie/atob8.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/contrib/opie/libopie/atob8.c b/contrib/opie/libopie/atob8.c new file mode 100644 index 0000000..2c23478 --- /dev/null +++ b/contrib/opie/libopie/atob8.c @@ -0,0 +1,74 @@ +/* atob8.c: The opieatob8() library function. + +%%% portions-copyright-cmetz +Portions of this software are Copyright 1996 by Craig Metz, All Rights +Reserved. The Inner Net License Version 2 applies to these portions of +the software. +You should have received a copy of the license with this software. If +you didn't get a copy, you may request one from <license@inner.net>. + +Portions of this software are Copyright 1995 by Randall Atkinson and Dan +McDonald, All Rights Reserved. All Rights under this copyright are assigned +to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and +License Agreement applies to this software. + + History: + + Modified by cmetz for OPIE 2.3. Return the output variable. + Don't check parameters. + Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. + Inlined and obseleted opieskipspace(). Inlined and obseleted + opiehtoi(). + Created at NRL for OPIE 2.2 from opiesubr2.c +*/ +#include "opie_cfg.h" +#include <stdio.h> +#include "opie.h" + +/* Convert 8-byte hex-ascii string to binary array + */ +char *opieatob8 FUNCTION((out, in), char *out AND char *in) +{ + register int i; + register int val; + + for (i = 0; i < 8; i++) { + while (*in == ' ' || *in == '\t') + in++; + if (!*in) + return NULL; + + if ((*in >= '0') && (*in <= '9')) + val = *(in++) - '0'; + else + if ((*in >= 'a') && (*in <= 'f')) + val = *(in++) - 'a' + 10; + else + if ((*in >= 'A') && (*in <= 'F')) + val = *(in++) - 'A' + 10; + else + return NULL; + + *out = val << 4; + + while (*in == ' ' || *in == '\t') + in++; + if (!*in) + return NULL; + + if ((*in >= '0') && (*in <= '9')) + val = *(in++) - '0'; + else + if ((*in >= 'a') && (*in <= 'f')) + val = *(in++) - 'a' + 10; + else + if ((*in >= 'A') && (*in <= 'F')) + val = *(in++) - 'A' + 10; + else + return NULL; + + *out++ |= val; + } + + return out; +} |