Hello!

Inspiré(e) de prendre part à la discussion ? Ou de poser une question ou demander de l’aide ?

Alors bienvenues dans les grands sujets des forums de La Bulle : m’inscrire.

Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires

Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.

Vider le tempon clavier avec Ada
Auteur Message
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Mar 29 Mar 2016 12:02
Message Vider le tempon clavier avec Ada
Bonjour,
J'ai un problème, je voudrais sauter les séquence d'échappement dans un flux de donnée en entrée du clavier.

J'ai testé le code Rosetta input/Flush Ada qui ne fonctionne pas sur ma machine.

Je suis sur Gnu/Linux Debian avec gcc-4.9.

Merci pour votre aide.
Merci Hibou.
Bonjour d'ailleurs.
Profil
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22200
Mar 29 Mar 2016 12:52
Message Re: Vider le tempon clavier avec Ada
Emmanuel Sens a écrit : 
Bonjour,
J'ai un problème, je voudrais sauter les séquence d'échappement dans un flux de donnée en entrée du clavier.
[…]

Quelles séquences d’échappement ? Genre les commandes ANSI ?

Sauter une séquence en particulier et vider le cache, ce sont deux choses différentes. Tu veux vider le cache en pensant que c’est la meilleure manière de sauter certaines séquences ou l’inverse, tu penses que sauter certaines séquences est la meilleure manière de vider le cache ?

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Mar 29 Mar 2016 14:21
Message Re: Vider le tempon clavier avec Ada
Genre ce qui rentre lorsque je tape F1 à F12, ou les flèche ou page up down, end, begin, etc.

Toutes ces touche sont des séquence précédées du caractère 27.
C'est pour ça que je les appelle des séquence d'échappement.

Je voudrais les ignorer lors de mon Wide_Text_Io.Get_Immediate().
Profil
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22200
Mar 29 Mar 2016 14:54
Message Re: Vider le tempon clavier avec Ada
Alors ce n’est pas une vidage de tampon, c’est un filtrage.

Il faudrait pouvoir reconnaitre les séquences, et pour cela, connaitre leur format. Je crois que dans ANSI_Console, que tu connais, il y a quelques pistes pour ça.

Sous réserve que je comprends bien le problème …

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Mar 29 Mar 2016 15:08
Message Re: Vider le tempon clavier avec Ada
En fait, mon réel problème avant de vouloir ignorer ces séquence, c'est que je ne parviens pas à les faire passer à ma tache qui construit la ligne de saisie.

Soit ce code :

Source ada : 

loop

declare
Wchar : Wide_Character;
begin
Get_Immediate(WChar);
Console.Receive(Wchar);
exception

when End_Error =>

Console.Stop;
Air_Tasking.Stop;
exit;
end;

end loop;


Qui doit passer le Wide_Character à la tache console dont voici l'entrée Receive(WChar : in Wide_Character);
Dans le cas d'un Wide_Character'val(10) je mets la ligne dans un tableau d'un element de type accès à Wide_String.

Source ada : 

Put(Wide_Character'Val(13) & ((Char_Max+2) * Wide_Space) & Wide_Character'Val(13) & "# " & Line.all);           
select
when Input_Page.Last = 0 =>
accept Receive(WChar : in Wide_Character) do
if Is_Control(WChar) then
case WChar is
when Wide_Character'Val(10) =>
if Line'Length > 0 and Line'length < Char_Max then
Input_Lock.Seize;
Free(Input_Page.Buffer(Input_Page.Buffer'First));
Input_Page.Buffer(Input_Page.Last + 1) := new Wide_String ' (Line.all & WChar);
Input_Page.Last := Input_Page.Last + 1;
Free(Line);
Line := new Wide_String ' ("");
Input_Lock.Release;
New_Line;
else
Put(wide_Character'val(7));
end if;

when Wide_Character'Val(12) =>
Clear_Errno := System("clear" & Ascii.Nul);
when Wide_Character'Val(127) =>
if Line'length > 0 then
Free(Buffer);
Buffer := new Wide_String ' (Line(Line'First..Line'Last-1));
Free(Line);
Line := new Wide_String ' (Buffer.all);
else
Put(wide_Character'val(7));
end if;
when Wide_Character'Val(9) =>
if Line'Last + 4 <= Char_Max then
Free(Buffer);
Buffer := new Wide_String ' (Line.all & ((4 * Wide_Space)));
Free(Line);
Line := new Wide_String ' (Buffer.all);
else
Put(wide_Character'val(7));
end if;
when others =>
if Line'Last < Char_Max then
Free(Buffer);
Buffer := new Wide_String ' (Line.all & WChar);
Free(Line);
Line := new Wide_String ' (Buffer.all);
else
Put(wide_Character'val(7));
end if;
end case;
else
if Line'Last < Char_Max then
Free(Buffer);
Buffer := new Wide_String ' (Line.all & WChar);
Free(Line);
Line := new Wide_String ' (Buffer.all);
else
Put(wide_Character'val(7));
end if;
end if;
end Receive;

or
accept Stop;
exit;
or
accept Halt;
End_Of_Task := True;
exit;
end select;



Des que j'appuye sur une de ces touche le rogramme plante.
Profil
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22200
Mar 29 Mar 2016 15:14
Message Re: Vider le tempon clavier avec Ada
Emmanuel Sens a écrit : 
Des que j'appuye sur une de ces touche le rogramme plante.

Il plante comment ? Il ne répond plus / gèle ou il produit une opération invalide ?

En marge, il faut vraiment que je corrige ce problème de mise en page avec les balises Code trop larges …  Oops, n’a fait une bêtise

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Mer 30 Mar 2016 07:16
Message Re: Vider le tempon clavier avec Ada
Non, je répond pas à des question comme ça
Planter, le programme s'arrête. Sans sortir. bref, on pourait y passer des années.
Profil
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Mer 30 Mar 2016 08:00
Message Re: Vider le tempon clavier avec Ada
Avec des Character et des String à la place des Wide Character et Wide_String, ça marche.

Je suis vert.
Profil
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Mer 30 Mar 2016 10:20
Message Re: Vider le tempon clavier avec Ada
Alors, je ne parviens toujours pas à vider le tampon du clavier.
Par contre avec les character, j'arrive, en ignorant le caractère 27, à passer le reste de la séquence pour construire la ligne.

Mais j'aurais bien aimé utiliser des Wide.
Profil
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22200
Jeu 7 Avr 2016 01:29
Message Re: Vider le tempon clavier avec Ada
Emmanuel Sens a écrit : 
Avec des Character et des String à la place des Wide Character et Wide_String, ça marche.

Ça sent le problème d’allocation de mémoire.

Tu exécutes le programme après l’avoir compilé avec les instructions de contrôle des bornes ?

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
cron