⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rprintf_8c-source.html

📁 方便飞利浦arm7tdmi 处理器lpc2100开发的C函数库 Procyon ARMlib-LPC2100 C-Language Function Library for Philips LPC21
💻 HTML
📖 第 1 页 / 共 4 页
字号:
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 &lt; 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) &gt; 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-- &gt; 0)00459                             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00460                     <span class="keywordflow">for</span> (bp--; bp &gt;= 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-- &gt; 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) &gt; 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) &gt; 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 &lt; 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) &gt; 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-- &gt; 0)00505                             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00506                     <span class="keywordflow">for</span> (bp--; bp &gt;= 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-- &gt; 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-- &gt; 0)00523                             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00524                     <span class="keywordflow">for</span> (i = 0; *bp &amp;&amp; i &lt; 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-- &gt; 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 &gt;= 0x30) &amp;&amp; (c &lt;= 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 + -