1

Bon voila une source qui peut etre sympa...
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
Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com

2

Euh... Je précise que ce n'est pas du C portable, mais du Win32. sad
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

tres utile, ca me fait penser a un ptit programme tiens smile

4

En tout cas, pour les petits convertisseurs en ligne de commande, merci de les écrire en C portable! (fopen etc., c'est pour les chiens?) Dans le cas de MasterGB, il utilise aussi l'API Win32 à d'autres endroits (interface graphique), mais pour le traîtement de fichiers, ce n'est vraiment pas nécessaire.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

erf .. il prog comme il veut..

6

Très gentil de penser aux utilisateurs de Linux... roll
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

bein ca c'est a lui de voir smile

8

Oui c'est vrai c'est compatible Win32 mais le portage en C standart est facile...
Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com

9

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; }
Si dieux existe alors Armin van Buuren en est 1!!
Pour me contacter sur msn:mastergb@hotmail.com

10

De tte facon, qu'est-ce que t'en a à foutre des utilisateurs de Linux ... :P
S'ils sont pas contents, ils passent sous Windows tripo

11

avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

12

bon, yAro, faudra mettre une balise [ironie][/ironie] pke certains ne comprennent pas grin

13

14

./12> j'avais compris, mais c pas une raison
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

15

J'avais compris aussi #9, mais ça n'est pas très fin...
#12 est grossier, le fait de marquer "humour" n'y change rien...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

16

psssssssss dsl maman

17

9>C'est vrai que j'ai vu plus fin et c'est pas très flagrant. Beaucoup de personne ont pu mal l'interpreter.
avatar

18

Je reconnais et c'est tres fin justement si peu de monde a pu se tromper grin
Mais en tt cas, c'est pas la première fois que j'en fais des comme ça ici ... tripo

19

pssssssssssssssssssssssssssssssssss

20

de retour dans le source: pourquoi utiliser alloca pour allouer dans la pile alors qu'un simple malloc ou calloc suffirait?
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

21

L'allocation sur la pile est plus efficace.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

AH... merci...
J'aurais cru le contraire, mais c'était une idée reçue. Et puis, sur un PC, les piles peuvent être grandes...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.