📄 rprintf_8c-source.html
字号:
00380 {00381 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) != <span class="charliteral">'%'</span>)00382 { <span class="comment">// not a format character</span>00383 <span class="comment">// then just output the char</span>00384 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(READMEMBYTE(stringInRom,f));00385 }00386 <span class="keywordflow">else</span> 00387 {00388 f++; <span class="comment">// if we have a "%" then skip it</span>00389 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) == <span class="charliteral">'-'</span>)00390 {00391 flush_left = 1; <span class="comment">// minus: flush left</span>00392 f++;00393 }00394 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) == <span class="charliteral">'0'</span>00395 || READMEMBYTE(stringInRom,f) == <span class="charliteral">'.'</span>)00396 {00397 <span class="comment">// padding with 0 rather than blank</span>00398 pad = <span class="charliteral">'0'</span>;00399 f++;00400 }00401 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) == <span class="charliteral">'*'</span>)00402 { <span class="comment">// field width</span>00403 f_width = va_arg(ap, <span class="keywordtype">int</span>);00404 f++;00405 }00406 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Isdigit(READMEMBYTE(stringInRom,f)))00407 {00408 f_width = atoiRamRom(stringInRom, (<span class="keywordtype">char</span> *) f);00409 <span class="keywordflow">while</span> (Isdigit(READMEMBYTE(stringInRom,f)))00410 f++; <span class="comment">// skip the digits</span>00411 }00412 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) == <span class="charliteral">'.'</span>)00413 { <span class="comment">// precision</span>00414 f++;00415 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) == <span class="charliteral">'*'</span>)00416 {00417 prec = va_arg(ap, <span class="keywordtype">int</span>);00418 f++;00419 }00420 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Isdigit(READMEMBYTE(stringInRom,f)))00421 {00422 prec = atoiRamRom(stringInRom, (<span class="keywordtype">char</span> *) f);00423 <span class="keywordflow">while</span> (Isdigit(READMEMBYTE(stringInRom,f)))00424 f++; <span class="comment">// skip the digits</span>00425 }00426 }00427 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) == <span class="charliteral">'#'</span>)00428 { <span class="comment">// alternate form</span>00429 hash = 1;00430 f++;00431 }00432 <span class="keywordflow">if</span> (READMEMBYTE(stringInRom,f) == <span class="charliteral">'l'</span>)00433 { <span class="comment">// long format</span>00434 do_long = 1;00435 f++;00436 }00437 00438 fmt = READMEMBYTE(stringInRom,f);00439 bp = buf;00440 <span class="keywordflow">switch</span> (fmt) { <span class="comment">// do the formatting</span>00441 <span class="keywordflow">case</span> <span class="charliteral">'d'</span>: <span class="comment">// 'd' signed decimal</span>00442 <span class="keywordflow">if</span> (do_long)00443 l = va_arg(ap, <span class="keywordtype">long</span>);00444 <span class="keywordflow">else</span>00445 l = (<span class="keywordtype">long</span>) (va_arg(ap, <span class="keywordtype">int</span>));00446 <span class="keywordflow">if</span> (l < 0)00447 {00448 sign = 1;00449 l = -l;00450 }00451 <span class="keywordflow">do</span> {00452 *bp++ = l % 10 + <span class="charliteral">'0'</span>;00453 } <span class="keywordflow">while</span> ((l /= 10) > 0);00454 <span class="keywordflow">if</span> (sign)00455 *bp++ = <span class="charliteral">'-'</span>;00456 f_width = f_width - (bp - buf);00457 <span class="keywordflow">if</span> (!flush_left)00458 <span class="keywordflow">while</span> (f_width-- > 0)00459 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00460 <span class="keywordflow">for</span> (bp--; bp >= buf; bp--)00461 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(*bp);00462 <span class="keywordflow">if</span> (flush_left)00463 <span class="keywordflow">while</span> (f_width-- > 0)00464 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00465 <span class="keywordflow">break</span>;00466 <span class="keywordflow">case</span> <span class="charliteral">'o'</span>: <span class="comment">// 'o' octal number</span>00467 <span class="keywordflow">case</span> <span class="charliteral">'x'</span>: <span class="comment">// 'x' hex number</span>00468 <span class="keywordflow">case</span> <span class="charliteral">'u'</span>: <span class="comment">// 'u' unsigned decimal</span>00469 <span class="keywordflow">if</span> (do_long)00470 u = va_arg(ap, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);00471 <span class="keywordflow">else</span>00472 u = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) (va_arg(ap, <span class="keywordtype">unsigned</span>));00473 <span class="keywordflow">if</span> (fmt == <span class="charliteral">'u'</span>)00474 { <span class="comment">// unsigned decimal</span>00475 <span class="keywordflow">do</span> {00476 *bp++ = u % 10 + <span class="charliteral">'0'</span>;00477 } <span class="keywordflow">while</span> ((u /= 10) > 0);00478 }00479 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmt == <span class="charliteral">'o'</span>)00480 { <span class="comment">// octal</span>00481 <span class="keywordflow">do</span> {00482 *bp++ = u % 8 + <span class="charliteral">'0'</span>;00483 } <span class="keywordflow">while</span> ((u /= 8) > 0);00484 <span class="keywordflow">if</span> (hash)00485 *bp++ = <span class="charliteral">'0'</span>;00486 }00487 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmt == <span class="charliteral">'x'</span>)00488 { <span class="comment">// hex</span>00489 <span class="keywordflow">do</span> {00490 i = u % 16;00491 <span class="keywordflow">if</span> (i < 10)00492 *bp++ = i + <span class="charliteral">'0'</span>;00493 <span class="keywordflow">else</span>00494 *bp++ = i - 10 + <span class="charliteral">'a'</span>;00495 } <span class="keywordflow">while</span> ((u /= 16) > 0);00496 <span class="keywordflow">if</span> (hash)00497 {00498 *bp++ = <span class="charliteral">'x'</span>;00499 *bp++ = <span class="charliteral">'0'</span>;00500 }00501 }00502 i = f_width - (bp - buf);00503 <span class="keywordflow">if</span> (!flush_left)00504 <span class="keywordflow">while</span> (i-- > 0)00505 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00506 <span class="keywordflow">for</span> (bp--; bp >= buf; bp--)00507 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>((<span class="keywordtype">int</span>) (*bp));00508 <span class="keywordflow">if</span> (flush_left)00509 <span class="keywordflow">while</span> (i-- > 0)00510 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00511 <span class="keywordflow">break</span>;00512 <span class="keywordflow">case</span> <span class="charliteral">'c'</span>: <span class="comment">// 'c' character</span>00513 i = va_arg(ap, <span class="keywordtype">int</span>);00514 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>((<span class="keywordtype">int</span>) (i));00515 <span class="keywordflow">break</span>;00516 <span class="keywordflow">case</span> <span class="charliteral">'s'</span>: <span class="comment">// 's' string</span>00517 bp = va_arg(ap, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *);00518 <span class="keywordflow">if</span> (!bp)00519 bp = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) <span class="stringliteral">"(nil)"</span>;00520 f_width = f_width - strlen((<span class="keywordtype">char</span> *) bp);00521 <span class="keywordflow">if</span> (!flush_left)00522 <span class="keywordflow">while</span> (f_width-- > 0)00523 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00524 <span class="keywordflow">for</span> (i = 0; *bp && i < prec; i++)00525 {00526 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(*bp);00527 bp++;00528 }00529 <span class="keywordflow">if</span> (flush_left)00530 <span class="keywordflow">while</span> (f_width-- > 0)00531 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00532 <span class="keywordflow">break</span>;00533 <span class="keywordflow">case</span> <span class="charliteral">'%'</span>: <span class="comment">// '%' character</span>00534 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'%'</span>);00535 <span class="keywordflow">break</span>;00536 }00537 flush_left = 0, f_width = 0, prec = INF, hash = 0, do_long = 0;00538 sign = 0;00539 pad = <span class="charliteral">' '</span>;00540 }00541 }00542 00543 va_end(ap);00544 <span class="keywordflow">return</span> 0;00545 }00546 00547 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> Isdigit(<span class="keywordtype">char</span> c)00548 {00549 <span class="keywordflow">if</span>((c >= 0x30) && (c <= 0x39))00550 <span class="keywordflow">return</span> TRUE;00551 <span class="keywordflow">else</span>00552 <span class="keywordflow">return</span> FALSE;00553 }00554 00555 <span class="keywordtype">int</span> atoiRamRom(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keywordtype">char</span> *str)00556 {00557 <span class="keywordtype">int</span> num = 0;;00558 00559 <span class="keywordflow">while</span>(Isdigit(READMEMBYTE(stringInRom,str)))00560 {00561 num *= 10;00562 num += ((READMEMBYTE(stringInRom,str++)) - 0x30);00563 }00564 <span class="keywordflow">return</span> num;00565 }00566 00567 <span class="preprocessor">#endif</span>00568 <span class="preprocessor"></span>00569 <span class="comment">//******************************************************************************</span>00570 <span class="comment">// code below this line is commented out and can be ignored</span>00571 <span class="comment">//******************************************************************************</span>00572 <span class="comment">/*</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -