SPACKER
rolelttrocl
S P A C K E R III |
(c) octobre 1992 - A FIREHAWKS Utility |
FREEWARE !!! librement copiable |
Code by Spiral. |
|
|
Date de sortie : le 30 octobre 1992 |
|
|
~~~~~~~~~~~~~~~~~~ |
|
- Spacker 3 est un compacteur de fichier Exe et data |
|
- C'est aussi un archiveur trÅ s rapide |
|
- Existera aussi sur Amiga (en cours), Falcon (version DSP), |
Mac et IBM PC |
|
~~~~~~~~~~~~~~~~~ |
*** ATTENTION ***
Le fichier AUTO_SP3.PRG est un programme RESIDENT qui permet â¦
tout fichier comprâssâ avec SPACKER3 de se dâcompresser,il doit
par consâquent se trouver en premiÅ re place dans le dossier AUTO.
Lors du chargement automatique du râsident, on peut ne pas
l'activer en maintenant la touche CONTROL enfoncâe.
*****************
~~~~~~~~~~~~~~~~~~
Les diffârentes fonctions sont classâes par menu...
* Menu 'FILE'
-------------
____
NEW FOLDER |
FORMAT DISK |
DISK INFO | Disponibles uniquement avec un selecteur
FILE INFO |------ du type de Sâlâtric (Shareware) qui vous
MOVE FILE | est offert avec le Spacker 3
COPY FILE |
RENAME FILE |
DELETE FILE ____|
*Skip or Copy ... Permet de passer ou copier les fichiers qui
ne peuvent etre packâes sur la destination.
utilisâ lors du compressage de plusieurs fichiers, il assure la
copie (option Copy) sur le disque destination pour les fichiers
ne pouvant Å tre comprâssâs (taille originale trop petite ou taille
comprâssâe supârieure ⦠la taille originale).
*Src A Dst A ... Dâfinit le lecteur Source et le lecteur destination
*save Config ... sauvegarde la configuration
Patch SPACKER3 en sauvegardant
l'unitâ (de disquette/disque) source, l'unitâ destination,
l'indicateur FILE PREF dans le menu FICHIER(C ou autre),
la prise ou non en compte du dossier dans le menu ARCHIVE (P ou autre),
l'indicateur flash et la couleur de flash dans le menu PACK
(F ou autre, RGB).
La config est en ASCII et ⦠l'offset 28(entete)+2 de SPACKER3.
*Create Auto SP3 ... Crâe le râsident indispensable pour le decrunch
des executables et des datas
*touch SP3 files Date ... Correction de la date des fichiers compactâes
permet de rattacher la longueur originale d'un fichier compressâ
avec SPACKER3 directement en âcrasant la date et l'heure de
crâation/modification du fichier: seule solution restante pour
âviter le cycle lent ouverture/lecture/fermeture de fichiers
lors d'une selection de fichiers. La taille originale est utile
⦠connaitre car elle permet de râserver une taille mâmoire
âgale au celle du fichier une fois dâcompressâ.
L'attribut ARCHIVE est aussi utilisâ pour les fichiers compressâs
par SPACKER3, il se conserve lors d'une copie de fichier, la
date par contre change, d'oâ l'intâret de cette fonction...
* MENU 'OFFSET'
---------------
un simple âditeur de fichiers Offset...Hum Hum..
Les offsets permettent d'ajuster la structure de compression
⦠la structure de chargement d'un type de fichier: une image
DEGAS compressâe en un seul bloc et chargâe en plusieurs fois
par un programme de dessin ne sera pas dâcompressâe ou plantera
le programme.
Le module ESPION de structure de chargement est inclus dans le
râsident, il faut recharger le râsident via le Gem et choisir
l'option SPY OFF pour indiquer l'extension des fichiers â¦
surveiller: une sauvegarde de la structure de chargement sera
automatiquement effectuâe (extension râservâe SPn ou n varie de
0 ⦠9) lors de la fermeture du fichier (ne pas oublier de
dâprotâger la disquette).
Ce fichier offset gânârâ peut Å tre âditâ et adaptâ ⦠un type
standard de fichier (images DEGAS, fontes CALAMUS...).
Les premiers octets de ce fichier offset contiennent l'extension.
Un commentaire peut Å tre rajoutâ par l'usage d'une tabulation ou
d'un ';' (les lignes blanches ou commenâ¡ant par un ';' sont
ignorâes par l'âditeur intâgrâ d'offsets dans SPACKER3).
3 types de blocs dans un fichier sont ⦠distinguer: le type
MOVE (codâ par -) indique que le bloc ne sera pas compressâ
dans le fichier râsultat de la compression, le type PACK (codâ +)
pour compresser le bloc et le type PGFX (codâ *) pour compresser
le bloc par algorithme graphique 4 plans.
Toutes les longueurs de bloc doivent Å tre paires, seul le dernier
bloc fait exception s'il est assignâ du type MOVE (pour les fichiers
de taille originale impaire). La description d'une ligne bloc du
fichier offset est la suivante (les espaces entre caractÅ res et
les tabulations sont gârâs): 'type de bloc' + 'longueur de bloc',
longueur HEXA sur 5 caractÅ res max, le total des longueurs HEXA
ne doit pas dâpasser F423F soit 999999 octets. Les blocs de
longueur nulle sont expressement interdits.
voici quelques exemples:
- 80 ; 128 octets ⦠ne pas compresser (entete NEO)
; ligne de commentaires ignorâe
*07D00 ; âcran basse râsolution compressâ par algo. graphique
Il est possible de standardiser tous les fichiers offsets d'un
type de fichier en un seul fichier offset en incluant un bloc
et un seul de longueur paire et variable: au lieu de la taille
il suffit de saisir le mot clâ 'dummy' ou 'DUMMY' (ou mÅ me
'DuMMy' si vous prâfârez). Le bloc connaitra sa longueur au
moment de la compression (taille originale du fichier moins
tailles des autres blocs). Les fontes Calamus sont des fichiers
chargâs en 13 fois, 1 seul bloc parmi ces 13 blocs est variable
et contient les data de la fonte: un seul fichier offset, livrâ
avec SPACKER3, permet de gârer toutes les fontes. Ce principe
exposâ par l'exemple des fontes Calamus peut Å tre appliquâ sur
d'autres fichiers chargâs en plusieurs fois (utilisez l'espion
dans le râsident pour connaitre la structure de chargement).
L'âditeur d'offset de SPACKER3 permet d'adapter un fichier
offset sans quitter le compresseur.
L'extension indiquâ est changeable ⦠tout moment.
Touche ESPACE change le type de bloc: MOVE/PACK/PGFX
Tab: entrâe valeurs HEX (ou <-) / entrâe valeurs DEC (ou ->)
Up:prâcâdent,Down:suivant,Shift+Up:1er,Shift+Down:dernier bloc
Ins:insÅ re un bloc juste aprÅ s le bloc courant
Del:dâtruit le bloc courant
Variable correspond ⦠la dâfinition du bloc courant en bloc de
longueur variable (mot clâ DUMMY) pour avoir un fichier offset
s'alignant sur la taille originale du fichier ⦠compresser de
mÅ me extension.
Encore un plus! Si le fichier offset comprend les conditions
suivantes alors il est dâclarâ 'âxâcutable':
- le premier bloc est de type MOVE et de taille âgale ⦠28 octets
- il ne doit pas y avoir de blocs de type PACK
- il doit y avoir au moins un bloc de type PGFX
En clair, cel⦠signifie qu'il est possible de regrouper des blocs
graphiques (sprites, images...) basse râsolutions (4 plans, alignement
8 octets) ⦠l'intârieur d'un programme exâcutable et de compresser
l'ensemble tout en exerâ¡ant l'algo. graphique sur les blocs PGFX:
optimisation des performances de compression...
* Menu ARCHIVE :
--------------
On peut constituer des programmes SFX (SelF-eXtracting) avec des
fichiers compressâs avec SPACKER3 ou pas, toutefois, il faut
noter que les fichiers compressâs en âxâcutable,ressource,offset
ne seront pas dâcompressâs lors du dâsarchivage, seuls les fichiers
compressâs en type DAT seront dâcompressâs.
- ADD FILE
Les fichiers (contenu et location) sont ajoutâs ⦠la liste
des fichiers ⦠archiver: un fichier qui n'est pas compressâ en
type DAT (utilisation de l'option FORCE DATA TYPE dans le menu
PACK) est sujet ⦠une boite d'alerte pour dâterminer la poursuite
du traitement (arret,passe,ajoute).
Une fois le fichier SFX crâe par la fonction SAVE SP3 SFX, ce
programme proposera ces fonctionnalitâs:
- possibilitâ de dâtruire le SFX chargâ pour regagner la place
sur une disquette avant sauvegarde des fichiers contenus
- restauration des dossiers (si option PATH ON)
- en cas de manque de place sur disquette, possibilitâ de
changer de disquette pour finir le dâsarchivage.
L'ordre de sauvegarde est conditionnâ par la taille de chacun des
blocs: du plus petit (un fichier de longueur nulle peut Å tre dans
la liste des fichiers SFX (fichier identificateur de volume)) au
plus grand (pour bânâficier de toute la mâmoire).
* Menu UNPACK :
-------------
Les fichiers compressâs par SPACKER3 ou SPACKER2 sont reconnus
quelquesoit le type de fichier.
- LOAD UNPACKER
Cette fonction permet de charger un dâcompresseur externe ⦠SPACKER3
et de bânâficier du dâcompressage en sârie des fichiers d'un dossier.
Elle ne remplace pas l'utilisation d'un 'multi-depacker' qui
reconnait de lui-mÅ me le format de compression.
Un fichier dâcompresseur pour Å tre chargâ et appelâ par SPACKER3 doit
respecter la structure (trÅ s complexe, une partie est ⦠râdiger en
68000!) suivante:
- octets 0 ⦠3: constante 'SPup'
- octets 4 ⦠15: libre pour nommer le dâcompresseur
remarques:
. le mot clâ REL sera utilisâ pour dire que l'offset est
⦠prendre par rapport au dâbut de fichier (dâbut+28 pour un
exâcutable) si l'offset est positif et, par rapport ⦠la fin de
fichier (fin de code hors infos de relocation pour un exâcutable).
. tous les offsets doivent Å tre pairs 5alignâs sur un mot mâmoire).
struc donnâes type fichier exâcutable:
- octets 16 ⦠19: constante '.EXE'
- octets 20 ⦠21: offset d'un identificateur facultatif
(⦠0 si octets 22 ⦠25 ⦠0)
- octets 22 ⦠25: valeur de l'identificateur (ex: 'Ice!')
(⦠0 si octets 20 ⦠21 ⦠0)
- octets 26 ⦠27: offset =>0 dâbut de la liste checksum (borne sup)
- octets 28 ⦠29: offset >0 fin de la liste checksum (borne inf)
- octets 30 ⦠31: râsultat du checksum: somme des mots compris entre
les 2 offsets dâfinis prâcâdemment moins les âventuels mots longs des
adresses dâfinies par leurs offsets dans les 5 mots octets 32 ⦠41.
Le checksum permet d'identifier un dâcompresseur et sa version.
- octets 32 ⦠41: max 5 offsets d'adresses ⦠retrancher du checksum
(par adresse, il faut entendre 2 mots consâcutifs),ils doivent
Å tre strictement compris entre les deux bornes.
⦠0 si tous les mots entre les 2 bornes sont utilisâs pour le
checksum.
Ex: soit le code d'un fichier exâcutable comprenant un dâcompresseur
de longueur 512 octets, dâbutant relativement par rapport au
dâbut du fichier exâcutable ⦠l'offset 28+64, les adresses
28+80 et 28+112 contiennent des mots longs issus de la relocation
du programme, il ne faut donc pas les compter dans le checksum
ou alors faire dâmarrer le checksum aprÅ s (changement de dâbut de
liste checksum), cel⦠donne:
'.EXE' 0000 00000000 0040 0240 87D4
0050 0070 0000 0000 0000
le checksum 87D4 est obtenu en ajoutant tous les mots entre
le dâbut du fichier exâcutable non relogâ+28(entete)+64 et le
dâbut+28+64+512 puis en retranchant les mots des offsets
dâbut+28+80,dâbut+28+82,dâbut+28+112,dâbut+28+114.
- octets 42 ⦠43: offset REL du bloc longueurs originale/compressâe
(octet 44 = -1) ou longueurs compressâe/originale (octet 44 = 0)
- octet 44: 0 ou -1 selon ordre du bloc longueurs
- octet 45: valeur d'ajustement=0 si la longueur compressâe contient
la taille du bloc total ((identificateur+)longueurs+donnâes)
sinon = taille du bloc longueurs (=8 ou 12 si identificateur prâsent),
ou = -1 si la longueur compressâe n'est pas indiquâe dans le bloc
longueurs mais dans le code du dâcompresseur:
dans ce dernier cas, la longueur compressâe est recalculâe ⦠partir
de l'entete de l'exâcutable (section text+data-offset du bloc des
donnâes compressâes (valeur octets 46 ⦠47).
- octets 46 ⦠47: offset du bloc total ((identificateur+)longueurs+
donnâes), si les donnâes se trouvent en dâbut du bloc total, cet
offset correspond alors ⦠l'offset des donnâes.
struc donnâes type fichier data:
- octets 48 ⦠51: constante '.DAT'
- octets 52 ⦠53: offset d'un identificateur OBLIGATOIRE
(pas de routine de dâcompression permettant d'identifier la
mâthode de compression), ⦠0 si 1er mot long du fichier data
- octets 54 ⦠57: valeur de l'identificateur (octet 54 toujours non nul)
- octets 58 ⦠59: offset REL du bloc longueurs originale/compressâe
(octet 60 = -1) ou longueurs compressâe/originale (octet 60 = 0)
- octet 60: 0 ou -1 selon ordre du bloc longueurs
- octet 61: valeur d'ajustement=0 si la longueur compressâe contient
la taille du fichier compressâ (identificateur+longueurs+donnâes)
sinon = taille du bloc longueurs (=8 ou 12 si identificateur prâsent),
ou = -1 si la longueur compressâe n'est pas indiquâe.
- octets 62 ⦠63: offset du fichier compressâ: gânâralement ⦠0, sauf
s'il contient d'autres informations en entete.
code d'appel de la routine de dâcompression :
- octets 64 ⦠127: non utilisâs (possibilitâ de s'en servir pour
stocker les valeurs d'entrâe et de sortie de la routine de
dâcompression)
- octets 128 ⦠255: code d'appel (le mot en 128 doit Štre non nul)
sont chargâs les registres A0:adresse du bloc total
D0:type de struc fichier:0=dat/-1=exe
- octets 256 ⦠...: extrait d'un programme compressâ contenant
le dâcompresseur.
⦠titre d'exemple, le code d'appel utilisâ pour ATOMIK35.SP9:
code lea code-128(pc),a6 ;relativement octet 0
move.l a0,120(a6) ;sauve adresse pour reloger
tst.w d0 ;test type
bne.s exe
dat addq #4,a0 ;aprÅ s identificateur
move.l (a0)+,d0 ;lit longueur originale
move.l d0,124(a6) ;et sauve pour reloger
jsr 256+202 ;sous-routine de dâcomp ATM5
lea code-128(pc),a6 ;relativement octet 0
move.l a5,a0 ;adresse bloc dâcompressâ
move.l 120(a6),a1 ;râcupÅ re adresse destination
move.l 124(a6),d0 ;et longueur originale
deplace move.b (a0)+,(a1)+
dbf d0,deplace
subi.l #$10000,d0 ;toute la longueur originale
rts
Les autres fichiers dâcompresseurs (extension SPn) donnâ avec
SPACKER3 peuvent aider ⦠comprendre la structure complexe mais
flexible d'un module de dâcompression externe ⦠SPACKER3.
* Menu PACK :
-----------
- Optimize SEQ 2 EXTEND
Option permettant de compresser les sâquences de 2 octets
identiques sur une âtendue de recherche plus grande: gains
souvent apprâciables sur les fichiers de type samples.
- Optimize LOW RES BLK
Option permettant de compresser des fichiers graphiques (sprites,
âcrans...) en un bloc et par algoritme graphique 4 plans (basse
râsolution). Pour les images, il est prâfârable d'utiliser
la compression via un fichier offset (pour pouvoir recharger
directement par le programme de dessin).
- FORCE DATA TYPE
Compresse un exâcutable, ressource en fichier compressâ en
un bloc (DAT ou BLK si l'optimisation LOW RES BLK est activâe).
cel⦠permet de crâer des fichiers compressâs simples qui pourront
Å tre intâgrâs dans une archive SFX.
Les autres fonctionnalitâs ne devraient pas poser problÅ mes.
Enfin, nous ne sommes pas responsables des pertes ou dommages qui pourraient
apparaitre lors de l'utilisation du Spacker 3 et des problÅ mes lors du
dâcompactage subsistent encore sous Multidesk et Neodesk III.
Faites donc attention !
Vous pouvez nous joindre sur 3614 code TEASER
ou 3615 code Rtel, Bal Daneel
Nous remerâ¡ions ⦠l'avance les personnes qui diffuseront ce packer dans
le monde entier.
Un grand merci ⦠STE59, STOF, DMVIOLATOR pour leurs encouragements.
Ceci est un produit certifiâ 100 % FIREHAWKS,
vous pouvez consommez sans modâration...
Back to Packer/Depacker