Section courante

A propos

Section administrative du site

Les périphériques logiques

Dans le Turbo Pascal, jusqu'à la version 3 du Turbo Pascal, les périphériques externes tels que les terminaux, les imprimantes et les modems sont considérés comme des périphériques logiques et sont traités comme des fichiers texte. A partir de la version 4 du Turbo Pascal, ils furent remplacer par des fonctions spécialisés comme par exemple la fonction ReadKey, Lst dans l'unité Printer. Les périphériques logiques suivants sont disponibles jusqu'à la version 3 du Turbo Pascal :

Périphérique Description
CON: Le périphérique de la console. La sortie est envoyée au périphérique de sortie de la console du système d'exploitation, généralement le CRT, et l'entrée est obtenue à partir du périphérique d'entrée de la console, généralement le clavier. Cela signifie que chaque lecture ou lecture à partir d'un fichier texte affecté au dispositif CON: entrera une ligne entière dans un tampon de ligne et que l'opérateur dispose d'un ensemble de fonctions d'édition lors de l'entrée de ligne.
TRM: Le périphérique de terminal. La sortie est envoyée au périphérique de sortie de la console du système d'exploitation, généralement le CRT, et l'entrée est obtenue à partir du périphérique d'entrée de la console, généralement le clavier. Les caractères saisis sont renvoyés en écho, sauf s'il s'agit de caractères de contrôle. Le seul caractère de contrôle renvoyé en écho est un retour chariot (CR), étant renvoyé en écho en tant que CR/LF.
KBD: Le clavier (entrée uniquement). L'entrée est obtenue à partir du périphérique d'entrée de la console du système d'exploitation, généralement le clavier. L'entrée n'est pas renvoyée en écho.
LST: Le périphérique de liste (sortie uniquement). La sortie est envoyée au périphérique de liste du système d'exploitation, généralement l'imprimante de ligne.
AUX: Le périphérique auxiliaire. Sous PC-DOS et MS-DOS, il s'agit de COM1: ; en CP/M c'est RDR: et PUN:.
USR: Le périphérique utilisateur. La sortie est envoyée à la routine de sortie utilisateur et l'entrée est obtenue à partir de la routine d'entrée utilisateur. Ces périphériques logiques peuvent être accédés via les fichiers pré-affectés ou ils peuvent être affectés à des variables de fichier, exactement comme un fichier disque. Il n'y a aucune différence entre Rewrite et Reset sur un fichier affecté à un périphérique logique, Close n'exécute aucune fonction et une tentative de Erase à un tel fichier provoquera une erreur d'entrée/sortie.

Les fonctions standard Eof et Eoln fonctionnent différemment sur les périphériques logiques que sur les fichiers disque. Sur un fichier disque, la fonction Eof renvoie True lorsque le caractère suivant dans le fichier est un Ctrl+Z, ou lorsqu'un EOF physique est rencontré, et Eoln renvoie True lorsque le caractère suivant est un CR ou un Ctrl+Z. Ainsi, Eof et Eoln sont en fait des routines de prévision.

Comme vous ne pouvez pas anticiper sur un périphérique logique, Eoln et Eof opèrent sur le dernier caractère lu au lieu du caractère suivant. En effet, la fonction Eof renvoie True lorsque le dernier caractère lu était un Ctrl+Z, et la fonction Eoln renvoie True lorsque le dernier caractère lu était un CR ou un Ctrl+Z. Le tableau suivant donne un aperçu du fonctionnement de Eoln et Eof.

Action Sur les fichiers Sur les périphériques logiques
Eoln est true si est caractère suivant CR ou Ctrl+Z ou si EOF est vrai si le caractère courant est CR ou Ctrl+Z
Eof est true si le caractère suivant est Ctrl+Z ou si l'EOF physique est rencontré si le caractère courant est Ctrl+Z

De même, la procédure ReadLn fonctionne différemment sur les périphériques logiques que sur les fichiers disque. Sur un fichier disque, ReadLn lit tous les caractères jusqu'à et y compris la séquence CR/LF, alors que sur un périphérique logique, il ne lit que jusqu'au premier CR inclus. La raison en est encore une fois l'incapacité de prévoir les périphériques logiques, ce qui signifie que le système n'a aucun moyen de savoir quel caractère suivra le CR.

Fichiers standards

Comme alternative à l'affectation de fichiers texte à des dispositifs logiques comme décrit ci-dessus, le Turbo Pascal jusqu'à la version 3 propose un certain nombre de fichiers texte pré-déclarés ayant déjà été affectés à des dispositifs logiques spécifiques et préparés pour le traitement. Ainsi, le programmeur est épargné par les processus de réinitialisation/réécriture et de fermeture, et l'utilisation de ces fichiers standard permet d'économiser davantage de code :

Identificateur Description Version
Input Le fichier d'entrée principal. Ce fichier est affecté soit au périphérique CON:, soit au périphérique TRM:. Tous les versions
Output Le fichier de sortie principal. Ce fichier est affecté soit au périphérique CON:, soit au périphérique TRM:. Tous les versions
Con Attribué au périphérique de la console (CON:). Version 1 à 3
Trm Attribué au terminal (TRM:). Version 1 à 3
Kbd Attribué au périphérique clavier (KBD:). Version 1 à 3 ou unité Turbo3 Version 4 ou plus
Lst Attribué au périphérique de liste (LST:). Version 1 à 3
Aux Attribué au périphérique auxiliaire (AUX:). Version 1 à 3
Usr Attribué à la périphérique utilisateur (USR:). Version 1 à 3

Notez que l'utilisation de Assign, Reset, Rewrite et Close sur ces fichiers est illégale. Lorsque la procédure Read est utilisée sans spécifier d'identificateur de fichier, elle entre toujours une ligne, même s'il reste encore des caractères à lire dans le tampon de ligne, et elle ignore Ctrl+Z, obligeant l'opérateur à terminer la ligne par RETURN. Le RETURN de fin n'est pas renvoyé en écho et, en interne, la ligne est entreposée avec un Ctrl+Z ajouté à la fin. Ainsi, lorsque moins de valeurs sont spécifiées sur la ligne d'entrée qu'il n'y a de paramètres dans la liste de paramètres, toutes les variables Char en excès seront définies sur Ctrl+Z, les chaînes de caractères seront vides et les variables numériques resteront inchangées. La directive du compilateur B est utilisée pour contrôler cette fonctionnalité de "lecture forcée". L'état par défaut est {$B+}, et dans cet état, les instructions de lecture sans variable de fichier entraîneront toujours l'entrée d'une ligne à partir de la console. Si une directive de compilateur {$B-} est placée au début du programme (avant la partie déclaration), la version abrégée de Read agira comme si le fichier standard d'entrée avait été spécifié, c'est-à-dire :

  1. Read(v1,v2, ... ,vn) = Read(Input,v1,v2, ... ,vn)

Dans ce cas, les lignes ne sont entrées que lorsque le tampon de ligne a été vidé. L'état {$S-} suit la définition du standard Pascal d'entrée/sortie, tandis que l'état par défaut {$S+}, non conforme à la norme à tous égards, offre un meilleur contrôle des opérations d'entrée. Si vous ne voulez pas que les entrées soient renvoyées à l'écran, vous devez lire dans le fichier standard Kbd :

  1. Read(Kbd,Variable);

Les fichiers standard Input et Output étant très fréquemment utilisés, ils sont choisis par défaut si aucun identificateur de fichier n'est renseigné. La liste suivante montre les opérations sur les fichiers texte abrégés et leurs équivalents :

Abrégé Spécifique à un périphérique
Write(Ch) Write(Output,Ch)
Read(Ch) Read(Input, Ch)
WriteLn WriteLn(Output)
ReadLn ReadLn(Input)
Eof Eof(Input)
Eoln Eoln(Input)


Dernière mise à jour : Dimanche, le 16 mai 2021