Programmation en DCL - Notions
de base
DCL est un incontournable pour tout qui travaille avec OpenVMS. En effet, aussitôt
branché sur un terminal l'invite DCL, le signe de dollar ($), attend vos instructions.
Les instructions DCL
Ces instructions, ou commandes, sont généralement formées d'un verbe suivi de paramètres. Le tout peut être accompagné de qualificatifs qui préciseront les détails de votre requête. Certains qualificatifs doivent recevoir une valeur pour être complets, comme vous le constaterez dans les exemples qui suivent. Le code couleurs utilisé dans ce paragraphe pour identifier les différents éléments des commandes, sera adopté dans les exemples qui suivent.
D'autres commandes regroupent toute la panoplie des IF-THEN-ELSE-ENDIF, GOTO, GOSUB, CALL, et l'utilisation de variables numériques et alphanumériques, qui permettent la création de procédures de commandes très élaborées. Comme dans tout langage qui se respecte, on peut bien sûr lire et mettre à jour des fichiers de données. Des fonctions (lexicals) permettent entre autres de retourner de l'information sur l'environnement (utilisateur, ordinateur, disques, etc) rendant ainsi possible la programmation de procédures efficaces pour la gestion de votre ordinateur, ou la mise en place de menus.
Le langage de commande DCL est assez intuitif. Voyons quelques exemples:
C'est somme toute plutôt simple... Analysons maintenant en
détail la commande suivante:
PRINT /QUEUE=VENTES$PRINT TEST.TXT /COPIES=2, TEST.LIS /HEADER
qui pourrait se lire en français:
Envoyer à l'imprimante
nommée VENTES$PRINT le document TEST.TXT en 2 copies, et aussi TEST.LIS sur lequel imprimer une ligne d'entête au haut de
chaque page.
Verbe | C'est la commande en tant que telle. Il correspond au programme qui traitera la requête. | |
Envoyer des fichiers à l'imprimante. | ||
Paramètre | Les paramètres de la commande PRINT sont les noms des fichiers à imprimer | |
TEST.TXT | ||
TEST.LIS | ||
/Qualificatif | Modificateurs de la
commande; permet d'être plus spécifique dans votre demande. Un qualificatif est toujours
précédé d'une barre oblique (/). Ils peuvent modifier la commande en son tout, ou agir sur le paramètre qui le précède. Tout dépend de la nature du qualificatif. |
|
./QUEUE | Spécifie l'imprimante à utiliser (une queue est une file d'attente; les documents y sont placés à la queue leu leu). Agit sur la commande entière. | |
/COPIES | Indique le nombre de copies à imprimer. Placé juste après le paramètre TEST.TXT, il agit sur celui-ci uniquement. | |
/HEADER | Demande d'imprimer en entête de chaque page du document, une ligne d'information contenant le nom du fichier ainsi que la date d'impression. Placé juste après le paramètre TEST.LIS, il agit sur celui-ci uniquement. | |
=Valeur | Complète l'énoncé d'un qualificatif. C'est un peu comme le paramètre de ce dernier. Elle doit suivre immédiatement le qualificatif auquel elle se rapporte, et être précédée du signe égal (=). | |
VENTES$PRINT | Spécifie exactement quelle imprimante (queue) doit être utilisée. | |
=2 | Le qualificatif /COPIES serait incomplet si le nombre de copies ne serait pas indiqué. |
Il est bon de savoir que DCL ne fait pas la différence entre majuscules et minuscules, et que l'on peut abréger les mots-clés des commandes et qualificatifs, tant qu'il n'y a pas d'ambigüité (4 caractères suffiront habituellement). Enfin, n'hésitez pas à consulter l'aide en ligne (commande HELP) qui vous aidera beaucoup à connaître les commandes et leurs qualificatifs possibles. Avec l'expérience, vous devinerez beaucoup de commandes sans avoir à vous référer à l'aide en ligne ou aux manuels. En effet, beaucoup de commandes et qualificatifs sont simplement le mot anglais correspondant à l'item que vous désirez, comme par exemple si vous voulez connaître le propriétaire d'un fichier, ajouter le qualification /OWNER à la commande DIRECTORY. C'est aussi simple que cela.
Maintenant que vous connaissez un peu la manière d'énoncer une commande, vous voudrez connaître la syntaxe en usage pour les noms de fichiers. Pour plusieurs commandes, les paramètres sont effectivement des noms de fichiers. Encore un peu de théorie, alors:
Une spécification de fichier s'énonce comme suit: DISQUE:[REPERTOIRE]NOM.TYPE;VERSION. Chaque composant est un mot formé de lettres et de chiffres, auxquels peuvent s'ajouter quelques caractères spéciaux comme le souligné (_) et le signe de dollar ($).
Notions avancées
Quand vous serez bien à l'aise avec la syntaxe énoncée ci-dessus, revenez jeter un coup d'oeil à ce qui suit. Ne vous tracassez pas avec ceci si vous n'en êtes envore qu'au début de votre apprivoisement de DCL.
Dans certaines commandes (en
particulier DIRECTORY, COPY, etc), des caractères frimés (wildcards)
peuvent être employés dans le répertoire,
le nom et le type
d'un fichier.
|
Un numéro de version relatif peut
être employé.
|
Si le protocole de communication DECnet est utilisé, on peut indiquer un nom de noeud dans une spécification de fichier pour ainsi accéder un fichier sur un autre ordinateur du réseau. Le nom de noeud doit être suivi du double deux-points (::). Optionnellement, ceux-ci peuvent être précédés d'un nom d'utilisateur et d'un mot de passe encadrés de guillemets (") pour valider l'accès à l'ordinateur en question. Voyez la documentation sur la sécurité VMS pour plus de détails sur ce genre d'accès. |
BEDES::DUA1:[GAULOIS]ASTERIX.TXT est un fichier sur l'ordinateur BEDES:: | |
BEDES"SYLTREM MOT_DE_PASSE"::DUA1:[GAULOIS]OBELIX.TXT |
Messages d'erreur
OpenVMS indiquera toujours un message d'erreur détaillé et compréhensible lorsqu'une commande ou une opération se termine anormalement. Ces messages ont un format standard qu'il est bon de connaître.
Un message est formé de quatre (4) éléments distincts. Chacun remporte une information spécifique sur la nature de l'erreur. Le format général est le suivant:
%MODULE-S-ABRÉVIATION, texte
MODULE | Nom du module de traitement dans lequel l'erreur s'est produite | |
CLI DIRECT |
Command Language Interpreter (DCL) DIRECTORY (la commande de ce nom) |
|
S | Sévérité du message | |
S I W E F |
Succès Information Avertissement Erreur Erreur Fatale |
|
ABRÉVIATION | Mot indiquant la cause de l'erreur, en format abrégé | |
NOFILES MAXPARAM |
Signifie: aucun fichier trouvé Signifie: trop de paramètres |
|
texte | Texte explicatif expliquant la nature de l'erreur | |
too many parameters - reenter command
with fewer parameters error opening DUA1:[DAFFY]DUCK.DAT; as input |
Certaines commandes font appel à plusieurs modules de traitement, et lorsqu'une erreur survient dans un sous-module, plusieurs lignes de messages peuvent être affichées. Chaque ligne donne une partie de la cause de l'erreur. Les lignes subséquentes sont habituellement précédées d'un tiret (-) plutôt que du signe de pourcentage (%):
$ COPY LEONARD.LIS *.*
%COPY-E-OPENIN, error opening
DUA1:[BEDES]LEONARD.LIS; as input
-RMS-E-FNF, file not found
Le premier message provient de la commande que nous avons appelée (COPY) et indique que le fichier à copier (fichier en entrée) n'a pas pu être ouvert. Ce message serait incomplet s'il n'était suivi du second message, venant de RMS (c'est le file system de OpenVMS) qui indique que le fichier n'existe pas. Ce dernier message est très important dans la compréhension de l'erreur et vous permettra de la corriger.
Un autre exemple mettra plus en évidence l'importance d'avoir plusieurs niveaux de
messages.
$ COPY LEONARD.LIS GENIE.*
%COPY-E-OPENIN, error opening
DUA1:[BEDES]LEONARD.LIS;1 as input
-RMS-E-PRV,
insufficient privilege or file protection violation
Cette fois-ci, le premier message est exactement le même, mais le second nous renseigne sur la cause exacte de l'impossibilité pour la commande COPY d'ouvrir le fichier LEONARD.LIS. En effet, les protections du fichier nous en bloquent l'accès.
Eh! bien voilà, c'est assez pour un début. Vous pourrez consulter le dictionnaire DCL en ligne ou imprimé pour connaître les commandes et leur paramètres. Rappelez-vous, la majorité des commandes et qualificatifs sont un mot anglais très significatif de leur fontion. Avec l'usage, vous viendrez à en deviner plusieurs sans avoir à vous référer a la documentation.