Code:
int layers,boxes,wires,bk,s; //Dados Globais
int camadas[1000],p1,p4,pX; //o pX serve como temporario para qualquer operação posterior
unsigned long long int area_camada,boxes_camada,wires_camada; ///HERE!!!!!!
int temp,camada_actual;
float xmin,xmax,ymin,ymax;
char c,tmp[3],camadas_dados[5000],*ptr; //ptr usado para receber um digito em char de cada vez
int camadaExisteQ (int cId);
void dadosCamada (); //Mete os dados da camada no "cache"
void escreveDados(); //Grava o "cache" da camada actual
void readNext(); //Procura o proximo valor e guarda-o no argumento
(...)
void escreveDados() { //Writes the sprintf XXXXXX-XXXXXXX-XXXXXX] for the vars area_camada,boxes_camada,wires_camada
char result[2000];
sprintf(result,"%llu-%llu-%llu]",area_camada,boxes_camada,wires_camada);
printf("!*!*!*!*!*!*!%llu-%llu-%llu]",area_camada,boxes_camada,wires_camada);
strncpy(camadas_dados+p4,result,strlen(result));
printf("camada_dados+p4: %s\n",&camadas_dados[p4]);
p4 += strlen(result); //Deslocar p4 à direita
area_camada = boxes_camada = wires_camada = 0;
printf("p4: %i\n", p4);
}
void dadosCamada () { //Reads the data back to area_camada,boxes_camada,wires_camada
int s; //0 = area_camada, 1 = boxes_camada, 2 = wires_camada
bk=pX;
area_camada = boxes_camada = wires_camada = 0;
s=0;
while(camadas_dados[bk] != ']') {
printf("**BK: %c\n",camadas_dados[bk]);
if(isdigit(camadas_dados[bk])) {
area_camada = (s == 0) ? area_camada*10 + (unsigned long long int)(camadas_dados[bk] - '0') : area_camada;
boxes_camada = (s == 1) ? boxes_camada*10 + (unsigned long long int)(camadas_dados[bk] - '0') : boxes_camada;
wires_camada = (s == 2) ? wires_camada*10 + (unsigned long long int)(camadas_dados[bk] - '0') : wires_camada;
printf("c[bk]: %c \t c+bk: %i\n",camadas_dados[bk],wires_camada);
}
else s++;
bk++;
}
printf("!!!!!!!!!!!!!!!!!!!%i,%i,%i\n",area_camada,boxes_camada,wires_camada);
}