Pure Pascal en interne : Pilote de périphérique de fichier texte
Vous pouvez installer votre propre pilote pour les fichiers texte. Pour cela, une variable de fichier texte, qui est structurée comme le type de données TextRec défini dans l'unité Dos, contient quatre pointeurs vers des fonctions qui doivent être remplacées à cet effet. Les quatre fonctions sont
OpenFunc | (Ouvrez le fichier) |
InOutFunc | (Entrée ou sortie du contenu du tampon) |
FlushFunc | (Vidage forcé du tampon) |
CloseFunc | (Fermez le dossier) |
Le résultat de la fonction est la valeur qu'un appel IOResult ultérieur doit renvoyer. Si la fonction peut être exécutée avec succès, zéro doit être renvoyé.function <name>( var t : TextRec ) : integer;
Assign
Chaque pilote de périphérique de fichier texte doit avoir sa propre procédure d'attribution. Cela remplit le pointeur de fonction OpenFunc avec un pointeur vers la nouvelle routine. Il doit également initialiser les composants BufSize et BufPtr. Enfin, la constante fmClosed, qui est définie dans l'unité Dos, doit être affectée au composant Mode. Le champ UserData est disponible gratuitement.OpenFunc
OpenFunc est appelé par Append, Reset et Rewrite et est censé ouvrir le fichier texte. Mode contient le mode d'accès au fichier, c'est-à-dire détermine si le fichier doit être ouvert pour l'écriture (fmOutput), la lecture (fmInput) ou pour les opérations d'écriture et de lecture (fmInOut). Dans ce dernier cas, fmInOut doit être défini sur fmOutput après ouverture. Une fois le fichier ouvert avec succès, les pointeurs de fonction restants InOutFunc, FlushFunc et CloseFunc sont initialisés. Ainsi, en fonction du mode d'accès aux fichiers, des fonctions spéciales peuvent être configurées.InOutFunc
InOutFunc est appelé par Close, Flush, Eof, Eoln, Read, Readln, SeekEof, SeekEoln, Write et Writeln.Si le composant Mode contient la valeur fmInput, une tentative est effectuée pour lire les caractères BufSize dans le tampon BufPtr^. Le nombre de caractères réellement lus est stocké dans BufEnd et BufPos mis à zéro.
Dans le cas d'un fichier de sortie (Mode est alors égal à fmOutput), les caractères BufPos de BufPtr^ sont sortis.
FlushFunc
FlushFunc est appelé par Flush, Read, Readln, Write et Writeln. Cela conduit à la vidange du tampon BufPtr^.Si le composant Mode contient la valeur fmInput, BufPos et BufEnd sont définis sur zéro.
Pour un mode égal à fmOutput, FlushFunc se comporte comme InOutFunc, c'est-à-dire que le contenu du tampon est sorti.