:static int __wsprintfproc; :static int cdecl __wsprintf(int buff,mask,...){ char buffer[MAX_PATH]; char bufnum[32]; int bufferlen; int param; int length; int pad; struct _wsprintf_mf{ int precision; int width; int minus ; int plus ; int diez ; int zero ; byte upcase ; byte _signed;// }mf; $push EBX,ESI,EDI; param=#mask[sizeof(mask)]; length=0; EDX=mask; EBX=buff; for(;;){ mf=0; mf.precision=0x7FFF; REPEATSMALL: if(!DSCHAR[EDX]){ AL=0; $call __wsprintfproc; $pop EDI,ESI,EBX; return length; } if(DSCHAR[EDX]!='%'){ WRITECHAR: AL=DSCHAR[EDX];$call __wsprintfproc; EDX++;GOTO REPEATSMALL; } GETMASK: EDX++; SWITCH(DSCHAR[EDX]){ CASE '-': mf.minus++;goto GETMASK; CASE '+': mf.plus ++;goto GETMASK; CASE '#': mf.diez ++;goto GETMASK; CASE '0': mf.zero ++;EDX++; } WHILE(DSCHAR[EDX]>='0')&&(DSCHAR[EDX]<='9'){ $push EDX;mf.width=mf.width*10+DSCHAR[EDX]-'0';$pop EDX;EDX++; } if(DSCHAR[EDX]=='.'){ mf.precision=0; GETPRECISION: EDX++; if(DSCHAR[EDX]>='0') &&(DSCHAR[EDX]<='9'){ $push EDX;mf.precision=mf.precision*10+DSCHAR[EDX]-'0';$pop EDX; GOTO GETPRECISION; } } if(DSCHAR[EDX]=='l'){ EDX++; } if(DSCHAR[EDX]=='h'){ EDX++; } if(DSCHAR[EDX]<'a'){mf.upcase=1;} SWITCH(DSCHAR[EDX]|0x20){ CASE 'c': buffer=DSCHAR[param];bufferlen=1;goto FORMAT; CASE 's': if(!DSDWORD[param])DSDWORD[param]="(null)";//?????? FOR(bufferlen=0;bufferlen'9'){AL+='A'-'9'-1;if(!mf.upcase)AL|=0x20;} bufnum[EDI]=AL;EDI++;EDX>>=4; } $pop EDX; WHILE(EDI