FILE *fopen(const char *name asm("a0"), const char*mode asm("a1"));
Peut être le fait que l'argument de nom va dans a0 et le mode dans a1 ?
Folco_ (./34) :
(puis le beau trick de Pollux tombe allo)
swap a0,sp bsr.s \Mode dc.b "r",0 Mode: swap a0,sp

PpHd (./36) :
Sauf que ca prend 2 octets de plus qu'un simple lea \Mode(pc),a0
enfin ça a quand même un inconvénient, ça prend plus de place dans la fonction elle-même donc ça pourrait transformer des bxx.s en bxx.w -- mais on peut aussi considérer le bsr comme un avantage de ce point de vue-là, puisque le saut introduit permet de réorganiser le code de la fonction et de rapprocher du code qui aurait nécessité des bxx.w 



Folco (./51) :
Donc je suis condamné à utiliser f* pour lire si j'utilise fopen ? Ca m'aurait plu de pas utiliser toute la manip SYMSTR/SymFindPtr/get_handle/HToESI/HeapGetLock/HeapLock/HeapDeref pour avoir ce p*tain de pointeur. Mais bon, c'est déjà codé. Mais ya pas moyen de faire plus court avec fopen alors ?
), seulement HLock/HeapUnlock.Donc je suis condamné à utiliser f* pour lire si j'utilise fopen ?
).
Kevin Kofler (./55) :
L'absence de HeapGetLock me semble assez dangereuse, le fichier peut avoir été locké par autre chose et devrait donc normalement être retourné dans le même état, je devrais peut-être le corriger, même si d'un autre côté ça n'a pas l'air d'avoir posé problème.
Mais ouvrir le même fichier plusieurs fois dans le même programme n'est pas du tout prévu, et franchement je ne vois pas trop l'intérêt.
fopen: f->locked = HeapGetLock(f->handle); fclose: if (!f->locked) HeapUnlock(f->handle);
f1 = fopen(); f2 = fopen(); fclose(f1); fread(f2); fclose(f2);

) du fichier déjà ouvert est renvoyé. Sinon, ça ouvre le fichier en le lockant éventuellement, et en rajoutant dans la table (sur le bit #31 du pointeur vers le nom du fichier
) s'il faut le délocker en sortie ou pas. PedroM étant multithread, c'est une évidence de prévoir ça.
(sur le bit #31 du pointeur vers le nom du fichier)
