» cherche un exemple pour la recherche de fichier avec Bfile de gint
cherche un exemple pour la recherche de fichier avec Bfile de gint
Posté le 06/06/2021 07:45
bonjour, je lis la documentation de Bfile car j'aimerais chercher TOUT les fichier avec l’extension .fdkl
/* BFile_FindFirst(): Search a directory for file with matching name
Doesn't work on Main memory. Only four search handle can be opened, you need
to close them to be able to reuse them. Search is NOT case sensitive and *
can be used as a wildcard.
@search FONTCHARACTER file path to match
@shandle Search handle to pass to BFile_FindNext or BFile_FindClose
@founfile FONTCHARACTER found file path
@fileinfo Structure containing a lot of information on the found file
Returns 0 on success, -1 if no file found, or negative value on error. */
struct BFile_FileInfo
{
uint16_t index;
uint16_t type;
uint32_t file_size;
/* Data size (file size minus the header) */
uint32_t data_size;
/* Is 0 if the file is complete */
uint32_t property;
/* Address of first fragment (do not use directly) */
void *address;
};
int BFile_FindFirst(uint16_t const *search, int *shandle, uint16_t *foundfile,
struct BFile_FileInfo *fileinfo);
/* BFile_FindNext(): Continue a search a directory for file with matching name
@shandle Search handle from BFile_FindFirst
@founfile FONTCHARACTER found file path
@fileinfo Structure containing a lot of information on the found file
Returns 0 on success, -1 if end is reached, or negative value on error. */
int BFile_FindNext(int shandle, uint16_t *foundfile,
struct BFile_FileInfo *fileinfo);
/* BFile_FindClose(): Close the specified search handle
@shandle Search handle from BFile_FindFirst
Return 0 on success or negative value on error. */
int BFile_FindClose(int shandle);
j'ai beau lire ca a plusieurs reprises mais je sais toujours pas comment ca marche précisément
Citer : Posté le 06/06/2021 08:35 | #
Tu as le code AST3 qui utilise cette fonction. Ça doit être le fichier save.c de mémoire…
Citer : Posté le 06/06/2021 08:37 | #
Avant de commencer, note que les calculatrices avant la Graph 35+E II et la Graph 90+E sont limitées à des extensions de trois caractères, donc pour éviter les problèmes de compatibilité je te recommande de donner une extension à trois caractères à tes fichiers.
La recherche se fait en plusieurs appels : d'abord BFile_FindFirst() qui initialise la recherche à partir du motif (\\fls0\*.fdkl) et stocke dans *shandle un entier qui identifie l'opération (similaire à la valeur retournée par BFile_OpenFile()) et qui est utilisé pour les autres appels.
BFile_FindFirst() cherche immédiatement un premier fichier et renvoie les informations le concernant dans *foundfile et *fileinfo. La valeur de retour est 0 si un tel fichier est trouvé, -1 si aucun fichier ne correspond au motif demandé, et une autre valeur négative pour les erreurs (motif invalide/trop long, erreur sur le système de fichiers, etc).
Si BFile_FindFirst() renvoie 0, alors tu peux chercher les fichiers suivants en appelant BFile_FindNext(), qui fonctionne pareil (seulement cette fois-ci tu n'as pas besoin de donner le motif, puisqu'il a déjà été enregistré, et tu donnes la valeur de shandle plutôt que l'adresse, parce que la valeur n'a pas besoin d'être modifiée). La recherche s'arrête quand BFile_FindNext() renvoie -1 (plus de fichiers à trouver) ou un autre nombre négatif (erreur).
À la fin, tu dois absolument appeler BFile_FindClose(). C'est d'une importance capitale, car toute recherche qui n'est pas terminée par un appel à BFile_FindClose() reste "en cours", et l'OS ne peut pas avoir plus de quelques recherches en cours en même temps (4 je crois). Si tu oublies de terminer tes recherches tu finiras par occuper toutes les places disponibles et l'OS n'en aura plus pour lui, ce qui a pour effet de vider la liste d'add-ins dans le menu principal (puisque l'OS ne peut plus les chercher), et t'oblige à RESET la calculatrice.
Bien sûr, tout ça doit être fait dans un gint_world_switch().
Est-ce que ça t'aide ?
Citer : Posté le 06/06/2021 08:41 | #
Oh, mais c'est ça les bugs où les add-in disparaissent ?
Ça m'est arrivé une fois sur ma calto, j'ai été obligé de les retransférer x)
Citer : Posté le 06/06/2021 08:48 | #
Oui. Ça fait aussi planter l'appli MEMORY puisqu'elle ne peut plus lister les fichiers. À bien y réfléchir je crois que la solution n'est pas seulement de RESET, mais une combinaison de RESET, transfert USB, ou optimisation. À vérifier (mais ce n'est pas un problème grave).
Citer : Posté le 06/06/2021 08:49 | #
Ma calto va très bien maintenant, mais c'est vrai que pour récupérer les add-in j'avais un peu douillé