From 863f5111f043977ea49d61b9305e516e7ad7b7c9 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Wed, 5 Nov 2008 23:59:05 +0000 Subject: [PATCH] Text: You can now type long lines (250car). git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@327 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- boutons.c | 11 +---------- graph.c | 2 +- moteur.c | 2 +- readline.c | 32 ++++++++++++++++++++++++-------- readline.h | 18 ++++++++++++++---- 5 files changed, 41 insertions(+), 24 deletions(-) diff --git a/boutons.c b/boutons.c index 4872bbba..3acd80a6 100644 --- a/boutons.c +++ b/boutons.c @@ -5905,15 +5905,6 @@ void Bouton_Texte() { Touche=0; Effacer_curseur(); - /* - if (Position_curseur<(NB_FONTES-1)) - Position_curseur=(NB_FONTES-1); - else - { - Position_curseur+=NB_FONTES; - if (Position_curseur+Debut_liste >= (Fonte_nombre-1)) - Position_curseur = Fonte_nombre-1-Debut_liste; - }*/ Position_curseur=(Fonte_nombre-1)-Debut_liste; if (Position_curseur>(NB_FONTES-1)) { @@ -5931,7 +5922,7 @@ void Bouton_Texte() { case 1: // Texte saisi Effacer_curseur(); - Readline(43,20,Chaine,30,0); + Readline_ex(43,20,Chaine,30,250,0); A_previsionner=1; break; diff --git a/graph.c b/graph.c index 5168839c..dbf58bab 100644 --- a/graph.c +++ b/graph.c @@ -1542,7 +1542,7 @@ void Print_dans_fenetre_limite(short X,short Y,char * Chaine,byte Taille,byte Co { char Chaine_affichee[256]; strncpy(Chaine_affichee, Chaine, Taille); - Chaine_affichee[255]='\0'; + Chaine_affichee[Taille]='\0'; if (strlen(Chaine_affichee) > Taille) { diff --git a/moteur.c b/moteur.c index 7f27cd2d..a73a3b57 100644 --- a/moteur.c +++ b/moteur.c @@ -1320,7 +1320,7 @@ void Fenetre_Dessiner_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caract void Fenetre_Contenu_bouton_saisie(struct Fenetre_Bouton_special * Enreg, char * Contenu) { - Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+2,Contenu,CM_Noir,CM_Clair); + Print_dans_fenetre_limite(Enreg->Pos_X+2,Enreg->Pos_Y+2,Contenu,Enreg->Largeur/8,CM_Noir,CM_Clair); } //------------ Effacer le contenu (caption) d'une zone de saisie ------------ diff --git a/readline.c b/readline.c index 7ea57030..c2ccb103 100644 --- a/readline.c +++ b/readline.c @@ -37,6 +37,7 @@ #include "const.h" #include "linux.h" #include "sdlscreen.h" +#include "readline.h" #define COULEUR_TEXTE CM_Noir #define COULEUR_FOND CM_Clair @@ -99,7 +100,6 @@ void Rafficher_toute_la_chaine(word Pos_X,word Pos_Y,char * Chaine,byte Position Print_char_dans_fenetre(Pos_X+(Position<<3),Pos_Y,Chaine[Position],COULEUR_TEXTE_CURSEUR,COULEUR_FOND_CURSEUR); } - //**************************************************************************** //* Enhanced super scanf deluxe pro plus giga mieux :-) * //**************************************************************************** @@ -111,6 +111,28 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_affichee,byte Type // Type_saisie : 0=Chaîne, 1=Nombre, 2=Nom de fichier // Sortie: // 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return) +{ + byte Taille_maxi; + // Grosse astuce pour les noms de fichiers: La taille affichée est différente + // de la taille maximum gérée. + if (Type_saisie == 2) + Taille_maxi = 255; + else + Taille_maxi = Taille_affichee; + return Readline_ex(Pos_X,Pos_Y,Chaine,Taille_affichee,Taille_maxi,Type_saisie); +} + +//**************************************************************************** +//* Enhanced super scanf deluxe pro plus giga mieux :-) * +//**************************************************************************** +byte Readline_ex(word Pos_X,word Pos_Y,char * Chaine,byte Taille_affichee,byte Taille_maxi, byte Type_saisie) +// Paramètres: +// Pos_X, Pos_Y : Coordonnées de la saisie dans la fenêtre +// Chaine : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale) +// Taille_maxi : Nombre de caractères logeant dans la zone de saisie +// Type_saisie : 0=Chaîne, 1=Nombre, 2=Nom de fichier +// Sortie: +// 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return) { char Chaine_initiale[256]; char Chaine_affichee[256]; @@ -118,13 +140,7 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_affichee,byte Type byte Taille; word Touche_lue=0; byte Touche_autorisee; - byte Taille_maxi; - // Grosse astuce pour les noms de fichiers: La taille affichée est différente - // de la taille maximum gérée. - if (Type_saisie == 2) - Taille_maxi = 255; - else - Taille_maxi = Taille_affichee; + byte Offset=0; // Indice du premier caractère affiché diff --git a/readline.h b/readline.h index 2cecdbcd..bc5781ad 100644 --- a/readline.h +++ b/readline.h @@ -21,9 +21,19 @@ byte Readline(word Pos_X,word Pos_Y,char * Chaine,byte Taille_affichee,byte Type_saisie); // Paramètres: -// Pos_X, Pos_Y : Coordonnées de la saisie dans la fenêtre -// Chaine : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale) -// Taille_maxi : Nombre de caractères logeant dans la zone de saisie -// Type_saisie : 0=Chaîne, 1=Nombre, 2=Nom de fichier (255 caractères réels) +// Pos_X, Pos_Y : Coordonnées de la saisie dans la fenêtre +// Chaine : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale) +// Taille_affichee : Nombre de caractères logeant dans la zone de saisie +// Type_saisie : 0=Chaîne, 1=Nombre, 2=Nom de fichier (255 caractères réels) +// Sortie: +// 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return) + +byte Readline_ex(word Pos_X,word Pos_Y,char * Chaine,byte Taille_affichee,byte Taille_maxi, byte Type_saisie); +// Paramètres: +// Pos_X, Pos_Y : Coordonnées de la saisie dans la fenêtre +// Chaine : Chaîne recevant la saisie (et contenant éventuellement une valeur initiale) +// Taille_affichee : Nombre de caractères logeant dans la zone de saisie +// Taille_maxi : Nombre de caractères logeant dans la zone de saisie +// Type_saisie : 0=Chaîne, 1=Nombre, 2=Nom de fichier (255 caractères réels) // Sortie: // 0: Sortie par annulation (Esc.) / 1: sortie par acceptation (Return)