ça serait possible que tu fasses qqc d'à peu près standardisable ?
quitte à mettre au point un système de lib dynamique nostub, autant le faire proprement ^^
call_ziplib: lea ziplib_str(pc),a0 moveq #1,d1 jsr kernel::LibsBegin lea lib_descriptor(pc),a1 move.l a0,(a1) beq \exit bsr deref_file_to_compress ; renvoie dans a0 un pointeur vers le fichier à compresser dans la VAT (c'est correct, j'ai vérifié) moveq #1,d0 move.w #6,-(a7) pea lib_descriptor(pc) jsr kernel::LibsCall addq.l #6,a7 move.l lib_descriptor(pc),a0 jsr kernel::LibsEnd \exit: rts ziplib_str: dc.b 'ziplib',0 even ; ; Function: Compress or Extract a file ; ; Input: A0 = Pointer to file in the VAT ; D0.B = 0 disable commentary ; 1 semi-commentary (error displayed) ; else enable commentary (Windows, Confirmations,...) ; ; Output: D0.B = 0 no error ; 1 can't manipulate because file is archived ; 2 compressed file bigger than original ; 3 not enough memory ; 4 Program running ; NO OTHER REGISTERS DESTROYED ;---------------------------------------------------------------------------- ;ziplib::zipfile equ ziplib@0006
call_ziplib: lea ziplib_str(pc),a0 moveq #1,d1 ; jsr kernel::LibsBegin lea lib_descriptor(pc),a1 move.l a0,(a1) beq \exit bsr deref_file_to_compress moveq #2,d0 jsr ziplib@0006 move.w #6,-(a7); jsr ziplib@0006 pea lib_descriptor(pc) ; jsr kernel::LibsCall addq.l #6,a7 move.l lib_descriptor(pc),a0 ; jsr kernel::LibsEnd \exit: rts ziplib_str: dc.b 'ziplib',0 even
call_ziplib: lea ziplib_str(pc),a0 moveq #1,d1 jsr kernel::LibsBegin lea lib_descriptor(pc),a1 move.l a0,(a1) beq \exit moveq #6,d0; jsr ziplib@0006 jsr kernel::LibsPtr move.l a0,a2 bsr deref_file_to_compress moveq #1,d0 jsr (a2) move.l lib_descriptor(pc),a0 jsr kernel::LibsEnd \exit: rts ziplib_str: dc.b 'ziplib',0 even
Flanker :
ptêt une fonction compress:ack_info qui renverrait un handle au même format que le handle d'un dossier (ie 4 octets pour le nombre de fichiers, puis 14o par fichiers, dont 8 pour le noms et 6 pour des infos supplémentaires)
Sasume :
lzf0.
Flanker :
j'ai déjà fait un tsr qui remplace la jump_table, mais ça fait foirer plein de programmes qui se basent sur l'adresse de la jump table pour déterminer le modèle![]()
Flanker
:Sasume :
lzf0.
j'ai pas trouvé sur google :/
typedef short (*FctIsComp) (HANDLE h); typedef HANDLE (*FctUnComp) (short id, HANDLE h);
hibou :
Flanker> y'a moyen que les fonctions soient plus bas niveau, genre :
HANDLE compresslib(HANDLE h, int compType)
parce qu'en fait, j'ai justement fait en sorte de ne pas être dépendant d'un format de compression en particulier dans le hibView que je prépare, et j'ai déclaré :typedef short (*FctIsComp) (HANDLE h); typedef HANDLE (*FctUnComp) (short id, HANDLE h);
Ca marche avec ziplib, par contre les autres j'ai pas du tout essayé.