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").

Bug

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

Amper RWTS
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:

Amper RWTS


Floppy
DOS 3.3
Download Amper RWTS (gzipped)
Floppy
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

DSK2FILE
DSK2FILE

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.

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!!!)

Bug Copy II+

Et bien si, il trouve des erreurs!!!!

Bug Copy II+
Bug Copy II+

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:

Bug Copy II+
Bug Copy II+

On a piste $0B, secteur $00.
Voyons à présent BIS.DSK:

Bug Copy II+
Bug Copy II+

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é!!!


Manuel Copy II+
Manuel Copy II+
Manuel Copy II+
Manuel Copy II+
Disquette Copy II+
Disquette Copy II+
Disquette Copy II+