Interruption 21h |
Fonction 21h |
Lecture sélective par le FCB |
---|---|---|
CP/M, DOS 1.0+, OS/2, Windows NT |
Description
Cette fonction permet d'effectuer la lecture d'un enregistrement sélective en utilisant l'ancienne méthode du FCB (File Control Block) et place les données dans la zone de transfert courante (DTA - Disk transfert Area).
Entrée
Registre | Valeur ou description | ||
---|---|---|---|
AH | 21h | ||
DS:DX | Cette paire de registres permet d'indiquer l'adresse du tampon FCB du fichier. Vous pouvez utiliser le bloc de FCB normal : | ||
Déplacement | Longueur | Description | |
00h | 1 octet | Ce champ contient l'unité (0 = unité courante, 1=A:, 2=B:, 3=C:, 4=D:,...) | |
01h | 8 octets | Ce champ contient le nom du fichier avec des espaces s'il n'est pas assez long | |
09h | 3 octets | Ce champ contient l'extension du fichier avec des espaces s'il n'est pas assez long | |
0Ch | 2 octets (1 mot) | Ce champ contient le numéro du bloc courant | |
0Eh | 2 octets (1 mot) | Ce champ contient la taille de l'enregistrement | |
10h | 4 octets (2 mots) | Ce champ contient la taille du fichier | |
14h | 2 octets (1 mot) | Ce champ contient la date de la dernière modification | |
16h | 2 octets (1 mot) | Ce champ contient l'heure de la dernière modification | |
18h | 8 octets | Ce champ est réservé pour un usage interne ou futur | |
20h | 1 octet | Ce champ contient le numéro de l'enregistrement courant | |
21h | 4 octets | Ce champ contient le numéro de l'enregistrement pour l'accès séquentiel | |
ou le bloc de FCB étendue : | |||
Déplacement | Longueur | Description | |
00h | 1 octet | Ce champ contient un identificateur de FCB étendu (FFh) | |
01h | 5 octets | Ce champ est réservé pour un usage interne ou futur | |
06h | 1 octet | Ce champ contient les attributs de fichier | |
07h | 1 octet | Ce champ contient l'unité (0 = unité courante, 1=A:, 2=B:, 3=C:, 4=D:,...) | |
08h | 8 octets | Ce champ contient le nom du fichier avec des espaces s'il n'est pas assez long | |
10h | 3 octets | Ce champ contient l'extension du fichier avec des espaces s'il n'est pas assez long | |
13h | 2 octets (1 mot) | Ce champ contient le numéro du bloc courant | |
15h | 2 octets (1 mot) | Ce champ contient la taille de l'enregistrement | |
17h | 4 octets (2 mots) | Ce champ contient la taille du fichier | |
1Bh | 2 octets (1 mot) | Ce champ contient la date de la dernière modification | |
1Dh | 2 octets (1 mot) | Ce champ contient l'heure de la dernière modification | |
1Fh | 8 octets | Ce champ est réservé pour un usage interne ou futur | |
27h | 1 octet | Ce champ contient le numéro de l'enregistrement courant | |
28h | 4 octets | Ce champ contient le numéro de l'enregistrement pour l'accès séquentiel |
Sortie
Registre | Valeur ou description | |
---|---|---|
AL | Ce registre permet d'indiquer le résultat de l'opération : | |
Valeur | Description | |
0 | Ce code indique que l'enregistrement a été lu avec succès | |
1 | Ce code indique que la fin du fichier est maintenant atteinte | |
2 | Ce code indique qu'un débordement de segment a eu lieu | |
3 | Ce code indique que l'enregistrement a été lu partiellement |
Remarques
- L'enregistrement est lu en mémoire à l'adresse de la zone de transfert de disque actuelle, spécifiée par le dernier appel de l'interruption 21h à la fonction 1Ah. Il est de la responsabilité du programmeur de s'assurer que cette zone est suffisamment grande pour tout enregistrement étant transféré. Si la taille et l'emplacement du tampon sont tels qu'un débordement de segment ou un bouclage se produit, la fonction échoue avec un code retour de 02h.
- L'emplacement du fichier des données à lire est déterminé par la combinaison du champ d'enregistrement relatif (déplacement 21h) et du champ de taille d'enregistrement (déplacement 0Eh) du FCB. La taille d'enregistrement par défaut est de 128 octets.
- Le champ de bloc actuel (déplacement 0Ch) et le champ d'enregistrement actuel (déplacement 20h) sont mis à jour pour correspondre au champ d'enregistrement relatif comme effet secondaire de la fonction.
- Le champ d'enregistrement relatif du FCB n'est pas incrémenté par cette fonction; il est de la responsabilité de l'application de mettre à jour le FCB de manière appropriée si elle souhaite lire les enregistrements successifs. Comparez avec l'interruption 21h, fonction 27h, pouvant lire plusieurs enregistrements avec un seul appel de fonction et incrémente automatiquement le champ d'enregistrement relatif.
- Si un enregistrement partiel est lu à la fin du fichier, il est rempli à la longueur d'enregistrement demandée avec des zéros.
- A partir de la version 3.0 du système d'exploitation DOS, si le programme s'exécute sur un réseau, l'utilisateur doit avoir des droits d'accès en lecture au répertoire contenant le fichier à lire.
Références
La Bible du PC: Programmation système - Sixième Edition, Edition Micro-Application, Michael Tischer, 1996, ISBN: 2-7429-0544-8, page 1508.
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 165 à 167.
Quick Reference: Programmer avec les fonctions de MS-DOS, Edition Microsoft PRESS, Ray Duncan, 1991, ISBN: 2-266-04061-8, page 37 à 38.
Dernière mise à jour : Jeudi, le 3 mars 2016