Interruption 21h |
Fonction 28h |
Écriture sélective de plusieurs enregistrements par le FCB |
---|---|---|
CP/M, DOS 1.0+, OS/2, Windows NT |
Description
Cette fonction permet l'écriture sélective de plusieurs enregistrements en utilisant l'ancienne méthode du FCB (File Control Block) en employant les données dans la zone de transfert courante (DTA - Disk transfert Area).
Entrée
Registre | Valeur ou description | ||
---|---|---|---|
AH | 28h | ||
CX | Ce registre permet d'indiquer le nombre d'enregistrement devant être écrit | ||
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é écrit avec succès | |
1 | Ce code indique que l'unité de disque est pleine | |
2 | Ce code indique qu'un débordement de segment a eu lieu | |
CX | Ce registre permet d'indiquer le nombre d'enregistrement ayant réellement été écrit |
Remarques
- Les enregistrements sont écrits (logiquement, pas nécessairement physiquement) sur le disque à partir de la mémoire à l'adresse de la zone de transfert de disque actuelle, spécifiée par le dernier appel à l'interruption 21h, fonction 1Ah. 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 de fichier des données à écrire 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.
- Une fois le transfert de disque effectué, les champs bloc actuel (déplacement 0Ch), enregistrement actuel (déplacement 20h) et enregistrement relatif (déplacement 21h) des FCB sont mis à jour pour pointer vers l'enregistrement suivant dans le fichier.
- Si cette fonction est appelée avec CX=0, aucune donnée n'est écrite sur le disque mais le fichier est étendu ou tronqué à la longueur spécifiée par la combinaison des champs de taille d'enregistrement (déplacement 0Eh) et d'enregistrement relatif (déplacement 21h) du FCB.
- Comparez avec l'interruption 21h, fonction 22h, transférant un seul enregistrement par appel de fonction et ne met pas à jour le champ d'enregistrement relatif FCB.
- 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 écriture sur le répertoire contenant le fichier à écrire.
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 1512.
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 177 à 178.
Dernière mise à jour : Jeudi, le 3 mars 2016