-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReadGlobales.c
125 lines (104 loc) · 2.81 KB
/
ReadGlobales.c
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
/*
Programa para guardar las posiciones relativas de las referencias de todos los módulos de un layout
Ficheros de origen: el del propio layout: proyecto.kicad_pcb
*/
#include "gemelos.h"
#include "extrae.h"
#include "cambia.h"
void main(int argc, char *argv[])
{
// argv[1] fichero original .kicad_pcb
FILE *pcb; //fichero proyecto.kicad_pcb
FILE *nuevo; //fichero con las posiciones de las referencias de todos los módulos
char ficherosalida[MAXCHAR]; //tomará el nombre proyecto-ReferenciasGlobales.csv
char linea[LONG];
char modulo[LONG];
char referencia[LONG]="";
int i=0,j=0;
int k,l;
int huellastotales=0;
char ch;
int encontrado = 0;
if (argc < 2)
{
printf("\n\tSe necesitan el fichero de entrada en línea de ejecución\n");
printf("\tFichero: fichero original .kicad_pcb\n");
exit(0);
}
quitaextension(argv[1],ficherosalida);
strcat(ficherosalida,"-RelativasGlobales.csv");
/*Obtengo del fichero .kicad_pcb el número de huellas*/
if ((pcb=fopen(argv[1],"r"))==NULL)
{
printf("\nNo se puede abrir el fichero %s\n",argv[1]);
exit(0);
}
while ((fgets(linea,LONG,pcb) != NULL) && (encontrado==0))
{
strcpy(modulo, linea);
modulo[12]='\0';
if (!strcmp(modulo," (modules"))
{
encontrado = 1;
huellastotales = extraenumodulos(linea);
}
}
fclose(pcb);
printf("\n\tNúmero de huellas:%i\n",huellastotales);
char listaref[huellastotales][COL][LONG]; //Array de las coordenadas relativas de posicionado de las referencias
for (i=0; i<huellastotales ; i++) //inicializo listaref por si acaso
for(l=0; l<COL ; l++)
{
strcpy(listaref[i][l],"0");
}
if ((pcb=fopen(argv[1],"r"))==NULL)
{
printf("\nNo se puede abrir el fichero %s\n",argv[1]);
exit(0);
}
if ((nuevo=fopen(ficherosalida, "w"))==NULL)
{
printf("\nNo se puede abrir el fichero %s\n",ficherosalida);
exit(0);
}
/*Meto en el array listaref las referencias y sus posiciones relativas de todos los bloques*/
i=0; //por si acaso
while (fgets(linea,LONG,pcb) != NULL)
{
strcpy(modulo, linea);
modulo[VEINTIDOS]='\0';
if (!strcmp(modulo," (fp_text reference"))
{
extraeref(linea,referencia);
strcpy(listaref[i][0],referencia);
k=COMIENZOPOSX+strlen(referencia); //pongo el cursor de lectura del fichero en la coordenda x de l referencia
j=1; l=0;
while((ch=linea[k++])!=')') //copio posx
{
if (isspace(ch))
{
j++; l=0;
}
else
{
listaref[i][j][l++]=ch;
listaref[i][j][l]='\0';
}
}
i++;
}
}
fprintf(nuevo, "%d\n",huellastotales); //la primera línea del archivo de salida contiene el número de módulos
for(i=0; i<huellastotales ; i++)
{
for(j=0; j<COL ; j++)
{
fputs(listaref[i][j],nuevo);
fputs("\t",nuevo);
}
fputs("\n",nuevo);
}
fclose(pcb);
fclose(nuevo);
printf("\n\tFichero de posiciones relativas de referencias: %s\n\n",ficherosalida);
} //main()