english versione-mailsite web

Le problème des icônes sous MacOS 8.5

Les icônes standard 8 bits

Le principe : dessin 8 bits + mask 1 bit

Les icônes de fichiers du système 7 sont stockées dans les ressources suivantes :
  • icônes 32x32
    • 'ICN#' : noir et blanc (1 bit) et masque (1bit) — taille : 256 octets
    • 'icl8' : 256 couleurs (8 bits) — taille : 1024 octets
    • 'icl4' : 16 couleurs (4 bits) — taille : 512 octets
  • icônes 16x16
    • 'ics#' : noir et blanc (1 bit) et masque (1bit) — taille : 64 octets
    • 'ics8' : 256 couleurs (8 bits) — taille : 256 octets
    • 'ics4' : 16 couleurs (4 bits) — taille : 128 octets

Les icônes 32 bits

Le principe : dessin 24 bits + mask 8 bits

  • Comment dessiner mes icônes 32 bits ? Adobe Photoshop
  • Comment attribuer mes icônes 32 bits à un fichier ? clip2icns
  • Télécharger des exemples (bientôt)

La ressource 'icns'

La nouvelle ressource 'icns' apparaît avec MacOS 8.5 ; c'est en fait une ressource qui agrège les 6 types d'icônes précédents, plus les types suivants :
  • 'il32' : 32x32 en 16 millions de couleurs (24 bits) — taille variable
  • 'l8mk' : masque 32x32 en 256 niveaux de transparence (8 bits) — taille : 1024 octets
  • 'is32' : 16x16 en 16 millions de couleurs (24 bits) — taille variable
  • 's8mk' : masque 16x16 en 256 niveaux de transparence (8 bits) — taille : 256 octets
Plus des ressources de « huge icons », sans doute 'ih32' et 'h8mk', mais je n'en ai pas encore rencontré. De même pour les « huge » 'ich8', 'ich4', 'ich#', et les « mini » 'icm4', 'icm8' et 'icm#'.

La nouveauté la plus notable est que les ressources 'il32' et 'is32' sont des images compressées, donc de taille variable.

Possibilités de bugs

Quand une ressource 'il32' ou 'is32' est altérée — par exemple quand sa taille annoncée est fausse, ce qui la fera mordre sur la ressource suivante stockée dans 'icns' —, le système n'arrive plus à l'afficher, et… gèle.
Le gel est violent, et se produit dès qu'on essaie d'afficher l'icône. S'il s'agit d'une icône de disque, le Mac gèle donc quand le disque monte. S'il s'agit d'une icône sur le bureau, le Mac gélera un poil de seconde plus tard. En revanche le fichier peut très bien être visible sur le bureau en mode liste mini-icônes, et cela ne provoquera pas de gel.

Conséquences de ce bug

Le disque ne monte plus : Mac inutilisable, avec ou sans extensions, avec ou sans autre disque de démarrage. Grosse panique.

Propositions de solutions

L'équipe de PommeA a une méthode efficace face à ce problème, surnommé « The Blob ». (il y eut une épidémie de ce bug, causée par une version française de QuickTime 4)

NoIconServicesLib
MacOS 8.5 only!
Télécharger (723 bytes)

Sources
8 octobre 1999. Je propose pour ma part une extension qui permet de ne pas afficher les icônes : placée dans le Dossier Extensions, ce petit fichier empêche les icônes de s'afficher sur le bureau. L'effet est assez marrant.
Installée dans le Système d'un volume de démarrage, elle permettra donc de faire monter le volume blobbé sans aucune icône, et de mettre à la corbeille le fichier à icône corrompue. Un coup de ResEdit pour virer la ressource 'icns' ainsi que le bit « hasCustomIcon » permet même de garder le fichier.

Je remercie Stéphane Madrau pour son aide.

À propos de l'extension NoIconServicesLib : je ne suis pas responsable des dégâts qu'elle pourrait causer chez vous ! Les sources sont là si vous voulez vérifier son action (très simple en fait). D'autre part, à mon grand dam elle n'empêche pas les icônes de s'afficher hors du bureau : elles continuent de sévir dans Disk First Aid, Sherlock, Application Switcher, etc.

Personnellement je vis beaucoup mieux depuis que j'ai un CD bootable avec NoIconServicesLib installée. Surtout qu'attraper un Blob est très simple ! Aussi simple qu'un clic, en fait.

Nouveau

icnsCheck
MacOS 8.5 compliant
Télécharger (85 Ko)
21 novembre 1999. Voici icnsCheck, un petit soft en béta qui vérifie les ressources 'icns' d'ID -16455, c'est-à-dire les icônes personnalisées 32 bits.

À propos de la béta de icnsCheck : je ne suis pas responsable des dégâts qu'elle pourrait causer chez vous ! Cela dit elle marche bien chez moi (G3 sous MacOS 8.6 US).

En glissant un disque, un dossier, ou tout simplement un fichier sur icnsCheck, vous saurez si :
le disque, le dossier ou le fichier, ne contiennent aucune ressource 'icns' d'ID -16455 problématique.
un fichier a une ressource 'icns' d'ID -16455 buggée. Ce genre de fichier peut causer un gel du Mac. Utiliser NoIconServiceLib pour accéder au fichier, puis effacer l'icône.
un fichier a une ressource 'icns' d'ID -16455 correcte, mais pas de ressource 'ICN#'. Cette icône risque de ne pas être visible depuis une version de MacOS antérieure à 8.5. Pour y remédier, insérer à la main des ressources 'ICN#', 'icl8', 'icl4, 'ics#', 'ics8', 'ics4', correspondant à la ressource 'icns'.
Une prochaine version de icnsCheck permettra de convertir automatiquement la ressource 'icns' en 'ICN#' et 'icl8'.

Ciao.

Et longue vie au icônes 32 bits !

David Andriana
english versione-mailsite web