Jeudi 13 mars 2008.
Dernière mise à jour: mardi 25/03/2008.
En français dans le texte...
Pour l'illustration d'un autre article à paraître
prochainement sur ce site, j'ai eu à faire des recherches
dans les disques images de la série GS Infos, une revue
française contenant plein
d'articles intéressants en français autour de
l'Apple IIGS.
Une bonne partie de ces disques images est disponible en ligne sur le
site Apple
IIGS Infos
de mon ami Arnaud sous forme
de fichiers .2mg.
On
les trouve aussi dans le CD-ROM du GS Club
paru il y a une dizaine
d'année.
Détail étonnant pour ceux que ça
intéresse, j'ai appris que le GS
Club
existe toujours - si si!!! - Cette information
m'étant arrivée par
le biais de deux anciens collaborateurs
à cette revue: Paul L.
et Vincent 'Xter' H.
D'ailleurs je ne devrais peut-être pas dire "ancien" pour
Paul car il utilise toujours
ses machines Apple II et si ça se trouve
en est toujours membre...
Pour en revenir à ma recherche initiale, mon objectif
était de
parcourir rapidement de contenu de
chacun des fichiers .2mg et de lire les articles que j'avais
repéré dans l'index général.
Je ne savais pas encore réellement si le contenu de chacun
de ces fichiers allait m'être utile ou pas aussi mon souhait
était de les lire en direct avec un outil de manipulation de
disques images et pour ceux retenus d'obtenir
(par extraction) des fichiers propres exploitables sur ma machine
moderne de travail.
Ce type d'outil de visualisation/extraction existe mais pour le format
.2mg (surtout utilisé pour le monde GS), il n'y a que des
produits
anglosaxons aussi pour les caractères accentués
français ce n'était pas gagné...
Je ne voulais pas m'embêter à faire des
éventuels pré-traitements au niveau d'un
vrai GS ou d'un émulateur pour avoir des fichiers en
français
propres compatibles avec une machine moderne (Toinet
m’a
dit qu’il avait écrit
2 finder extras à l’époque de Brutal
Deluxe
pour faciliter les échanges). De même je ne
voulais pas avoir à appliquer des correctifs
(post-traitements) sur les
éventuels fichiers extraits (aussi je n'ai pas
mené plus en avant le développement d'un petit
script bash utilisant la commande unix sed ou awk que j'avais
commencé
pour faire des
substitutions
de caractères).
J'ai donc fait le tour des principaux outils disponibles pour regarder
le degré de compatibilité avec ces fichiers aux
caractères accentués et
voir éventuellement les actions à mener pour les
rendre compatibles.
Vous trouverez ainsi le point pour les logiciels FishWings,
CiderPress et AppleCommander.
J'ai du écarter de cette sélection Tiny Apple II Image Disk Browser
version béta 7.3
(30/12/2005) par Blacky (Cochonou
Crack Band) car ce programme, bien qu'étant le
meilleur pour les
fichiers en français issus du monde Apple II 8 bits, ne sait
pas
traiter les fichiers .2mg.
Par ailleurs, je ne suis pas du tout persuadé qu'il
évolue. Son auteur
aimant varier les plaisirs (Commodore 64, Nintendo DS, ...), on ne sait
pas trop quand il reviendra dans la sphère Apple II.
Les sources du développement, réalisé
avec Delphi
(à présent intégré dans CodeGear RAD Studio) de
Borland, ne sont
pas disponibles pour la dernière version.
Il fonctionne bien sous Windows mais il y a de temps en temps des
ratés
chez moi sous Linux avec Wine.
Aussi c'est
quand je boote mon disk dur extractible sous Vista que c'est un sans
faute.
Rappelons au passage que Kylix
(le Delphi linux) n'aura pas
fait long feu et la version était
moins complète que son homologue Windows: j'avais
essayé de compiler les sources de Tiny
Win et il y avait des
erreurs à la pelle.
Pour faire ces tests, j'ai utilisé plusieurs fichiers et
.2mg.
Voici ce que l'on obtient comme caractères
accentués quand on boote un
d'entre eux:
L'affichage se fait via un menu propre à chaque
numéro. Les accents
sont présents dans quasiment tous les fichiers
écrits par les
collaborateurs (ceci dit il y a aussi des fichiers en anglais quand le
produit est d'origine étrangère).
Les fichiers peuvent être consultés avec d'autres
outils GS.
Ici avec le traitement de texte NDA Hermès
(anciennement ShadowWrite).
Sur GS on trouve principalement 2 types de fichiers texte.
Des fichiers de type TXT simple (type auxiliaire $0000) = ASCII TEXT et
des fichiers
de type texte générique IIGS GWP (simple avec un
type auxiliaire $0000
et plus évolué - le format Teach - avec un type
auxiliaire $5445). Pour
le format Teach, il est possible de faire varier la couleur, le style,
les
polices, etc...
Avec le NDA, en fonction du type du fichier que l'on veut ouvrir, on
peut être amené à cocher l'option "Load
file as raw
data" (c'est le cas pour Teach et Generic IIgs).
Comme dans cette dernière production signée Toinet:
A noter qu'outre les caractères accentués
classiques, on trouve aussi
des caractères spéciaux comme le "trademark" ou
le "registered". Par
exemple ici dans un fichier Teach text mais on en trouve aussi dans des
fichiers TXT classiques:
Dans les .2mg du GS Club, les
articles sont au
format TXT classiques,
et comme nous le verrons, cela peut poser certains problèmes.
FishWings
FishWings version 0.87
(20/02/2006) par Charlie
Danemark.
Il s'agit d'un programme 100% Windows livré sous
forme de .exe uniquement.
La lecture de l'aide ne laisse pas présager un
résultat optimiste:
Et en effet, en ouvrant un fichier TXT simple ou un GWP Teach Text,
tous les caractères accentués ou
spéciaux ne sont pas supportés
(affichage d'un espace à la place):
Voici pour comparaison le fichier Teach Text affiché en
émulation GS:
Ce programme bien que de qualité ne me donne pas
satisfaction pour
réaliser mon objectif.
Ceci pour 2 raisons principales: sa limitation à Windows et
l'absence
des sources pour essayer d'ajouter ces caractères manquants.
Non seulement dans la même catégorie CiderPress
est plus puissant et plus ouvert mais en plus l'auteur de FishWings n'a
plus l'air
de s'occuper de son bébé.
Je ne vois qu'une seule possibilité pour réussir
à visualiser les
caractères correctement.
C'est ajouter une font correspondante à celle du GS.
En effet FishWings permet de
sélectionner la
police à utiliser pour
l'affichage:
CiderPress
CiderPress
version 3.0.0 par Andy McFadden
(FaddenSoft).
Il s'agit d'un programme à interface graphique pour Windows
(application Win32
MFC=Microsoft Foundation Class) pouvant néanmoins
fonctionner sous Linux avec Wine
ou TransGaming Cedega mais
en fonction de la version il peut y avoir des instabilités:
ça crashe régulièrement chez moi
(surtout quand j'essaie d'ouvrir un
fichier ShrinkIt .shk
encapsulé dans un autre
objet),
aussi je préfère l'utiliser avec un autre disque
sous Vista.
J'ai lu il y a quelques mois (sur le forum comp.sys.apple2) qu'une
personne essayait de mener un projet de portage sous Mac OS X mais rien
de
concret n'est sorti pour le moment.
Les sources C++ (licence BSD) sont disponibles depuis mars 2007. Il y a
un répertoire linux dans les sources avec un makefile et
d'autres
fichiers mais je n'ai pas approfondi la question.
Bien
que l'auteur n'ayant plus le temps de le mettre à jour
(explication
officielle de la mise à disposition des sources), il
intervient régulièrement sur comp.sys.apple2 et
reste donc de ce fait toujours actif sur Apple II.
Le programme a beaucoup d'atouts mais maitriser les arcanes de son
source reste complexe en plus de la nécessité
d'avoir le produit
Microsoft MS Visual C++ 6.0
pour la compilation
sous Windows.
Le programme reconnait beaucoup de formats dont le .2mg qui
m'intéresse ici.
Essayons avec un fichier TXT d'un GS Infos.
Quand on double clique dessus, il affiche le contenu du fichier dans le
mode qu'il juge le plus opportun (ici "converted Text"). On constate
que les caractères français ne passent pas du
tout.
Il remplace tous les accents par un caractère en forme de
carré:
A noter que le programme propose de visualiser le contenu dans 2 autres
modes (hex dump et raw) dont l'illustration est donnée
ci-dessous:
Le mode Hex Dump permet de consulter les codes des
caractères ne
passant pas. Le mode Raw quant à lui ne nous avance pas
plus, le
résultat étant aussi inexploitable que le
"Converted Text".
Dans l'exemple précédant, j'avais pris un fichier
avec seulement
quelques caractères accentués.
Pour avoir un panel complet, j'ai créé un fichier
TXT sous ProDOS
contenant les valeurs hexa de $00 à $FF. Voici l'affichage
normal par
un GS:
Résultat guère folichon avec CiderPress:
En fait, il y a une solution pour obtenir un résultat
parfait.
Je le comprends de la façon suivante: CiderPress
est un outil pour
Apple II 8 bits ET pour GS.
Il doit donc faire une différence entre un fichier TXT et un
fichier
GWP dans le cas où les 2 aux types valent $0000.
Pour CiderPress un fichier
TXT vient du monde 8
bits et les caractères
spécifiques du GS n'ont rien à faire
là. Ce n'est que pour le type GWP
qu'il s'en préoccupe.
Par contre pour les auteurs de GS Infos,
leur
"monde" étant le GS, ils
ont sauvegardé tous leurs fichiers en TXT classique sans se
préoccuper
des conséquences futures; leur outil d'affichage
fonctionnant très bien
sans faire cette distinction.
Je suis donc tenté de dire que dans l'absolu, CiderPress
fait bien son
boulot et que la problématique vient des GS
Infos.
Essayons de passer un fichier TXT en GWP pour voir le
résultat.
Rien de plus simple: un clic droit sur le fichier, et transformation de
son type:
Le résultat est parfait!! On notera que CiderPress
utilise par défaut
cette fois ci non plus "converted Text" mais le type adapté
"Generic
IIGS text document":
Refaisons le test avec le petit fichier de tout à l'heure
(les valeurs
croissantes de $00 à $FF):
On a bien ce que l'on attendait.
A noter que les fichiers Teach Text passent quant à eux
très bien:
Quand on double clique sur un fichier GWP avec un aux type $5445, on a
par défaut le type "Teach Text":
Ce mode est bien entendu plus complexe qu'un simple GWP avec aux type
$0000, aussi s'amuser à changer un aux type $0000 en $5445
donnera des
résultats peu concluants (idem que le mode Raw):
Pour le format Teach text, CiderPress
est
capable de mapper certaines
polices (charsets) quand elles sont connues dans le système.
Si vous voulez bidouiller CiderPress
pour qu'il
propose le mode Generic
IIgs (et donc ne pas avoir à changer le file type) quand
vous
choisissez un fichier TXT, c'est toujours possible.
Consultez dans le répertoire reformat les fichiers Text8.*
pour le TXT et teach.* qui traitent les formats GWP incluant Teach.
Une table de mapping est présente dans ReformatBase.cpp.
Elle réalise l'opération suivante: "Convert IIgs
high-ASCII characters
to Windows equivalents (when available)".
Le code windows est à gauche et le contenu du charset IIgs
à droite en
commentaire.
Pour voir cette table, cliquez -> ici
<-.
Concernant les exports de fichiers, il ne faut pas oublier 2 points
importants: l'encodage des caractères et les terminateurs de
fin de
ligne qui sont généralement définis
par le système d'exploitation. Sur
plateforme Windows XP, l'encodage du texte par défaut est
fait avec
cp1252 (windows, europe de
l'ouest) et sous linux en UTF-8 (unicode rules!)
Avec win, les fins de lignes correspondent à un CR + LF
alors que sur
plateforme unix/linux, il n'y a que $0A (LF).
Heureusement tout éditeur de textes digne de ce nom (Ultra
Edit sous
win ou KWrite sous linux par
exemple) permet de
configurer ces points
et donc de se "comprendre" mutuellement.
AppleCommander
AppleCommander
version 1.3.4 (mars 2007) par Rob Green
et John B.
Matthews.
Le développement de ce programme se fait par intermittence
et par au
moins 2 auteurs.
"Au moins" car il me semble que l'auteur d'ADTPro
a aussi apporté
quelques modifications.
Le projet étant sur Sourceforge, n'importe qui peut
reprendre le
flambeau... Pourquoi pas vous demain?
Comme ses concurrents, ce programme reconnait le format .2mg qui
m'intéresse pour les GS Infos.
A mon sens, son point fort est qu'il est écrit en java, donc
fonctionne
sur toutes les plateformes dotées d'une machine virtuelle:
Windows, Mac
OS X
et Linux... ainsi qu'une archive .jar pour le support de SWT (on y
reviendra plus loin).
Concernant java, je me marre au sujet d'Apple. Alors que les
aficionados sont toujours à vanter l'avance de leur chouchou
sur ses
concurrents, Apple se contente de proposer la version 5 de la machine
virtuelle (certes en standard) alors que pour tous les autres la
version 6 est dispo depuis un bon bout de temps. Ils pourraient
rétorquer qu'une version développeur est
disponible sur Apple
Developer
Connection, mais ça me fait une belle jambe vu
que même après
l'enregistrement sur ce site, le java
téléchargé ne sera pas la version
sélectionnée par défaut. Et c'est du
béta donc à vos risques et
périls...
Voici ce que j'ai fait pour avoir une version fonctionnelle
d'AppleCommander:
Tout d'abord pour windows (et linux mais ça
dépend de votre
distribution), il faut récupérer
la dernière version de J2SE (Java 2 Standard Edition) sur le
site de
SUN, à l'url http://java.sun.com.
J'ai récupéré une version
complète du JDK 6 (=Java SE Development Kit contenant la
machine virtuelle java et
le compilateur javac) car le source d'AppleCommander
est disponible et je
préfère toujours recompiler à partir
du source que d'utiliser un
binaire issu d'une machine dont je ne sais rien. Pour
résumer rapidos,
javac permet de
compiler un ensemble de fichiers sources ayant l'extension .java pour
donner un/des fichiers en
bytecode (pseudo-code) avec l'extension .class.
C'est la machine virtuelle java (JRE=Java Runtime Environment) qui
permet l'exécution des .class (commande: java
programme.class) ainsi que les jar (java archive.jar,
une archive pouvant être exécutable
grâce au fichier Manifest.mf,
contenu dans le répertoire META-INF, qui indique le chemin
où se trouve
les .jar
SWT et la classe principale).
Oui il n'y a pas
forcément qu'une seule archive .jar comme l'indique la page
web du
programme. (Pour voir le contenu d'une archive .jar, il suffit de
renommer l'extension en .zip et d'utiliser votre logiciel d'archivage
favori - s'il ne sait pas l'ouvrir directement).
En lisant les fichiers d'AppleCommander,
on
apprend qu'il s'agit d'un
projet sous Eclipse.
Eclipse est un environnement
de développement
intégré (EDI en français
et IDE en anglais) open-source et multi-langages mené par
IBM. Il est
le concurrent de celui de Sun (NetBeans,
projet
aussi en open source).
A noter que des IDE il y en a plein d'autres...
L'auteur d'AppleCommander
précise aussi que ce
projet
était pour lui
l'occasion d'apprendre à utiliser SWT
(Standard Widget Toolkit).
Quelques précisions à ce sujet: Java a
été inventé par Sun qui
l'encadre toujours.
Sun écrit les spécifications du langage, produit
du service mais chacun
est libre d'apporter sa pierre à l'édifice. Sun a
mis
à disposition sa solution
pour l'interface graphique utilisateur (GUI) qui permet de
gérer tout
ce qui
touche à
cet aspect. Ces briques GUI s'appellent AWT
(Abstract Window
Toolkit) et
SWING (apparu plus tard
à l'initiative de
Netscape et se basant sur AWT
en
apportant
des composants d'interface plus performants).
IBM en a eu assez d'attendre que Sun corrige ses bogues et a sorti sa
propre brique graphique: SWT.
Son environnement
de développement
Eclipse
se base
complètement sur SWT.
Quand on conçoit une
appli faisant intervenir des
composants
graphiques, on a le choix de faire du AWT/SWING ou du SWT
(mais aussi
bien d'autres...)
J'ai donc récupéré Eclipse
classic
3.3.2 (www.eclipse.org). Sur Mac il
s'agit d'une version Carbon.
L'EDI contient
déjà
2 .jar SWT (je n'ai rien eu
à charger
en plus). Puis j'ai réglé comme classe principale
com.webcodepro.applecommander.ui.swt.SwtAppleCommander et l'emplacement
des 2
.jar (ainsi que junit utilisé dans certaines classes pour
réaliser des
tests unitaires) et ai définit le class-path:
A noter que si les .jar ne sont pas dans le répertoire
attendu ou
n’existent pas du tout, il n'y a pas de démarrage
d’AppleCommander.
Voici le soft en version mac OS X Leopard: sans rien faire, il n'y a
pas de caractères accentués.
Idem après export et chargement avec TextEdit.
Le programme d'édition
HexEdit
maintenu par Lane Roathe
(ancien
programmeur et plombeur Apple II)
permet de visualiser les codes qui ne passent pas:
Même topo sous Linux. Le soft propose comme CiderPress
plusieurs modes
d'affichage: Text, Hex Dump et Raw:
Résultat identique sous Windows, ce qui quelque part est
rassurant:
Bon, ça marche pas terrible pour les caractères
français.
Mais ce n'est pas grave. On a le source.
Et hop un petit patch de la classe TextFileFilter.java dans
com.webcodepro.applecommander.storage.filters (peu
élégant mais
fonctionnel), ici sous linux:
/*
* AppleCommander - An Apple ][ image utility.
* Copyright (C) 2002 by Robert Greene
* robgreene at users.sourceforge.net
*
* This program is free software; you can redistribute it
and/or
modify it
* under the terms of the GNU General Public License as
published
by the
* Free Software Foundation; either version 2 of the License,
or
(at your
* option) any later version.
*
* This program is distributed in the hope that it will be
useful,
but
* WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public
License
* for more details.
*
* You should have received a copy of the GNU General Public
License along
* with this program; if not, write to the Free Software
Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Patch : 20080311 Deckard
*
Get correct
french characters.
*/
package com.webcodepro.applecommander.storage.filters;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import com.webcodepro.applecommander.storage.FileEntry;
import com.webcodepro.applecommander.storage.FileFilter;
/**
* Filter the given file data for text.
* <p>
* Date created: Nov 2, 2002 9:11:27 PM
* @author Rob Greene
*/
public class TextFileFilter implements FileFilter {
/**
* Constructor for
TextFileFilter.
*/
public TextFileFilter() {
super();
}
/**
* Process the given FileEntry
and return a
byte array
* with filtered data; use
PrintWriter to get
platform
* agnostic line endings.
*/
public byte[] filter(FileEntry
fileEntry) {
byte[]
fileData =
fileEntry.getFileData();
int
offset = 0;
char c;
ByteArrayOutputStream byteArray =
new ByteArrayOutputStream(fileData.length);
PrintWriter printWriter = new
PrintWriter(byteArray, true);
while
(offset <
fileData.length) {
byte orig =
fileData[offset];
// Mapping
GS/OS - characters
switch (orig) {
case (byte)
0x88 : c = 'à';
break;
case (byte)
0x89 : c = 'â';
break;
case (byte)
0x8A : c = 'ä';
break;
case (byte)
0x8D : c = 'ç';
break;
case (byte)
0x8E : c = 'é';
break;
case (byte)
0x8F : c = 'è';
break;
case (byte)
0x90 : c = 'ê';
break;
case (byte)
0x91 : c = 'ë';
break;
case (byte)
0x94 : c = 'î';
break;
case (byte)
0x95 : c = 'ï';
break;
case (byte)
0x99 : c = 'ô';
break;
case (byte)
0x9A : c = 'ö';
break;
case (byte)
0x9D : c = 'ù';
break;
case (byte)
0x9E : c = 'û';
break;
case (byte)
0x9F : c = 'ü';
break;
case (byte)
0xA8 : c = '®'; // Registered
break;
case (byte)
0xA9 : c = '©'; // Copyright
break;
case (byte)
0xAA : c = '™'; // Trademark alt+0153
break;
case (byte)
0xD5 : c = '\''; // Apostrophe
break;
default : c = (char)(fileData[offset] &
0x7f);
}
if (c != 0) {
if (c == 0x0d) printWriter.println();
//Apple line
end
else printWriter.print(c);
}
offset++;
}
return
byteArray.toByteArray();
}
/**
* Give suggested file name.
*/
public String
getSuggestedFileName(FileEntry
fileEntry) {
String
fileName =
fileEntry.getFilename().trim();
if
(!fileName.toLowerCase().endsWith(".txt")) { //$NON-NLS-1$
fileName =
fileName + ".txt"; //$NON-NLS-1$
}
return
fileName;
}
}
Si vous n'arrivez pas à avoir certains
caractères, utilisez Open
Office
ou Neoffice pour choisir les
caractères
spéciaux
comme ™, © et ®.
Un coup d'exécution en temps qu'application java et hop
impecc:
On essaie l'extraction qui utilise la même routine:
Il faut régler votre éditeur favori pour
être en phase avec l'encodage.
Ici choix de l'UTF-8 (il m'arrive de régler KWrite
avec le charset
Européen de
l'Ouest ISO-8859-15 =euro pour certains autres fichiers...)
Résultat identique à l'affichage en temps
réel:
Pour les exports, la taille d'un même fichier peut varier en
fonction
de votre operating system; chaque caractère d'origine
étant transformé
en 1 ou plusieurs octets d'après la config de votre machine.
Exemple:
GS/OS Caractère
ISO-8859-15 UTF8
88
à
E0
C3A0
89
â
E2
C3A2
8A
ä
E4
C3A4
8D
ç
E7
C3A7
8E
é
E9
C3A9
8F
è
E8
C3A8
90
ê
EA
C3AA
91
ë
EB
C3AB
94
î
EE
C3AE
95
ï
EF
C3AF
99
ô
F4
C3B4
9A
ö
F6
C3B6
9D
ù
F9
C3B9
9E
û
FB
C3BB
9F
ü
FC
C3BC
Il n'y a plus qu'à se faire un jar exécutable, ce
qui se fait en 2
coups de cuillère à pot...
Conclusion
Si votre plateforme de travail est Windows,
téléchargez CiderPress
qui
est à présent gratuit.
il s'agit de l'outil le plus complet pour manipuler des disques images.
Au prix d'un minimum d'effort (changement du type de fichier), vous
pourrez visualiser les articles de GS
Infos. Si
vous êtez programmeur,
les sources disponibles n'attendent que votre bon vouloir pour un
affichage simplifié de ces fichiers TXT.
Si votre créneau est plutôt le multi-OS (mon cas
de figure),
AppleCommander fonctionne sur
Mac OS X Leopard,
Linux et Windows. Plus
limité que CiderPress,
ce soft n'en reste pas
moins ma préférence: la
modification du code source dispo est minim pour obtenir les
caractères
accentués et l'apprentissage de java ne peut que vous
être bénéfique.
Ce projet peut être un point de départ
intéressant pour créer d'autres
formats de disk image ou pour ajouter un filesystem non actuellement
supporté (formats propriétaires
d'éditeurs après rétro-engineering par
exemple).
Il est aussi possible de travailler sa maitrise des GUI en programmant
une version Swing (qui serait encore plus
appréciée...) A bon entendeur!