Il s'agit des sources que de bin2oth que j'ai reprogrammer moi même (plus besoin d'appeler une fonction dos a chaque fois...)
void ConvertToCalc(HANDLE hFileBin,char *filenamePc,char *folder,char *ext,char *filenameTi)
{
HANDLE hFile;
DWORD nb_w,nb_r;
static char *signature="**TI92P*";
static unsigned char tab[6]={0x1,0,0x52,0,0,0};
static unsigned char file_type[4]={0xC,0,3,0};
static unsigned char sequence[6]={0xA5,0x5A,0,0,0,0};
short value;
LPCH pch;
short size=0;
short control_sum=0;
int i;
char buffer_ext[8];
//on remet le pointeur de reference du fichier au debut!
SetFilePointer(hFileBin,0,NULL,FILE_BEGIN);
hFile=CreateFile(filenamePc,GENERIC_WRITE|GENERIC_READ,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if(hFile!=(HANDLE)INVALID_HANDLE_VALUE)
{
//ecriture de la signature
WriteFile(hFile,signature,8,&nb_w,NULL);
//ecriture de la sequence 01 00 (correspond a (SHORT)1
value=1;
WriteFile(hFile,&value,sizeof(short),&nb_w,NULL);
//nom du repertoire:
WriteFile(hFile,folder,strlen(folder),&nb_w,NULL);
//on saute a 0x3A
SetFilePointer(hFile,0x3A,NULL,FILE_BEGIN);
WriteFile(hFile,tab,6,&nb_w,NULL);
//nom du fichier
WriteFile(hFile,filenameTi,strlen(filenameTi),&nb_w,NULL);
SetFilePointer(hFile,0x48,NULL,FILE_BEGIN);
//type du fichier... dans notre cas
WriteFile(hFile,file_type,4,&nb_w,NULL);
//taille du fichier PC mis plus tard (a la fin)
SetFilePointer(hFile,0x50,NULL,FILE_BEGIN);
WriteFile(hFile,sequence,6,&nb_w,NULL);
//taille du fichier on calc sur 2 octet mis plus tard...
SetFilePointer(hFile,0x58,NULL,FILE_BEGIN);
//copie des données brute..
pch = (LPCH) LocalAlloc(LPTR, sizeof(char) * 2048);//allocation buffer
do
{
ReadFile(hFileBin, pch, sizeof(char) * 2048, &nb_r,(LPOVERLAPPED) NULL);
WriteFile(hFile,pch,nb_r,&nb_w,(LPOVERLAPPED) NULL);
size+=nb_r;
} while (nb_r);
buffer_ext[0]=0;
sprintf(buffer_ext+1,"%s",ext);
buffer_ext[strlen(ext)+2]=0xF8;//OTH tag
WriteFile(hFile,buffer_ext,strlen(ext)+3,&nb_w,NULL);
size+=strlen(ext)+3;
//on se repositionne
SetFilePointer(hFile,0x56,NULL,FILE_BEGIN);
//on ecrit la taille du fichier on calc
write_short(hFile,size);
//calcul de la somme de control
SetFilePointer(hFile,0x56,NULL,FILE_BEGIN);
do
{
ReadFile(hFile, pch, sizeof(char) * 2048, &nb_r,(LPOVERLAPPED) NULL);
for(i=0;i<nb_r;i++)
control_sum+=*((unsigned char *)pch+i);
} while (nb_r);
//on ecrit la somme de controle a la fin du fichier
SetFilePointer(hFile,0,NULL,FILE_END);
WriteFile(hFile,&control_sum,sizeof(short),&nb_w,NULL);
CloseHandle(hFile);//on ferme le fichier
}
else
MessageBox(NULL,"Ne peut pas creer le fichier!","Erreur fichier",MB_OK|MB_ICONERROR);
}
en esperant qu'il sera utile a certain