Outils pour utilisateurs

Outils du site


issue107:tutoriel1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
issue107:tutoriel1 [2016/04/14 23:35] andre_domenechissue107:tutoriel1 [2016/04/15 07:25] (Version actuelle) d52fr
Ligne 5: Ligne 5:
 To understand logicals, I have to explain the philosophy behind the file-system of VMS. In Linux there is one “device” ('/') and all physical devices are mounted to become a virtual folder (the mounting points). VMS uses a totally opposite approach: Devices are separate items, and you are allowed to create a new (virtual or pseudo) device pointing to a folder.** To understand logicals, I have to explain the philosophy behind the file-system of VMS. In Linux there is one “device” ('/') and all physical devices are mounted to become a virtual folder (the mounting points). VMS uses a totally opposite approach: Devices are separate items, and you are allowed to create a new (virtual or pseudo) device pointing to a folder.**
  
-Au début des ordinateurs, une société appelée Digital Equipment Corporation (DEC) créa son ordinateur 32-bit VAX avec open VMS comme système d'exploitation. Puisqu'un ordinateur VAS/VMS est vraiment fiable, aujourd'hui, après plus de 25 ans, ils sont encore très nombreux à être en service. Mais, à la longue, mêmes ces ordinateurs fiables devront être remplacés. Comme décrit dans la Partie 1, vous pourriez migrer de VAX/VMS vers Linux, car le fonctionnement de Linux est en large partie compatible avec VAX/VMS. Si votre langage de programmation est Pascal, vous trouverez que Lazarus/Free Pascal est une bonne alternative. Mais il y a des fonctions techniques dans VMS sans remplacement évident sous Linux. Dans cet article, je décrirai comment je remplace des « logicals ».+Au début des ordinateurs, une société appelée Digital Equipment Corporation (DEC) créa son ordinateur 32-bit VAX avec open VMS comme système d'exploitation. Comme un ordinateur VAS/VMS est vraiment fiable, aujourd'hui, après plus de 25 ans, ils sont encore très nombreux à être en service. Mais, à la longue, mêmes ces ordinateurs fiables devront être remplacés. Comme décrit dans la Partie 1, vous pourriez migrer de VAX/VMS vers Linux, car le fonctionnement de Linux est en grande partie compatible avec VAX/VMS. Si votre langage de programmation est Pascal, vous trouverez que Lazarus/Free Pascal est une bonne alternative. Mais il y a des fonctions techniques dans VMS sans remplacement évident sous Linux. Dans cet article, je décrirai comment je remplace des « logicals ».
  
 La philosophie du système de fichiers ? La philosophie du système de fichiers ?
Ligne 37: Ligne 37:
 Que sont les logicals ? Que sont les logicals ?
  
-Un logical est une paire nom/valeur maintenue par le système, composée de chaînes contenant jusqu'à 255 caractères. Comme pour les eventflags, ils sont importants parce qu'ils sont utilisés régulièrement partout dans le système VMS. +Un logical est une paire nom/valeur maintenue par le système, composée de chaînes contenant jusqu'à 255 caractères. Comme pour les eventflags, ils sont importants parce qu'ils sont utilisés régulièrement partout dans le système VMS. Chaque fois que vous accéderez à un dispositif, le système regardera d'abord si le nom du dispositif que vous avez spécifié est un logical. Si c'est le cas, le nom du dispositif est remplacé par la valeur du logical (dans VMS, nous disons que le logical est traduit) et ce procédé est répété jusqu'à 10 fois (pour empêcher des boucles).
- +
-Chaque fois que vous accéderez à un dispositif, le système regardera d'abord si le nom du dispositif que vous avez spécifié est un logical. Si c'est le cas, le nom du dispositif est remplacé par la valeur du logical (dans VMS, nous disons que le logical est traduit) et ce procédé est répété jusqu'à 10 fois (pour empêcher des boucles).+
  
 **This mechanism is very versatile. You can influence what device is accessed by changing the corresponding logical (give it another value), and the value can contain more information than just a device: it can also contain the path to a folder (directory), or other information like TRUE, FALSE, OPEN, CLOSED, etc, etc. **This mechanism is very versatile. You can influence what device is accessed by changing the corresponding logical (give it another value), and the value can contain more information than just a device: it can also contain the path to a folder (directory), or other information like TRUE, FALSE, OPEN, CLOSED, etc, etc.
Ligne 47: Ligne 45:
 The value is not limited to one string. You are allowed to specify more than one string, separated by a comma to get a search list. If the system does not find the file in the folder resulting from the first “translation”, it will continue the search by following the second “translation”, and the third, and so on. Though very useful, be warned: this can have a nasty side-effect. If you access a file through a search list, and you don't have permission to access the file (due to file protection, root is the owner, etc), the system will continue the search, but does not find it in the other folders. Then it reports to you the FINAL error of “file not found”. But you can see the file and you will think: is that computer crazy or am I? Luckily, neither; the fault is in the message. It should be “access denied” (VMS: “file protection violation”), and I thought VMS was perfect!** The value is not limited to one string. You are allowed to specify more than one string, separated by a comma to get a search list. If the system does not find the file in the folder resulting from the first “translation”, it will continue the search by following the second “translation”, and the third, and so on. Though very useful, be warned: this can have a nasty side-effect. If you access a file through a search list, and you don't have permission to access the file (due to file protection, root is the owner, etc), the system will continue the search, but does not find it in the other folders. Then it reports to you the FINAL error of “file not found”. But you can see the file and you will think: is that computer crazy or am I? Luckily, neither; the fault is in the message. It should be “access denied” (VMS: “file protection violation”), and I thought VMS was perfect!**
  
-Ce mécanisme est très versatile. Vous pouvez modifier le dispositif auquel vous accédez en changeant le logical correspondant (lui donner une autre valeur), et la valeur peut contenir plus d'informations qu'un simple dispositif : il peut aussi contenir le chemin vers un dossier (répertoire) ou d'autres informations comme TRUE, FALSE, OPEN, CLOSED, etc., etc.+Ce mécanisme est très souple. Vous pouvez modifier le dispositif auquel vous accédez en changeant le logical correspondant (lui donner une autre valeur), et la valeur peut contenir plus d'informations qu'un simple dispositif : il peut aussi contenir le chemin vers un dossier (répertoire) ou d'autres informations comme TRUE, FALSE, OPEN, CLOSED, etc., etc.
  
 Plus d'une traduction. Plus d'une traduction.
Ligne 53: Ligne 51:
 La valeur n'est pas limitée à une seule chaîne. Vous pouvez spécifier plus d'une chaîne, séparée par une virgule pour avoir une liste de choses à rechercher. Si le système ne trouve pas le fichier dans le dossier qui résulte de la première « traduction », il continuera sa recherche en suivant la seconde « traduction », puis la troisième et ainsi de suite. Quoique très utile, soyez prévenu : cela peut avoir un effet secondaire désagréable. Si vous accédez à un fichier au moyen d'une liste de choses à rechercher et que vous n'avez pas les droits pour accéder au fichier (il est protégé, son propriétaire est root, etc.), le système continuera sa recherche, mais ne le trouvera pas dans les autres dossiers. Puis il vous indiquera l'erreur FINAL de « file not found » (fichier introuvable). Mais vous voyez le fichier et vous vous demandez : est-ce moi ou l'ordinateur qui est fou ? Ni l'un ni l'autre heureusement ; la faute est dans le message d'erreur. Cela devrait être « Accès non autorisé » (VMS : « file protection violation » (violation de la protection du fichier)) et dire que je pensais que VMS était parfait ! La valeur n'est pas limitée à une seule chaîne. Vous pouvez spécifier plus d'une chaîne, séparée par une virgule pour avoir une liste de choses à rechercher. Si le système ne trouve pas le fichier dans le dossier qui résulte de la première « traduction », il continuera sa recherche en suivant la seconde « traduction », puis la troisième et ainsi de suite. Quoique très utile, soyez prévenu : cela peut avoir un effet secondaire désagréable. Si vous accédez à un fichier au moyen d'une liste de choses à rechercher et que vous n'avez pas les droits pour accéder au fichier (il est protégé, son propriétaire est root, etc.), le système continuera sa recherche, mais ne le trouvera pas dans les autres dossiers. Puis il vous indiquera l'erreur FINAL de « file not found » (fichier introuvable). Mais vous voyez le fichier et vous vous demandez : est-ce moi ou l'ordinateur qui est fou ? Ni l'un ni l'autre heureusement ; la faute est dans le message d'erreur. Cela devrait être « Accès non autorisé » (VMS : « file protection violation » (violation de la protection du fichier)) et dire que je pensais que VMS était parfait !
  
-In part 1, I mentioned that I have had bad experiences with frequent, but random, errors on Charon-VAX. These errors involved the translation of a logical which contained a search list. One in every hundred or so translations failed. It was impossible to find what was wrong, because the next time the same logical was translated, there was no error. It was because of the randomness of the error that we decided not to use Charon-VAX on our production computers, only the development computers were emulated.+**In part 1, I mentioned that I have had bad experiences with frequent, but random, errors on Charon-VAX. These errors involved the translation of a logical which contained a search list. One in every hundred or so translations failed. It was impossible to find what was wrong, because the next time the same logical was translated, there was no error. It was because of the randomness of the error that we decided not to use Charon-VAX on our production computers, only the development computers were emulated.
  
-**Not as simple as it sounds...+Not as simple as it sounds...
  
 The implementation of logicals in VMS is very complex: a logical is part of a table and there are many different tables. Which tables and the order in which the system looks for the logical is specified in yet another logical. I will not try to explain all of this – it would be outside the scope of this article. Let me only mention that the most used tables are process, job (session), group (GID) and system tables, and they are searched in that order. This makes it possible to create a pointer to a folder for your group in the group table, and temporarily create the same pointer to a different folder for test purposes in your job or process table for your own use - without disturbing the other users or services, as would be the case when using hard links. The implementation of logicals in VMS is very complex: a logical is part of a table and there are many different tables. Which tables and the order in which the system looks for the logical is specified in yet another logical. I will not try to explain all of this – it would be outside the scope of this article. Let me only mention that the most used tables are process, job (session), group (GID) and system tables, and they are searched in that order. This makes it possible to create a pointer to a folder for your group in the group table, and temporarily create the same pointer to a different folder for test purposes in your job or process table for your own use - without disturbing the other users or services, as would be the case when using hard links.
Ligne 67: Ligne 65:
 • In VMS, the logical “TT” points to the terminal you work on. This could be a physical terminal (TTAxxx), a network terminal using the LAT protocol (LTAxxx), a telnet terminal (TNAxxx), an Xterm terminal (FTAxxx), or a remote terminal using the DecNet protocol (RTAxxx). Your program does not need to know which device started the program; it just reads from and writes to “TT:” (note the colon, this signals that TT is a device, not a file). Do not confuse this with stdin and stdout. These are file handles and they open the file “TT:”.** • In VMS, the logical “TT” points to the terminal you work on. This could be a physical terminal (TTAxxx), a network terminal using the LAT protocol (LTAxxx), a telnet terminal (TNAxxx), an Xterm terminal (FTAxxx), or a remote terminal using the DecNet protocol (RTAxxx). Your program does not need to know which device started the program; it just reads from and writes to “TT:” (note the colon, this signals that TT is a device, not a file). Do not confuse this with stdin and stdout. These are file handles and they open the file “TT:”.**
  
-Dans la partie 1, je mentionné que j'ai eu de mauvaises expériences avec des erreurs fréquentes, mais au hasard, sur Charon-VAX. Ces erreurs impliquaient la traduction d'une logique qui contenait une liste de recherche. Une dans chaque centaine de traductions a échoué. Il était impossible de trouver ce qui était faux, parce que la prochaine fois que la même logique a été traduite, il n'y avait pas d'erreur. C'est à cause du caractère aléatoire de l'erreur que nous avons décidé de ne pas utiliser CHARON-VAX sur nos ordinateurs de production, seuls les ordinateurs de développement ont été émulés.+Dans la partie 1, je mentionné que j'ai eu de mauvaises expériences avec des erreurs fréquentes, mais aléatoires, sur Charon-VAX. Ces erreurs impliquaient la traduction d'un logical qui contenait une liste de recherche. Une sur cent traductions échouait. Il était impossible de trouver ce qui était faux, parce que la fois suivante où la même logique était traduite, il n'y avait pas d'erreur. C'est à cause du caractère aléatoire de l'erreur que nous avons décidé de ne pas utiliser CHARON-VAX sur nos ordinateurs de production, seuls les ordinateurs de développement ont été émulés.
  
 Pas aussi simple que ça en a l'air... Pas aussi simple que ça en a l'air...
Ligne 143: Ligne 141:
 define/system NEW_SCALE INACTIVE (ou 'FALSE' ou 'USE_OLD_SCALES' ou ce que vous voulez) define/system NEW_SCALE INACTIVE (ou 'FALSE' ou 'USE_OLD_SCALES' ou ce que vous voulez)
  
-Afin de pouvoir utiliser le contrôle de version, je crée une nouvelle arborescence de dossiers pour chaque version et j'utilise un logical pour indiquer la version active. Par exemple : my version actuelle est la 7.2 et je crée donc le dossier APP$DISK:[V7-02], puis les sous-dossiers DATA et EXEC: APP$DISK:[V7-02.EXEC] et APP$DISK:[V7-02.DATA]+Afin de pouvoir utiliser le contrôle de version, je crée une nouvelle arborescence de dossiers pour chaque version et j'utilise un logical pour indiquer la version active. Par exemple : ma version actuelle est la 7.2 et je crée donc le dossier APP$DISK:[V7-02], puis les sous-dossiers DATA et EXEC: APP$DISK:[V7-02.EXEC] et APP$DISK:[V7-02.DATA]
  
 **The logical KW21 used as pointer to the current version is created with: **The logical KW21 used as pointer to the current version is created with:
Ligne 161: Ligne 159:
 define/group KW21 APP$DISK:[V7-02.]/translation=concealed (remarquez le point à la fin du numéro de version !) define/group KW21 APP$DISK:[V7-02.]/translation=concealed (remarquez le point à la fin du numéro de version !)
  
-L'interrupteur « translation=concealed » fait du logical KW21 un pseudo dispositif afin que l'adresse des sous-dossiers devienne KW21:[EXEC] et KW21:[DATA].+L'interrupteur « translation=concealed » fait du logical KW21 un pseudo-dispositif afin que l'adresse des sous-dossiers devienne KW21:[EXEC] et KW21:[DATA].
  
 Pour utiliser la version 7.3, je créerais APP$DISK:[V7-03.EXEC] et APP$DISK:[V7-03.DATA] et je définirais KW21 comme APP$DISK:[V7-03.], sans changer quoi que ce soit dans mes applications. Pour utiliser la version 7.3, je créerais APP$DISK:[V7-03.EXEC] et APP$DISK:[V7-03.DATA] et je définirais KW21 comme APP$DISK:[V7-03.], sans changer quoi que ce soit dans mes applications.
Ligne 189: Ligne 187:
 Ma solution Ma solution
  
-Pour utiliser des logicals sous Linux, j'ai créé quelques procédures dans ma bibliothèque pour remplacer les fonctions de VMS pour définir, supprimer (« deassign ») et traduire des logicals. Dans VMS, les logicals font partie du noyau et se trouvent dans la « mémoire paginée » de celui-ci. La taille de cette partie de la mémoire du noyau peut croître ; cette partie de la mémoire peut aussi être temporairement placée dans le swap (VMS : paged out). Puisque ma solution est créée dans l'espace utilisateur, sans que le noyau contrôle quel processus peut accéder à quelle table, j'ai décidé de faire les choses différemment : j'ai mis les tables dans des fichiers de données séparés.+Pour utiliser des logicals sous Linux, j'ai créé quelques procédures dans ma bibliothèque pour remplacer les fonctions de VMS pour définir, supprimer (« dé-assigner ») et traduire des logicals. Dans VMS, les logicals font partie du noyau et se trouvent dans la « mémoire paginée » de celui-ci. La taille de cette partie de la mémoire du noyau peut croître ; cette partie de la mémoire peut aussi être temporairement placée dans le swap (VMS: paged out). Puisque ma solution est créée dans l'espace utilisateur, sans que le noyau contrôle quel processus peut accéder à quelle table, j'ai décidé de faire les choses différemment : j'ai mis les tables dans des fichiers de données séparés.
  
-Lors du démarrage d'un programme, les tables partagées (system, group et job) sont ouvertes - ou créées si nécessaire - et mappées dans la mémoire partagée, ce qui les rend accessibles directement. Cela a lieu uniquement quand n'importe laquelle des routines de la bibliothèque des logicals est appelée pour la première fois. Tous changements causés par la (re)définition ou la suppression de logicals sont écrits dans le fichier correspondant et sont tout de suite visibles par d'autres processus, car mappés dans la mémoire partagée. Le processus local table (LNM_PROCESS) est créé et également mappé dans la mémoire, mais pas partagé. Et là, il y a un petit problème :+Lors du démarrage d'un programme, les tables partagées (system, group et job) sont ouvertes - ou créées si nécessaire - et mappées dans la mémoire partagée, ce qui les rend accessibles directement. Cela a lieu uniquement quand n'importe laquelle des routines de la bibliothèque des logicals est appelée pour la première fois. Tous les changements causés par la (re)définition ou la suppression de logicals sont écrits dans le fichier correspondant et sont tout de suite visibles par d'autres processus, car mappés dans la mémoire partagée. Le processus local table (LNM_PROCESS) est créé et également mappé dans la mémoire, mais pas partagé. Et là, il y a un petit problème :
  
 **LNM_PROCESS is not a table. It's a logical pointing to another table containing the process ID (pid) in its name to separate the many process tables from each other. The behavior of Linux concerning process ID's is different from that of VMS (I will go into more detail on this in part 5 about DCL). DCL (Digital Command Language) is a real shell: it wraps around a process, and every time an executable (“image” in VMS) is started, it runs within this shell, within the same memory, with the same logicals and symbols (environment variables) and with the same process ID. Bash is called a shell, but it is NOT! It is a CLI (Command Line Interpreter). Every time an executable is started in Linux, it's started in a new subprocess. Besides the greater overhead of the creation of a new process, it also gets a new process ID. And therein is the problem: A different process ID means a different process table. In VMS, you can define a process logical and then start an executable that would use this logical. In Linux, the defined process logical will be gone on exit of the program defining the logical. **LNM_PROCESS is not a table. It's a logical pointing to another table containing the process ID (pid) in its name to separate the many process tables from each other. The behavior of Linux concerning process ID's is different from that of VMS (I will go into more detail on this in part 5 about DCL). DCL (Digital Command Language) is a real shell: it wraps around a process, and every time an executable (“image” in VMS) is started, it runs within this shell, within the same memory, with the same logicals and symbols (environment variables) and with the same process ID. Bash is called a shell, but it is NOT! It is a CLI (Command Line Interpreter). Every time an executable is started in Linux, it's started in a new subprocess. Besides the greater overhead of the creation of a new process, it also gets a new process ID. And therein is the problem: A different process ID means a different process table. In VMS, you can define a process logical and then start an executable that would use this logical. In Linux, the defined process logical will be gone on exit of the program defining the logical.
Ligne 197: Ligne 195:
 To circumvent this problem I decided to use the process ID of the parent instead. This will be the same every time you start a new executable from the same terminal. Because this causes a different problem (having the same process table) when starting several background (“detached” in VMS) programs from a single terminal or program, I created the program “RunDetached” to do this for you. This again causes all programs to use process ID 1 from the init program, but that is easily detected. In that case its own process ID minus 1 is used.** To circumvent this problem I decided to use the process ID of the parent instead. This will be the same every time you start a new executable from the same terminal. Because this causes a different problem (having the same process table) when starting several background (“detached” in VMS) programs from a single terminal or program, I created the program “RunDetached” to do this for you. This again causes all programs to use process ID 1 from the init program, but that is easily detected. In that case its own process ID minus 1 is used.**
  
-LNM_PROCESS n'est pas une table. C'est un logical qui pointe vers une autre table contenant l'ID du processus (pid) dans son nom pour pouvoir différencier les nombreuses tables de processus. Le comportement de Linux concernant les ID de processus n'est pas le même que celui de VMS (j'en parlerai avec plus de détails dans la partie 5 qui a pour sujet le DCL). Le DCL (Digital Command Language est un vrai shell : il entoure un processus et, chaque fois qu'un exécutable (« image » dans VMS) est lancé, il tourne à l'intérieur de ce shell, à l'intérieur de la même mémoire, avec les mêmes logicals et symboles (des variables d'environnement) et avec le même process ID. On dit que Bash est un shell, mais ce n'est PAS vrai ! Bash est un CLI (Command Line Interpreter ou interpréteur de ligne de commande). Chaque fois qu'un exécutable est lancé dans Linux, il est lancé dans un nouveau subprocess (sous-processus). Mis à part les plus grands frais de la création d'un nouveau processus, il reçoit aussi un nouveau process ID. Et c'est là que se situe le problème : un process ID différent entraîne une table de processus différente. Dans VMS, vous pouvez définir un logical de type process, puis démarrer un exécutable qui utilisera ce logical. Dans Linux, le logical du processus défini n'existera plus lorsque l'on quitte le programme qui l'a défini.+LNM_PROCESS n'est pas une table. C'est un logical qui pointe vers une autre table contenant l'ID du processus (pid) dans son nom pour pouvoir différencier les nombreuses tables de processus. Le comportement de Linux concernant les ID de processus n'est pas le même que celui de VMS (j'en parlerai avec plus de détails dans la partie 5 qui a pour sujet le DCL). Le DCL (Digital Command Language est un vrai shell : il entoure un processus et, chaque fois qu'un exécutable (« image » dans VMS) est lancé, il tourne à l'intérieur de ce shell, à l'intérieur de la même mémoire, avec les mêmes logicals et symboles (des variables d'environnement) et avec le même process ID. On dit que Bash est un shell, mais ce n'est PAS vrai ! Bash est un CLI (Command Line Interpreter ou interpréteur de ligne de commande). Chaque fois qu'un exécutable est lancé dans Linux, il est lancé dans un nouveau subprocess (sous-processus). Mis à part les frais plus élevés de création d'un nouveau processus, il reçoit aussi un nouveau process ID. Et c'est là que se situe le problème : un process ID différent entraîne une table de processus différente. Dans VMS, vous pouvez définir un logical de type process, puis démarrer un exécutable qui utilisera ce logical. Dans Linux, le logical du processus défini n'existera plus lorsque l'on quitte le programme qui l'a défini.
  
 Pour contourner ce problème, j'ai décidé d'utiliser le process ID du parent à la place. Ce sera le même chaque fois que vous lancerez un nouvel exécutable du même terminal. Parce que cela cause un autre problème (même process table), quand je lance plusieurs programmes en arrière-plan (« detached » dans VMS) d'un même terminal ou programme, j'ai créé un programme qui s'appelle « RunDetached » pour le faire à votre place. À nouveau, en conséquence, tous les programmes utilisent process ID 1 du programme init, mais cela est facilement détectable. Dans ce cas-là, son propre process ID minus 1 est utilisé. Pour contourner ce problème, j'ai décidé d'utiliser le process ID du parent à la place. Ce sera le même chaque fois que vous lancerez un nouvel exécutable du même terminal. Parce que cela cause un autre problème (même process table), quand je lance plusieurs programmes en arrière-plan (« detached » dans VMS) d'un même terminal ou programme, j'ai créé un programme qui s'appelle « RunDetached » pour le faire à votre place. À nouveau, en conséquence, tous les programmes utilisent process ID 1 du programme init, mais cela est facilement détectable. Dans ce cas-là, son propre process ID minus 1 est utilisé.
Ligne 210: Ligne 208:
 Next month: In the next article I will go more in-depth about other functions such as mailboxes (IPC), what you MUST know about the difference in the way VAX-pascal and Free Pascal handle “PACKED ARRAY OF CHAR” (strings), and how to deal with file version numbers.** Next month: In the next article I will go more in-depth about other functions such as mailboxes (IPC), what you MUST know about the difference in the way VAX-pascal and Free Pascal handle “PACKED ARRAY OF CHAR” (strings), and how to deal with file version numbers.**
  
-Comme je l'ai déjà dit, les logicals sont utilisés partout dans le système de VMS. Cela veut dire que, chaque fois que vous voudrez accéder à un dispositif, VMS essayera d'abord de traduire le nom du dispositif. Pour avoir le même comportement, j'ai créé une fonction bibliothèque nommée OPEN pour se substituer à la fonction d'accéder aux fichiers de VAX-pascal, mais cela ne marche que pour les poignées TEXT. Si un autre type de poignée de fichier est utilisé, il servira à déterminer les attributs du fichier (comme la taille des enregistrements) et je ne sais pas mimer cela. Dans ce cas, la meilleure solution est de remplacer l'argument OPEN à la main par une séquence de :+Comme je l'ai déjà dit, les logicals sont utilisés partout dans le système de VMS. Cela veut dire que, chaque fois que vous voudrez accéder à un dispositif, VMS essayera d'abord de traduire le nom du dispositif. Pour avoir le même comportement, j'ai créé une fonction bibliothèque nommée OPEN pour se substituer à la fonction d'accès aux fichiers de VAX-pascal, mais cela ne marche que pour les poignées TEXT. Si un autre type de poignée de fichier est utilisé, il servira à déterminer les attributs du fichier (comme la taille des enregistrements) et je ne sais pas simuler cela. Dans ce cas, la meilleure solution est de remplacer l'argument OPEN à la main par une séquence de :
 • Appel à « translate name » pour avoir le comportement de VMS ; • Appel à « translate name » pour avoir le comportement de VMS ;
 • Appel à ASSIGN pour ouvrir le fichier, tout en précisant la bonne poignée de fichier. • Appel à ASSIGN pour ouvrir le fichier, tout en précisant la bonne poignée de fichier.
 J'espère pouvoir incorporer ceci dans mes logiciels de conversion plus tard. J'espère pouvoir incorporer ceci dans mes logiciels de conversion plus tard.
  
-Les fonctions mentionnées ci-dessus (« define », etc.) peuvent aussi être accomplies à partir du terminal et j'ai donc créé aussi les trois programmes correspondants. Ils sont - bien entendu - disponibles comme Open Source, tout comme RunDetached.+Les fonctions mentionnées ci-dessus (« define », etc.) peuvent aussi être réalisées à partir du terminal et j'ai donc créé aussi les trois programmes correspondants. Ils sont - bien entendu - disponibles comme Open Source, tout comme RunDetached.
  
 Le mois prochain : dans le prochain article, je vais approfondir mes explications d'autres fonctions telles que des « mailboxes » (boîtes aux lettres (IPC)), ce qu'il FAUT absolument savoir au sujet de la façon dont VAX-pascal et Free Pascal gèrent « PACKED ARRAY OF CHAR » (des chaînes), et comment traiter les numéros de version des fichiers. Le mois prochain : dans le prochain article, je vais approfondir mes explications d'autres fonctions telles que des « mailboxes » (boîtes aux lettres (IPC)), ce qu'il FAUT absolument savoir au sujet de la façon dont VAX-pascal et Free Pascal gèrent « PACKED ARRAY OF CHAR » (des chaînes), et comment traiter les numéros de version des fichiers.
- 
- 
issue107/tutoriel1.1460669713.txt.gz · Dernière modification : 2016/04/14 23:35 de andre_domenech