1 #include "NyLPC_cFormatWriter.h"
\r
4 #define FTYPE_LENGTH 0x01
\r
5 #define FTYPE_NOTHING 0x00
\r
7 #define NUM_OF_WORK 16
\r
8 NyLPC_TBool NyLPC_cFormatWriter_print(NyLPC_cFormatWriter_printHandler i_handler,void* i_inst,const NyLPC_TChar* i_fmt,va_list args)
\r
10 const char* rp=i_fmt;
\r
12 char wk[NUM_OF_WORK];
\r
18 ftype=FTYPE_NOTHING;
\r
39 ut=va_arg(args,NyLPC_TUInt32);
\r
44 sp=va_arg(args,const char*);
\r
45 while(*sp!=0 && ut>0){
\r
50 if(ol>=NUM_OF_WORK){
\r
51 i_handler(i_inst,wk,NUM_OF_WORK);
\r
59 wk[ol]=(char)va_arg(args,int);
\r
66 i_handler(i_inst,wk,ol);
\r
69 NyLPC_itoa((va_arg(args,int)),wk,10);
\r
71 i_handler(i_inst,wk,strlen(wk));
\r
77 i_handler(i_inst, wk, ol);
\r
80 NyLPC_uitoa((va_arg(args, NyLPC_TUInt32)), wk, 10);
\r
82 i_handler(i_inst, wk, strlen(wk));
\r
89 i_handler(i_inst,wk,ol);
\r
92 NyLPC_uitoa((va_arg(args,unsigned int)),wk,16);
\r
94 i_handler(i_inst,wk,strlen(wk));
\r
97 //BYTE値のHEXエンコード文字列(XX形式のテキスト。%.*Bのみ)
\r
102 ut=va_arg(args,NyLPC_TUInt32);
\r
107 sp=va_arg(args,const char*);
\r
109 //2文字以上の空きがないなら書き込み
\r
110 if (ol >= (NUM_OF_WORK - 2)){
\r
111 i_handler(i_inst, wk, ol);
\r
114 NyLPC_uitoa2((int)(*sp), wk + ol, 16, 2);
\r
127 //オワタ(ループ抜けるためにrpはそのまま。)
\r
134 if(ol>=NUM_OF_WORK){
\r
135 i_handler(i_inst,wk,NUM_OF_WORK);
\r
145 if(ol>=NUM_OF_WORK){
\r
146 i_handler(i_inst,wk,NUM_OF_WORK);
\r
151 //どこかでエラーが起こってればFALSE返す。
\r
152 return i_handler(i_inst,wk,ol);
\r
155 NyLPC_TInt16 NyLPC_cFormatWriter_length(const NyLPC_TChar* i_fmt,va_list args)
\r
157 const char* rp=i_fmt;
\r
159 char wk[NUM_OF_WORK];
\r
161 NyLPC_TUInt8 ftype;
\r
162 NyLPC_TInt16 len=0;
\r
165 ftype=FTYPE_NOTHING;
\r
173 ftype=FTYPE_LENGTH;
\r
185 ut=va_arg(args,NyLPC_TUInt32);
\r
190 sp=va_arg(args,const char*);
\r
191 while(*sp!=0 && ut>0){
\r
204 NyLPC_itoa((va_arg(args,int)),wk,10);
\r
206 len+=(NyLPC_TInt16)strlen(wk);
\r
211 NyLPC_uitoa((va_arg(args, NyLPC_TUInt32)), wk, 10);
\r
213 len += (NyLPC_TInt16)strlen(wk);
\r
217 NyLPC_uitoa((va_arg(args,unsigned int)),wk,16);
\r
219 len+=(NyLPC_TInt16)strlen(wk);
\r
222 //BYTE値のHEXエンコード文字列(XX形式のテキスト。%.*Bのみ)
\r
227 ut=va_arg(args,NyLPC_TUInt32);
\r
232 sp=va_arg(args,const char*);
\r
233 len += (NyLPC_TInt16)ut * 2;
\r
241 //オワタ(ループ抜けるためにrpはそのまま。)
\r
254 //どこかでエラーが起こってればFALSE返す。
\r