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