1

Je voudrais savoir comment, en C, on peut connaitre l'adresse de la FAT car je voudrais faire une recherche d'une variable STR contenant est "TEST".
Plus tu pedale moins vite moins t'avance plus vite
Ma team CS

2

Au lieu de chercher l'adresse de la VAT, utilise plutôt les ROM_CALLs adaptés: SymFindFirst et SymFindNext.
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

Ben tu peux faire un SymFindFirst(NULL,2) puis à l'aide de SymFindNext tu vérifies le STR_TAG à la fin de chaque variable. Si le STR_TAG est présent, alors tu vérifies que la chaine présente est bien "TEST". Sinon tu passe avec SymFindNext

4

Trop tard sad

5

SYM_ENTRY *SymEntry;
unsigned char *pFile;
char string[10];

SymEntry = SymFind(NULL,2);
while(SymEntry)
{
 if((*HToESI(SymEntry->handle)) == STR_TAG)
 {
   memset(string,0,10);
   string = GetStrnArg(HToESI(SymEntry->handle));
   if (!strcmp("TEST",string)) break;
 }
 SymEntry = SymFindNext();
}
if(SymEntry) printf("Chaine 'TEST' trouvée dans la variable : %s\n",SymEntry->name);



J'espère que ça marchera, ça fait longtemps que je n'ai pas programmé avec TIGCC sad

6

C'est pas mieux de faire SymFindPtr($(TESTS),0);, puis de vérifier que le TAG de fin est bien STR_TAG ?

7

je n'ai pas encore tester ta fonction zdrubal mais merci d'avance!

euh ...
d'apres la doc de TIGCC SymFind prend qu'un parametre !?
ca doit surement etre SymFindFirst wink
je suppose qu'en mettant NULL comme 1er param ca recherche la premiere variable sans faire gache au nom ? oui ?
Plus tu pedale moins vite moins t'avance plus vite
Ma team CS

8

Euh, oui, c'est SymFindFirst, je me suis trompé wink
Quand tu passes le second argument à 2 (flags), la fonction ne tient pas compte du premier, et recherche dans toute la VAT (ie dans tous les répertoires).
Par contre, le printf de fin n'affichera que le nom de la variable, pas le répertoire ...

9

Moi, je ferais ça, qui est bien plus court :

SYM_ENTRY *sym_ptr;
unsigned char *ptrFILE;

sym_ptr=SymFindPtr($(TEST),0);
if(!symptr)return;
ptrFILE=HeapDeref(symptr->handle);
if(!ptrFILE)return;
if(*(ptrFILE+*((unsigned short *)ptrFILE)+1)==STR_TAG)
{
// Instructions...
}

10

jackiechan91 a écrit :
Moi, je ferais ça, qui est bien plus court :

SYM_ENTRY *sym_ptr;
unsigned char *ptrFILE;

sym_ptr=SymFindPtr($(TEST),0);
if(!symptr)return;
ptrFILE=HeapDeref(symptr->handle);
if(!ptrFILE)return;
if(*(ptrFILE+*((unsigned short *)ptrFILE)+1)==STR_TAG)
{
// Instructions...
}

je crois que SymfindPtr($(test),0); recherche plustot une variable nomme test et non une variable contenant test wink

merci a tous
top
Plus tu pedale moins vite moins t'avance plus vite
Ma team CS

11

OUPS !eek
Pardon, je n'avais pas bien compris...
SymFindPtr($(test),0); recherche effectivement une var nommée test...

12

tongue
hi
merci quand meme wink
Plus tu pedale moins vite moins t'avance plus vite
Ma team CS

13

jackiechan91 a écrit :
Moi, je ferais ça, qui est bien plus court :

SYM_ENTRY *sym_ptr;
unsigned char *ptrFILE;

sym_ptr=SymFindPtr($(TEST),0);
if(!symptr)return;
ptrFILE=HeapDeref(symptr->handle);
if(!ptrFILE)return;
if(*(ptrFILE+*((unsigned short *)ptrFILE)+1)==STR_TAG)
{
// Instructions...
}


Quitte à faire court grin :

SYM_ENTRY *sym_ptr;

sym_ptr=SymFindPtr($(TEST),0);
if(symptr && *(HtoESI(symptr->handle))==STR_TAG)
{
// Instructions...
}
elseif(!symptr) break;