home *** CD-ROM | disk | FTP | other *** search
- S P A C K E R III
- (c) octobre 1992 - A FIREHAWKS Utility
- FREEWARE !!! librement copiable
- Code by Spiral.
-
- Pour etre complet, Spacker 3 doit etre livre avec les fichiers suivants :
-
- - dossier SPV3_OFF Exemple de fichiers offsets
- - dossier SPV3_S source de décrunch
- - dossier SPV3_UNP Exemples de Dépackeurs externes
- - SPACKER3.PRG Le compacteur, décompacteur et archiveur !
- - SPACKER3.DOC la doc
- - SP3_PROG.PRG créateur de header
-
-
- 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.
-
- Toutefois, si vous voulez conserver l'autonomie de votre éxécutable,
- c'est-à-dire sans le résident...C'est possible !!! Il suffit d'executer
- une fois votre prg compacté avec SP3 le programme SP3_PROG (addSFX).
- ATTENTION, vous ne pourrez plus le décompacter (Pour protéger vos
- éxécutables !)
- ~~~~~~~~~~~~~~~~~~
-
- 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...
-