Obligement - L'Amiga au maximum

Lundi 26 juin 2017 - 12:32  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



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 à l'offset -84, est entièrement contrôlée par une liste de tags, sur laquelle un pointeur doit être donné dans le registre A0. Trois tags sont spécifiques à cette fonction.

Le tag XPK_PackersQuery (attention à l'orthographe !) vous retourne, dans une structure XpkPackerList (pointée par le champ ti_Data du tag) 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 tag 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 tag 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 tag XPK_ModeQuery donne des informations plus précises encore : lorsque ce tag est utilisé, la fonction stocke dans la structure XpkMode pointée par le champ ti_Data du tag 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 tag 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 tag 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]