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

📄 rprintf_8c-source.html

📁 ATMEL的AVR单片机库文件
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00585 <span class="comment">// code below this line is commented out and can be ignored</span>00586 <span class="comment">//******************************************************************************</span>00587 <span class="comment">/*</span>00588 <span class="comment">char* sprintf(const char *sfmt, ...)</span>00589 <span class="comment">{</span>00590 <span class="comment">    register unsigned char *f, *bp, *str;</span>00591 <span class="comment">    register long l;</span>00592 <span class="comment">    register unsigned long u;</span>00593 <span class="comment">    register int i;</span>00594 <span class="comment">    register int fmt;</span>00595 <span class="comment">    register unsigned char pad = ' ';</span>00596 <span class="comment">    int     flush_left = 0, f_width = 0, prec = INF, hash = 0, do_long = 0;</span>00597 <span class="comment">    int     sign = 0;</span>00598 <span class="comment"></span>00599 <span class="comment">    va_list ap;</span>00600 <span class="comment">    va_start(ap, sfmt);</span>00601 <span class="comment"></span>00602 <span class="comment">    str = bufstring;</span>00603 <span class="comment">    f = (unsigned char *) sfmt;</span>00604 <span class="comment"></span>00605 <span class="comment">    for (; *f; f++)</span>00606 <span class="comment">    {</span>00607 <span class="comment">        if (*f != '%')</span>00608 <span class="comment">        {                               // not a format character</span>00609 <span class="comment">            *str++ = (*f);          // then just output the char</span>00610 <span class="comment">        }</span>00611 <span class="comment">        else </span>00612 <span class="comment">        {</span>00613 <span class="comment">            f++;                        // if we have a "%" then skip it</span>00614 <span class="comment">            if (*f == '-')</span>00615 <span class="comment">            {</span>00616 <span class="comment">                flush_left = 1; // minus: flush left</span>00617 <span class="comment">                f++;</span>00618 <span class="comment">            }</span>00619 <span class="comment">            if (*f == '0' || *f == '.')</span>00620 <span class="comment">                {</span>00621 <span class="comment">                    // padding with 0 rather than blank</span>00622 <span class="comment">                    pad = '0';</span>00623 <span class="comment">                    f++;</span>00624 <span class="comment">            }</span>00625 <span class="comment">            if (*f == '*')</span>00626 <span class="comment">                {   // field width</span>00627 <span class="comment">                    f_width = va_arg(ap, int);</span>00628 <span class="comment">                    f++;</span>00629 <span class="comment">            }</span>00630 <span class="comment">            else if (Isdigit(*f))</span>00631 <span class="comment">                {</span>00632 <span class="comment">                    f_width = atoi((char *) f);</span>00633 <span class="comment">                    while (Isdigit(*f))</span>00634 <span class="comment">                        f++;        // skip the digits</span>00635 <span class="comment">            }</span>00636 <span class="comment">            if (*f == '.')</span>00637 <span class="comment">                {   // precision</span>00638 <span class="comment">                    f++;</span>00639 <span class="comment">                    if (*f == '*')</span>00640 <span class="comment">                    {</span>00641 <span class="comment">                        prec = va_arg(ap, int);</span>00642 <span class="comment">                        f++;</span>00643 <span class="comment">                    }</span>00644 <span class="comment">                    else if (Isdigit(*f))</span>00645 <span class="comment">                    {</span>00646 <span class="comment">                        prec = atoi((char *) f);</span>00647 <span class="comment">                        while (Isdigit(*f))</span>00648 <span class="comment">                            f++;    // skip the digits</span>00649 <span class="comment">                    }</span>00650 <span class="comment">                }</span>00651 <span class="comment">            if (*f == '#')</span>00652 <span class="comment">                {   // alternate form</span>00653 <span class="comment">                    hash = 1;</span>00654 <span class="comment">                    f++;</span>00655 <span class="comment">            }</span>00656 <span class="comment">            if (*f == 'l')</span>00657 <span class="comment">                {   // long format</span>00658 <span class="comment">                    do_long = 1;</span>00659 <span class="comment">                    f++;</span>00660 <span class="comment">            }</span>00661 <span class="comment"></span>00662 <span class="comment">                fmt = *f;</span>00663 <span class="comment">                bp = buf;</span>00664 <span class="comment">                switch (fmt) {      // do the formatting</span>00665 <span class="comment">                case 'd':           // 'd' signed decimal</span>00666 <span class="comment">                    if (do_long)</span>00667 <span class="comment">                        l = va_arg(ap, long);</span>00668 <span class="comment">                    else</span>00669 <span class="comment">                        l = (long) (va_arg(ap, int));</span>00670 <span class="comment">                    if (l &lt; 0)</span>00671 <span class="comment">                    {</span>00672 <span class="comment">                        sign = 1;</span>00673 <span class="comment">                        l = -l;</span>00674 <span class="comment">                    }</span>00675 <span class="comment">                    do  {</span>00676 <span class="comment">                        *bp++ = l % 10 + '0';</span>00677 <span class="comment">                    } while ((l /= 10) &gt; 0);</span>00678 <span class="comment">                    if (sign)</span>00679 <span class="comment">                        *bp++ = '-';</span>00680 <span class="comment">                    f_width = f_width - (bp - buf);</span>00681 <span class="comment">                    if (!flush_left)</span>00682 <span class="comment">                        while (f_width-- &gt; 0)</span>00683 <span class="comment">                            *str++ = (pad);</span>00684 <span class="comment">                    for (bp--; bp &gt;= buf; bp--)</span>00685 <span class="comment">                        *str++ = (*bp);</span>00686 <span class="comment">                    if (flush_left)</span>00687 <span class="comment">                        while (f_width-- &gt; 0)</span>00688 <span class="comment">                            *str++ = (' ');</span>00689 <span class="comment">                    break;</span>00690 <span class="comment">            case 'o':           // 'o' octal number</span>00691 <span class="comment">            case 'x':           // 'x' hex number</span>00692 <span class="comment">            case 'u':           // 'u' unsigned decimal</span>00693 <span class="comment">                    if (do_long)</span>00694 <span class="comment">                        u = va_arg(ap, unsigned long);</span>00695 <span class="comment">                    else</span>00696 <span class="comment">                        u = (unsigned long) (va_arg(ap, unsigned));</span>00697 <span class="comment">                    if (fmt == 'u')</span>00698 <span class="comment">                    {   // unsigned decimal</span>00699 <span class="comment">                        do {</span>00700 <span class="comment">                            *bp++ = u % 10 + '0';</span>00701 <span class="comment">                        } while ((u /= 10) &gt; 0);</span>00702 <span class="comment">                    }</span>00703 <span class="comment">                    else if (fmt == 'o')</span>00704 <span class="comment">                    {  // octal</span>00705 <span class="comment">                        do {</span>00706 <span class="comment">                            *bp++ = u % 8 + '0';</span>00707 <span class="comment">                        } while ((u /= 8) &gt; 0);</span>00708 <span class="comment">                        if (hash)</span>00709 <span class="comment">                            *bp++ = '0';</span>00710 <span class="comment">                    }</span>00711 <span class="comment">                    else if (fmt == 'x')</span>00712 <span class="comment">                    {   // hex</span>00713 <span class="comment">                        do {</span>00714 <span class="comment">                            i = u % 16;</span>00715 <span class="comment">                            if (i &lt; 10)</span>00716 <span class="comment">                                *bp++ = i + '0';</span>00717 <span class="comment">                            else</span>00718 <span class="comment">                                *bp++ = i - 10 + 'a';</span>00719 <span class="comment">                        } while ((u /= 16) &gt; 0);</span>00720 <span class="comment">                        if (hash)</span>00721 <span class="comment">                        {</span>00722 <span class="comment">                            *bp++ = 'x';</span>00723 <span class="comment">                            *bp++ = '0';</span>00724 <span class="comment">                        }</span>00725 <span class="comment">                    }</span>00726 <span class="comment">                    i = f_width - (bp - buf);</span>00727 <span class="comment">                    if (!flush_left)</span>00728 <span class="comment">                        while (i-- &gt; 0)</span>00729 <span class="comment">                            *str++ = (pad);</span>00730 <span class="comment">                    for (bp--; bp &gt;= buf; bp--)</span>00731 <span class="comment">                        *str++ = ((int) (*bp));</span>00732 <span class="comment">                    if (flush_left)</span>00733 <span class="comment">                        while (i-- &gt; 0)</span>00734 <span class="comment">                            *str++ = (' ');</span>00735 <span class="comment">                    break;</span>00736 <span class="comment">            case 'c':           // 'c' character</span>00737 <span class="comment">                    i = va_arg(ap, int);</span>00738 <span class="comment">                    *str++ = ((int) (i));</span>00739 <span class="comment">                    break;</span>00740 <span class="comment">            case 's':           // 's' string</span>00741 <span class="comment">                    bp = va_arg(ap, unsigned char *);</span>00742 <span class="comment">                    if (!bp)</span>00743 <span class="comment">                        bp = (unsigned char *) "(nil)";</span>00744 <span class="comment">                    f_width = f_width - strlen((char *) bp);</span>00745 <span class="comment">                    if (!flush_left)</span>00746 <span class="comment">                        while (f_width-- &gt; 0)</span>00747 <span class="comment">                            *str++ = (pad);</span>00748 <span class="comment">                    for (i = 0; *bp &amp;&amp; i &lt; prec; i++)</span>00749 <span class="comment">                    {</span>00750 <span class="comment">                        *str++ = (*bp);</span>00751 <span class="comment">                        bp++;</span>00752 <span class="comment">                    }</span>00753 <span class="comment">                    if (flush_left)</span>00754 <span class="comment">                        while (f_width-- &gt; 0)</span>00755 <span class="comment">                            *str++ = (' ');</span>00756 <span class="comment">                    break;</span>00757 <span class="comment">            case '%':           // '%' character</span>00758 <span class="comment">                    *str++ = ('%');</span>00759 <span class="comment">                    break;</span>00760 <span class="comment">            }</span>00761 <span class="comment">            flush_left = 0, f_width = 0, prec = INF, hash = 0, do_long = 0;</span>00762 <span class="comment">            sign = 0;</span>00763 <span class="comment">            pad = ' ';</span>00764 <span class="comment">        }</span>00765 <span class="comment">    }</span>00766 <span class="comment"></span>00767 <span class="comment">    va_end(ap);</span>00768 <span class="comment">    // terminate string with null</span>00769 <span class="comment">    *str++ = '\0';</span>00770 <span class="comment">    return bufstring;</span>00771 <span class="comment">}</span>00772 <span class="comment"></span>00773 <span class="comment">*/</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Oct 15 03:50:22 2004 for Procyon AVRlib by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.6 </small></address></body></html>

⌨️ 快捷键说明

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