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
zen
Modératrice
Avatar de l’utilisateur
Emmanuel Sens a écrit : 
Bonjour Zen.

Coucou ! Salut!
Profil
Beau Parleur
Avatar de l’utilisateur
Bonjour.

Je me disais, avec le vent, que tu viendrais jusqu'ici.
Merci pour la visite... Bravo !
Profil
Beau Parleur
Avatar de l’utilisateur
Bonjour, je reprend cette page parce qu'il me manque le caractère € dans mon programme.

Impossible en effet de le saisir. Apparemment une espace est insérée à la place (mais rien de moins certain)

Je compile avec l'option -gnatW8 mon système et en en_En.UTF-8.
Les caractère accentués sont bien traités (je suis gentil).

Enigmatique pour moi.

Merci pour votre réponse.
Profil
Administrateur
Avatar de l’utilisateur
Peux‑tu essayer avec -gnatW ? As‑tu vérifié qu’un BOM UTF‑8 est bien présent au début du fichier source ?
Profil
Beau Parleur
Avatar de l’utilisateur
Bonjour Hibou,

J'ai essayé -gnatW, c'est un switch invalide.

Et je n'ai pas encore de fichier, je saisie simplement le caractère avec Wide_Text_Io.Get_Immediate, sur l'entrée standard.


Par contre j'ai fait une erreur je suis en_US.UTF-8 en fait.
Profil
Beau Parleur
Avatar de l’utilisateur
Bonjour ou Re- bonjour...

J'utilise Ansi_Console.
Donc j'ai transformé ce paquetage pour qu'il traite des Wide_String avec des Wide_Character.

J'affiche à présent le caractère €.

Je ne sais pas si j'ai bien fait.

En tout cas j'ai encore un nouveau problème du coup ;
A chaque rafraîchissement de l'écran, le curseur s'affiche un peu partout à l'ecran, et a lourdement ralentie le programme.

J'ai du faire une bêtise.

Bref je cherche encore des solutions.
Profil
Administrateur
Avatar de l’utilisateur
Emmanuel Sens a écrit : 
[…]

Par contre j'ai fait une erreur je suis en_US.UTF-8 en fait.

Ça, c’est la langue des messages, n’en tiens pas compte. Ce qu’il faut vérifier, c’est la présence du BOM UTF‑8. La variable d’environnement LC_ALL, ne force pas l’encodage pour les éditeurs de textes, qui peuvent enregistrer avec un autre encodage et avec ou sans BOM, et c’est pour cela qu’il faut vérifier.

Quel éditeur de texte utilises‑tu ?
Profil
Administrateur
Avatar de l’utilisateur
Emmanuel Sens a écrit : 
Bonjour ou Re- bonjour...

J'utilise Ansi_Console.
Donc j'ai transformé ce paquetage pour qu'il traite des Wide_String avec des Wide_Character.

[…]

Ce paquet est antérieur à Ada 2012.

Je le réviserai un jour, mais je ne promet aucune date. Je te préviendrai ici, si un jour prochain c’est fait.
Profil
Beau Parleur
Avatar de l’utilisateur
Je suis pas dans un éditeur, je suis dans un programme avec Ada.

J'ai trouvé le procédure qui alourdi le système.

C'est ma procédure Draw_Window, je j'ai retapé 2 fois.
1 fois pour que je puisse spécifier la taille d'écran voulue.
1 fois pour gérer les Wide_String au lieu des String.

J'ai viré le code de Draw_Window, ça affiche impécable, mais je n'ai plus les fenêtres.

Donc ma procédure Draw Window à présent c'est :

Source ada : 

procedure Draw_Window (W : in Window_Type)
is
type Frame_Component_Enum is (
Top_Left_Corner,
Top_Right_Corner,
Bottom_Right_Corner,
Bottom_Left_Corner,
Horizontal_Border,
Vertical_Border
);
Frame_Component : constant
array (Frame_Type_Enum, Frame_Component_Enum) of Wide_Character := (
-- Double_Line_Frame => (
-- Top_Left_Corner => Character'Val(201),
-- Top_Right_Corner => Character'Val(187),
-- Bottom_Right_Corner => Character'Val(188),
-- Bottom_Left_Corner => Character'Val(200),
-- Horizontal_Border => Character'Val(205),
-- Vertical_Border => Character'Val(186)),
-- Single_Line_Frame => (
-- Top_Left_Corner => Character'Val(218),
-- Top_Right_Corner => Character'Val(191),
-- Bottom_Right_Corner => Character'Val(217),
-- Bottom_Left_Corner => Character'Val(192),
-- Horizontal_Border => Character'Val(196),
-- Vertical_Border => Character'Val(179)));
Double_Line_Frame => (
Top_Left_Corner => Wide_Character'Val(43),
Top_Right_Corner => Wide_Character'Val(43),
Bottom_Right_Corner => Wide_Character'Val(43),
Bottom_Left_Corner => Wide_Character'Val(43),
Horizontal_Border => Wide_Character'Val(45),
Vertical_Border => Wide_Character'Val(124)),
Single_Line_Frame => (
Top_Left_Corner => Wide_Character'Val(43),
Top_Right_Corner => Wide_Character'Val(43),
Bottom_Right_Corner => Wide_Character'Val(43),
Bottom_Left_Corner => Wide_Character'Val(43),
Horizontal_Border => Wide_Character'Val(45),
Vertical_Border => Wide_Character'Val(124)));

Client_Background : constant Wide_Character := ' ';
Close_Box_Symbol : constant Wide_Character := 'X';
-- Pourrait être aussi Character'Val(254)
begin
if not Fit_In_Screen (W.L, W.C, W.H, W.W) then raise Metric_Error;
end if;

if W.W < 5 then raise Metric_Error;
end if;

if W.H < 2 then raise Metric_Error;
end if;

Set_Text_Color (W.Frame_Color);

-- Bottom side
Draw_Buffer (W.C) :=
Frame_Component (W.Frame_Type, Bottom_Left_Corner);
for i in 2 .. W.W - 1 loop
Draw_Buffer ((W.C - 1) + i) :=
Frame_Component (W.Frame_Type, Horizontal_Border);
end loop;
Draw_Buffer ((W.C - 1) + W.W) :=
Frame_Component (W.Frame_Type, Bottom_Right_Corner);
Move_Cursor_To ((W.L - 1) + W.H, W.C);
Put (Draw_Buffer (W.C..(W.C - 1) + W.W));

-- Top side
Draw_Buffer (W.C) :=
Frame_Component (W.Frame_Type, Top_Left_Corner);
-- Draw_Buffer ((W.C - 1) + W.W - 3) := '[';
-- Draw_Buffer ((W.C - 1) + W.W - 2) := 'X'; -- Character'Val(254);
-- Draw_Buffer ((W.C - 1) + W.W - 1) := ']';
-- Draw_Buffer ((W.C - 1) + W.W) :=
-- Frame_Component (W.Frame_Type, Top_Right_Corner);
Move_Cursor_To (W.L, W.C);
Put (Draw_Buffer (W.C..(W.C - 1) + W.W));

-- Middle
Draw_Buffer (W.C) :=
Frame_Component (W.Frame_Type, Vertical_Border);
for i in 2 .. W.W - 1 loop
Draw_Buffer ((W.C - 1) + i) := Client_Background;
end loop;
Draw_Buffer ((W.C - 1) + W.W) :=
Frame_Component (W.Frame_Type, Vertical_Border);
for i in 2..W.H - 1 loop
Move_Cursor_To ((W.L - 1) + i, W.C);
Put (Draw_Buffer (W.C..(W.C - 1) + W.W));
end loop;
end;
Profil
Beau Parleur
Avatar de l’utilisateur
Zut, je ne parviens pas à écrire un simple fichier avec un € dedans.

Si je crée un fichier avec un € dedans après lorsque je lis le fichier dans mon shell avec la commande "cat" j'ai : ["20AC"].

Même si je met un BOM_8 avant.
Profil