📄 rprintf_8c-source.html
字号:
00187 x = n;00188 }00189 00190 <span class="comment">// setup little string buffer</span>00191 count = (numDigits-1)-(isSigned?1:0);00192 p = buf + <span class="keyword">sizeof</span> (buf);00193 *--p = <span class="charliteral">'\0'</span>;00194 00195 <span class="comment">// force calculation of first digit</span>00196 <span class="comment">// (to prevent zero from not printing at all!!!)</span>00197 *--p = HexChars[(x%base)&0x0f]; x /= base;00198 <span class="comment">// calculate remaining digits</span>00199 <span class="keywordflow">while</span>(count--)00200 {00201 <span class="keywordflow">if</span>(x != 0)00202 {00203 <span class="comment">// calculate next digit</span>00204 *--p = HexChars[(x%base)&0x0f]; x /= base;00205 }00206 <span class="keywordflow">else</span>00207 {00208 <span class="comment">// no more digits left, pad out to desired length</span>00209 *--p = padchar;00210 }00211 }00212 00213 <span class="comment">// apply signed notation if requested</span>00214 <span class="keywordflow">if</span>( isSigned )00215 {00216 <span class="keywordflow">if</span>(n < 0)00217 {00218 *--p = <span class="charliteral">'-'</span>;00219 }00220 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(n > 0)00221 {00222 *--p = <span class="charliteral">'+'</span>;00223 }00224 <span class="keywordflow">else</span>00225 {00226 *--p = <span class="charliteral">' '</span>;00227 }00228 }00229 00230 <span class="comment">// print the string right-justified</span>00231 count = numDigits;00232 <span class="keywordflow">while</span>(count--)00233 {00234 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(*p++);00235 }00236 }00237 00238 <span class="preprocessor">#ifdef RPRINTF_FLOAT</span>00239 <span class="preprocessor"></span><span class="comment">// *** rprintfFloat ***</span>00240 <span class="comment">// floating-point print</span>00241 <span class="keywordtype">void</span> rprintfFloat(<span class="keywordtype">char</span> numDigits, <span class="keywordtype">double</span> x)00242 {00243 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> firstplace = FALSE;00244 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> negative;00245 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i, digit;00246 <span class="keywordtype">double</span> place = 1.0;00247 00248 <span class="comment">// save sign</span>00249 negative = (x<0);00250 <span class="comment">// convert to absolute value</span>00251 x = (x>0)?(x):(-x);00252 00253 <span class="comment">// find starting digit place</span>00254 <span class="keywordflow">for</span>(i=0; i<15; i++)00255 {00256 <span class="keywordflow">if</span>((x/place) < 10.0)00257 <span class="keywordflow">break</span>;00258 <span class="keywordflow">else</span>00259 place *= 10.0;00260 }00261 <span class="comment">// print polarity character</span>00262 <span class="keywordflow">if</span>(negative)00263 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00264 <span class="keywordflow">else</span>00265 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'+'</span>);00266 00267 <span class="comment">// print digits</span>00268 <span class="keywordflow">for</span>(i=0; i<numDigits; i++)00269 {00270 digit = (x/place);00271 00272 <span class="keywordflow">if</span>(digit | firstplace | (place == 1.0))00273 {00274 firstplace = TRUE;00275 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(digit+0x30);00276 }00277 <span class="keywordflow">else</span>00278 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00279 00280 <span class="keywordflow">if</span>(place == 1.0)00281 {00282 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'.'</span>);00283 }00284 00285 x -= (digit*place);00286 place /= 10.0;00287 }00288 }00289 <span class="preprocessor">#endif</span>00290 <span class="preprocessor"></span>00291 <span class="preprocessor">#ifdef RPRINTF_SIMPLE</span>00292 <span class="preprocessor"></span><span class="comment">// *** rprintf1RamRom ***</span><span class="comment"></span>00293 <span class="comment">//! called by rprintf() - does a simple printf (supports %d, %x, %c)</span>00294 <span class="comment"></span><span class="comment">// Supports:</span>00295 <span class="comment">// %d - decimal</span>00296 <span class="comment">// %x - hex</span>00297 <span class="comment">// %c - character</span><a name="l00298"></a><a class="code" href="rprintf_8h.html#a17">00298</a> <span class="keywordtype">int</span> <a class="code" href="rprintf_8h.html#a17">rprintf1RamRom</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)00299 {00300 <span class="comment">// simple printf routine</span>00301 <span class="comment">// define a global HexChars or use line below</span>00302 <span class="comment">//static char HexChars[16] = "0123456789ABCDEF";</span>00303 <span class="keywordtype">char</span> format_flag;00304 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> u_val, div_val, base;00305 va_list ap;00306 00307 va_start(ap, format);00308 <span class="keywordflow">for</span> (;;)00309 {00310 <span class="keywordflow">while</span> ((format_flag = READMEMBYTE(stringInRom,format++) ) != <span class="charliteral">'%'</span>)00311 { <span class="comment">// Until '%' or '\0'</span>00312 <span class="keywordflow">if</span> (!format_flag)00313 {00314 va_end(ap);00315 <span class="keywordflow">return</span>(0);00316 }00317 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(format_flag);00318 }00319 00320 <span class="keywordflow">switch</span> (format_flag = READMEMBYTE(stringInRom,format++) )00321 {00322 <span class="keywordflow">case</span> <span class="charliteral">'c'</span>: format_flag = va_arg(ap,<span class="keywordtype">int</span>);00323 <span class="keywordflow">default</span>: <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(format_flag); <span class="keywordflow">continue</span>;00324 <span class="keywordflow">case</span> <span class="charliteral">'d'</span>: base = 10; div_val = 10000; <span class="keywordflow">goto</span> CONVERSION_LOOP;00325 <span class="keywordflow">case</span> <span class="charliteral">'x'</span>: base = 16; div_val = 0x10;00326 00327 CONVERSION_LOOP:00328 u_val = va_arg(ap,<span class="keywordtype">int</span>);00329 <span class="keywordflow">if</span> (format_flag == <span class="charliteral">'d'</span>)00330 {00331 <span class="keywordflow">if</span> (((<span class="keywordtype">int</span>)u_val) < 0)00332 {00333 u_val = - u_val;00334 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00335 }00336 <span class="keywordflow">while</span> (div_val > 1 && div_val > u_val) div_val /= 10;00337 }00338 <span class="keywordflow">do</span>00339 {00340 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(HexChars[(u_val/div_val)]);00341 u_val %= div_val;00342 div_val /= base;00343 } <span class="keywordflow">while</span> (div_val);00344 }00345 }00346 va_end(ap);00347 }00348 <span class="preprocessor">#endif</span>00349 <span class="preprocessor"></span>00350 00351 <span class="preprocessor">#ifdef RPRINTF_COMPLEX</span>00352 <span class="preprocessor"></span><span class="comment">// *** rprintf2RamRom ***</span><span class="comment"></span>00353 <span class="comment">//! called by rprintf() - does a more powerful printf (supports %d, %u, %o, %x, %c, %s)</span>00354 <span class="comment"></span><span class="comment">// Supports:</span>00355 <span class="comment">// %d - decimal</span>00356 <span class="comment">// %u - unsigned decimal</span>00357 <span class="comment">// %o - octal</span>00358 <span class="comment">// %x - hex</span>00359 <span class="comment">// %c - character</span>00360 <span class="comment">// %s - strings</span>00361 <span class="comment">// and the width,precision,padding modifiers</span>00362 <span class="comment">// **this printf does not support floating point numbers</span>00363 <span class="keywordtype">int</span> rprintf2RamRom(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *sfmt, ...)00364 {00365 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *f, *bp;00366 <span class="keyword">register</span> <span class="keywordtype">long</span> l;00367 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> u;00368 <span class="keyword">register</span> <span class="keywordtype">int</span> i;00369 <span class="keyword">register</span> <span class="keywordtype">int</span> fmt;00370 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> pad = <span class="charliteral">' '</span>;00371 <span class="keywordtype">int</span> flush_left = 0, f_width = 0, prec = INF, hash = 0, do_long = 0;00372 <span class="keywordtype">int</span> sign = 0;00373 00374 va_list ap;00375 va_start(ap, sfmt);00376 00377 f = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) sfmt;00378 00379 <span class="keywordflow">for</span> (; READMEMBYTE(stringInRom,f); f++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -