Le compilateur/traducteur
Après avoir utilisé l'éditeur pour créer ou modifier votre programme source Pascal, vous utilisez le compilateur/traducteur (COMPILER/TRANSLATOR) pour convertir ce programme en langage de haut niveau en code machine.
Les instructions suivantes détaillent le fonctionnement du compilateur/traducteur.
Instructions d'utilisation
Pour commencer, exécutez le compilateur en procédant comme suit :
- Tapez :
- LOAD"ZC-64",8RETURN
- Une fois le compilateur chargé, tapez :
- RUNRETURN
- Le reste du compilateur est maintenant chargé. L'écran affiche un message de droit d'auteur pendant le chargement du logiciel. L'unité de disquette émet un bruit étrange alors que le chargement est presque terminé, mais c'est normal. Le compilateur vous invite ensuite à :
- Vous devez avoir préalablement créé ou modifié votre programme source ou une disquette autre que la disquette de distribution. Retirez donc maintenant votre disquette de distribution de l'unité de disque et insérez la disquette contenant votre fichier source Pascal. Après avoir changé de disquette, appuyez sur la touche RETURN.
- L'écran affiche une courte identification puis demande de saisir :
- L'écran affiche un autre message :
TEXT LITERALS IN SOURCE? Si vous entrez Y, l'écran passe en mode texte ; la saisie de tout autre caractère laisse l'écran en mode graphique.
- L'écran affiche alors le message :
- Le programme source est maintenant compilé.
- Si aucune erreur n'est trouvée, le compilateur vous demande de :
PRESS RETURN WHEN READY: Cela vous donne la possibilité de lire le reste de la liste des sources à l'écran.
- Le compilateur vous demande alors :
EXECUTE TRANSLATOR? Si vous entrez Y, le TRANSLATOR est automatiquement chargé et exécuté. La saisie de tout autre caractère vous permet de compiler un autre programme.
Remarque Assurez-vous qu'une copie du TRANSLATOR (appelé ZT-64) a été sauvegardée sur votre disquette de fichiers source comme décrit dans Introduction.
Le TRANSLATOR effectue deux passages sur le P-code. Lors d'un premier passage, le TRANSLATOR compte le nombre de P-code auxquels font référence d'autres P-code et affiche ce nombre sous la forme de n LABELS.
Lors d'un deuxième passage, le TRANSLATOR génère le code machine 6502 et affiche les statistiques à l'écran.
Le TRANSLATOR génère un programme en langage machine constitué d'un paquet de 8 Ko de sous-routines de support et du code machine généré à partir des instructions source Pascal. Le programme combiné est précédé d'une instruction SYS permettant au programme d'être exécuté comme un programme BASIC normal.
- Une fois que le TRANSLATOR a terminé, vous pouvez tester le programme compilé en tapant :
- RUNRETURN
- Vous pouvez également enregistrer votre programme compilé sur le disque en tapant :
- SAVE"progname",8RETURN
Vous pouvez maintenant exécuter ce programme sur n'importe quel autre Commodore 64 sans avoir à le recompiler. Il s'agit véritablement d'une version en langage machine de votre programme source Pascal d'origine.
REMOVE DISTRIBUTION DISKETTE PRESS ANY KEY WBEN READY |
SOURCE FILE NAME? |
Tapez le nom du fichier à compiler puis appuyez sur la touche RETURN.
Si le fichier source n'est pas contenu sur la disquette, le compilateur vous demande alors un autre nom de fichier source.
USE PRINTER? |
Si vous saisissez Y, la liste source est dirigée vers une imprimante ; la saisie de tout autre caractère dirige la liste source vers l'écran. Si la liste source est dirigée vers une imprimante, deux autres prompts s'affichent :
1)DEVICE NUMBER? |
Si vous avez une imprimante normale tapez 4 et la touche RETURN. Sinon, entrez le numéro de votre imprimante.
2)GENERATE LINE FEED? |
Entrez un Y si votre imprimante ne génère pas automatiquement un saut de ligne avec un retour chariot.
Si la liste source est dirigée vers une imprimante, chaque ligne source est précédée de deux valeurs numériques. Le premier numéro est un numéro de ligne, pouvant être utilisé ultérieurement pour modifier le fichier source. Le deuxième numéro est le numéro du premier P-code généré par l'instruction source correspondante.
Si une erreur est détectée, une flèche vers le haut s'affiche sous l'instruction source qui a provoqué l'erreur. Un message d'erreur décrivant l'erreur s'affiche également. Vous devez utiliser l'éditeur pour corriger une erreur dans le fichier source dans un tel cas. Réinitialisez votre ordinateur avant de réexécuter l'éditeur.
Différences avec le Pascal standard
Le ZOOM Pascal n'est pas un compilateur Pascal complet. Cette section décrit les fonctionnalités du Pascal standard n'étant pas disponibles avec ZOOM Pascal. Elle décrit également les fonctionnalités de ZOOM Pascal étant des extensions du Pascal standard. Cette section est conçue pour vous donner un aperçu rapide des fonctionnalités de ZOOM Pascal. Les sections suivantes vous donnent plus de détails sur les éléments du langage.
Un programme Pascal est composé d'un entête de programme et d'un bloc. Un bloc est composé de cinq parties de déclaration et d'une partie d'instruction. L'entête de programme est facultatif pour les programmes ZOOM Pascal.
Les cinq parties de déclaration d'un bloc sont :
- Partie de déclaration LABEL
- Partie de déclaration CONSTant
- Partie de déclaration TYPE
- Partie de déclaration VARiable
- Partie de déclaration PROCEDURE et FUNCTION
La partie de déclaration LABEL n'est pas reconnue par ZOOM Pascal. Vous ne pouvez donc pas utiliser de déclarations LABEL avec les programmes ZOOM Pascal.
La partie de déclaration CONST est compatible avec le Pascal standard.
La partie de déclaration TYPE ne reconnaît que les scalaires et les sous-intervalles. Vous ne pouvez pas utiliser les mots réservés FILE, RECORD, SET ou les types pointeur. Vous pouvez utiliser l'identificateur standard TEXT étant un type standard prédéclaré comme FILE OF CHAR.
La partie de déclaration VAR reconnaît tous les mots-clefs. Cependant, le mot réservé ARRAY ne peut contenir qu'une seule dimension. Vous pouvez également utiliser le type STRING étant une extension du Pascal standard.
La partie de déclaration PROCEDURE et FUNCTION ne reconnaît pas les mots réservés PROCEDURE, FUNCTION ou VAR dans l'entête de procédure ou de fonction.
Dans la partie instruction :
- Les mots réservés WITH, GOTO et IN ne sont pas reconnus.
- Les fonctions EOF, EOLN et ROUND ne sont pas reconnues.
- Les mots réservés MEM, CALL, SHL et SHR sont des extensions.
Le mot réservé MEM peut apparaître comme un facteur dans une expression ou peut apparaître à gauche du symbole d'affectation (:=), afin de permettre l'accès à n'importe quel emplacement mémoire.
Le mot réservé CALL est une procédure permettant d'exécuter une routine en langage machine.
Les mots réservés SHL et SHR peuvent apparaître comme opérateurs dans un terme, pour permettre le décalage de bits.
Vous pouvez utiliser un caractère spécial $ dans ZOOM Pascal. Le $ peut être utilisé de deux manières différentes :
- Lorsqu'il précède des chiffres hexadécimaux, il définit une constante hexadécimale.
- Lorsqu'il s'agit d'un suffixe d'une variable ou d'une expression dans une procédure READ, READLN, WRITE ou WRITELN, quatre chiffres hexadécimaux sont attendus en entrée ou écrits en sortie.
Le ZOOM Pascal fournit un certain nombre de fonctions et de procédures non standard. Les fonctions sont : ANDB, NOTB, ORB, RND, GETKEY, INKEY, CONCAT, COPY, DELETE, LEFTSTR, LENGTH, POS et RIGHTSTR. Les procédures sont : CLOSE et EXIT.
Structure du programme
Chaque programme Pascal est composé d'un entête et d'un bloc. Un bloc est lui-même composé d'une partie déclaration et d'une partie instruction.
La partie déclaration est elle-même subdivisée en cinq parties : la partie déclaration d'étiquette ; la partie déclaration de constante ; la partie déclaration de type ; la partie déclaration de variable ; et la partie déclaration de procédure et de fonction. Les sections suivantes sont organisées dans l'ordre dans lequel elles apparaîtraient dans un programme :
- Partie entête du programme/déclaration.
- Partie déclaration d'étiquette.
- Partie déclaration de constante.
- Partie déclaration de type.
- Partie déclaration de variable.
- Partie déclaration de procédure et de fonction.
- Partie d'instruction.
Titre de programme
Un programme Pascal se compose d'un titre de programme et d'un bloc de programme. Pour permettre la compatibilité avec d'autres versions de ZOOM Pascal, un titre de programme n'est pas requis.
Le compilateur recherche le mot réservé PROGRAM au début du fichier source Pascal. S'il n'est pas présent, le compilateur affiche le message HEADER MISSING, mais continue la compilation.
Si le fichier source Pascal contient le mot réservé PROGRAM, le compilateur s'attend à ce qu'un identificateur suive. Le compilateur ignore les mots et caractères suivant jusqu'au point-virgule inclus.
Voici des exemples de titres de programmes valides :
- PROGRAM SAMP1;
- PROGRAM SAMP2(INPUT,OUTPUT);
- PROGRAM PTEST(description,date);
Déclarations d'étiquettes
Le ZOOM Pascal ne reconnaît pas la partie déclaration d'étiquette LABEL. Par conséquent, le mot réservé GOTO ne peut pas être utilisé. La procédure non standard EXIT. Si IF est utilisée correctement, elle peut être utilisée à la place d'une étiquette.
Déclarations de constante (CONST)
Il n'existe aucune restriction dans ZOOM Pascal concernant la partie déclaration des constantes. Cependant, le compilateur accepte le caractère dollar ($) comme préfixe des constantes hexadécimales.
Si un $ est suivi de deux chiffres hexadécimaux, la constante est déclarée de type CHAR. Si un $ est suivi de quatre chiffres hexadécimaux, la constante est déclarée de type INTEGER. Si un $ est suivi d'un autre nombre de caractères, une erreur se produit.
Veuillez noter que cette extension est souvent pratique, mais n'est pas prise en charge par le Pascal standard. Elle ne doit pas être utilisée dans des programmes devant être déplacés vers d'autres systèmes.
Voici des exemples de déclarations de constantes :
- CONST ONE = 1; (* Le type est un INTEGER *)
- HALF = 0.5; (* Le type est un REAL *)
- THREEQUARTERS = .75; (* Zéro non significatif manquant *)
- HALFMILLION = 0.5E+6; (* Le type est un REAL *)
- LETTERA = 'A'; (* Le type est un CHAR *)
- STARTSTRING = 'DEBUT'; (* Le type est un STRING *)
- CLRSCREEN = $93; (* Le type est un CHAR *)
- C64STATUS = $0090; (* Le type est un INTEGER *)
Déclarations de type
Le ZOOM Pascal prend en charge les scalaires et les sous-intervalles. En fait, si vous déclarez une variable comme étant une sous-intervalle ou un scalaire, vous devez utiliser la déclaration TYPE pour définir la sous-intervalle ou le scalaire. Vous ne pouvez pas déclarer de types structurés.
Voici des exemples de déclarations TYPE valides :
Voici des exemples de déclarations TYPE non valides :
Déclarations de variables
Le ZOOM Pascal permet aux variables d'être de types simples ou d'être un tableau de types simples. Les types simples standards sont :
- BOOLEAN
- CHAR
- INTEGER
- REAL
- TEXT
TEXT est un raccourci Pascal standard pour la déclaration FILE OF CHAR. De plus, un type défini par l'utilisateur peut être spécifié. N'oubliez pas que la partie définition du type ne peut spécifier que des scalaires ou des sous-intervalles.
Comme mentionné dans la déclarations de type, les tableaux ne peuvent avoir qu'une seule dimension. Le mot réservé PACKED peut précéder le tableau réservé, mais il est traité comme un commentaire.
Le ZOOM Pascal permet également de déclarer une variable comme étant de type STRING. Dans la déclaration de variable, le mot STRING peut, éventuellement, être suivi d'un littéral numérique entre parenthèses, spécifiant la longueur maximale de la variable de type chaîne de caractères. Si la longueur n'est pas spécifiée, la longueur par défaut est de 80 caractères. La longueur maximale d'une chaîne de caractères est de 196 caractères.
Voici des exemples de déclarations de variables de STRING valides :
- VAR FIRSTNAME:STRING[12];
- LASTNAME:STRING[25];
- ADDRESS1,ADDRESS2:STRING[30];
- CITY:STRING[20];
- STATE:STRING[20];
- ZIP:STRING[5];
- LAZY:STRING; (* MEME CHOSE QUE STRING[80] *)
Vous pouvez également avoir des tableaux de variables de chaîne de caractères telles que :
mais la longueur maximale de la chaîne de caractères est de 127 dans un tableau. De plus, la longueur maximale d'une chaîne de caractères transmise à une fonction ou à une procédure, ou renvoyée par une fonction, est de 80.
Afin d'optimiser la vitesse d'exécution du programme en langage machine généré, aucune vérification n'est effectuée pour garantir que la longueur d'une chaîne de caractères ne dépasse pas la longueur déclarée. Cela peut certainement poser des problèmes lors de l'exécution d'un programme compilé. Par conséquent, ne soyez pas avare lors de l'allocation de la longueur d'une variable de type STRING.
Déclarations de procédure et de fonction
Une procédure est une sous-routine activée par une instruction de procédure. Une fonction est une sous-routine renvoyant une valeur et peut donc être utilisée comme facteur dans une expression.
La déclaration d'une procédure ou d'une fonction doit commencer par un entête. L'entête sert à identifier le nombre et les types de paramètres à transmettre à la procédure ou à la fonction. De plus, l'entête de fonction identifie le type de la valeur renvoyée par la fonction.
Le Pascal standard permet que les paramètres transmis à une procédure ou à une fonction soient des paramètres de valeur, de variable, de procédure ou de fonction. Le ZOOM Pascal permet uniquement de transmettre des paramètres de valeur aux procédures ou aux fonctions.
Voici des exemples de déclarations PROCEDURE et FUNCTION :
Partie d'instruction
La partie instruction d'un programme Pascal peut être soit une instruction simple, soit une instruction composée. Une instruction composée est une série d'instructions simples séparées par un point-virgule et délimitées par les mots réservés BEGIN et END.
Une instruction peut être soit une instruction d'affectation, une instruction de procédure, une instruction répétitive (WHILE, REPEAT ou FOR), une instruction conditionnelle (IF ou CASE), une instruction GOTO ou une instruction WITH. Le ZOOM Pascal ne prend pas en charge les instructions GOTO et WITH.
Une instruction d'affectation a le format suivant :
variable := expression |
La variable et l'expression doivent être du même type. Le Pascal standard autorise deux exceptions à cette règle. La première est que si le type de la variable est REAL, alors le type de l'expression peut être INTEGER ou une sous-intervalle de celui-ci. La seconde est que le type de l'expression peut être une sous-intervalle de la variable ou vice-versa.
Le ZOOM Pascal autorise ces exceptions, mais en utilise deux autres. Si la variable est de type STRING, alors l'expression peut être de type CHAR. Dans ce cas, une conversion de type automatique se produit. Si la variable est de type CHAR, alors l'expression peut être de type STRING. Dans ce cas, le premier caractère de la chaîne de caractères est extrait et une conversion de type automatique se produit.
Le ZOOM Pascal autorise également un mot de réserve non standard, MEM, comme variable dans une instruction d'affectation. Le mot réservé MEM doit être souscrit par une expression entière. L'expression à droite du «:=» doit être de type CHAR. Cette instruction a la même fonction qu'un POKE en BASIC. En voici un exemple :
- MEM[$0400] := 1; (* PLACE ET 'A' SUR L'ÉCRAN C64 *)
Mots réservés
Les mots réservés standard de Pascal sont répertoriés dans la page Références de mots réservés (mots clefs). Parmi ces mots réservés, ZOOM Pascal ne reconnaît pas les mots suivants : FILE, GOTO, IN, LABEL, NIL, RECORD, SET et WITH.
De plus, ZOOM Pascal a défini quatre mots comme mots réservés. Il s'agit de CALL, MEM, SHL et SHR.
L'utilisation du mot réservé MEM dans une instruction équivalente à un POKE du BASIC est expliquée dans la section précédente. Le mot réservé MEM peut également apparaître comme facteur dans une expression, pour servir d'équivalent à un PEEK du BASIC. Le mot MEM doit être suivi d'une expression entière entourée de crochets. Voici quelques exemples :
Les mots réservés SHL et SHR peuvent apparaître comme un opérateur de multiplication entre deux facteurs dans un terme d'une expression. Un facteur entier à gauche de SHL est décalé vers la gauche du nombre de bits représenté par la valeur du facteur entier à droite de SHL. De même, SHR provoque un décalage vers la droite.
L'exemple suivant montre comment entreposer une valeur d'adresse en mémoire :
Identificateurs prédéclarés
En plus des mots réservés définis par le Pascal standard, il existe des mots étant prédéclarés par le Pascal standard. Ils diffèrent des mots réservés dans la mesure où vous pouvez les redéfinir pour votre propre usage. Si vous le faites, votre définition de ces identificateurs standard remplace l'utilisation définie en Pascal. Cependant, cela n'est pas recommandé.
La liste complète des identificateurs standard figure dans Référence de procédures et de fonctions. Tous les identificateurs de fonction standard ont été implémentés à l'exception de EOF, EOLN et ROUND. La fonction EOF peut être émulée en utilisant la fonction MEM pour examiner l'emplacement mentionné dans la section précédente. La fonction EOLN peut être émulée en testant un caractère de retour chariot (* $0D *). La fonction ROUND peut être émulée en incluant la fonction suivante dans votre fichier source :
Parmi les identificateurs de procédure standard, ZOOM Pascal a implémenté les procédures READ, READLN, RESET, REWRITE, WRITE et WRITELN. Ces procédures sont décrites plus en détail dans les sections suivantes de cette page.
En plus des identificateurs pré-déclarés standard mentionnés ci-dessus, des identificateurs pré-déclarés supplémentaires sont disponibles avec ZOOM Pascal.
L'identificateur de type pré-déclaré STRING a déjà été abordé dans la section de cette page sur les déclarations de variables. Les fonctions de chaîne de caractères CONCAT, COPY, DELETE, LEFTSTR, MIDSTR, POS et RIGHTSTR sont décrites en détail dans une section suivante.
En plus des fonctions de chaîne de caractères ci-dessus, ZOOM Pascal fournit six autres fonctions non standard. Il s'agit de ANDB, NOTB, ORB, RND, GETKEY et INKEY.
Les fonctions ANDB, NOTB et ORB permettent des opérations booléennes sur des expressions INTEGER. Les fonctions ANDB et ORB nécessitent deux paramètres; NOTB nécessite un seul paramètre INTEGER. Les trois renvoient une valeur INTEGER.
La fonction RND nécessite un seul paramètre dont le type doit être REAL ou INTEGER. Si la valeur du paramètre est positive, la fonction renvoie une nouvelle valeur de nombre aléatoire. Si la valeur du paramètre est négative, la fonction renvoie une valeur aléatoire après avoir modifié la valeur de départ. Dans les deux cas, la valeur est de type REAL.
Les fonctions GETKEY et INKEY permettent au programme ZOOM Pascal d'obtenir la valeur d'une frappe de touche sur la console système. Ces deux fonctions ne nécessitent aucun paramètre et renvoient une valeur de type CHAR. La fonction GETKEY renvoie une valeur de CHR(0), si aucune touche n'est enfoncée. La fonction INKEY attend qu'une touche soit enfoncée.
En plus des fonctions mentionnées ci-dessus, ZOOM Pascal fournit deux procédures non standard. Il s'agit de EXIT et CLOSE.
La procédure EXIT peut être utilisée pour sortir d'une procédure ou d'une fonction. La procédure EXIT nécessite un seul paramètre étant l'identificateur de la procédure ou de la fonction dans le corps de laquelle se trouve EXIT. Pour sortir du corps principal du programme, utilisez l'identificateur MAIN. Pour des exemples d'utilisation de la procédure EXIT, veuillez vous référer aux modules PMODVAL, PRANDCR et PRANDUPD se trouvant sur la disquette de distribution.
La procédure CLOSE peut être utilisée pour fermer un fichier ouvert via une procédure RESET ou REWRITE. La procédure CLOSE nécessite un seul paramètre étant l'identificateur du fichier à fermer. L'utilisation de cette procédure n'est pas obligatoire, car le paquet d'exécution ferme tous les fichiers ouverts à la fin d'un programme en langage machine ZOOM Pascal. Cependant, elle doit être utilisée si vous avez l'intention d'accéder à des fichiers sur différentes disquettes insérées dans le même unité de disquette au cours d'une exécution.
Fonctions de chaîne de caractères (STRING)
Le ZOOM Pascal inclut toutes les fonctions de chaîne de caractères fournies par UCSD Pascal. De plus, ZOOM Pascal présente les différences suivantes :
- La procédure de chaîne de caractères INSERT n'est pas implémentée.
- Deux fonctions de chaîne de caractères disponibles dans Commodore BASIC sont implémentées : LEFTSTR et RIGHTSTR.
- La fonction COPY a reçu un alias MIDSTR.
Voici une description des fonctions STRING :
Syntaxe | Description |
---|---|
CONCAT(string1,string2,...,stringn) | Cette fonction renvoie une chaîne de caractères étant la combinaison de deux ou plusieurs expressions de chaîne de caractères en une seule chaîne de caractères. Si une expression dans la liste des expressions est de type CHAR, une conversion automatique en type STRING a lieu. |
COPY(string1,integer1,integer2) ou MIDSTR(string1,integer1,integer2) | Cette fonction renvoie une chaîne de caractères contenant les caractères de la string1 commençant par la position integer1 pour une longueur d'integer2
caractères. Elle est équivalente à la fonction MID$ en BASIC. Exemple : COPY('CECI EST UN STRING',6,5) retourne 'EST U'. |
DELETE(string1,integer1,integer2) | Cette fonction renvoie une chaîne de caractères contenant les caractères de string1 sans les caractères commençant par la position integer1 pour une longueur
d'integer2 caractères. Exemple : DELETE('CECI EST UN STRING',6,7) retournera 'CECI STRING' |
LEFTSTR(string1,integer1) | Cette fonction renvoie une chaîne de caractères contenant les caractères integer1 les plus à gauche de string1. Elle est équivalente à la fonction
LEFT$ du BASIC. Exemple : LEFTSTR('CECI EST UN STRING',4) retournera 'CECI' |
LENGTH(string1) | Cette fonction renvoie un entier correspondant à la longueur de la string1. Cette fonction est équivalente à la fonction LEN
du BASIC. Exemple : LENGTH('CECI EST UN STRING') retournera une valeur entière de 19. |
POS(string1,string2) | Cette fonction renvoie un entier représentant la position de string1 dans string2. Si string1 se produit plusieurs fois dans string2, POS
renvoie uniquement la première occurrence. Si string1 n'apparaît pas dans string2, POS renvoie une valeur zéro. La fonction POS accepte une
expression de type CHAR comme string1, mais pas comme string2. Exemple : POS('UN' ,'CECI EST UN STRING') retournera une valeur entière 10 |
RIGHTSTR(string1,integer1) | Cette fonction renvoie une chaîne de caractères contenant les caractères entiers les plus à droite de la chaîne de caractères. Elle est équivalente à la fonction
RIGHT$ du BASIC. Exemple : RIGHTSTR('CECI EST UN STRING',6) retournera 'STRING' |
Procédures d'entrée et de sortie
Le ZOOM Pascal propose six procédures d'entrée et de sortie Pascal standard. Il s'agit de :
Les procédures READ et READLN permettent à l'utilisateur de lire des données du clavier, d'un fichier cassette ou d'un fichier disque, dans une variable ou une liste de variables.
Les procédures WRITE et WRITELN permettent à l'utilisateur d'écrire une expression ou une liste d'expressions sur l'écran, un fichier cassette ou un fichier disque.
Les procédures RESET et REWRITE préparent le clavier, l'écran, le fichier cassette ou le fichier disque pour le transfert de données. Si le premier paramètre d'une procédure READLN n'est pas une variable de type TEXT, le curseur est alors positionné sur une nouvelle ligne après avoir rempli la dernière variable de la liste de paramètres. Sinon, la procédure READLN est identique à la procédure READ. Cela signifie que la procédure READLN ne saute pas au début de la ligne suivante lors de la lecture d'un fichier.
Voici un exemple de programme vous donnant quelques exemples de la procédure READ.
L'exemple 1 entraîne la lecture d'un seul caractère à partir du clavier et son entreposage dans la variable appelée CHVAR.
Les exemples 2, 3 et 4 entraînent une combinaison de saisie de caractères et de conversion de données. Le nombre de caractères lus dépend du type déclaré de la variable lue. Pour les variables INTEGER et REAL, les caractères sont lus jusqu'à ce qu'un caractère d'arrêt soit rencontré.
Pour les variables INTEGER, un caractère d'arrêt est tout caractère autre que les chiffres de 0 à 9.
Pour les variables REAL, un caractère d'arrêt est tout caractère autre que les chiffres de 0 à 9, le point décimal de la lettre E.
Pour une entrée hexadécimale (EXEMPLE 4), exactement quatre caractères sont lus.
Cette méthode de saisie est assez différente de la façon dont fonctionne BASIC. En BASIC, la saisie de la chaîne de caractères '39X' en réponse à une demande de saisie numérique donne comme résultat :
?REDO FROM START |
En ZOOM Pascal, la saisie de la chaîne de caractères '39X' en réponse à une demande de saisie numérique n'entraîne pas de message d'erreur. Un affichage de la variable lue indique une valeur de 39.
Le programme suivant donne quelques exemples de la procédure WRITE :
La sortie de ce programme est :
AIIXYZTRUE 23000 0000Si toutes les WRITE ont été modifiées en WRITELN, alors la sortie est :
A11XYZ
TRUE 23000
0000
Si le premier paramètre d'une procédure READ, READLN, WRITE ou WRITELN est une variable de type TEXT, l'opération d'entrée/sortie implique un fichier plutôt que le clavier ou l'écran. Avant de tenter une opération READ(LN) ou WRITE(LN) depuis ou vers un fichier, plutôt que le clavier ou l'écran, vous devez utiliser une procédure RESET ou REWRITE pour établir un chemin de données pour ce fichier.
La procédure RESET est utilisée pour les fichiers d'entrée et la procédure REWRITE pour les fichiers de sortie.
Le premier paramètre d'une procédure RESET ou REWRITE doit être un identificateur de variable de type TEXT.
Le deuxième paramètre est le nom du fichier externe et peut être soit un littéral de chaîne de caractères, une constante de chaîne de caractères ou une variable de chaîne de caractères. Les fragments de programme suivants montrent trois méthodes différentes pour ouvrir le même fichier de disque sur l'unité de disque 1 pour l'entrée :
Une discussion plus complète sur l'accès aux fichiers externes est abordée dans la section suivante.
Accès aux fichiers externes
Normalement, une procédure READ ou READLN lit à partir du clavier et une procédure WRITE ou WRITELN écrit à l'écran. Cependant, l'entrée ou la sortie peut être dirigée vers un fichier externe si le premier paramètre d'une procédure READ, READLN, WRITE ou WRITELN est une variable définie comme étant de type TEXT. Vous devez d'abord établir un chemin de données en utilisant RESET ou REWRITE.
Le premier paramètre d'une procédure RESET ou REWRITE doit être une variable de type TEXT. Ce paramètre est suivi d'un nombre variable de paramètres.
Si le deuxième paramètre est une expression de type STRING, ZOOM Pascal le considère comme le nom du fichier. Le nom du fichier doit être le dernier paramètre. Ce format à deux paramètres (variable de type TEXT suivie d'une variable de type STRING) est appelé format automatique et ne peut être utilisé qu'avec des fichiers séquentiels sur cassette ou disquette. Si un fichier de disquette est indiqué, le périphérique 8 est utilisé.
Si le deuxième paramètre n'est pas une expression de type STRING, il doit être de type INTEGER. Le ZOOM Pascal utilise cette valeur comme numéro de périphérique IEEE. Ce deuxième paramètre doit être suivi d'un troisième paramètre, également une expression de type INTEGER et représentant l'adresse secondaire IEEE. Le quatrième paramètre doit être une expression de type STRING mais peut être omis si un nom de fichier n'est pas approprié au périphérique IEEE utilisé. Ce format à trois ou quatre paramètres est appelé format manuel.
Le format automatique est ainsi désigné car il utilise le canal de commande pour vérifier si un fichier s'est ouvert avec succès si le préfixe du nom de fichier indique un fichier sur disque. Il ajoute également un suffixe ',S,R' ou ',S,W' au nom de fichier si le préfixe du nom de fichier indique un fichier sur disque. Pour ceux souhaitant lire ou écrire des fichiers «PGM», un suffixe ',P' est autorisé dans le nom de fichier et entraîne le remplacement du suffixe ',S,R' ou ',S,W' normalement ajouté par ',P,R' ou ',P,W'.
Le format manuel n'ajoute pas ces suffixes. Il n'ajuste pas le nom de fichier ; il ne vérifie pas si le fichier a été ouvert avec succès. Si le périphérique utilisé (par exemple, le numéro de l'unité de disque) nécessite des caractères spéciaux dans le nom de fichier, vous devez les fournir. Toute programmation spéciale du canal de commande doit être explicitement codée.
Un READ ou un READLN ne peut être exécutée que pour un fichier ouvert avec RESET. Un WRITE ou WRITELN ne peut être exécuté que pour un fichier ouvert avec REWRITE. Par conséquent, un fichier à accès aléatoire ou un canal de commande nécessitant à la fois la lecture et l'écriture doit être accessible via deux définitions de fichier.
La disquette de distribution contient des exemples de programmes sur la façon d'utiliser les fichiers.
Le programme source PCCEXMP vous montre comment lire et écrire sur le canal de commande du disque afin de supprimer un fichier sur une disquette.
Le programme source PLSTCBMD vous montre comment accéder au répertoire d'une disquette en tant que fichier.
Le programme source PRANDCR vous montre comment créer un fichier aléatoire sur une disquette.
Le programme source PKANDUPD vous montre comment effectuer une mise à jour simple de fichier aléatoire sur une disquette.
Vous pouvez lister ces programmes ou les compiler et les exécuter.
Largeurs de champ de sortie
Les procédures WRITE et WRITELN permettent d'utiliser des spécifications de largeur de champ. Une spécification de largeur de champ se compose de deux points suivis d'une expression entière. La spécification de largeur de champ peut être utilisée avec n'importe quel type de données. Les expressions entières peuvent avoir un suffixe $ pour indiquer qu'une sortie en hexadécimal est souhaitée. La largeur standard pour la sortie hexadécimale est de quatre positions de caractère. En utilisant une spécification $:2, le champ est une valeur hexadécimale de deux positions de large au lieu de quatre.
Voici un exemple d'affirmation valide :
- WRITE(1:2,1.1:4,'?':2,'ABC':4,TRUE:.5,16$:2);
Le résultat de l'instruction ci-dessus est :
1 1.1 ? ABC TRUE10 π π π π π position 1...5...10...15...20 |
Des espaces de remplissage sont ajoutés à gauche du champ de sortie, mais uniquement si la taille du champ de sortie est inférieure à la spécification de largeur.
Si les spécifications de largeur étaient omises dans l'exemple ci-dessus, l'instruction serait :
- WRITE(1,1.1,'?','ABC',TRUE,16$);
La sortie est alors :
11.1?ABCTRUE0010 π π π π π position 1...5...10...15...20 |
Messages d'erreur
La plupart des messages d'erreur affichés par le compilateur sont explicites.
Il existe un message ne l'étant pas. Ce message est :
END TEXT FOUND |
Ce message apparaît s'il n'y a pas d'espace ou de caractère de retour chariot après le dernier END terminant le programme Pascal. Il s'agit en fait d'un message d'erreur erroné. Ce message apparaît également si vous avez un nombre impair d'apostrophes dans votre fichier source ou si vous avez un (* sans * correspondant). Parfois, la seule façon de localiser ce problème est de diriger la sortie du compilateur vers l'imprimante. Si les numéros de P-code restent bloqués sur une valeur, le problème se situe alors dans la zone du dernier incrément du numéro de P-code.
Syntaxe du nom de fichier
Si un nom de fichier nul est saisi, le système utilise par défaut le lecteur de cassette. Si vous ouvrez un fichier d'entrée, le premier fichier trouvé devient le fichier lu. Si vous ouvrez un fichier de sortie, le remplissage est écrit sans nom.
Un désignateur d'unité fait partie du nom de fichier lors de l'ouverture d'un fichier d'entrée de cassette, d'un fichier de sortie de cassette ou d'un fichier de sortie de disque. Un désignateur d'unité se compose d'un seul caractère suivi de deux points. Pour un fichier de disque, le caractère unique est soit 0: soit 1:; pour un fichier de cassette, le caractère unique est un T:.
Si un désignateur d'unité ne précède pas le nom de fichier lors de l'ouverture d'un fichier d'entrée, le système suppose qu'un unité de disque doit être utilisé et recherche les répertoires des deux unités de disques.