#include #include int main(int argc,char **argv){ char sstr[256],tmp[80]; FILE *fsrc,*fhexo,*fhexe; int i,dat,dnum,addr,alen,sumo,sume,offset; if(argc<=3){ fprintf(stderr,"usase:%s src.s dste.hex dsto.hex [offset]\n",argv[0]); exit(-1); } if((fsrc=fopen(argv[1],"r"))==NULL){ fprintf(stderr,"%s: Can't open file %s.\n",argv[0],argv[1]); exit(1); } if((fhexe=fopen(argv[2],"w"))==NULL){ fprintf(stderr,"%s: Can't open file %s.\n",argv[0],argv[2]); exit(1); } if((fhexo=fopen(argv[3],"w"))==NULL){ fprintf(stderr,"%s: Can't open file %s.\n",argv[0],argv[3]); exit(1); } if(argc>4)sscanf(argv[4],"%x",&offset); else offset=0; while(fgets(sstr,255,fsrc)!=NULL){ for(i=0;i<8;i++)tmp[i]=sstr[i+4]; alen=8; sumo=0; sume=0; switch(sstr[1]){ case '1' : tmp[4]='\0'; alen-=2; case '2' : tmp[6]='\0'; alen-=2; case '3' : tmp[8]='\0'; sscanf(tmp,"%x",&addr); addr+=offset; addr&=0x1ffff; tmp[0]=sstr[2]; tmp[1]=sstr[3]; tmp[2]='\0'; sscanf(tmp,"%x",&dnum); fprintf(fhexe,":%02x%04x00",(dnum-3)/2,addr/2); sumo+=((dnum-3)/2)&0x0ff; sumo+=((addr/2)&0x0ff00)>>8; sumo+=(addr/2)&0x0ff; fprintf(fhexo,":%02x%04x00",(dnum-3)/2,addr/2); sume=sumo; for(i=0;i<(dnum-3)/2;i++){ tmp[0]=sstr[4+alen+(4*i)]; tmp[1]=sstr[4+alen+(4*i)+1]; sscanf(tmp,"%x",&dat); fprintf(fhexo,"%02x",dat); sumo+=dat; tmp[0]=sstr[4+alen+(4*i)+2]; tmp[1]=sstr[4+alen+(4*i)+3]; sscanf(tmp,"%x",&dat); fprintf(fhexe,"%02x",dat); sume+=dat; } fprintf(fhexe,"%02x\n",((~sume)+1)&0x0ff); fprintf(fhexo,"%02x\n",((~sumo)+1)&0x0ff); break; default: break; } } fprintf(fhexe,":00000001FF\n"); fprintf(fhexo,":00000001FF\n"); fclose(fhexe); fclose(fhexo); return 0; }