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

📄 rprintf_8c-source.html

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -