You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.2 KiB
120 lines
2.2 KiB
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "parts.h"
|
|
|
|
/*
|
|
part known[] = {
|
|
{"XC18V01","f5034093","0ffeffff","alg_18V",0x3FC0},
|
|
{"XC2S100","f0614093","0fffffff","alg_VIRTEX",0l},
|
|
{NULL,NULL,NULL,NULL,0l}
|
|
};
|
|
*/
|
|
#define TOKDELIM " \t/,;.\n"
|
|
|
|
part *
|
|
text_to_part(char *text)
|
|
{
|
|
part temp, *ret;
|
|
char *token;
|
|
|
|
token=strtok(text,TOKDELIM);
|
|
if (token==NULL) return NULL;
|
|
temp.name=strdup(token);
|
|
|
|
token=strtok(NULL,TOKDELIM);
|
|
if (token==NULL) return NULL;
|
|
temp.id=strdup(token);
|
|
|
|
token=strtok(NULL,TOKDELIM);
|
|
if (token==NULL) return NULL;
|
|
temp.idmask=strdup(token);
|
|
|
|
token=strtok(NULL, TOKDELIM);
|
|
if (token==NULL) return NULL;
|
|
temp.alg_tpl=strdup(token);
|
|
|
|
token=strtok(NULL, TOKDELIM);
|
|
if (token==NULL) return NULL;
|
|
temp.bsize=strdup(token);
|
|
|
|
token=strtok(NULL,TOKDELIM);
|
|
if (token==NULL) return NULL;
|
|
temp.msize=strtol(token,NULL,0);
|
|
|
|
|
|
if((ret=(part *)malloc(sizeof(part)))==NULL)
|
|
{
|
|
fprintf(stderr,"Cannot asign memory needed for a part\n");
|
|
return NULL;
|
|
}
|
|
*ret=temp;
|
|
return ret;
|
|
}
|
|
|
|
|
|
int
|
|
select_part_from_file(char *name, char *file, part **ret)
|
|
{
|
|
char buff[1000];
|
|
FILE *fp;
|
|
|
|
if((fp=fopen(file,"rt"))==NULL)
|
|
{
|
|
fprintf(stderr,"Unable to open devices file %s.\n",file);
|
|
return 1;
|
|
}
|
|
|
|
fgets(buff,1000,fp);
|
|
|
|
while(!feof(fp))
|
|
{
|
|
if (strncasecmp(buff,"//",2) && (buff[0]!='\n')) /*If its not a comment*/
|
|
{ /* or a blank line ...*/
|
|
*ret=text_to_part(buff);
|
|
if (*ret==NULL)
|
|
fprintf(stderr,"Invalid line inside device file: %s\n",buff);
|
|
else if (!strcasecmp(name,(*ret)->name))
|
|
{ /* FOUND! */
|
|
fclose(fp);
|
|
return 0;
|
|
}
|
|
}
|
|
fgets(buff,1000,fp);
|
|
}
|
|
|
|
*ret=NULL;
|
|
fprintf(stderr,"Device not found inside device file: %s\n",name);
|
|
fclose(fp);
|
|
return 1;
|
|
}
|
|
|
|
/*
|
|
int
|
|
select_part_by_name(char *name, part **ret)
|
|
{
|
|
int found=0;
|
|
part *r;
|
|
|
|
r=known;
|
|
|
|
while (r->name && !found)
|
|
{
|
|
if (!strcasecmp(r->name,name))
|
|
found=1;
|
|
else
|
|
r++;
|
|
}
|
|
|
|
if (!found)
|
|
{
|
|
fprintf(stderr,"Device not found %s\n",name);
|
|
return 1;
|
|
}
|
|
|
|
*ret=r;
|
|
|
|
return 0;
|
|
}
|
|
|
|
*/
|