OpenCores
URL https://opencores.org/ocsvn/ao486/ao486/trunk

Subversion Repositories ao486

[/] [ao486/] [trunk/] [syn/] [components/] [sd_card/] [firmware/] [bsp/] [HAL/] [src/] [alt_printf.c] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 alfik
/******************************************************************************
2
*                                                                             *
3
* License Agreement                                                           *
4
*                                                                             *
5
* Copyright (c) 2006 Altera Corporation, San Jose, California, USA.           *
6
* All rights reserved.                                                        *
7
*                                                                             *
8
* Permission is hereby granted, free of charge, to any person obtaining a     *
9
* copy of this software and associated documentation files (the "Software"),  *
10
* to deal in the Software without restriction, including without limitation   *
11
* the rights to use, copy, modify, merge, publish, distribute, sublicense,    *
12
* and/or sell copies of the Software, and to permit persons to whom the       *
13
* Software is furnished to do so, subject to the following conditions:        *
14
*                                                                             *
15
* The above copyright notice and this permission notice shall be included in  *
16
* all copies or substantial portions of the Software.                         *
17
*                                                                             *
18
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  *
19
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,    *
20
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
21
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      *
22
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING     *
23
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER         *
24
* DEALINGS IN THE SOFTWARE.                                                   *
25
*                                                                             *
26
* This agreement shall be governed in all respects by the laws of the State   *
27
* of California and by the laws of the United States of America.              *
28
*                                                                             *
29
* Altera does not recommend, suggest or require that this reference design    *
30
* file be used in conjunction or combination with any other product.          *
31
******************************************************************************/
32
 
33
/*
34
 * This file provides a very minimal printf implementation for use with very
35
 * small applications.  Only the following format strings are supported:
36
 *   %x
37
 *   %s
38
 *   %c
39
 *   %%
40
 */
41
 
42
#include <stdarg.h>
43
#include "sys/alt_stdio.h"
44
 
45
/*
46
 * ALT printf function
47
 */
48
void
49
alt_printf(const char* fmt, ... )
50
{
51
        va_list args;
52
        va_start(args, fmt);
53
    const char *w;
54
    char c;
55
 
56
    /* Process format string. */
57
    w = fmt;
58
    while ((c = *w++) != 0)
59
    {
60
        /* If not a format escape character, just print  */
61
        /* character.  Otherwise, process format string. */
62
        if (c != '%')
63
        {
64
            alt_putchar(c);
65
        }
66
        else
67
        {
68
            /* Get format character.  If none     */
69
            /* available, processing is complete. */
70
            if ((c = *w++) != 0)
71
            {
72
                if (c == '%')
73
                {
74
                    /* Process "%" escape sequence. */
75
                    alt_putchar(c);
76
                }
77
                else if (c == 'c')
78
                {
79
                    int v = va_arg(args, int);
80
                    alt_putchar(v);
81
                }
82
                else if (c == 'x')
83
                {
84
                    /* Process hexadecimal number format. */
85
                    unsigned long v = va_arg(args, unsigned long);
86
                    unsigned long digit;
87
                    int digit_shift;
88
 
89
                    /* If the number value is zero, just print and continue. */
90
                    if (v == 0)
91
                    {
92
                        alt_putchar('0');
93
                        continue;
94
                    }
95
 
96
                    /* Find first non-zero digit. */
97
                    digit_shift = 28;
98
                    while (!(v & (0xF << digit_shift)))
99
                        digit_shift -= 4;
100
 
101
                    /* Print digits. */
102
                    for (; digit_shift >= 0; digit_shift -= 4)
103
                    {
104
                        digit = (v & (0xF << digit_shift)) >> digit_shift;
105
                        if (digit <= 9)
106
                            c = '0' + digit;
107
                        else
108
                            c = 'a' + digit - 10;
109
                        alt_putchar(c);
110
                    }
111
                }
112
                else if (c == 's')
113
                {
114
                    /* Process string format. */
115
                    char *s = va_arg(args, char *);
116
 
117
                    while(*s)
118
                      alt_putchar(*s++);
119
                }
120
            }
121
            else
122
            {
123
                break;
124
            }
125
        }
126
    }
127
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.