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

📄 rprintf_8c-source.html

📁 方便飞利浦arm7tdmi 处理器lpc2100开发的C函数库 Procyon ARMlib-LPC2100 C-Language Function Library for Philips LPC21
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00187         x = n;00188     }00189 00190     <span class="comment">// setup little string buffer</span>00191     count = (numDigits-1)-(isSigned?1:0);00192     p = buf + <span class="keyword">sizeof</span> (buf);00193     *--p = <span class="charliteral">'\0'</span>;00194     00195     <span class="comment">// force calculation of first digit</span>00196     <span class="comment">// (to prevent zero from not printing at all!!!)</span>00197     *--p = HexChars[(x%base)&amp;0x0f]; x /= base;00198     <span class="comment">// calculate remaining digits</span>00199     <span class="keywordflow">while</span>(count--)00200     {00201         <span class="keywordflow">if</span>(x != 0)00202         {00203             <span class="comment">// calculate next digit</span>00204             *--p = HexChars[(x%base)&amp;0x0f]; x /= base;00205         }00206         <span class="keywordflow">else</span>00207         {00208             <span class="comment">// no more digits left, pad out to desired length</span>00209             *--p = padchar;00210         }00211     }00212 00213     <span class="comment">// apply signed notation if requested</span>00214     <span class="keywordflow">if</span>( isSigned )00215     {00216         <span class="keywordflow">if</span>(n &lt; 0)00217         {00218             *--p = <span class="charliteral">'-'</span>;00219         }00220         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(n &gt; 0)00221         {00222             *--p = <span class="charliteral">'+'</span>;00223         }00224         <span class="keywordflow">else</span>00225         {00226             *--p = <span class="charliteral">' '</span>;00227         }00228     }00229 00230     <span class="comment">// print the string right-justified</span>00231     count = numDigits;00232     <span class="keywordflow">while</span>(count--)00233     {00234         <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(*p++);00235     }00236 }00237 00238 <span class="preprocessor">#ifdef RPRINTF_FLOAT</span>00239 <span class="preprocessor"></span><span class="comment">// *** rprintfFloat ***</span>00240 <span class="comment">// floating-point print</span>00241 <span class="keywordtype">void</span> rprintfFloat(<span class="keywordtype">char</span> numDigits, <span class="keywordtype">double</span> x)00242 {00243     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> firstplace = FALSE;00244     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> negative;00245     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i, digit;00246     <span class="keywordtype">double</span> place = 1.0;00247     00248     <span class="comment">// save sign</span>00249     negative = (x&lt;0);00250     <span class="comment">// convert to absolute value</span>00251     x = (x&gt;0)?(x):(-x);00252     00253     <span class="comment">// find starting digit place</span>00254     <span class="keywordflow">for</span>(i=0; i&lt;15; i++)00255     {00256         <span class="keywordflow">if</span>((x/place) &lt; 10.0)00257             <span class="keywordflow">break</span>;00258         <span class="keywordflow">else</span>00259             place *= 10.0;00260     }00261     <span class="comment">// print polarity character</span>00262     <span class="keywordflow">if</span>(negative)00263         <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00264     <span class="keywordflow">else</span>00265         <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'+'</span>);00266 00267     <span class="comment">// print digits</span>00268     <span class="keywordflow">for</span>(i=0; i&lt;numDigits; i++)00269     {00270         digit = (x/place);00271 00272         <span class="keywordflow">if</span>(digit | firstplace | (place == 1.0))00273         {00274             firstplace = TRUE;00275             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(digit+0x30);00276         }00277         <span class="keywordflow">else</span>00278             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">' '</span>);00279         00280         <span class="keywordflow">if</span>(place == 1.0)00281         {00282             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'.'</span>);00283         }00284         00285         x -= (digit*place);00286         place /= 10.0;00287     }00288 }00289 <span class="preprocessor">#endif</span>00290 <span class="preprocessor"></span>00291 <span class="preprocessor">#ifdef RPRINTF_SIMPLE</span>00292 <span class="preprocessor"></span><span class="comment">// *** rprintf1RamRom ***</span><span class="comment"></span>00293 <span class="comment">//! called by rprintf() - does a simple printf (supports %d, %x, %c)</span>00294 <span class="comment"></span><span class="comment">// Supports:</span>00295 <span class="comment">// %d - decimal</span>00296 <span class="comment">// %x - hex</span>00297 <span class="comment">// %c - character</span><a name="l00298"></a><a class="code" href="rprintf_8h.html#a17">00298</a> <span class="keywordtype">int</span> <a class="code" href="rprintf_8h.html#a17">rprintf1RamRom</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)00299 {00300     <span class="comment">// simple printf routine</span>00301     <span class="comment">// define a global HexChars or use line below</span>00302     <span class="comment">//static char HexChars[16] = "0123456789ABCDEF";</span>00303     <span class="keywordtype">char</span> format_flag;00304     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> u_val, div_val, base;00305     va_list ap;00306 00307     va_start(ap, format);00308     <span class="keywordflow">for</span> (;;)00309     {00310         <span class="keywordflow">while</span> ((format_flag = READMEMBYTE(stringInRom,format++) ) != <span class="charliteral">'%'</span>)00311         {   <span class="comment">// Until '%' or '\0'</span>00312             <span class="keywordflow">if</span> (!format_flag)00313             {00314                 va_end(ap);00315                 <span class="keywordflow">return</span>(0);00316             }00317             <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(format_flag);00318         }00319 00320         <span class="keywordflow">switch</span> (format_flag = READMEMBYTE(stringInRom,format++) )00321         {00322             <span class="keywordflow">case</span> <span class="charliteral">'c'</span>: format_flag = va_arg(ap,<span class="keywordtype">int</span>);00323             <span class="keywordflow">default</span>:  <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(format_flag); <span class="keywordflow">continue</span>;00324             <span class="keywordflow">case</span> <span class="charliteral">'d'</span>: base = 10; div_val = 10000; <span class="keywordflow">goto</span> CONVERSION_LOOP;00325             <span class="keywordflow">case</span> <span class="charliteral">'x'</span>: base = 16; div_val = 0x10;00326 00327             CONVERSION_LOOP:00328             u_val = va_arg(ap,<span class="keywordtype">int</span>);00329             <span class="keywordflow">if</span> (format_flag == <span class="charliteral">'d'</span>)00330             {00331                 <span class="keywordflow">if</span> (((<span class="keywordtype">int</span>)u_val) &lt; 0)00332                 {00333                     u_val = - u_val;00334                     <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(<span class="charliteral">'-'</span>);00335                 }00336                 <span class="keywordflow">while</span> (div_val &gt; 1 &amp;&amp; div_val &gt; u_val) div_val /= 10;00337             }00338             <span class="keywordflow">do</span>00339             {00340                 <a class="code" href="rprintf_8h.html#a7">rprintfChar</a>(HexChars[(u_val/div_val)]);00341                 u_val %= div_val;00342                 div_val /= base;00343             } <span class="keywordflow">while</span> (div_val);00344         }00345     }00346     va_end(ap);00347 }00348 <span class="preprocessor">#endif</span>00349 <span class="preprocessor"></span>00350 00351 <span class="preprocessor">#ifdef RPRINTF_COMPLEX</span>00352 <span class="preprocessor"></span><span class="comment">// *** rprintf2RamRom ***</span><span class="comment"></span>00353 <span class="comment">//! called by rprintf() - does a more powerful printf (supports %d, %u, %o, %x, %c, %s)</span>00354 <span class="comment"></span><span class="comment">// Supports:</span>00355 <span class="comment">// %d - decimal</span>00356 <span class="comment">// %u - unsigned decimal</span>00357 <span class="comment">// %o - octal</span>00358 <span class="comment">// %x - hex</span>00359 <span class="comment">// %c - character</span>00360 <span class="comment">// %s - strings</span>00361 <span class="comment">// and the width,precision,padding modifiers</span>00362 <span class="comment">// **this printf does not support floating point numbers</span>00363 <span class="keywordtype">int</span> rprintf2RamRom(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *sfmt, ...)00364 {00365     <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *f, *bp;00366     <span class="keyword">register</span> <span class="keywordtype">long</span> l;00367     <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> u;00368     <span class="keyword">register</span> <span class="keywordtype">int</span> i;00369     <span class="keyword">register</span> <span class="keywordtype">int</span> fmt;00370     <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> pad = <span class="charliteral">' '</span>;00371     <span class="keywordtype">int</span> flush_left = 0, f_width = 0, prec = INF, hash = 0, do_long = 0;00372     <span class="keywordtype">int</span> sign = 0;00373 00374     va_list ap;00375     va_start(ap, sfmt);00376 00377     f = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *) sfmt;00378 00379     <span class="keywordflow">for</span> (; READMEMBYTE(stringInRom,f); f++)

⌨️ 快捷键说明

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