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