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

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [lista/] [cadena__f.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mrdmkg
#include "lista.h"
2
#include <stdarg.h>
3
 
4
void cadena__f(void *scrive(char *, nN), char *cadena, ...)
5
{
6
 va_list va_lista;
7
 va_start(va_lista, cadena);
8
 nN limite_indise = nN_cuantia__ccadena(cadena);
9
 
10
 n8 cuantia_;
11
 #define carater_cuantia 32
12
 char carater[carater_cuantia];
13
 char *cadena_;
14
 n8 valua;
15
 nN alinia;
16
 n1 bool_esatia;
17
 char *comensa;
18
 nN i=0;
19
 while(i<limite_indise)
20
 {
21
 
22
  switch(cadena[i])
23
  {
24
   default:
25
    comensa=cadena+i;
26
    while((cadena[i]!='\\')&&(cadena[i]!='%')&&(i<limite_indise)) { i++; }
27
    scrive(comensa, (cadena+i)-comensa);
28
    break;
29
 
30
   case '\\':
31
    i++;
32
 
33
    switch(cadena[i])
34
    {
35
     default:
36
      comensa=cadena+i++;
37
      while((cadena[i]!='\\')&&(cadena[i]!='%')&&(i<limite_indise)) { i++; }
38
      scrive(comensa, (cadena+i)-comensa);
39
      break;
40
 
41
     case 'n':
42
      i++;
43
      carater[0]=0x0a;
44
      scrive(carater, 1);
45
      break;
46
    }
47
    break;
48
 
49
   case '%':
50
    i++;
51
 
52
    if(cadena[i]=='.')
53
    {
54
     i++;
55
     bool_esatia=1;
56
    }
57
    else
58
    {
59
     bool_esatia=0;
60
    }
61
 
62
    if(cadena[i]=='*')
63
    {
64
     i++;
65
     alinia=va_arg(va_lista, n4); //*__ nN depende de arci
66
    }
67
    else
68
    {
69
     alinia=0;
70
    }
71
 
72
    switch(cadena[i])
73
    {
74
     case 'x':
75
      i++;
76
      valua=va_arg(va_lista, n8);
77
      cuantia_=asciiexadesimal__n8((n1 *)(carater+(carater_cuantia-1)), valua);
78
      alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
79
 
80
      if(bool_esatia!=0)
81
      {
82
       carater[0]='0';
83
      }
84
      else
85
      {
86
       carater[0]=' ';
87
      }
88
 
89
      for(; alinia>0; alinia--)
90
      {
91
       scrive(carater,1);
92
      }
93
 
94
      scrive(carater+carater_cuantia-cuantia_, cuantia_);
95
      break;
96
 
97
     case 'd':
98
      i++;
99
      valua=va_arg(va_lista, n8);
100
      cuantia_=asciidesimal__n8((n1 *)(carater+(carater_cuantia-1)), valua);
101
      alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
102
 
103
      if(bool_esatia!=0)
104
      {
105
       carater[0]='0';
106
      }
107
      else
108
      {
109
       carater[0]=' ';
110
      }
111
 
112
      for(; alinia>0; alinia--)
113
      {
114
       scrive(carater,1);
115
      }
116
 
117
      scrive(carater+carater_cuantia-cuantia_, cuantia_);
118
      break;
119
 
120
     case 'c':
121
      i++;
122
      carater[1]=(n1)va_arg(va_lista, nN);
123
      alinia=(alinia>1) ? alinia-1 : 0;
124
 
125
      for(carater[0]=' '; alinia>0; alinia--)
126
      {
127
       scrive(carater,1);
128
      }
129
 
130
      scrive(carater+1, 1);
131
      break;
132
 
133
     case 's':
134
      i++;
135
      cadena_=va_arg(va_lista, char *);
136
      cuantia_=nN_cuantia__ccadena(cadena_);
137
      alinia=(alinia!=0) ? alinia : cuantia_;
138
      cuantia_=(alinia>cuantia_) ? cuantia_ : alinia;
139
      alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
140
 
141
      for(carater[0]=' '; alinia>0; alinia--)
142
      {
143
       scrive(carater,1);
144
      }
145
 
146
      scrive(cadena_, cuantia_);
147
      break;
148
    }
149
    break;
150
  }
151
 }
152
 va_end(va_lista);
153
}

powered by: WebSVN 2.1.0

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