Les entrées/sorties
Le Lisa Pascal contient les procédures et fonctions d'entrées/sorties standard ("intégrées") de Pascal dans le Lisa Pascal. Les procédures et fonctions standard sont prédéclarées. Puisque toutes les entités prédéclarées agissent comme si elles étaient déclarées dans un "bloc" entourant le programme, aucun confit ne provient d'une déclaration redéfinissant le même identifiant dans le programme. Les procédures et fonctions standard ne peuvent pas être utilisées comme paramètres procéduraux et fonctionnels actuelles. La syntaxe est la suivante :
new(p [, t1, ... tn]) |
Il représente la syntaxe de la liste de paramètres actuels du nouveau procédure standard, comme suit :
- p, t1 et tn représentent les paramètres actuelles. Des notes sur les types et les interprétations des paramètres accompagnent la description de la syntaxe.
- La notation U, ... tn signifie que n'importe quel nombre de paramètres actuelles peut apparaître ici, séparés par des virgules.
- Les crochets [] indiquent les parties de la syntaxe pouvant être omises.
Ainsi, la syntaxe montrée ici signifie que le paramètre p est requis. N'importe quel nombre de paramètres t peut apparaître, avec des virgules de séparation, ou il peut n'y avoir aucun paramètre t.
Introduction aux entrées/sorties
Cette section couvre les concepts entrée/sorties et de procédures s'appliquant à tous les types de fichiers. Il inclut les types de texte et les fichiers "non typés". Pour utiliser une variable de fichier Pascal (toute variable dont le type est un type de fichier), elle doit être associée à un fichier externe. Le fichier externe peut être une collection nommée d'informations entreposées sur un périphérique ou (pour certains types de fichiers) il peut s'agir du périphérique lui-même. L'association d'une variable de fichier avec un fichier externe se fait en ouvrant le fichier. Un fichier existant est ouvert via la procédure de réinitialisation et un nouveau fichier est créé et ouvert via la procédure de réécriture.
Le Lisa Pascal aux États-Unis ne fournit pas de vérification automatique des entrées/sorties. Pour vérifier le résultat d'une opération d'entrée/sortie particulière, vous devez utilisez la fonction IORESULT.
Types de périphériques
Pour les besoins d'entrée/sortie du Lisa Pascal, il existe deux types de périphériques :
- Un périphérique structuré en fichiers est un périphérique entreposant des fichiers de données, comme une disquette.
- Un périphérique de caractères est un périphérique dont l'entrée et la sortie sont des flux d'octets individuels, tels que l'écran et le clavier américain ou une imprimante.
Les espèces de fichiers externes
Il existe trois «espèces» de fichiers externes pouvant être utilisées dans les opérations d'entrée/sortie Lisa Pascal :
- Un fichier de données est un fichier étant entreposé sur un périphérique structuré par fichier et n'ayant pas été créé à l'origine en association avec une variable de fichier de type texte.
- Un fichier texte est un fichier étant entreposé sur un périphérique structuré par fichier et a été créé à l'origine en association avec une variable de fichier de type text. Les fichiers de texte sont entreposés dans un format spécialisé.
- Une périphérique de caractère peut être traitée comme un fichier.
Le tableau suivant résume les effets de toutes les combinaisons possibles de différents types de variables de fichier et d'espèces de fichiers externes. Les «cas ordinaires» du tableau reflètent l'intention de base des différents types de fichiers. D'autres combinaisons, comme l'accès par blocs à un fichier texte via une variable de type de fichier, sont légales mais peuvent nécessiter une programmation prudente.
Opération | var f: file of nimportequelType; | var f: text; | var f: file; |
---|---|---|---|
Fichier de données | Cas ordinaire, après RESET, f^ = premier fichier d'enregistrement. | (Format de fichier texte supposé). Après RESET*, f^ n'est pas spécifié. | Cas ordinaire, accès par bloc |
Fichier texte | (Format de fichier texte non supposé). Après RESET*), f^ = premier enregistrement du fichier (tel que déclaré) | Cas ordinaire, format de fichier texte supposé. Après RESET, f^ n'est pas spécifié. | (Format de fichier texte non supposé) accès par bloc. |
Périphérique de caractères | Après RESET, f^ = premier char. Depuis le périphérique (le système l'attend). Erreur d'entrée/sortie si le type d'enregistrement de fichier n'est pas de la taille d'un octet. | Case ordinaire, après RESET, f^ n'est pas spécifié (n'attend pas pour une entrée de char). | Accès par bloc, si le périphérique le permet. |
* Dans ces cas, la fonction IORESULT renverra un avertissement"(c'est-à-dire un nombre négatif) immédiatement après l'opération reset. |
Procédure Reset
La procédure RESET ouvre un fichier existant. Voici la syntaxe :
reset(f, title) |
- f est une référence de variable faisant référence à une variable de type fichier. Le fichier ne doit pas être ouvert.
- title est une expression avec une valeur de chaîne de caractères. La chaîne de caractères doit être un chemin d'accès valide pour un fichier sur un périphérique structuré par fichier, ou un chemin d'accès pour un périphérique caractère.
Les deux paramètres sont obligatoires (contrairement à Apple Pascal et Apple III Pascal, où le deuxième paramètre est optionnel).
Reset (f, title) trouve un fichier externe existant avec le titre du chemin et associe f à ce fichier externe. (S'il n'y a pas de fichier externe existant avec le titre du chemin, une erreur d'entrée/sortie se produit).
Si title est le chemin d'un périphérique de caractères, alors :
- EOF(f) devient false.
- Si f est de type text, la valeur de f^ n'est pas spécifiée. Le prochaine read ou readln sur f attendra qu'un caractère soit disponible pour l'entrée, et commencera la lecture avec ce caractère.
- Si f est de type file et que le périphérique est celui autorisant l'accès aux blocs, il n'y a pas de variable de tampon de fichier f^ et la "position actuelle du fichier" est définie sur le premier bloc (bloc 0) du fichier. Si le périphérique n'autorise pas l'accès au bloc, une erreur d'entrée/sortie se produit.
- Si f n'est pas de type text ou file, son type de composante doit être de type "taille d'octet" tel que le type -128..127. Notez que char n'est pas un type de taille d'octet ! Si le type de composante de f n'est pas une taille d'octet, une erreur d'entrée/sortie se produit. Si aucune erreur d'entrée/sortie ne se produit, le système attend qu'un caractère soit disponible à partir du périphérique, puis attribue le code 8 bits du caractère à f^.
Si title est le chemin d'accès à un fichier existant sur un périphérique structuré par fichier, alors :
- EOF(f) devient false si le fichier externe n'est pas vide. Si le fichier externe est vide, EOF(f) devient true.
- Si f n'est pas de type text ou file, reset définit la "position actuelle du fichier" sur le premier enregistrement du fichier externe et affecte la valeur de cet enregistrement à la variable de tampon de fichier f^. Si le fichier externe est un fichier texte, la fonction ioresult renverra un nombre négatif en guise d'avertissement.
- Si f est de type text, la valeur de f^ n'est pas spécifiée. Si le fichier est un fichier texte, le prochain read ou readln sur f commencera au premier caractère de f. Si le fichier est un fichier de données, il sera traité comme s'il s'agissait d'un fichier texte et la fonction ioresult renverra un nombre négatif en guise d'avertissement.
- Si f est de type file, il n'y a pas de variable de tampon de fichier f^ et la "position actuelle du fichier" est définie sur le premier bloc (bloc 0) du fichier.