Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » allege (11 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Benjy Ecrit le: Lundi 28 juin 2004 à 19:00 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


voila j'ai ce code la mais je sait que c'est lourd avec les fopen je ne sait pas utiliser avec vat.h quelque pourrai me l'optimiser merci
void* cree_un_nouveau_fichier(char* nom,short taille) 

HANDLE h=HeapAlloc(taille+2); 
void* vptr=HeapDeref((DerefSym (SymAdd (SYMSTR(nom))))->handle=h); 
*(unsigned short *)vptr=(unsigned short)taille; 
return (vptr+2); 
}

void* adresse_dun_fichier(char* nom) 

return HeapDeref(SymFindPtr(SYMSTR(nom),0)->handle); 
}

short degroup(char *nom_du_fichier_groupe)
{
void *ptr;
FILE *f=fopen(nom_du_fichier_groupe,"rb");
if(f==NULL)return 0;
short i,taille=0,nombre_de_fichier_a_traiter=fgetc(f);
char *buffer=malloc(18*sizeof(char));
for(i=0;i<nombre_de_fichier_a_traiter;i++)
{
fread(&taille,2,1,f);

fread(buffer,1,18,f);
ptr=cree_un_nouveau_fichier(buffer,taille);
fread(ptr,taille,1,f);
}
fclose(f);
return 1;
}
Le langage C y'a pas mieux!!!
    
./Post n°1   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 28 juin 2004 à 20:37 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Avant de vouloir optimiser, il faudrait déjà corriger les grosses erreurs!
Ça:
void* vptr=HeapDeref((DerefSym (SymAdd (SYMSTR(nom))))->handle=h);
ça ne va pas du tout! Il faut vérifier le succès de commandes comme HeapAlloc ou SymAdd!!! Tu ne sais jamais s'il y a assez de mémoire ou pas. Là, ton programme va planter méchamment s'il n'y a pas assez de mémoire ou si le nom est mauvais.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°2   Marquer comme non lu.
Benjy Ecrit le: Lundi 28 juin 2004 à 20:44 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


eu comment on verifi???
Le langage C y'a pas mieux!!!
    
./Post n°3   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 28 juin 2004 à 20:45 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


C'est dans la doc...

HANDLE HeapAlloc (unsigned long Size);
[...]
Returns H_NULL if there is not enough memory.


In case of an error, SymAdd returns HS_NULL. This function may throw an error if the symbol already exists and it is locked.


SymFindPtr returns NULL in case of an error.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°4   Marquer comme non lu.
Benjy Ecrit le: Lundi 28 juin 2004 à 20:47 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


ok voila :):) et pour allege alors stp merci :):)
void* cree_un_nouveau_fichier(char* nom,short taille) 

HANDLE h=HeapAlloc(taille+2);
if(h==H_NULL) return NULL;
void* vptr=HeapDeref((DerefSym (SymAdd (SYMSTR(nom))))->handle=h);
*(unsigned short *)vptr=(unsigned short)taille;
return (vptr+2);
}

short degroup(char *nom_du_fichier_groupe)
{
void *ptr;
FILE *f=fopen(nom_du_fichier_groupe,"rb");
if(f==NULL) return 0;
short i,taille=0,nombre_de_fichier_a_traiter=fgetc(f);
char *buffer=malloc(18*sizeof(char));
for(i=0;i<nombre_de_fichier_a_traiter;i++)
{
fread(&taille,2,1,f);

fread(buffer,1,18,f);
ptr=cree_un_nouveau_fichier(buffer,taille);
fread(ptr,taille,1,f);
}
fclose(f);
return 1;
}
Le langage C y'a pas mieux!!!
    
./Post n°5   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 28 juin 2004 à 22:22 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Il manque toujours des tests...
Essaye:
void* cree_un_nouveau_fichier(char* nom,short taille) 

HANDLE h=HeapAlloc(taille+2);
if(h==H_NULL) return NULL;
HSYM hsym=SymAdd (SYMSTR(nom));
// astuce pour tester un HSym de la manière la plus efficace possible:
typedef unsigned long __attribute__((may_alias)) hsl;
if (!*(hsl*)&hsym) {HeapFree(h);return NULL;}
void* vptr=HeapDeref((DerefSym (hsym))->handle=h);
*(unsigned short *)vptr=(unsigned short)taille;
return (vptr+2);
}

short degroup(char *nom_du_fichier_groupe)
{
void *ptr;
SYM_ENTRY *symentry=SymFindPtr(SYMSTR(nom_du_fichier_groupe),0);
if (!symentry) return 0;
HANDLE h=symentry->handle;
if (!h) return 0;
unsigned char *fptr=HeapDeref(h)+2;
short i,taille=0,nombre_de_fichier_a_traiter=*(fptr++);
for(i=0;i<nombre_de_fichier_a_traiter;i++)
{
// lecture octet par octet parce que l'adresse peut être impaire
taille=*(fptr++)<<8;
taille+=*(fptr++);
ptr=cree_un_nouveau_fichier(fptr,taille);
memcpy(ptr,fptr,taille);
fptr+=taille;
}
return 1;
}

-Edité le Lundi 28 juin 2004 à 22:24 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°6   Marquer comme non lu.
Benjy Ecrit le: Lundi 28 juin 2004 à 22:54 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


merci kevin
Le langage C y'a pas mieux!!!
    
./Post n°7   Marquer comme non lu.
hubert_b Ecrit le: Mardi 29 juin 2004 à 17:09 Déconnecté(e)    Voir le profil de hubert_b Envoyer un email à hubert_b Envoyer un message privé à hubert_b  

Tu n'as pas fait une librairie pour l'utilisation de la VAT ?
Il me semblait que tu avais dit cela dans les projets...
Hubert_B aKa nEUrOO
    
./Post n°8   Marquer comme non lu.
Benjy Ecrit le: Mardi 29 juin 2004 à 17:29 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


oui mais devant la retissance et les critiques je vous laisse utiliser vat.h
Le langage C y'a pas mieux!!!
    
./Post n°9   Marquer comme non lu.
hubert_b Ecrit le: Mardi 29 juin 2004 à 22:42 Déconnecté(e)    Voir le profil de hubert_b Envoyer un email à hubert_b Envoyer un message privé à hubert_b  

Comment l'avais-tu fait ta librairie ?
Hubert_B aKa nEUrOO
    
./Post n°10   Marquer comme non lu.
Benjy Ecrit le: Mercredi 30 juin 2004 à 08:09 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


je ne l'ai pas faite pourquoi??
Le langage C y'a pas mieux!!!
    
./Post n°11   Marquer comme non lu.
Lionel Debroux Ecrit le: Mercredi 30 juin 2004 à 11:26 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

L'intérêt des fonctions de vat.h est une utilisation directe à bas niveau. Ca n'a pas de sens de faire une lib par-dessus...
Lionel Debroux - membre de TICT.
    
  :: Index » Forum Ti68K » Programmation C » allege (11 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 53.24ms avec 18 requetes