Bon, je suis en train d'implémenter ça :
;=======================================================================
; Exported functions
;
; unsigned short par__ArchiveFile (const char* Archive, unsigned short Flags, const char* Folder, const char* File);
; unsigned short par__ExtractFile (const char* Archive, unsigned short Flags, const char* Folder, const char* File);
; unsigned short par__Remove (const char* Archive, const char* File);
; signed short par__List (const char* Archive, PAR_FILE** ListFiles);
; signed short par__ArchiveInfo (const char* Archive asm("%a0"));
; unsigned short par__FileInfo (const char* Archive, const char* Filename, PAR_FILE* File);
; const char* par__GetErrorString (int Error asm("%d0"));
;
;=======================================================================
J'ai écrit les fonctions List, ArchiveInfo, GetErrorString. Ce sont les plus simples, mais elles sont très utilises aux fonctions de manipulation (Archive/Extract/Remove).
Finalement, le programme s'articule en trois parties très distinctes :
- Le coeur, qui contient les fonctions réelles de manipulation de fichiers
- Le programme, qui gère les appels en ligne de commande en appellant les fonctions du coeur
- Les exports, qui appellent les fonctions du coeur également.
On pourrait donc concevoir une release en 3 parties : par-core (coeur du programme), par-lib (wrappers pour les dlls), par-app (application en ligne de commande).
Je pense que ça restera une vue de l'esprit, on a pas besoin d'un tel extrémisme sur TI, surtout que la place à gagner n'est pas monumentale.
Maintenant, j'écris parce que j'ai une question : je ne vois en fait pas trop l'intérêt de la fonction FileInfo. A partir du moment où le programme dispose d'une liste de PAR_FILE, il peut se démerder simplement, non ? Trouver une chaine dans un tableau dont on connait la structure c'est pas plus de trois lignes, non ?
Et le plus embêtant, je pense, c'est qu'un programme qui veut savoir si tel fichier est dans telle archive, va devoir créer une liste de PAR_FILE pour toute l'archive, alors qu'au final, un seul fichier servira.
Est-ce qu'il ne serait pas plus simple de pouvoir chercher un fichier dans une archive ?
Je propose ce proto :
// renvoie 0 si le fichier est trouvé, sinon un code d'erreur. Crée et renseigne le Buffer (24 octets) pour donner des infos sur le fichier.
unsigned short par__FileInfo (const char* Archive, const char* Filename, PAR_FILE** Buffer);
RHJPP, je ne sais pas si c'est de ça dont tu parlais pour FileInfo, mais le proto que tu donnes en
./33 ne correspond pas à ça (je crois que tu pensais plus à deux étapes : création de la liste pour toute l'archive, puis recherche du fichier kivabien par la lib dans la liste qu'il a renvoyé).