Lundi 27/11/2006.
On ne le dira jamais assez: la dernière version de l'outil Copy
II+ (la 9.1) de l'éditeur Central Point Software, Inc. est
boguée jusqu'à l'os et son utilisation est à vos
risques et périls!
Personnellement, lorsque je lui faisais encore confiance, je manipulais
les fichiers sur mon disque dur avec.
Le bilan a été, dans les années 90, la perte de
toute une arboresence de mon disque dur lors d'une phase de backup
(option COPY) sur un autre répertoire de ce disque. Je ne vous
raconte pas la haine...
Depuis je ne l'utilise plus que sur de petites unités comme les
disquettes.
Pour toute manipulation sur votre disque dur, préférez
des outils surs comme par exemple Prosel de Glen Bredon ou ShrinkIt
d'Andrew E. Nicholas.
Je me propose de vous montrer ici un autre bug que je viens de trouver
lors de mes tests de mon outil FASTDSK (qui
permet la création
de disk images à partir de disquettes 5,25").
Ce bug concerne l'option: COMPARE FILES.
J'ai constaté qu'il affiche des erreurs imaginaires lorsqu'on
lui demande de comparer des gros fichiers.
Dans le cadre de mon projet, pour vérifier que ça marche
correctement, je pensais pouvoir utiliser cette option pour comparer un
disk image résultant de l'emploi de DSK2FILE
avec celui d'un run
de FASTDSK à partir de la même
disquette initiale.
Ca aurait dû me confirmer que mon programme fait bien ce qu'il
faut.
Et bien, j'ai réussi à perdre mon temps en pensant que
mon soft était bogué parce que cet idiot de Copy II+
ne fonctionne pas correctement. Décidément, on ne peut
rien lui demander à cet utilitaire à 2 balles!!!
Voici de A à Z mon protocole de test.
Tout d'abord, je souhaite me créer un fichier .DSK dont les
secteurs sont auto-marqués.
Je veux dire par là que chaque secteur doit contenir dans
l'octet 0 le numéro de la piste et dans l'octet 1 le
numéro du secteur.
En 1993, j'avais écrit un petit programme pour dépanner
un gars fréquentant le serveur RTEL
(pseudo: Ninja) et qui
faisait des fixs de programmes de jeux. Il avait besoin d'un outil lui
permettant de lire rapidement un secteur, de le modifier et de
sauvegarder le résultat de son changement.
Je lui avais fait ce programme appelé AMPER.RWTS
dont la doc
suit:
_____________________________________________________________________________
!
!
! AMPER.RWTS - Documentation - (c)1993 by Deckard - (p)rod' The
Hellfire Club !
!_____________________________________________________________________________!
Doc v1.0 juillet 1993
Interlocuteur: NINJA.
Progs: AMPER.RWTS (basic) et AMPER.RWTS.OBJ (Assembleur)
Le source merlin-8 est au catalog.
Pour: DOS 3.3 ET DERIVES
____________________
Ce petit programme sans prétention permet d'accéder
à des routines RWTS à
partir du BASIC (on peut aussi l'utiliser en mode direct).
Il permet donc de faire facilement des fixs pour une personne qui
connait plus
un éditeur de secteurs que la programmation proprement dit.
Pour installer le programme, il suffit de faire: RUN AMPER.RWTS
Il suffit de rajouter une ligne en fin de programme pour lancer le prog
de
fixing.
Ce programme utilise un buffer d'E/S placé en $9500.
Attention, ce soft ne comprend que le mode décimal.
Une fois chargé, le programme permet d'utiliser 8 commandes:
o Lecture d'un secteur particulier: (READ)
--------------------------------
&R, numéro piste, numéro secteur
Rappel: piste [0,34] et secteur [0,15]
La lecture se
fait dans le buffer. (Il en va de meme pour toutes
les commandes...)
o Ecriture d'un secteur particulier: (WRITE)
---------------------------------
&W, numéro piste, numéro secteur
o Met à zéro les octets d'un secteur particulier: (INIT)
----------------------------------------------
&I, numéro piste, numéro secteur
Note: cette commande détruit le buffer.
o Formatte une disquette 5,25 pouces: (FORMAT)
----------------------------------
&F
o Change l'unité utilisée: (DRIVE)
-----------------------
&D, slot, lecteur, volume
Rappel: slot [1,7], drive [1,2], volume [0,255].
Conseil: mettre
0 pour le volume. (=Tout volume)
o Modifier un octet du secteur se trouvant dans le buffer: (CHANGE)
-------------------------------------------------------
&C, octet, valeur
Pour reprendre l'exemple de NINJA: le secteur 12 ($0C) de la
piste 19 ($13)
est dans le buffer. L'octet 32 ($20) contient la valeur 58
($3A). On
voudrait mettre 59 ($3B) à la place. Il suffit de faire:
&C, 32, 59.
Puis de sauver le secteur avec la commande &W.
o Lire la valeur d'un octet du secteur lu: (GET)
---------------------------------------
&G, octet, variable réelle
Par exemple on veut connaitre la valeur contenue dans l'octet 32
($20).
On veut mettre cette valeur dans X: &G, 32, X
Avec la modif effectuée plus haut, X contiendra 59.
o Vider le contenu du buffer: (CLEARBUFF)
--------------------------
&B
Utilise si on veut mettre des valeurs persos dans un secteur
(avec la
commande &C) faire de lecture.
Je vous ai mis cette disquette en pièce jointe.
Elle boote en DOS 3.3.
Pour lancer le programme, il faut taper: RUN AMPER.RWTS
|
|
Ensuite, j'ai pondu un petit programme BASIC de quelques lignes pour
écrire sur chaque secteur: la piste et le secteur.
Il y a une boucle I pour les pistes et une boucle J pour les secteurs.
En mettant dans le lecteur 1 une disquette formattée, et en
faisant RUN, vous pouvez ainsi créer une disquette
auto-marquée.
10 & B
20 FOR I = 0 TO 34
30 FOR J = 0 TO 15
40 & C,0,I
50 & C,1,J
60 & W,I,J
70 NEXT J
80 NEXT I
Par exemple, en regardant avec un éditeur de secteurs le secteur
$0F de la piste $13, on trouve bien ces 2 références:
|
DOS 3.3
|
Download Amper RWTS (gzipped)
|
|
No DOS
|
Download Disk auto-numéroté (gzipped)
|
Bon, maintenant que je me suis fait cette belle disquette, j'utilise
DSK2FILE pour créer un .DSK sur mon
disque dur.
Je l'appelle D2F.DSK
A présent, je copie ce gros fichier D2F.DSK de 283 blocks dans
le même répertoire sous le nom de BIS.DSK.
Pour celà j'utilise ShrinkIt.
Utilisons Copy II+ pour voir si D2F.DSK et
BIS.DSK
contiennent des différences (comme c'est une copie, ce ne
devrait
pas être le cas!!!)
Et bien si, il trouve des erreurs!!!!
Pour bien vérifier qu'il raconte n'importe quoi, il suffit de
regarder le contenu de D2F.DSK et BIS.DSK à l'offset de l'erreur
pour voir si c'est différent comme il le prétend.
J'utilise l'outil LIST pour cela.
Ce qui est pratique, c'est que l'offset correspond en fait à la
concaténation de la piste et du secteur.
Commençons par D2F.DSK:
On a piste $0B, secteur $00.
Voyons à présent BIS.DSK:
Pareil.
Copy II+ se mélange les pédales en
prétandant que
dans D2F.DSK, j'ai piste $0C et secteur $00.
Voilà, preuve est faite que cette option COMPARE FILE de Copy II+ ne fonctionne pas sur des
gros fichiers...
Et moi je vais pouvoir continuer plus sereinement mes tests de
FASTDSK... en recréant les disquettes
générées de part et d'autre (sens image ->
disquette) avec DSK2FILE et en utilisant FAST COMPARE pour
vérifier que c'est identique...
A noter que si vous avez un
programme qui sait comparer 2 gros fichiers
sous ProDOS en affichant les écarts, je suis
intéressé!!!