1

Le challange est simple : j'ai un fichier archivé, je veux le supprimer sans le remettre en RAM. Comment faire ?

J'ai essayé EM_Abandon, mais ça buggue grave : il me reste un fichier d'une dizaine d'octets du meme nom que le fichier que je viens de supprimer, et de type EXPR ! Le code que j'ai utilisé :
SymPtr = SymFindPtr (SYMSTR (str), 0);
if (SymPtr->flags.bits.archived)
EM_abandon (SymPtr->handle);
Mon site perso : http://www.xwing.info

2

SymPtr = SymFindPtr (SYMSTR (str), 0);
if (SymPtr->flags.bits.archived) {
EM_abandon (SymPtr->handle);
SymPtr->handle=0;
}
SymDel(SYMSTR (str));
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

Voici la fonction d'Einstein qui se charge d'effacer les fichiers quels qu'ils soient :
void SupprimerFichierMemeSiArchive(HSym fichier)
{
  SYM_ENTRY *pfichier= ElementOff_2_SEptr(fichier.folder, fichier.offset);

  if (pfichier->flags.bits.archived)
  {
    EM_abandon(pfichier->handle);
    pfichier= ElementOff_2_SEptr(fichier.folder, fichier.offset);
    pfichier->handle= HeapAlloc(10); // pour éviter un plantage
  }
  pfichier->flags.bits.busy= 0;
  pfichier->flags.bits.twin= 0;
  pfichier->flags.bits.archived= 0;
  pfichier->flags.bits.in_view= 0;
  pfichier->flags.bits.locked= 0;

  HSymDel(fichier);
}


Fait gaffe, comme je l'ai dit elle efface tous les types de fichier, même ceux qui sont théoriquement ineffaçables wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

4

>ElementOff_2_SEptr(fichier.folder, fichier.offset)
Beurk!
Tu connais DerefSym?
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

Non smile Merci du truc !

Au fait, foutre le handle à zéro semble une source de plantage (mes bêta-testeurs m'on signalé un gros problème survenant parfois quand on efface un fichier archivé avrec la ß2.9 d'Einstein).
Il vaut mieux faire comme moi : allouer un petit segment et détourner le handle du fichier sur celui-ci, en prenant soin de forcer le flag archived à zéro.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

6

Ok, merci, je vais voir ça...
Mon site perso : http://www.xwing.info

7

Au fait, ce n'est pas la peine de faire HeapAlloc(10), tu peux aussi faire HeapAlloc(0).
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é

8

Vi, c'est ce que je me disais smile
Mon site perso : http://www.xwing.info

9

Kevin : erf j'ai pas mis 10 au hazard wink C'est parceque HeapAlloc n'accepte pas les tailles inférieures à 8 octets. Nan ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

10

J'ai remarqué ça dans malloc aussi : tu mets 0, mais il alloue 8 quand meme...
Mon site perso : http://www.xwing.info

11

pkoi ne pas allouer 8 octets au lieu de 10, ds c cas ?
(arf)
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

C'est vraiment au pif, c'est pas très important (du moment que c'est pas 65536 octets grin)
Thibaut a dit :
Au fait, foutre le handle à zéro semble une source de plantage (mes bêta-testeurs m'on signalé un gros problème survenant parfois quand on efface un fichier archivé avrec la ß2.9 d'Einstein). Il vaut mieux faire comme moi : allouer un petit segment et détourner le handle du fichier sur celui-ci, en prenant soin de forcer le flag archived à zéro.


Pour l'instant, j'ai essayer de remettre direct a 0, ça a pas encore planté. Je me demande d'ou peuvent bien venir ces trucs qui plante aléatoirement...
Mon site perso : http://www.xwing.info