42Fermer44
FarewellLe 04/11/2010 à 14:17
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é).