Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Ada
Ada Forum d'entraide sur la programmation en langage Ada
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/10/2012, 12h09   #1
azerty1234
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2012
Messages : 3
Points : 0
Points : 0
Par défaut Gestion ligne de commande

Bonjour,

J'écris acuellement un petit programme intéractif en ada sous Linux.
Dans ce programme j'éxécute plusieurs commandes à la suite dans mon shell.
J'aimerais alors savoir s'il est possible en ada de gérér l'historique, l'édition ou la complétion de ligne de commande.

Par exemple lorsque je presse la flèche du haut, au lieu d'afficher ^[[A, il me propose la dernière commande entrée.

Merci
azerty1234 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2012, 18h35   #2
jovalise
Membre éclairé
 
Inscription : juin 2006
Messages : 767
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : juin 2006
Messages : 767
Points : 328
Points : 328
Bonjour, j'ai écrit un bout de code qui saisie chaque caractère d'une séquence d'échappement en plus des caractère simple.
L'inconvéniant, c'est pour la touche esc justement.
Ce programme va attendre la suite de la séquence d'échappement, ce qui oblique à saisir un esc supplémentaire.

Voic le bout de code.
Code ada :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 begin
      loop
         declare
            Char : Character;
         begin
            
            Text_Io.Get_Immediate(Char);
            case Char is
               when Character'Val(27) =>
                  Text_Io.Get_Immediate(Char);
                  case Char is
                     when Character'Val(27) =>               
                        Quatuor_Console.Receive(Char);
                     when Character'Val(91) =>
                        Text_Io.Get_Immediate(Char);                 
                        case Char is
                           when Character'Val(49) =>
                              Text_Io.Get_Immediate(Char);                   
                              case Char is
                                 when Character'Val(55) =>
                                    null;Text_Io.Put_Line(" -- F6");                             
                                 when Character'Val(56) =>
                                    null;Text_Io.Put_Line(" -- F7");
                                 when Character'Val(57) =>
                                    null;Text_Io.Put_Line(" -- F8");
                                 when Character'Val(126) =>                        
                                    null;Text_Io.Put_Line(" -- begin");
                                 when others =>
                                    null;
                              end case;                 
                           when Character'Val(50) =>                       
                              Text_Io.Get_Immediate(Char);                   
                              case Char is
                                 when Character'Val(48) =>
                                    null;Text_Io.Put_Line(" -- F9");
                                 when Character'Val(49) =>
                                    null;Text_Io.Put_Line(" -- F10");
                                 when Character'Val(51) =>
                                    null;Text_Io.Put_Line(" -- F11");
                                 when Character'Val(52) =>
                                    null;Text_Io.Put_Line(" -- F12");
                                 when Character'Val(53) =>                               
                                    null;Text_Io.Put_Line(" -- Maj+F1");
                                 when Character'Val(54) =>                               
                                    null;Text_Io.Put_Line(" -- Maj+F2");
                                 when Character'Val(56) =>                               
                                    null;Text_Io.Put_Line(" -- Maj+F3");
                                 when Character'Val(57) =>
                                    null;Text_Io.Put_Line(" -- Maj+F4");
                                 when Character'Val(126) =>
                                    null;Text_Io.Put_Line(" -- insert");
                                 when others =>
                                    null;
                              end case;                                                                    
                           when Character'Val(51) =>                       
                              null;Text_Io.Put_Line(" -- del");                    
                              Text_Io.Get_Immediate(Char);      
                           when Character'Val(52) =>                       
                              null;Text_Io.Put_Line(" -- end");                    
                              Text_Io.Get_Immediate(Char);      
                           when Character'Val(53) =>
                              Text_Io.Put_Line(" -- page up");
                              Text_Io.Get_Immediate(Char);      
                           when Character'Val(54) =>
                              Text_Io.Put_Line(" -- page down");
                              Text_Io.Get_Immediate(Char);      
                           when Character'Val(91) =>
                              Text_Io.Get_Immediate(Char);                   
                              case Char is
                                 when Character'Val(65) =>
                                    null;Text_Io.Put_Line(" -- F1");                                
                                    Quatuor_Console.Play(True);
                                 when Character'Val(66) =>
                                    null;Text_Io.Put_Line(" -- F2");
                                    Quatuor_Console.Rec(True);
                                 when Character'Val(67) =>
                                    null;Text_Io.Put_Line(" -- F3");                                
                                    Quatuor_Console.play(False);
                                 when Character'Val(68) =>
                                    null;Text_Io.Put_Line(" -- F4");
                                    Quatuor_Console.Rec(False);
                                 when Character'Val(69) =>
                                    null;Text_Io.Put_Line(" -- F5");
                                    Quatuor_Console.Reset;
                                 when others =>
                                    null;
                              end case;
                           when Character'Val(65) =>
                              null;Text_Io.Put_Line(" -- up");
                           when Character'Val(66) =>
                              null;Text_Io.Put_Line(" -- down");
                           when Character'Val(67) =>
                              null;Text_Io.Put_Line(" -- right");
                           when Character'Val(68) =>
                              null;Text_Io.Put_Line(" -- left");
                           when others =>
                              null;
                        end case;
                     when others =>
                        null;
                  end case;
               when others =>
                  Quatuor_Console.Receive(Char);
            end case;
         exception
            when Text_Io.End_Error =>
                  null;
         end;
      end loop;
   end;

Up down right et left corresponde aux flèche.

Après il te suffis de stocker les ligne saisie dans une liste ou un tableau et de rappeler la ligne correspondant au nombre de fois que l'on à appuyé sur la flèche.

Il y a d'autre outils pour saisir les séquence d'échappement.
Ce code à la mérite d'être court et simple, même si peu élégant.
__________________
Mon développement
jovalise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2012, 22h22   #3
azerty1234
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2012
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2012
Messages : 3
Points : 0
Points : 0
cool, merci!
azerty1234 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h25.


 
 
 
 
Partenaires

Hébergement Web