-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprintf.c
More file actions
68 lines (57 loc) · 1.28 KB
/
printf.c
File metadata and controls
68 lines (57 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
* _printf.c
*
* clásica función printf simplificada y adaptada al MCF5272
*
* Adaptado por Miguel Morales
*/
#include "stdarg.h"
#include "m5272lib.h"
#include "printf.h"
/* conversión a minúsculas de una letra */
#define MINUSCULAS(c) (((c >= 'A') && (c <= 'Z'))? c+= 'a'-'A' : c)
/*==============================*/
void _printf(char *formato,...)
/*==============================*/
{
/* tipos simples que soporta _printf */
// char caracter;
char *texto;
int entero;
va_list args;
/* le indicamos que el último argumento fijo es formato */
va_start(args,formato);
/* recorremos toda la cadena de formato */
while (*formato != '\0') {
/* si encontramos indicios de querer representar un tipo */
if (*formato == '%') {
formato++;
/* lo convertimos a minúsculas */
switch (MINUSCULAS(*formato)) {
/* int */
case 'd':
case 'i': entero = va_arg(args,int);
outNum(10,entero,0);
break;
/* char
case 'c': caracter = va_arg(args,char);
outch(caracter);
break;
*/
/* char * */
case 's': texto = va_arg(args,char*);
output(texto);
break;
/* símbolo % */
case '%': outch(*formato);
break;
}
}
/* si no representamos el caracter */
else
outch(*formato);
formato++;
}
/* fin de los argumentos */
va_end(args);
}