CHUNKMASTER 1.0: Manipulation facile de tous les fichier IFF ! ---------------- par Frédéric DELACROIX. DISTRIBUTION Ce programme est shareware,si vous le trouvez utile et décidez de le garder, envoyez une petite contribution (suggestion:50F ou équivalent) à: Frédéric DELACROIX 5 rue d'Artres 59269 QUERENAING FRANCE Ceci devrait me permettre en particulier d'acquérir le Kickstart 2.0 et programmer des utilitaires toujours meilleurs.Tous suggestion,report de bug, commentaire,etc sont les bienvenus également. La distribution de ChunkMaster est libre tant que: - Aucun profit ne soit réalisé au-delà de frais de copie minimaux - Cette documentation,le programme et les icônes soient distribués en même temps - Aucun changement d'aucune sorte ne soit fait à ces fichiers (à part le compactage) Evidemment,je n'accepte aucune responsabilité d'aucune sorte concernant l'utilisation de ce programme. INTRODUCTION Le format IFF devrait permettre à tous les programmes partageant un même type de données de communiquer facilement.Tous ces programmes se contentent pour la plupart d'un seul type de donnés:images,son,animations,texte...,mais aucun à ma connaissance ne permet la manipulation directe de tous ces fi- chiers au niveau le plus bas,c'est à dire la composition même des FORMs et des CHUNKs. C'est exactement le but de ChunkMaster LE FORMAT IFF Voici une description sommaire de la composition d'un fichier IFF général, sans distinction de type. Un fichier IFF est constitué de FORMs et CHUNKs. Il peut aussi exister d'au- tres strucures (PROPs,LISTs) mais ceux-ci sont très peu utilisés et aucune documentation n'est disponible. En général,une seule FORM constitue un fichier IFF,mais rien n'interdit à un tel fichier d'en contenir plusieurs.Une FORM est un peu analogue à un di- rectory:elle peut soit contenir des CHUNKs,ce qui est le cas le plus fré- quent,soit d'autres FORMs,ce qui arrive notemment dans les fichiers d'ani- mation ou de texte.Une FORM est identifiée par le mot "FORM" au début suivi d'un mot long contenant la longueur de la FORM.Ensuite vient le type de la FORM,lui aussi codé sur 4 octets,qui sert à repérer le type de fichier: ILBM (Interleaved bitmap) est le plus courant pour les graphismes,8SVX pour un son digitalisé,FTXT pour du texte,ANIM pour des animations,etc... Il peut en exister une infinité. Ensuite viennent les CHUNKs proprement dits.Un CHUNK est constitué de la fa- çon suivante:Un identificateur,encore codé sur 4 octets,indique le type des données.Ce peut être des remarques (ANNO),un nom (NAME),une notice de copy- right ((C) ),mais surtout BODY pour les données principales,CMAP pour une palette de couleurs,et la liste est très longue.Les 4 octets suivants in- diquent la longueur des données (Identificateur et longueur mis à part). A la fin des données vient éventuellement un octet nul pour que le chunk suivant démarre sur un offset pair.Cet octet n'est alors pas comptabilisé dans la longueur.Arrive ensuite le CHUNK suivant,et ainsi jusqu'à la fin de la FORM.Peut ensuite venir une autre FORM etc... Voici un schéma résumant ce qui précède sur un fichier particulier,repré- sentant une image: FORM $3106 ; commencement de la première FORM,sa longueur est de ; 12550 ($3106 hexadécimal).La longueur est comptée à partir ; de l'octet suivant. ILBM ; Abbréviation de InterLeaved BitMap, ce qui signifie que ; cette FORM décrit une image. Ici commencent les CHUNKs contenus dans cette FORM: BMHD $14 ; 1er CHUNK: c'est une structure BMHD (BitMap HeaDer),qui ; décrit la constitution de l'image.La longueur standard ; est de 20 octets. Ici commencent les données de ce Chunk: $0140 ; Largeur :320 pixels ($140 hexa) $0100 ; Hauteur :256 pixels ($100 hexa) $0000 ; Abscisse de l'image:0 pixel à partir de la gauche $0000 ; Ordonnée de l'image:0 pixel à partir du haut $03 ; Profondeur:3 plans,ce qui correspond à 8 couleurs $00 ; Masking: pas de masque $01 ; Compression: l'image est compressée (ne concerne que le ; chunk BODY) $00 ; octet de remplissage,ne sert qu'à avoir le mot suivant sur ; une adresse paire $0007 ; Couleur transparente: la couleur 7,qui n'est pas prise en ; compte car le flag Masking n'indique rien de tel. $0A ; xAspect: Rapport largeur/hauteur $0B ; yAspect $0140 ; Largeur de la page:320 pixels $0100 ; Hauteur de la page:200 pixels Un autre CHUNK: CMAP $18 ; 2ème CHUNK:donne la palette de couleur (Color MAP) pour ; cette image. La longueur est ajustée au nombre de cou- ; leurs.Ici, c'est 24 octets: 24=8 couleurs * 3 com- ; posantes (Rouge,Vert,Bleu) Les données de la palette viennent ici: $000 ; Couleur 0,dans le format RVB: Rouge-Vert-Bleu Viennent ensuite les autres couleurs. Encore un: CAMG $4 ; 3ème CHUNK:donne les modes de visualisation de l'image sur ; l'amiga (Commodore AMiGa).Sa longueur est toujours 4 oc-, ; tets,bien que 2 seuls soient utilisés. Et ses données: $00004000 Dernier chunk: BODY $30B1 ; Corps (BODY) de l'image.Ici viennent les points proprement ; dits constituant l'image.Notez que c'est une longueur im- ; paire,il y aura donc un octet de remplissage à la fin. Vérifions que cela correspond bien à la longueur de la FORM:à la longueur de chaque CHUNK il faut ajouter 8 octets correspondant à l'identificateur et à la longueur,et 4 octets supplémentaires pour l'identificateur de la FORM (ILBM),et l'octet de remplissage du CHUNK BODY: $3106 = 4 + $14 + 8 + $18 + 8 + $4 + 8 + $30B1 + 1 + 8 FORM =ID + BMHD + CMAP + CAMG + BODY Ceci n'est finalement que le fichier IFF le plus simple qui soit. On voit donc que le format IFF permet un stockage puissant de données,avec beaucoup d'informations complémentaires,mais qu'il est assez fastidieux à mettre en oeuvre et il est difficile pour un débutant d'y retrouver ses billes. ChunkMaster a justement pour but de manipuler SIMPLEMENT ce genre de structure. INSTALLATION: ChunkMaster n'est pas exigeant.Dans sa version actuelle,il ne nécessite au- cune bibliothèque autre que celles qui sont en ROM.ChunkMaster a été testé avec succès sur de nombreuses configurations,mais si un problème de compati- bilité survenait,faites-le moi savoir. On peut démarrer ChunkMaster à partir du CLI ou du WorkBench. Dès qu'il est lancé,ChunkMaster cherche un fichier de configuration nommé S:ChunkMaster.prefs. Si celui-ci n'existe pas,ChunkMaster utilise la confi- guration par défaut.Ce fichier peut être créé par ChunkMaster lui-même. LES FONCTIONS DU PROGRAMME: 1) About... Accessible en choisissant dans le menu Project ou en cliquant sur le titre. Une fenêtre apparaît avec mon adresse et la quantité de mémoire disponible. 2) Quit On peut quitter ChunkMaster en cliquant sur le gadget tout en bas,ou en choisissant le menu correspondant. Il est à signaler que tout travail qui n'a pas été sauvegardé sera perdu. Une fenêtre demandant confirmation appa- raîtra si le flag "Confirm" est positionné (voir plus loin).Prudence ! 3) Load IFF file: Avec cette fonction,accessible par le menu ou les gadgets,on peut charger un fichier IFF en mémoire.Un filerequester (cf plus loin) apparaît et deman- de le fichier à charger.Cliquer sur Cancel pour annuler. Attention: charger un fichier détruira impitoyablement tout fichier actuel- lement en mémoire. Une fois de plus,prudence. Une fois chargé,le fichier est analysé,pour détecter les FORMs et dif- férents CHUNKs. Si ce n'est pas un fichier IFF correct,le programme l'an- nonce et refuse de charger. L'analyse terminée,le programme affiche la structure du fichier à l'écran, constitué de cette façon: - Ca se passe sur la fenêtre centrale de l'écran principal. - On se situe au niveau 0,c'est à dire qu'on entre pas dans le détail des FORM. La ou les FORMs principales sont affichées (en blanc),avec leur identificateur,leur longueur et le nombre de CHUNKs à l'intérieur. - Pour sélectionner une FORM,il suffit de cliquer dessus avec la souris. La FORM,et de manière générale le CHUNK ainsi sélectionné apparaît alors sur fond bleu. - Pour voir le détail d'une FORM sélectionnée,il suffit d'appuyer sur la flèche droite. La liste des CHUNKs contenus dans la FORM est alors af- fichée. Un double-click sur le nom de la FORM produit le même résultat. Pour revenir en arrière,il suffit d'appuyer sur la flèche gauche.Entre ces deux flèches,un chiffre indique le niveau actuel.0 est le niveau de base,pour un niveau supérieur à 10,c'est un + qui est affiché. - Une telle opération de sélection sera nécessaire pour la plupart des fonctions. - Si la liste de CHUNKs comporte plus de 16 éléments,vous pouvez faire dé- filer cette liste en cliquant sur les flèches haut et bas.Entre ces deux flèches,il y a un indicateur de position dans la liste.Si vous cliquez dessus,un curseur apparaît et vous pouvez entrer la position au clavier. Ce nombre correspond à la position du premier CHUNK affiché.0 correspond au tout premier CHUNK,pour aller à la fin de la liste il suffit d'entrer un nombre très grand. Pour la fonction Load IFF,on se trouve au niveau 0 après chargement,en gé- néral,il n'y a qu'une FORM. 4) Save IFF file: Cette fonction est accessible par les gadgets de droite ou par le menu. Elle sert à sauvegarder le fichier IFF sur lequel vous êtes en train de tra- vailler.Toutes les modifications que vous avez faites seront enregistrées. Le programme affiche un FileRequester en vous demandant le nom du fichier. Cliquez sur Cancel pour annuler la sauvegarde. Le fichier est sauvegardé dans le format IFF,et si les modifications que vous avez apportées sont cohérentes (il ne s'agit pas de mettre n'importe quoi dans un fichier),ce fichier pourra être chargé par un programme éditant ce type de fichier particulier (programme de DAO,de musique...). 5) Delete File: Cette fonction est très simple et dangereuse.Elle permet simplement d'ef- cer un fichier sur disquette.Le FileRequester apparaît en demandant le nom du fichier à effacer.Cliquez sur Cancel pour annuler.Le programme demande éventuellement confiration (cf plus loin:PREFERENCES) avant d'effacer.At- tention:le fichier effacé est perdu! Accessible par gadget et menu. 6) Append File: Accessible par gadget et menu.Cette fonction sert à fusionner 2 fichiers IFF.Voici la marche à suivre. D'abord vous devez avoir un fichier IFF en mémoire (sinon cette fonction se comporte comme Load IFF),et placez-vous au niveau désiré.Il est en effet possible d'inclure le fichier à l'intérieur d'une FORM déjà existante.Ensuite cliquez sur Append File,le FileRequester apparaît.Désignez le fichier à charger.Le fichier est chargé en mémoire et la (ou les) FORMs correspondantes sont ajoutées à la fin de la liste,sur le niveau actuel.Vous pourrez ensuite les déplacer grace à Cut Chunk.Cette fonction peut se révéler utile surtout pour les fichiers d'animations (ANIM) texte issus de traitements de texte (FTXT). 7) Cut Chunk: Cette fonction nécessite d'avoir sélectionné un chunk auparavant,comme expliqué précedemment. Le chunk ainsi sélectionné est retiré de la liste, (au passage la longueur de la FORM est recalculée),et placé dans un buffer spécial.Celui-ci se comporte un peu comme le buffer des éditeurs de texte. C'est juste une mémoire temporaire,s'il contenait quelque chose avant,le contenu est détruit,donc prudence! Le contenu de ce buffer n'est évidemment pas sauvegardé avec le fichier au cas où cette opération est réclamée.Le chunk disparaît donc de la liste à l'écran,mais il n'est pas perdu. Cette fonction agit aussi bien sur les CHUNKs que sur les FORM. 8) Copy Chunk: Cette fonction agit exactement comme la précédente,sauf que le chunk sé- lectionné ne disparaît pas de la liste,il est seulement copié.La copie ainsi réalisée est stockée dans le buffer de la même façon que pour Cut chunk. Le seul résultat visible à l'écran est le chunk qui se déselectionne.Atten- tion,cette opération nécessite de la mémoire supplémentaire et peut donc échouer.De plus,elle n'agit que sur les CHUNKs. Une tentative de copie d'une FORM entraînera un message d'erreur et l'abandon de l'opération. La copie de FORMs serait en fait possible mais très compliquée pour un intérêt réduit. Peut-être que je l'incluerait dans une version future si le besoin s'en fait sentir (informez-moi!). 9) Paste Chunk: Cette fonction est la complémentaire des deux précédentes.Elle permet de recoller le chunk précédemment coupé (Cut chunk) ou copié (Copy Chunk) dans le buffer.Il faut donc évidemment avoir executé l'une de ces opérations a- vant. Attention,contrairement aux traitements de textes,le contenu du buffer n'est pas recopié: le Chunk contenu dans le buffer est inséré dans la liste et le buffer est effacé.Pour faire de multiples copies,il est nécessaire de faire de multiples Copy Chunk.L'opération se déroule de la façon suivante: Cliquez sur Paste Chunk.Le programme vérifie que le buffer n'est pas vide (auquel cas il n'y a rien à coller),puis affiche un requester demandant la position du chunk à insérer (voir le chapitre NUMBER REQUESTER).Entrez le nombre correspondant à cette position.Si ce nombre est trop grand,le chunk est ajouté à la fin de la liste.Voila.Simple non? 10) Delete Chunk: Cette fonction a un principe très simple:effacer un CHUNK de la liste. Vous devez d'abord sélectionner un chunk,puis cliquer (ou choisir dans le menu) Delete Chunk.Le programme demande éventuellement confirmation puis le chunk est irrémédiablement effacé de la liste.Il n'y a aucun moyen de le récupérer donc faites attention. Il est également possible d'effacer des FORMs.Si la FORM sélectionnée est vide,ChunkMaster l'efface sans rien demander à personne.Si ce n'est pas le cas,il demande confirmation (éventuellement) avant de l'effacer:en effet,cet- te opération détruit tous les chunks contenus dans la FORM. 11) Save Chunk: Cette fonction sert à sauvegarder le contenu d'un chunk ou d'une FORM.Vous devez d'abord sélectionner un objet puis cliquer sur Save Chunk. Si l'objet est un chunk,son contenu est sauvegardé sans aucun format (RAW=crû).Si l'objet est une FORM,celle-ci est sauvegardée en tant que fi- chier IFF à part entière.Exemple:votre fichier principal est un fichier ANIM. Normalement,dans ce type de fichier,on trouve d'abord une FORM ILBM.En sé- lectionnant cette FORM et en cliquant ce gadget,vous vous retrouverez avec un fichier image ILBM correspondant à la première image de l'animation,qui peut être rechargée dans un programme de dessin. L'utilisation de la fonction est donc très simple.Un filerequester apparaît vous demandant le nom du fichier à sauvegarder.Cancel annule l'opération,mais vous avez l'habitude maintenant. 12) Add Chunk: Cette fonction sert à ajouter un CHUNK ou une FORM à la liste.Cliquez d'a- bord sur le gadget (ou choisissez le menu) Add Chunk.Une petite fenêtre ap- paraît alors réclamant les attributs du nouveau chunk. Il y a d'abord 2 gros gadgets: FORM et CHUNK.Cliquer sur l'un désactive l'autre.Cela sélectionne le type d'objet:FORM ou CHUNK. Il y a ensuite un gadget de chaîne qui cons- titue l'identificateur de la FORM (ex:ILBM,8SVX,SMUS...) ou du CHUNK (ex: BODY,CAMG,CMAP...).Un identificateur doit toujours être constitué de 4 let- tres majuscules.Bien que ChunkMaster tolère les minuscules,si il y a moins de 4 lettres,ChunkMaster rajoute des espaces. En dessous vient un autre gadget de chaîne,qui correspond à la longueur du chunk.S'il s'agit d'une FORM,cette valeur est ignorée.En effet,un CHUNK ou une FORM insérée de cette façon est vide.Pour un chunk,la mémoire est remplie d'un nombre de 0 correspondant à cette valeur,mais pour une FORM,qui ne doit contenir que des Chunks absents pour le moment,sa longueur n'est que de 4 octets,qui sont en fait occupés par l'identificateur.On ne peut pas y toucher directement. La longueur peut être donnée en décimal ou en hexadécimal (en utilisant un dollar). Ces nouveaux Chunks peuvent être manipulés comme les autres. 13) Edit Chunk: Voila la fonction la plus complexe du programme.Elle sert à modifier di- rectement le contenu d'un chunk,c'est à dire ses données propres.Elle est sans effet sur les FORMs. Vous devez sélectionner un chunk et cliquer "Edit Chunk".Cette opération réclame de la mémoire supplémentaire car on n'édite pas le chunk lui-même mais une copie,autorisant ainsi un retour en cas de fausse manoeuvre.Vous pouvez aussi l'appeler en double-cliquant sur le nom d'un chunk. Une grande fenêtre s'ouvre alors avec les contenus du chunk.En haut de l'é- cran il y a d'abord le gadget indiquant l'identificateur du chunk.Vous pou- vez le modifier en cliquant dedans ou en appuyant sur Amiga droite+5 du cla- vier numérique. Un curseur apparaît et vous pouvez effacer l'ancien ID et le remplacer. A coté se trouve le gadget de position.Il indique toujours la position dans le chunk du premier octet affiché.Vous pouvez changer la valeur,déplaçant ainsi le curseur en cliquant dedans ou en appuyant sur ENTER (clavier numé- rique).La valeur peut être entrée en décimal ou en héxadécimal (dans ce cas faites précéder la valeur par un $ (dollar)).L'affichage est alors réactuali- sé pour que le curseur soit à la valeur indiquée. A coté se trouve un indicateur de la taille du chunk.Ce n'est PAS un gadget, cliquer dedans sera sans effet.Ce n'est que la taille actuelle du chunk,qui peut être modifiée,nous verrons comment. Tout à droite se trouve un gadget nommé HELP.Cliquez dessus pour avoir le résumé des touches du clavier et de leur affectation.Appuyer sur la touche HELP du clavier a le même effet. En-dessous de cette première ligne de gadgets se trouve un grand cadre,divi- sé en plusieurs colonnes,qui sont,de gauche à droite: - l'offset,qui indique la position dans le chunk de l'octet suivant, - le premier mot long,constitué de quatre octets, - les deuxième,troisième et quatrième mots longs. Il y a donc 4 mots longs, c'est à dire 16 octets sur une ligne. - les caractères ASCII affichables correspondant à ces octets (16 caractères par ligne). Sur une des lignes se trouve un carré bleu,c'est le curseur (sans blague!). En fait il y a deux curseurs:un sur l'affichage héxadécimal,et un sur l'af- fichage ASCII. Voici comment déplacer ce curseur,d'abord grace au clavier: Flèches droite: Octet suivant (colonne suivante) gauche: Octet précédent (colonne précédente) haut: 16 octets après (ligne suivante) bas: 16 octets avant (ligne précedente) Alt+Flèches droite: Mot long suivant gauche: Mot long précédent haut: Page précédente bas: Page suivante Shift+Flèches droite: Fin de ligne gauche: Début de ligne haut: Début du chunk bas: Fin du chunk TAB: Mot long suivant Shift+TAB: Mot long précédent Amiga droite+9 clavier numérique: Page précédente Amiga droite+3 clavier numérique: Page suivante Amiga droite+7 clavier numérique: Début de page Amiga droite+1 clavier numérique: Fin de page Amiga droite+8 clavier numérique: Défiler une ligne vers le haut Amiga droite+2 clavier numérique: Défiler une ligne vers le bas Amiga droite+4 clavier numérique: Octet précédent Amiga droite+6 clavier numérique: Octet suivant RETURN: Ligne suivante,colonne 0 F1-F10: Aller au marqueur. Shift+F1-F10: Positionner un marqueur. La position du curseur peut être donnée directement en cliquant à un endroit, sur un octet,soit en affichage hexadécimal,soit en ASCII.Le curseur s'y rend immédiatement. Le but de cette fonction est évidemment l'édition des contenus du chunk.Il y a 2 modes d'édition.L'édition ASCII et l'édition héxadécimale. L'édition ASCII: elle se fait en tapant les caractères directement au clavier, comme pour un traitement de texte,alors que la touche CAPS LOCK n'est pas allumée.Tout ce que vous tapez s'affiche alors tel quel dans la zone d'affi- chage ASCII.Les valeurs correspondantes sont mises à jour du coté hexadécimal. A chaque caractère tapé,le curseur avance d'un octet. L'édition hexadécimale est sélectionnée en allumant la touche CAPS LOCK.On entre alors au clavier la valeur héxadécimale de l'octet à modifier.Deux chiffres sont bien sûr nécessaires. Seuls les chiffres 0 à 9 et A à F sont acceptés.Comme pour l'édition ASCII,le curseur avance d'un octet à chaque octet entré. La touche BackSpace (flèche arrière) efface l'octet précédent (le met à 0) et recule le curseur d'un octet.La touche DEL efface l'octet sous le curseur. Sous ce cadre se trouve une série de gadgets. Le premier est Done. Cliquez dessus quand vous voulez sortir de la fonction d'édition.Attention,les changements éventuels seront définitifs.Le programme demande éventuellement confirmation. Le second gadget est Undo.Celui-ci invalide tous les changements effectués depuis l'appel de Edit Chunk.Cela concerne aussi bien l'identificateur et la taille que les données même du chunk.Cela détruit tous les changements opérés. Il existe un moyen (heureusement) de sortir de la fonction d'édition sans valider aucun changement.Il consiste à cliquer d'abord sur Undo puis sur Done. Un moyen plus rapide et exactement équivalent est de cliquer sur le gadget de fermeture de la fenêtre,en haut à gauche. Le troisième gadget est Insert.Celui-ci sert à ajouter des octets dans le chunk.Positionnez d'abord le curseur à l'endroit où vous voulez l'insertion puis cliquez Insert (ou tapez Amiga droite+0 clavier numérique).Un requester demande alors le nombre d'octets à insérer.Répondez ou annulez par cancel. Le nombre correspondant de 0 est inséré à l'endroit du curseur,et la taille du chunk est modifiée en conséquence.Attention:une telle opération peut de- mander beaucoup de mémoire. Le quatrième gadget se nomme Delete.C'est la fonction inverse de la précé- dente.Positionnez d'abord le curseur à l'endroit des octets à enlever et cliquez sur Delete,ou appuyez sur Amiga droite+. clavier numérique. Un requester vous demande le nombre d'octets à supprimer.Le nombre correspon- dant sera effacé,la taille du chunk sera modifiée.Cette opération peu aussi exiger beaucoup de mémoire. Le cinquième gadget se nomme Add,il remplit exactement la même fonction que Insert,sauf que les octets ainsi ajoutés le sont à la fin du Chunk,quel que soit la position du curseur. Les deux gadgets suivants ne sont pas mystérieux:Page up pour la page pré- cédente,Page down pour la page suivante. Il reste un gadet,Load Raw,qui correspond à une fonction intéressante.Elle permet de charger un fichier directement dans le chunk.Si vous cliquez sur ce gadget,une nouvelle fenêtre s'ouvre,demandant le type de chargement.Choi- sissez donc: - Replace: pour remplacer carrément le contenu du chunk par celui du fi- chier.La taille est modifiée en conséquence.Le seul moyen de récupérer l'an- cien contenu est 'Undo'. - Append: Le contenu du fichier est ajouté à la fin des données du chunk courant.La taille est modifiée. - Insert: Le contenu du fichier est inséré à l'endroit même où se situe le curseur et la taille est modifiée. - Overwrite: Le contenu du fichier remplace les anciennes données sur toute sa longueur.Si le chunk n'est pas assez grand pour le contenir en entier, ChunkMaster l'agrandit. - Si vous vous êtes trompé,cliquez sur Cancel. Voila qui termine la description de cette longue fonction Edit,et de toutes les fonctions principales de ChunkMaster. LE MENU PREFERENCES 1) Confirm Requests Cette option dit à ChunkMaster s'il doit avertir l'utilisateur à chaque fois qu'il risque de faire quelque chose de grave,par exemple quitter Chunk- Master ou effacer un Chunk. Si le checkmark est affiché,ChunkMaster le fera. Dernière chose:pour ces requesters,j'ai respecté la convention de Commodore qui consiste à mettre le gadget "oui" à gauche et le gadget "non" à droite. Pour satisfaire un tel requester vous pouvez aussi appuyer sur Y pour le gadget positif et sur N pour le gadget négatif. Pour les avertissements (requesters à un seul gadget,comme les erreurs du DOS),appuyer sur n'importe quelle touche revient à cliquer sur le gadget. 2) FileRequester devices Tous les amigaïstes n'ont évidemment pas la même configuration.Aussi,les gadets devices du FileRequester conviennent à ma configuration mais pas for- cément à la votre.Pour tourner cette difficulté sans me plonger dans les méandres de la dos.library,j'ai décidé de rendre lesdits gadgets programma- bles.Il vous suffit de choisir cette option dans le menu.Une fenêtre apparaît avec une ribambelle de gadgets. La première ligne,vous l'aurez reconnue,comporte les gadgets du filerequester. Normalement,le premier est sélectionné.Cliquer sur l'un d'eux désactive tous les autres. En-dessous,un gadget de chaîne contient le titre du gadget sélectionné.Vous pouvez le changer,son nom ne doit pas dépasser 7 caractères,avec les :. Si le nom ne comporte pas les :,ChunkMaster les rajoute. Encore en dessous,se trouvent trois gadgets.Okay valide tous les changements effectués,et en informe le FileRequester.Undo All invalide ces changements, tous redevient comme avant l'appel de la fonction (les changements sont perdus),et Cancel sort de la fonction en annulant tous les changements.Cli- quer sur le gadget de fermeture a le même effet,comme dans la plupart des cas d'ailleurs. 3) Change Colors Ce menu fait apparaître une fenêtre qui est en fait un requester de pa- lette,pour adapter ChunkMaster au goût de chacun.Il y a 4 gros gadgets qui représentent les 4 couleurs de l'écran.Cliquer sur l'un desactive les autres. 3 gadgets proportionnels,intitulés judicieusement R,G et B,correspondent aux composantes rouge,verte et bleue de la couleur sélectionnée.Vous pou- vez les déplacer,changeant ainsi une des couleurs de l'écran.La valeur héxadécimale de la composante est affichée à coté. Enfin,deux gadgets complémentaires:Okay pour sortir en validant les change- ments,et Cancel pour sortir en les annulant. 4) Save Prefs Cette fonction sauvegarde tous les paramètres d'environnement de ChunkMas- ter. Le fichier de destination se nomme S:ChunkMaster.prefs. S'il n'existe pas,il est créé,s'il existe,l'ancien est écrasé et remplacé par le nouveau. Ce fichier de configuration contient: - Les couleurs de l'écran, - Le status du flag "Confirm Requests" ainsi que celui de "Hide .info" du FileRequester, - Les devices programmables du FileRequester, - Le directory actuel du FileRequester. Ce fichier sera rechargé en mémoire lors de l'appel suivant à ChunkMaster. LE FILEREQUESTER C'est sans doute la première fonction de ChunkMaster que vous verrez.Son utilisation est des plus simples et dans la plus grande tradition de la majorité des FileRequesters. Son but est de demander le nom d'un fichier, existant ou non,à l'utilisateur de façon à ce que celui-ci ait une idée de l'agencement de ses disquettes.Il se présente sous la forme d'une fenêtre comportant une liste de fichiers et des gadgets un peu partout.Voyons ça dans l'ordre. 1) La liste de fichiers Elle représente la liste de tous les fichiers du directory courant.Lors- que le programme la lit,l'utilisateur a encore accès à la totalité des fonctions du FileRequester.Il y a tout de même un avantage à laisser le FileRequester terminer cette tâche avant de le fermer: Une fois la liste lue intégralement,il n'est pas nécessaire de la relire lors d'un appel ultérieur du FileRequester. 10 fichiers peuvent être représentés à l'écran par leur nom et leur taille (pour un fichier) ou la mention dir (pour un directory).Les fichiers sont en noir et les directorys en blanc.Les fichiers ainsi répertoriées sont triées par ordre aphabétique,avec les fichiers d'abord et les directories ensuite. Ce tri n'est fait qu'à la fin du catalogue ou lorsqu'on déplace la liste. Il est évidemment possible de voir plus de 10 fichiers:pour se déplacer dans la liste on peut utiliser les flèches haut et bas (les gadgets,pas les tou- ches du clavier),ou le gadget proportionnel.Le fonctionnement est assez évi- dent. De plus,il est possible de cacher certains fichiers,les fichiers .info,les fameux icônes du Workbench.Ils sont sans intérêt pour ChunkMaster mais on ne sait jamais.Si vous voulez les voir quand même,cliquez sur Hide .info pour désactiver ce gadget. 2) La sélection:Les gadgets de chaîne Comme beaucoup de choses,ils vont par paire.L'un représente le directory actuel,l'autre le fichier sélectionné. Pour le directory,on peut soit cli- quer et entrer le chemin au clavier,et le directory correspondant sera lu, s'il existe,dès l'appui sur RETURN.On peut aussi choisir un directory dans la liste actuellement affichée,ce qui a le même effet.Le gadget booléen à droite du gadget de chaîne permet de forcer la relecture du catalogue.En ef- fet,d'autres fichiers ont très bien pu être rajoutés depuis la dernière lec- ture... Il y a plein de gadgets en dessous,que vous connaissez déjà si vous avez lu le chapitre Préférences. Cliquer sur l'un deux remplace le contenu du gadget de chaîne par le device correspondant (DF0:,RAM:,etc...),et la lecture du catalogue commence.Ces gadgets peuvent être personnalisés comme indiqué ci- dessus.Il y a en plus le gadget Parent,qui sert à lire le directory ascendant de celui actuellement lu. Essayez,ce sera peut-être plus clair. Le gadget représentant le fichier sélectionné est d'un maniement plus simple. Vous pouvez entrer un nom au clavier et appuyer sur RETURN sera équivalent à cliquer sur Okay. Cliquer un nom de fichier dans la liste reviendra à copier ce nom dans ce gadget de chaîne.Un double-click correspondra de plus à Okay. Il reste à décrire les deux gadgets:Okay et Cancel. Le premier sert à fermer le FileRequester en acceptant la sélection (le nom de fichier est considéré comme valide et transmis au programme),et le second annule purement et sim- plement l'opération en cours.Le requester se ferme et aucune action n'est entreprise. NUMBER REQUESTER Juste deux mots pour ce requester simple d'emploi.Il sert à demander un nombre à l'utilisateur.Il comporte un gadget de chaîne et deux gadgets boo- léens.Le gadget de chaîne sert à entrer le nombre.Vous pouvez soit le taper en décimal,soit en hexadécimal.Dans ce dernier cas,vous devez faire précéder le nombre par un $ (dollar). Les gadgets booléens sont Okay vour valider la saisie,Cancel pour annuler l'o- pération en cours.Cliquer sur le gadget de fermeture a le même effet que Cancel. AMELIORATIONS FUTURES: Ce programme n'est que la version 1.0,il y a encore beaucoup d'améliorations à prévoir.Si le succès de cet utilitaire est assez bon,il y aura beaucoup d'autres versions! Parmi les améliorations prévues: - Un FileRequester amélioré - Des routines d'édition différentes pour des types de chunks différents connus,avec une routine par défaut pour les chunks inconnus. - Reconnaissance et utilisation des routines de compactages ByteRun 1 et autres - Peut-être un interface avec la powerpacker.library - Pourquoi pas un interface ARexx ? - Reconnaissance et gestion des autres "objets" IFF:CATS,PROP,LIST... Pour beaucoup de sujets (comme ARexx),la doc technique manque,mais surtout, ce qu'il me faut c'est votre soutien à vous,le monde Amiga... Ce programme m'a demandé beaucoup de temps,alors pensez à moi pour vos contributions, suggestions (j'en ai vraiment besoin),remarques,bugs et tout ce qui vous passe par la tête: Frédéric DELACROIX 5 rue d'Artres 59269 QUERENAING FRANCE Merci !!! NOTE FINALE: Le principe de ChunkMaster est assez simple,mais il est relativement com- plexe à mettre en oeuvre.J'ai utilisé des algorithmes récursifs et autres choses peu ragoûtantes.J'ai essayé par tous les moyens de rester lucide et de garder une programmation propre:ChunkMaster libère toute la mémoire qu'il réserve,ferme tout ce qu'il a ouvert etc...,pas comme certains pro- grammes (il y en a encore) qui chargent un fichier à une adresse absolue sans se préoccuper de ce qu'il y a là.Il se peut cependant qu'il reste des bugs bienb cachés.Le meilleur moyen de les découvrir est que vous me donniez une description EXACTE du problème,de façon à ce que je puisse le reproduire et le résoudre. Pour cette version je préfère garder le source car je ne veux pas trop de versions différentes de ChunkMaster.Peut-être plus tard... REMERCIEMENTS: Bonjour et merci rapide à: P.Dussart,Y.Quiquempois,B.Buirette,M.Truffin,S.Laffra,B.Wa'aloun,X.Ratayzyk, F.Jacobs,B.Bar,E.Hot,A.Camerlync,C.Descamps,D.Richez, ...et vous qui avez eu le courage de lire cette doc ! LA FIN: Il est temps de terminer cette documentation déjà trop longue! Bonne nuit! L'AUTEUR: Frédéric D.