3513659482

3513659482



RUBRIOUE ASSEMBLEUR par Frederic Delacroix - Fidonet 2:322/20.8

Interrogation

des

compresseurs

Decouverte de XPK

Avant toute chose. je vous pre-sente mes meilleurs voeux pour 97. Ce mois-ci, nous poursuivons notre dćcouverte d'XPK. Ce sera toutefois plus simple que les deux mois prśce-dents, je vous prósenterai une utili-sation ślśmentaire de la fonction XpkQuery().

La bibliotheque

Comme cela a d6j£ etś expliquś sommaire-ment dans les arlicles sur la bibliothśque rexxxpk.library, le coeur du systóme XPK vu "de l,extśrieurJ' est constrtuś de la bibliotheque [1mxpkmaster.library(0m. On l’ouvre normale-ment. comme nimporte quelle autre bibliothś- , que. version n’2. Parmi les fonctions proposees. on 1rouve les fonctions de compression el dś-compression de donnees (par rmtermśdiaire « d’un fichier, de mćmoire tampon. d'un gestion-naire (hook)...)

[1mXpkPack()[0m

et

[1 mXpkUnpack()[Om

(ces fonctions ont etć utilisees dans I article du mois dernier).

On trouve śgalement les fonctions

(1 mXpkOpen()[Om

[1mXpkClose()[0m,

[1mXpkRead()(0m et

[1 mXpkWrite()[Om.

destinees k gćrer de maniere transparente sur des fichiers compresses les opśrations normalement effectuśes par les fonctions cor-respondantes de la dos.library (vous suivez?).

Enfin, la fonction

[1 mXpkExamlne()[Om

a pour róle de donner des informations sur

un fichier (en particulier le compresseur utilisś) et. pour le cas qui nous intśresse aujourd hui. . il y a la fonction [1mXpkQuery()[0m

(il existe ógalement les fonctions non docu-mentćes

XpkPackerlnfo() et XpkSeek(),

k ne pas utiliser).

L’interrogation

Cette fonction XpkQuery(), situóe a l offset • 84. est entiórement contrólće par une listę de tags, sur laquelle un pointeur doit elre donnś dans le registre AO. Trois tags sont spścifiques k cette fonction.

Le tag

[1 mXPK_PackersQuery[Om

(attention k 1’orthographe!) vous retourne, dans une slructure [1 mXpkPackerLlst(Om (pointee par le champ ti Data du tag) la listę de tous les compresseurs connus sur votre systeme. Cette structure est constituśe d un mot long indiquant le nombre de ces compresseurs (iimitś a 100) el d'un tableau de 100 structures de 6 octets destinśes k contenir le nom de chaque compresseur (on peut regret- ' ter cet aspect rigide de la conception de XpkOuery(), mais il a l'avantage daccślśrer les choses).

Le tag

[1 mXPK PackerQuery[Om,

quant k lui, indique que vous dćsirez des informations sur un compresseur particulier dont vous connaissez dej£ le nom. Le champ ti Data pointę alors sur une structure [1 mXpkPackerlnfo[Om qui est remplie par la fonction. Vous devez śgalement utiliser le tag [1mXPK PackMethod[0m pour prściser le nom du compresseur sur le-quel vous voulez des informations. La structure XpkPackerlnfo contient toutes les carac-tśristiques du compresseur indiquś. comme son nom, sa description, des drapeaux indi-quant par exemple si la compression se fait a

perte, si un cryptage est possibie. la taille des blocs utilises...

Enfin, le tag

[1mXPK ModeQuery[0m

donnę des informations plus precises en-core: lorsque ce tag est utilise, la fonction stocke dans la structure

[1mXpkMode[0m

pointee par le champ ti_Data du tag les ca-ractśristiques du modę du compresseur indi-quś: vitesse de compression. de decompres-sion, taux de compression sur un fichier modele, mśmoire utilisóe... Pour cette interrogation, 1'efficacitś (le modę) du compresseur (qui est un nombre entre 0 et 100, prścisś par le tag

[1mXPK PackMode[0m

ou une extension au nom du compresseur) est divise en differentes tranches: par exem-ple de 0 a 10, 10 k 20, etc. En 1'absence de XPK_PackMode, le modę par dśfaut du compresseur est examinś Pour avoir la listę de lous les modes, on peut faire une boucle en partant du modę 0 et en continuant au modę

(XpkMode.Upto+1)

(cf description de la structure XpkMode).

Er retour, la fonction XpkQuery() nous gra-tifie d'un codę d'erreur en DO, ou 0 si tout va bien. Je vous renvoie aux fichiers d'inclusion d’XPK pour plus d’informations, car il est temps de passer k un exemple

Un exemple

Tr6s simple en vśritś, cet exemple se contente d'afficher la listę des compresseurs capables de cryptage. II utilise le tag

XPK PackerOuery

el examine le champ xpi Flags de la structure Packerlnfo rśsultante k la recherche du drapeau

XPIF ENCRYPTION.

Pour 1'assemblage correct de ce pro-gramme. Hisoft Devpac 3.50 est nócessaire.

Frederic Delacroix

CALL VPrintf,_DOSBase(pc)

NoEncrypt

add.l #6,a2    ; compresseur suivant

Begindbra d3,.Loop

Error move.l DOSBase(pc),a1 CALL CloseLibrary,4.w NoDOS move.l _XPKBase(pc).a1 CALL CloseLibrary NoXPK moveq #0,d0 rls

even

Packers.Tags

dc.ł XPK,PackersQuery.PackerList

dc.l TAG..DONE

i

Packertist dcb.b xpl_SIZEOF.O Packerlnfo Tags

dc.l XPK..PackerQuery,Packerln1o

dc.l XPK PackMethod.O ; complśiś plus tard

dc.l TAG DONE

Packerlnfo dcb.b xpi_SIZEOF,0

i Printf.Data dc l 0

XPKBase dc.l 0 „DOSBase dc.l 0 _XPKName XPKNAME DOSNAME

Printf Fml dc.b"%s".10,0


opt AMIGA

IMPORT exec.exoc IMPORT exec.exec„lib IMPORT utility.utility IMPORT Macro,exec include libraries/xpk.i

Start move.l 4,w,a6 OPENLIB XPK,2 move.l d0._XPKBase beq.s NoXPK

OPENLIB DOS.37 ; Kickstart 2.04 move.l dO,_DOSBase beq.s NoDOS

lea Packers Tags(pc),a0 CALL XpkQuery. XPKBase(pc) tst.l dO bne.s Error

lea PackerList(pc).a2

move.l (a2)+,d3; nombre de compresseurs bra.s .Begin

Loop lea Packerlnfo.Tags(pc),aO move.l a2,12(a0)    ; nom du compresseur

CALL XpkQuery,_XPKBase(pc) tst.l dO bne.s Error

and.l #XPKIF ENCRYPTION.Packer!nfo+xpLFIags beq s .NoEncrypt move.l #Printf.Data.d2

move I a2,Printf Data ; imprimer le nom de ce packer move.l #Printf.Fmt.d1

AmigaNews Fevrier 1997 N* 98    55



Wyszukiwarka

Podobne podstrony:
Cristais? Neve2 Givre Stylistę: Dorothy Scholpp FOURNITURES: 20 g (5 g par ouvrage) de cordonnet n°
Nous avons constate que Ies ąuatre planches horizontalcs du panneau sont assemblćes par douze goujon
— 302 — de Saint-Malo et de Saint-Pol-de-Leon qui avaient assistć k 1 assemblće par procureur auraic
40 NUIT ETOILEE i. »r FOURNITURES: 20 g (5 g par ouvrage) de cordonnet n° 20, blanc et un peu de lu
RUBRIOUE BeOS par Lucas Janin ljanm@mygale.orgBe wave e    e    e
RUBRIOUE INTERNET par Corinne Villemin GaconLa publicite sur InternetCulture Pub La publicitś sur In
15INTERMEDE : EXTRAIT DU JOURNAL DE TERRA IN4 avril 2006 : Partii*... Par tir parce qu }on poursuit
BACTŚRIOLOGIE 149 Reactions produites par Yibrio cbolerae dans les tnilieux contenant des glud
susciter 1 action par ce choc, et non la panique. Des etudes ont ainsi montre que les femmes ffanęai
360 L/Educateur ProlźtarienA VX TRA V AlL LEC RS Unis, par-dessus toutc divergcnce, dcvanŁ le specta
connaissances. deja appreciees par plus de 50 pays. a la resolution des pro-blemes specifiques posds
Afćrwes aiocesaines de - 20 — hien des A nieś. la tache <jue la Providence leur y con-fiait, il y
20. Musźe des enfants, Palais dc Longchamp, Marseillc. Texts ate provided to help the childrcn;
mais susceptible d etre misę en peril par les even-tuelles pratiques de rabais des concurrents. II a
58 elles ne font pas partie de 1 echantillon enonce prćcedemment. Par exemple, un enfant qui ecrit c
180 Notes de lecture 4 combattu que par Fćducation des enfants pauvres. L’auteur, qui a interro

więcej podobnych podstron