/* function for format output to the string */ static int formatted_double_to_string(long double number,int format1,int format2,char *s) { /* double n; double nbefor; double nafter; double v,v2; long intdigit; long beforpointdigit; long div; int i; int pos; int size; int fmt1; int fmt2; long mul; static char buf[200]; size=(int)s; n=(double)number; if (n<0) {*s='-';s++;n=-n;} fmt1=format1; fmt2=format2; if (fmt2>18) {fmt2=18;} //maximum of size long long type //clear array befor output for(i=0;i<=200;i++) {buf[i]=0;} if ((fmt1>=0) && (n<1)) { //formatted output if 0<=n<1 mul=1; for(i=0;i=0) && (buf[i]<=9)) {*s='0'+buf[i];} else {*s='0';} s++; } } else { //if n>=1 //v=floorf(n+0.00000000000001); beforpointdigit=floor(n+0.00000000000001); //beforpointdigit=n; nbefor=beforpointdigit; nafter=n-nbefor; //print part of number befor point mul=1; for(i=0;i<200-2;i++) { mul=mul*10; if ((beforpointdigit/mul)==0) {fmt1=i+1;break;} } pos=0; mul=mul/10; for(i=0;i=0) && (buf[i]<=9)) {*s='0'+buf[i];} s++; } //print part of number after point mul=1; for(i=0;i=0) && (buf[i]<=9)) {*s='0'+buf[i];} else {*s='0';} s++; } } size=(int)s-size; return(size); */ } static int formatted_long_to_string(long long number,int fmt1,char *s) { int i; int pos; int fmt; int size; int difference_pos; long digit; long mul; long div; static char buf[200]; //clear array befor output for(i=0;i<200;i++) {buf[i]=0;} digit=number; size=(int)s; if (digit<0) {*s='-';s++;digit=-digit;} if (digit==0) {*s='0';s++;goto end;} mul=1; for(i=0;i<200-2;i++) { mul=mul*10; if ((digit/mul)==0) {fmt=i+1;break;} } difference_pos=i+1; pos=0; mul=mul/10; for(i=0;i=difference_pos) fmt=fmt1; else fmt=difference_pos; for(i=0;i=0) && (buf[i]<=9)) {*s='0'+buf[i];} } else { *s=' '; } s++; } end: size=(int)s-size; return(size); } static int formatted_hex_to_string(long long number,int fmt1,char flag_register,char *s) { long n; int i,pos; int fmt; long size; int difference_pos; static char xdigs_lower[]="0123456789abcdef"; static char xdigs_upper[]="0123456789ABCDEF"; static char buf[200]; n=(long)number; size=(int)s; if (n<0) {*s='-';s++;n=-n;} if (n==0) {*s='0';s++;goto end;} for(i=0;i<200;i++) {buf[i]=0;} i=0; if (flag_register==0) { while (n>0) { buf[i]=xdigs_lower[n & 15]; n=n>>4; i++; } } else { while (n>0) { buf[i]=xdigs_upper[n & 15]; n=n>>4; i++; } } pos=i; difference_pos=i; for(i=pos-1;i>=0;i--) { *s=buf[i]; s++; } if (fmt1-difference_pos>0) { for(i=difference_pos+1;i<=fmt1;i++) { *s=' '; s++; } } end:size=(int)s-size; return(size); } static int formatted_octa_to_string(long long number,int fmt1,char flag_register,char *s) { long n; int i,pos; int fmt; long size; int difference_pos; static char xdigs_lower[16]="012345678"; static char buf[200]; n=number; size=(int)s; if (n<0) {*s='-';s++;n=-n;} if (n==0) {*s='0';s++;goto end;} for(i=0;i<200;i++) {buf[i]=0;} i=0; if (flag_register==0) { while (n>0) { buf[i]=xdigs_lower[n & 7]; n=n>>3; i++; } } pos=i; difference_pos=i; for(i=pos-1;i>=0;i--) { *s=buf[i]; s++; } if (fmt1-difference_pos>0) { for(i=difference_pos+1;i<=fmt1;i++) { *s=' '; s++; } } end:size=(int)s-size; return(size); } static int format_print(char *dest, size_t maxlen,const char *fmt0, va_list argp) { int i,j,k; int length; int fmt1,fmt2,stepen; size_t pos,posc; long long intdigit; long double doubledigit; float floatdigit; const char *fmt,*fmtc; char *s; char *str; static char buffmt1[30]; static char buffmt2[30]; static char buf[1024]; char format_flag; char flag_point; char flag_noformat; char flag_long; char flag_unsigned; char flag_register; char flag_plus; fmt=fmt0; s=dest; pos=0; maxlen--; if (maxlen<=0) return(0); while(pos0) && (flag_plus==1) && (pos+1=0;i--) { fmt1=fmt1+buffmt1[i]*stepen; stepen=stepen*10; } stepen=1; for(i=k-1;i>=0;i--) { fmt2=fmt2+buffmt2[i]*stepen; stepen=stepen*10; } switch(*fmtc) { case 'f': case 'F': if (flag_long==0) {doubledigit=va_arg(argp,double);} if (flag_long>=1) {doubledigit=va_arg(argp,long double);} //doubledigit=*((double *)argp); //sargp=argp+8; length=formatted_double_to_string(doubledigit,fmt1,fmt2,buf); if ((pos+length)0) && (flag_plus==1) && (pos+1