1 /* 2 char id_fmtlib[] = "@(#)fmtlib.c 1.2"; 3 * 4 * integer to ascii conversion 5 */ 6 7 #include "fio.h" 8 9 char _digit[] = "0123456789abcdefghijklmnopqrstuvwxyz"; 10 11 char *icvt(value,ndigit,sign) long value; int *ndigit,*sign; 12 { 13 static char buf[MAXINTLENGTH+1]; 14 register int i; 15 long kludge, rem, mask = 0x7fffffff; 16 int one = 1; 17 char c; 18 19 if (value == 0) 20 { *sign=0; 21 *ndigit=one; 22 buf[MAXINTLENGTH]='0'; 23 return(&buf[MAXINTLENGTH]); 24 } 25 else if (signit) /* signed */ 26 { 27 *sign = (value < 0); 28 c = (int)(value % radix); 29 value /= radix; 30 if (*sign) 31 { value = -value; 32 c = -c; 33 } 34 } 35 else /* unsigned */ 36 { *sign = 0; 37 if (value < 0) 38 { /* ALL THIS IS TO SIMULATE UNSIGNED MOD & DIV */ 39 kludge = mask - (radix - one); 40 value &= mask; 41 rem = (kludge % radix) + (value % radix); 42 value = (kludge / radix) + (value / radix) 43 + (rem / radix) + one; 44 c = (int)(rem % radix); 45 } 46 else 47 { 48 c = (int)(value % radix); 49 value /= radix; 50 } 51 } 52 *(buf+MAXINTLENGTH) = _digit[c]; 53 for(i=MAXINTLENGTH-one; value!=0; i--) 54 { 55 c = (int)(value % radix); 56 *(buf+i) = _digit[c]; 57 value /= radix; 58 } 59 *ndigit = MAXINTLENGTH - i; 60 return(&buf[i+one]); 61 } 62