diff options
Diffstat (limited to 'lib/libI77/fmtlib.c')
-rw-r--r-- | lib/libI77/fmtlib.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/lib/libI77/fmtlib.c b/lib/libI77/fmtlib.c index 37a4cc5..1c6801e 100644 --- a/lib/libI77/fmtlib.c +++ b/lib/libI77/fmtlib.c @@ -1,28 +1,39 @@ /* @(#)fmtlib.c 1.2 */ #define MAXINTLENGTH 23 + +#include "f2c.h" +#ifndef Allow_TYQUAD +#undef longint +#define longint long +#endif + #ifdef KR_headers -char *f__icvt(value,ndigit,sign, base) long value; int *ndigit,*sign; +char *f__icvt(value,ndigit,sign, base) longint value; int *ndigit,*sign; register int base; #else -char *f__icvt(long value, int *ndigit, int *sign, int base) +char *f__icvt(longint value, int *ndigit, int *sign, int base) #endif { static char buf[MAXINTLENGTH+1]; register int i; - if(value>0) *sign=0; - else if(value<0) - { value = -value; - *sign= 1; - } - else - { *sign=0; - *ndigit=1; - buf[MAXINTLENGTH]='0'; - return(&buf[MAXINTLENGTH]); - } - for(i=MAXINTLENGTH-1;value>0;i--) - { *(buf+i)=(int)(value%base)+'0'; + + if(value > 0) + *sign = 0; + else if (value < 0) { + value = -value; + *sign = 1; + } + else { + *sign = 0; + *ndigit = 1; + buf[MAXINTLENGTH-1] = '0'; + return &buf[MAXINTLENGTH-1]; + } + i = MAXINTLENGTH; + do { + buf[--i] = (value%base) + '0'; value /= base; + } + while(value > 0); + *ndigit = MAXINTLENGTH - i; + return &buf[i]; } - *ndigit=MAXINTLENGTH-1-i; - return(&buf[i+1]); -} |