Obligement - L'Amiga au maximum

Samedi 20 avril 2024 - 12:07  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Assembleur et XPK - interrogation des compresseurs
(Article écrit par Frédéric Delacroix et extrait d'Amiga News - février 1997)


Avant toute chose, je vous présente mes meilleurs voeux pour 1997. Ce mois-ci, nous poursuivons notre découverte d'XPK. Ce sera toutefois plus simple que les deux mois précédents, je vous présenterai une utilisation élémentaire de la fonction XpkQuery().

La bibliothèque

Comme cela a déjà été expliqué sommairement dans les articles sur la bibliothèque rexxxpk.library, le coeur du système XPK vu "de l'extérieur" est constitué de la bibliothèque xpkmaster.library. On l'ouvre normalement, comme n'impoite quelle autre bibliothèque, version n°2. Parmi les fonctions proposées, on trouve les fonctions de compression et décompression de données (par l'intermédiaire d'un fichier, de mémoire tampon, d'un gestionnaire (hook)...) XpkPack() et XpkUnpack() (ces fonctions ont été utilisées dans l'article du mois dernier).

On trouve également les fonctions XpkOpen(), XpkClose(), XpkRead() et XpkWrite(), destinées à gérer de manière transparente sur des fichiers compressés les opérations normalement effectuées par les fonctions correspondantes de la dos.library (vous suivez ?).

Enfin, la fonction XpkExamine() 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 XpkQuery() (il existe également les fonctions non documentées XpkPackerInfo() et XpkSeek(), à ne pas utiliser).

L'interrogation

Cette fonction XpkQuery(), située au décalage -84, est entièrement contrôlée par une liste de marqueurs ("tags"), sur laquelle un pointeur doit être donné dans le registre A0. Trois marqueurs sont spécifiques à cette fonction.

Le marqueur XPK_PackersQuery (attention à l'orthographe !) vous retourne, dans une structure XpkPackerList (pointée par le champ ti_Data du marqueur) la liste de tous les compresseurs connus sur votre système. Cette structure est constituée d'un mot long indiquant le nombre de ces compresseurs (limité à 100) et d'un tableau de 100 structures de 6 octets destinées à contenir le nom de chaque compresseur (on peut regretter cet aspect rigide de la conception de XpkQuery(), mais il a l'avantage d'accélérer les choses).

Le marqueur XPK_PackerQuery, quant à lui, indique que vous désirez des informations sur un compresseur particulier dont vous connaissez déjà le nom. Le champ ti_Data pointe alors sur une structure XpkPackerInfo qui est remplie par la fonction. Vous devez également utiliser le marqueur XPK_PackMethod pour préciser le nom du compresseur sur lequel vous voulez des informations. La structure XpkPackerInfo contient toutes les caractéristiques du compresseur indiqué, comme son nom, sa description, des drapeaux indiquant par exemple si la compression se fait à perte, si un cryptage est possible, la taille des blocs utilisés...

Enfin, le marqueur XPK_ModeQuery donne des informations plus précises encore : lorsque ce marqueur est utilisé, la fonction stocke dans la structure XpkMode pointée par le champ ti_Data du marqueur les caractéristiques du mode du compresseur indiqué : vitesse de compression, de décompression, taux de compression sur un fichier modèle, mémoire utilisée... Pour cette interrogation, l'efficacité (le mode) du compresseur (qui est un nombre entre 0 et 100, précisé par le marqueur XPK_PackMode ou une extension au nom du compresseur) est divisé en différentes tranches : par exemple de 0 a 10, 10 à 20, etc. En l'absence de XPK_PackMode, le mode par défaut du compresseur est examiné. Pour avoir la liste de tous les modes, on peut faire une boucle en partant du mode 0 et en continuant au mode (XpkMode.Upto+1) (Cf. description de la structure XpkMode).

En retour, la fonction XpkQuery() nous gratifie d'un code d'erreur en D0, 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 à un exemple.

Un exemple

Très simple en vérité, cet exemple se contente d'afficher la liste des compresseurs capables de cryptage, il utilise le marqueur XPK_PackerQuery et examine le champ xpi_Flags de la structure Packerlnfo résultante à la recherche du drapeau XPIF_ENCRYPTION. Pour l'assemblage correct de ce programme, HiSoft Devpac 3.50 est nécessaire.

Assembleur
Assembleur


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]