8Fermer10
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; }