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