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

📄 rprintf_8c-source.html

📁 ATMEL的AVR单片机库文件
💻 HTML
📖 第 1 页 / 共 4 页
字号:
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 &lt; 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) &gt; 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-- &gt; 0)00474                             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00475                     <span class="keywordflow">for</span> (bp--; bp &gt;= 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-- &gt; 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) &gt; 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) &gt; 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 &lt; 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) &gt; 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-- &gt; 0)00520                             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00521                     <span class="keywordflow">for</span> (bp--; bp &gt;= 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-- &gt; 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-- &gt; 0)00538                             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(pad);00539                     <span class="keywordflow">for</span> (i = 0; *bp &amp;&amp; i &lt; 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-- &gt; 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 &gt;= 0x30) &amp;&amp; (c &lt;= 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 + -