J'ai édité mon 1er post en croyant avoir résolu le problème mais en fait pas du tout... A vrai dire je suis en train de péter un cable, si ça se trouve c'est tout simple mais je n'arrive pas à m'en sortir
J'explique la situation : Vertel bug (adress error). Je sais exactement à quelle ligne du programme basic on trouve l'appel de la lib qui bug, et je sais à peu près ou ça plante dans la lib elle-même.
Mais c'est en fait un peu plus compliqué :
- Je n'arrive pas à reproduire le bug avec un autre prog basic. Même en isolant les quelques lignes qui entourent celle qui bug, ça passe sans problème. Le seul moyen que j'ai de produire ce bug est de lancer le programme en entier.
- La ou les lignes qui bug(gent) dans vertel proviennent de la doc de TIGCC, et sont présentent depuis les 1ers versions, elles ne m'ont jamais posé de problème.
Voilà les qq lignes :
- En basic l'appel qui fait bugger :
mainvertel("drw_pict","screen",0,0,1,"/","drw_pict","img",70,10,1)
(plus précisement c le 1er drw_pict qui fait bugger, mais c pas ça le problème)
- En C l'endroit ou ça plante
SYM_ENTRY *sym_var=vat_open(chr_var); // Crée un pointeur vers une variable TiOS
unsigned char *chr_pic=NULL;
if(peek(HToESI(sym_var->handle))==0xDF)
{
chr_pic=HeapDeref(sym_var->handle);
if(int_szx) *int_szx=*(unsigned int*)(chr_pic+4);
if(int_szy) *int_szy=*(unsigned int*)(chr_pic+2);
PortSet(vod_scr,239,127);
BitmapPut(int_psx,int_psy,HeapDeref(sym_var->handle)+2,&scr_ttl,int_mod);
PortRestore();
}
En gris j'ai mit les 2 lignes qui, une fois retirées, enlevent le bug. Le 'if' fait donc planter, ainsi que le bitmapput. Tous les 2 provoquent une "adress error".
J'ai passé du temps à essayer de comprendre, de tester, mais sans résultat. Par contre je sais que la chaine qui représente le nom de variable est tout à fait valable, je l'ai testée à peu près à toutes les étapes.
Voilà... Si qqun voit une solution...
