-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextrae.h
137 lines (123 loc) · 2.69 KB
/
extrae.h
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
Función para obtener la referencia del componente a partir de la línea que la contiene en .kicad_pcb
Ejemplo:
De la línea (fp_text reference Y5 (at 0 2.9972) (layer F.SilkS), obtener Y5
*/
void extraeref(char linea[LONG], char referencia[LONG])
{
int i=COMIENZOREF;
int j=0;
char ch;
while(!isspace(ch=linea[i++]))
{
referencia[j++]=ch;
referencia[j]='\0';
}
} /*extraeref() */
/*
Función para obetener la referencia y el número de "part" del componente a parir de la línea que lo contiene en .sch
Ejemplo:
De la línea AR Path="/4F1C9A8B/50F712C4/50853F39" Ref="C110" Part="1" , obetener C110 y 1
*/
void extraeschparte(char linea[LONG], char referencia[LONG], char parte[LONG])
{
int i=COMIENZOSCH;
int j=0;
char ch;
while ((ch=linea[i++])!='=');
while((ch=linea[++i])!='\"')
{
referencia[j++]=ch;
referencia[j]='\0';
}
j=0;
while ((ch=linea[i++])!='=');
while((ch=linea[++i])!='\"')
{
parte[j++]=ch;
parte[j]='\0';
}
} /*extraesch() */
void extraesch(char linea[LONG], char referencia[LONG])
{
int i=COMIENZOSCH;
int j=0;
char ch;
while ((ch=linea[i++])!='=');
while((ch=linea[++i])!='\"')
{
referencia[j++]=ch;
referencia[j]='\0';
}
} /*extraesch() */
/*Función que cambia lee las coordenadas de los módulos del primer bloque*/
//Referencias y coordenadas: ref posx posy angle en posiciones[i][j]
void extraeposxposy(int numhuellas,int huellastotales,char referencia[LONG],char linea[LONG],char listaref[huellastotales][COL][LONG])
{
int k=COMIENZOPOSX;
int j=1 ;
int i,l=0;
char ch;
for (i=0; i<numhuellas; i++)
{
if (!strcmp(referencia,listaref[i][0]))
{
k+=strlen(listaref[i][0]);
while((ch=linea[k++])!=')') //copio posx
{
if (isspace(ch))
{
j++; l=0;
}
else
{
listaref[i][j][l++]=ch;
listaref[i][j][l]='\0';
}
}
}
}
} /*extraeposxposy() */
/*Obtengo las coordenadas de las huellas del primer bloque*/
void extraecoordenadas(int numhuellas, int huellastotales,char referencia[LONG],char linea[LONG],char listaref[numhuellas][COL][LONG])
{
int k=COMIENZOCOORD;
int j=1 ;
int i,l=0;
char ch;
for (i=0; i<numhuellas; i++)
{
if (!strcmp(referencia,listaref[i][0]))
{
while((ch=linea[k++])!=')') //copio coordenada x, coordenada y, ángulo
{
if (isspace(ch))
{
j++; l=0;
}
else
{
listaref[i][j][l++]=ch;
listaref[i][j][l]='\0';
}
}
}
}
} /*extraecoordenadas() */
/*
Función para obtener el número de módulos en .kicad_pcb
De la línea (modules 239), obtener 239
*/
int extraenumodulos(char linea[LONG])
{
int i=COMIENZOMODULOS;
int j=0;
char referencia[LONG];
char ch;
while((ch=linea[i++])!= ')')
{
referencia[j++]=ch;
referencia[j]='\0';
}
return (atoi(referencia));
} /*extraenumodulos() */