mirror of
https://github.com/ctm/executor.git
synced 2024-09-29 18:58:01 +00:00
67 lines
1.3 KiB
C
67 lines
1.3 KiB
C
/* Copyright 1986, 1989, 1990 by Abacus Research and
|
|
* Development, Inc. All rights reserved.
|
|
*/
|
|
|
|
#if !defined (OMIT_RCSID_STRINGS)
|
|
char ROMlib_rcsid_bindec[] =
|
|
"$Id: bindec.c 63 2004-12-24 18:19:43Z ctm $";
|
|
#endif
|
|
|
|
/* Forward declarations in BinaryDecimal.h (DO NOT DELETE THIS LINE) */
|
|
|
|
#include "rsys/common.h"
|
|
#include "rsys/glue.h"
|
|
|
|
A2(PUBLIC trap, void, NumToString, LONGINT, l, StringPtr, s)
|
|
{
|
|
register Byte *p = s+1;
|
|
register LONGINT d;
|
|
|
|
if (l == 0) {
|
|
s[0] = 1;
|
|
*p = '0';
|
|
return;
|
|
} else if ((uint32) l == 0x80000000L) {
|
|
register char *q = "-2147483648";
|
|
s[0] = 11;
|
|
while (*q)
|
|
*p++ = *q++; /* DON'T put the null byte in */
|
|
return;
|
|
} else if (l < 0) {
|
|
*p++ = '-';
|
|
l = -l;
|
|
}
|
|
d = 1000000000L;
|
|
while (!(*p = l / d)) /* must find something */
|
|
d /= 10;
|
|
l -= d * *p;
|
|
d /= 10;
|
|
*p++ += '0';
|
|
while (d) {
|
|
l -= (*p = l / d) * d;
|
|
*p++ += '0';
|
|
d /= 10;
|
|
}
|
|
s[0] = p - (s+1);
|
|
}
|
|
|
|
A2(PUBLIC trap, void, StringToNum, StringPtr, s, LONGINT *, lp)
|
|
{
|
|
register char *p = (char *)s+1;
|
|
register char *ep = p + s[0];
|
|
register LONGINT l = 0;
|
|
int sign = 1;
|
|
|
|
if (p != ep) {
|
|
if (*p == '+')
|
|
p++;
|
|
else if (*p == '-') {
|
|
p++;
|
|
sign = -1;
|
|
}
|
|
}
|
|
while (p != ep)
|
|
l = l * 10 + (*p++ & 0xF);
|
|
*lp = sign * l;
|
|
}
|