mastergb1Le 19/07/2003 à 16:18
comme demandé par kevin l'equivalent en C standart...
Vous pouvez vous apercevoir que c'est la même chose....
#include <stdio.h>
#include <string.h>
#include <malloc.h>
void ConvertToCalc(FILE *fichier_binaire,char *filenamePc,char *folder,char *ext,char *filenameTi)
{
FILE *fichier;
int 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;
char *pch;
short size=0;
short control_sum=0;
int i;
char buffer_ext[8];
//on remet le pointeur de reference du fichier au debut!
fseek(fichier_binaire,0,SEEK_SET); //on repositionne
fichier=fopen(filenamePc,"wb");
if(fichier)
{
//ecriture de la signature
fwrite(signature, sizeof(char),8,fichier);
//ecriture de la sequence 01 00 (correspond a (SHORT)1
value=1;
fwrite(&value, sizeof(short),1,fichier);
//nom du repertoire:
fwrite(folder, sizeof(char),strlen(folder),fichier);
//on saute a 0x3A
fseek(fichier,0x3A,SEEK_SET);
fwrite(tab, sizeof(char),6,fichier);
//nom du fichier
fwrite(filenameTi, sizeof(char),strlen(filenameTi),fichier);
fseek(fichier,0x48,SEEK_SET);
//type du fichier... dans notre cas
fwrite(file_type, sizeof(char),4,fichier);
//taille du fichier PC mis plus tard (a la fin)
fseek(fichier,0x50,SEEK_SET);
fwrite(sequence, sizeof(char),6,fichier);
//taille du fichier on calc sur 2 octet mis plus tard...
fseek(fichier,0x58,SEEK_SET);
//copie des données brute..
pch=(char *)alloca(sizeof(char) * 2048);
do
{
nb_r=fread(pch,sizeof(char),2048,fichier_binaire);
fwrite(pch,sizeof(char),nb_r,fichier);
size+=nb_r;
} while (nb_r);
buffer_ext[0]=0;
sprintf(buffer_ext+1,"%s",ext);
buffer_ext[strlen(ext)+2]=(char)0xF8;//OTH tag
fwrite(buffer_ext,sizeof(char),strlen(ext)+3,fichier);
size+=strlen(ext)+3;
//on se repositionne
fseek(fichier,0x56,SEEK_SET);
//on ecrit la taille du fichier on calc
//l'ecriture d'un short est inversé sur ti!
fputc(size/256,fichier);
fputc(size%256,fichier);
//calcul de la somme de control
fseek(fichier,0x56,SEEK_SET);
do
{
nb_r=fread(pch,sizeof(char),2048,fichier);
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
fseek(fichier,0,SEEK_END);
fwrite(&control_sum,sizeof(short),1,fichier);
fclose(fichier);
}
else
printf("Ne peut pas creer le fichier %s !\n",filenamePc);
//MessageBox(NULL,"Ne peut pas creer le fichier!","Erreur fichier",MB_OK|MB_ICONERROR);
}
int main(int argc, char* argv[])
{
FILE *fichier_binaire;
if((fichier_binaire=fopen(argv[1],"rw")))
{
ConvertToCalc(fichier_binaire,argv[2],argv[3],argv[4],argv[5]);
}
else
printf("ne pas pas trouver %s\n",argv[1]);
return 0;
}