IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

ACCESS TO SYSTEM VARIABLES


Sujet :

Ada

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 58
    Points : 76
    Points
    76
    Par défaut ACCESS TO SYSTEM VARIABLES
    On Linux I want to know the number of lines and columns of my working terminal. When on the command line I call by hand the system variables $LINES and $COLUMNS, I get the right answers.

    When I try to do the same from a program written in Gnat Ada 2005 (Year 2010) using the specialized package Ada.Environment_Variables, as in the following code called from the same terminal, I get no answer for COLUMNS and LINES as if the corresponding system variables do not exist (I get a correct answer for PATH).


    with Ada.Environment_Variables; use Ada.Environment_Variables;
    with Ada.Text_Io; use Ada.Text_Io;

    procedure Print_Env is
    begin
    Put_Line("Columns : " & Value("COLUMNS"));
    Put_Line("Lines : " & Value("LINES"));
    Put_Line("Path : " & Value("PATH"));
    end Print_Env;


    I would like to understand the reasons of this behavior. Are there different kinds of system variables in Linux ? Those as HOME, PATH whose values depend only on the user session and those as LINES, COLUMNS defined for each used terminal. Is there a way in Ada to overcome this limitation ?

  2. #2
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    What about posting in french ?
    Non, sans rire, copier/coller dans un forum français un message que tu as envoyé sur le newsgroup comp.lang.ada n'est pas très cool, tu aurais pu traduire.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 58
    Points : 76
    Points
    76
    Par défaut C'est aussi bien effectivement en français !
    Je voudrais accéder au nombre de lignes et de colonnes d'un terminal texte sous linux à partir d'un programme écrit en langage Ada. En manuel sur ce même terminal, l'évaluation des variables $LINES et $COLUMNS permet bien d'obtenir ces nombres de lignes et colonnes. Par contre si j'essai d'y accéder à partir du programme Ada suivant qui utilise le package dédié Ada.Environment_Variables, je n'obtiens en retour qu'une chaine de caractère vide, tout comme si les variables systèmes correspondantes n'existaient pas (la variable PATH par contre est bien renseignée).

    with Ada.Environment_Variables; use Ada.Environment_Variables;
    with Ada.Text_Io; use Ada.Text_Io;

    procedure Print_Env is
    begin
    Put_Line("Columns : " & Value("COLUMNS"));
    Put_Line("Lines : " & Value("LINES"));
    Put_Line("Path : " & Value("PATH"));
    end Print_Env;


    J'aimerai comprendre les raisons de cette différence de comportement entre $PATH d'un coté et $LINES et $COLUMNS de l'autre et savoir comment y remédier.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Avant de démarrer ton programme, peut-être dois-tu exporter les variable COLUMNS et LINES avec export : export LINES COLUMNS

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 58
    Points : 76
    Points
    76
    Par défaut
    Exporter les variables LINES et COLUMNS avant de lancer le programme de test en Ada permet bien à celui-ci d'accéder à leurs valeurs. Mais il s'agit de valeurs initiales qui ne changent plus par la suite car si en cours de programme on change la taille de la fenêtre où il s'exécute, LINES et COLUMNS ne reflètent pas ce changement.
    Une solution qui a été testée est de passer par une commande bash sous Ada (e.g. stty size > file.txt) qui récupère les dimensions de la fenêtre dans un fichier que l'on a plus qu'à lire à partir d'Ada.
    La meilleure façon d'être averti d'un changement de taille de la fenêtre de travail est de confier cette tâche à un handler associé au SIGNAL SYSTEME UNIX : SIGWINCH. Cela peut se faire par l'intermédiaire de l'import du package suivant :

    --SPECIFICATION
    with Ada.Interrupts.Names; use Ada.Interrupts, Ada.Interrupts.Names;
    package Sigwinchhandler is
    protected Signalhandler is
    procedure Handlewindowresizing;
    pragma Attach_Handler (Handlewindowresizing, SIGWINCH);
    -- SIGWINCH (window resizing) intercepted by
    -- Handlewindowresizing
    end Signalhandler;
    end Sigwinchhandler;

    -- BODY
    with Ada.Text_IO; use Ada.Text_IO;
    with Ansi_Tty_Control; use Ansi_Tty_Control;
    package body Sigwinchhandler is
    protected body Signalhandler is
    -- Ce type protégé contient le signal handler spécifique à l'application
    procedure Handlewindowresizing is
    begin
    -- Acquisition des nombres de lignes et colonnes du terminal
    Dimensions_Terminal;
    Put_Line ("Columns : " & Positive'Image (N_Columns));-- Ici la preuve que cela marche !
    Put_Line ("Lines : " & Positive'Image (N_Lines));
    end Handlewindowresizing;
    end Signalhandler;
    end Sigwinchhandler;

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/01/2009, 14h29
  2. Réponses: 0
    Dernier message: 28/05/2008, 15h15
  3. [ACCESS] Rafraichir une variable
    Par subnox dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/08/2007, 09h09
  4. [Système] Variable d'environnement "windir"
    Par Chewby dans le forum Général Java
    Réponses: 10
    Dernier message: 01/04/2005, 00h58
  5. [System]variable d'environnement
    Par hfranck dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 19/05/2004, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo