Règles du forum

Le langage Ada uniquement, pas les compilateurs. Les questions de sémantique et de langage et les questions techniques liées à une application en particulier, son deux choses différentes. Si nécessaire, un forum sur GNAT et les autres compilateurs, tel JanusAda, sera ouvert.

Auteur Message
Beau Parleur
Avatar de l’utilisateur
Bonjour,

Je voudrais écrire un nouveau programme (dans la suite des précédents).

Pour ce nouveau pprogramme je voudrais utiliser ANSI_Console.

Mais avant je dois dire que j'ai un gros problème pour écrire quelque programme que ce soit depuis une semaine.

Pour faire dans le concret, je veux écrire une nouvelle interface utilisateur pour GNU/Linux (en premier lieu) dans un terminal texte pour donner à l'utilisateur toutes les informations disponibles sur un ordinateur selon les besoins de l'utilisateur.

Voici mon code source pour le moment, dans lequel je me heurte à la condition et au processus de terminaison du programme qui reste une fonctionnalité primordiale et une préoccupation continue pour moi ; Et à l'utilisation de Get_Key, fonction qui est non bloquante.

Source ada : 

with Ansi_Console;                      use Ansi_Console;

procedure Gnasterm is

generic

Lines_Max : Short_Integer := 24;
Columns_Max : Short_Integer := 80;
package Term is

task Terminal is
entry Receive (Keystroke : in Keystroke_Input_Type);
entry Halt;
end Terminal;

end Term;

package body Term is

task body Terminal is
begin
loop
select
accept Receive (Keystroke : in Keystroke_Input_Type) do
null;
end Receive;
or
accept Halt;
exit;
end select;
end loop;
end Terminal;

end Term;


package Gnasterminal is new Term;

Keystroke : Keystroke_Input_Type;

begin
loop
Get_Key(Keystroke);
Gnasterminal.Terminal.Receive(Keystroke);
end loop;
end Gnasterm;


Mais dans ce cas j'envoye sans cesse un Keystoke indefinit.
Et je ne sais pas comment arrêter le processus.

Comment procederiez vous ?
S'il vous plaît !

Merci.
Profil
Administrateur
Avatar de l’utilisateur
Il faut réécrire une autre fonction Get_Key, il n’y a pas d’autre possibilité. Je repasserai plus tard pour en poster une. Mais tu peux aussi essayer, avec cette piste : Get_Key utilise Get ; il y en a plusieurs, qui sont des renommages de fonctions du paquet Ada.Text_IO. Les Get non‑bloquants sont des renommages de Ada.Text_IO.Get_Immediate.

Je n’ai pas le temps tout de suite, mais je pourrai le faire plus tard.
Profil
Beau Parleur
Avatar de l’utilisateur
c'est justement le comporetement non blockant de ton get_key qui me perturbe alors qu'avant j'avais l'esprit inverse. C'est bizarre. Ding même.

du coup je crois que je sais plus programmer j'ai besoin d'un redressement sémantique sur la prog je crois.
Profil