Hallo !
Vielleicht kann von Euch einer weiter helfen.
Ich habe eine Function in "C", die muss ich nach Delphi übersetzen.:-(
Ich bekomme das nicht hin. "C" ist mir zu kompliziert.
Hier ist der C-Source
void FIRMWARE:pen()
{ if(!file.openFileName()) return ;
FILE* fp=fopen(file.name(),"r") ;
if(!fp) throw "firmware file not found" ;
int errors=0 ; for(int i=0;i<128;i++) touched[i]=false ;
char line[4096] ;
for(bool run=true;run && fgets(line,4096,fp)
{ try
{ int adr=0 ;
if(line[0]=='@')
{ if(line[5]!=':') throw ": missing" ;
if(sscanf(line+1,"%x",&adr)!=1) throw "no address" ;
if(adr&0x1FF) throw "low bits in address" ;
adr/=512 ; if(adr<0 || adr>=128) throw "bad address" ;
if(touched[adr]) throw "same page more than one time" ;
touched[adr]=true ;
for(int i=0;i<512;i++)
{ char z[3] ; z[0]=line[6+2*i] ; z[1]=line[7+2*i] ; z[2]=0 ;
int val=0 ;
if(sscanf(z,"%x",&val)!=1) throw "bad hex" ;
data[adr][i]=val ;
}
}
}
catch(const char* err)
{ protocol.msg("Error: %s in: %s",err,line) ; errors++ ; }
}
fclose(fp) ;
if(errors)
{ protocol.msg("There were %d errors encountered.",errors) ;
throw "Bad file" ;
}
}
Was ich gar nicht verstehe,
da bin ich auch mit dem Debugger durch gegangen:
if(sscanf(line+1,"%x",&adr)!=1) throw "no address" ;
Da wird einfach mit "Line" um 1 addiert und dann gibt man den Paramter "%x" an und zup hat man Hex.
Wäre sehr nett, wenn mir einer von Euch weiter helfen könnte.
Gruss Sascha
Vielleicht kann von Euch einer weiter helfen.
Ich habe eine Function in "C", die muss ich nach Delphi übersetzen.:-(
Ich bekomme das nicht hin. "C" ist mir zu kompliziert.
Hier ist der C-Source
void FIRMWARE:pen()
{ if(!file.openFileName()) return ;
FILE* fp=fopen(file.name(),"r") ;
if(!fp) throw "firmware file not found" ;
int errors=0 ; for(int i=0;i<128;i++) touched[i]=false ;
char line[4096] ;
for(bool run=true;run && fgets(line,4096,fp)
{ try
{ int adr=0 ;
if(line[0]=='@')
{ if(line[5]!=':') throw ": missing" ;
if(sscanf(line+1,"%x",&adr)!=1) throw "no address" ;
if(adr&0x1FF) throw "low bits in address" ;
adr/=512 ; if(adr<0 || adr>=128) throw "bad address" ;
if(touched[adr]) throw "same page more than one time" ;
touched[adr]=true ;
for(int i=0;i<512;i++)
{ char z[3] ; z[0]=line[6+2*i] ; z[1]=line[7+2*i] ; z[2]=0 ;
int val=0 ;
if(sscanf(z,"%x",&val)!=1) throw "bad hex" ;
data[adr][i]=val ;
}
}
}
catch(const char* err)
{ protocol.msg("Error: %s in: %s",err,line) ; errors++ ; }
}
fclose(fp) ;
if(errors)
{ protocol.msg("There were %d errors encountered.",errors) ;
throw "Bad file" ;
}
}
Was ich gar nicht verstehe,
da bin ich auch mit dem Debugger durch gegangen:
if(sscanf(line+1,"%x",&adr)!=1) throw "no address" ;
Da wird einfach mit "Line" um 1 addiert und dann gibt man den Paramter "%x" an und zup hat man Hex.
Wäre sehr nett, wenn mir einer von Euch weiter helfen könnte.
Gruss Sascha
Comment