★ APPLICATIONS ★ DISQUE ★ CAT-DISK (CPC REVUE) ★ |
Cat-disk (CPC Revue) | Applications Disque |
Cet utilitaire fournit les informations intégrales sur les fichiers implantés sur une disquette. Il complète la fonction CAT en reprenant ses caractéristiques.INFORMATIONS FOURNIES
FONCTIONNEMENT Après le RUN du programme, la disquette à analyser est demandée sur le lecteur A. Le catalogue et les hea-ders sont lus avec reconnaissance automatique du format de disquette (DATA ou SYSTEME). L'affichage du catalogue s'arrête en fin de page écran dans l'attente de la frappe d'un caractère quelconque au clavier. Sur la dernière page affichée, sont fournis : le format de la disquette, la place réellement occupée et la place disponible. Remarque : les fonctions de lecture physique utilisées sont directement appelées dans la ROM AMSDOS : la disquette doit donc être standard AMSDOS. Dans le cas contraire, ou si la disquette n'est pas formatée, un message FORMAT INCONNU est envoyé. RAPPELS SUR LES FORMATS DE DISQUETTE Les CPC reconnaissent 3 formats de disquette :
Sont communs aux formats S et D:
Le catalogue Il contient le répertoire de tous les fichiers implantés sur la disquette. Chaque fichier est géré par une zone de 32 octets sous la forme :
Un fichier de taille supérieure à 16 blocs est implanté sous forme de plusieurs extensions de 1 6K, la dernière n'étant pas complète. Pour reconstituer ce fichier, il est nécessaire de définir un ordre dans ses extensions. C'est le but de l'octet 12 qui les numérotent de 0 à n. La numérotation des secteurs sur chaque piste est différente selon les 2 formats. En format S, ils portent les numéros H41 à H49 et en format D, HC1 à HC9. De plus, en format S, les 2 premières pistes sont réservées au système CPM (qui cependant n'y est pas chargé dans les formats vendeurs). Le catalogue est implanté sur les 4 premiers secteurs libres de la disquette :
Le reste de la disquette est à la disposition de l'utilisateur, soit :
La numérotation des blocs ne prend pas en compte les pistes systèmes en format S, mais recouvre toujours la zone catalogue qui représente donc les blocs 0 et 1 dans les 2 formats. Ils sont numérotés croissants à la suite, ce qui produit des blocs à cheval sur 2 pistes (bloc 4 = piste 2 secteur H49 + piste 3 secteur H41 en format S). Les headers de fichiers Le premier bloc de chaque fichier (son numéro se situe dans l'octet 16 de l'extension 0 du fichier dans le catalogue) commence par une zone de 64 octets appelée header. Elle comporte les renseignements suivants :
Dans le cas d'un fichier de type ASCII, aucun header n'est écrit. Le fichier débute directement par le premier caractère du premier enregistrement. Cependant, AMSDOS regénère un header pour traiter ce type de fichier de façon standard dans ses routines. COMMENTAIRES SUR LE PROGRAMME BASIC Le but essentiel du programme est de récupérer dans un tableau T$ (64) l'ensemble des headers des fichiers de la disquette. Chaque header étant une chaîne de caractères, il est ensuite aisé de les trier et de les exploiter pour l'affichage. Le chargement du tableau T$ est confié au programme en langage machine qui va chercher les headers sur la disquette. D'une manière plus générale, cette méthode peut être adoptée pour transmettre ou recevoir un grand nombre de paramètres entre un programme BASIC et un programme en langage machine. En effet, l'instruction CALL ne permet que 32 valeurs en paramètre. Après l'affichage du cadre de présentation, le tableau T$ est réservé en ligne 70. L'appel au programme en langage machine se fait en ligne 110 avec, comme paramètre, l'adresse de l'élément 1 du tableau. Ce paramètre permet au programme binaire de connaître l'emplacement en mémoire de tous les descripteurs des éléments T$ (i). Ils sont :
COMMENTAIRES SUR LE PROGRAMME EN LANGAGE MACHINE Les octets CPT et FORMAT sont les paramètres nombre de fichiers et format de disquette récupérés par le programme BASIC à l'aide d'instructions PEEK. Après sauvegarde des registres, l'adresse du descripteur de T$ (1), passée dans le registre DE par le CALL BASIC, est stockée dans la zone ADR. Reconnaissance du format de disquette Une méthode simple pour reconnaître le format d'une disquette est d'essayer de la lire dans un format puis dans l'autre en cas d'échec. Cependant, pour effectuer ces opérations de manière insensible pour l'utilisateur, il faut, au préalable, supprimer la sortie des messages d'erreurs et diminuer le nombre d'essais de lecture standards en AMSDOS. La zone CPT est utilisée temporairement pour comptabiliser le nombre d'essais effectués. Un essai est d'abord fait en format S, puis en format D si le premier n'a pas réussi. Si ce deuxième essai est.encore infructueux, alors la disquette est alors considérée illisible et la valeur 99 est placée dans la zone FORMAT avant d'effectuer un retour au BASIC. Lorsque le format est déterminé, alors l'ensemble du catalogue est lu dans la zone BUF. Lecture des headers Un premier traitement sur le catalogue est effectué pour charger les headers dans la table ZONE. Seules les extensions de fichiers portant le numéro 0 sont à considérer puisqu'elles représentent les débuts des fichiers. Pour chacune d'elles, un calcul du numéro de piste et de secteur est réalisé en tenant compte de la présence ou non des pistes système. Une division par 9 du nombre de secteurs représentant le numéro de bloc 0, donne alors le numéro de piste comme quotient et le numéro de secteur comme reste. Afin d'utiliser un algorithme de division très simple pour un dividende tenant sur 8 bits, une soustraction éventuelle d'une valeur de 20 pistes est exécutée au préalable. Garnissage de la table ZONE Chaque élément de la table ZONE représente un élément du tableau T$. Le programme force donc la longueur à 32 et l'adresse à l'adresse courante dans ZONE, dans le descripteur de l'élément courant de T$. Chaque élément de ZONE est d'abord rempli par les 16 premiers caractères du catalogue ; on a vu qu'ils devaient être égaux dans tous les cas. Par contre, dans le cas d'un fichier ASCII, les 1 6 caractères suivants ne peuvent pas venir du header, il n'y en a pas ; ils sont remplis par des 0. Pour les autres fichiers, la deuxième partie du header y est recopiée. La reconnaissance d'un fichier ASCII est faite sur la comparaison du premier caractère du header avec le premier caractère du catalogue. Ce procédé très simple ne fonctionne pas si le premier caractère du fichier ASCII est égal au numéro de USER du fichier (très rare). Le sous-programme LNG calcule la taille en K d'une extension. Cette taille est stockée dans l'octet 17 de l'élément de ZONE, non utilisé par ailleurs. Un deuxième passage sur le catalogue a pour but de calculer la taille totale des fichiers dans l'octet 17, en y ajoutant celle des extensions portant un numéro différent de 0.
|