#1 Le 08/07/2011, à 18:50
- JPlaroche
Ncurses Ncursew C++ Pas d'accent (détail avec source )[resolu]
bonjour,
je suis développeur sur AS400 et c++ windows
j'essaye de faire sur Linux une chose tres simple un petit programme en c++ GCC (version ubuntu 11.04)
je ne peut sortir sur ecran "é" = code clavier 169
mon test
j'utilise codeblock
j'ai un raccourci mais cela est la même chose /usr/bin/xterm -geometry 132x40 -fa "Monospace" -fs 12 -lc /home/jpmf/P5250/key/bin/Release/key
je compile avec -lncurses ou -lncursew avec leurs lib respective
______________________________________________________________________________________________________________________
#include <stdlib.h>
#include <ctype.h>
#include <ncurses.h>
#include <string.h>
#include <locale.h>
#include <signal.h>
FILE * pFile;
#ifndef SIGNAL_HANDLER_H_
#define SIGNAL_HANDLER_H_
void signal_handler(int sig) {
switch(sig) {
case SIGHUP:
signal(SIGHUP, SIG_IGN);
fprintf (pFile,"SIGHUP\n"); // pour debug rtv signal
exit(EXIT_SUCCESS);
break;
default:
fprintf (pFile,"defautl %d\n",sig); // rtv autre signal ne doit jamais passer par là
}
}
#endif
using namespace std;
void CHG_TITRE(const char * _cTITRE) { printf("%c]0;%s%c", '\033', _cTITRE, '\007');}
int main()
{
WINDOW * mainwin;
int ch;
// Setup signal handling before we start
signal(SIGHUP, signal_handler); // contrôle du ALT F4 ou click sur la croix
/// dans le terminal prénom = prénom
/// test différent pour é ne fonctionne pas code clavier 169 et pour tous les caractères speciaux
/// sans setlocale 1 car une sorte de ? c
// avec setlocale M-)
//setlocale(LC_CTYPE,"fr_FR.utf8");
//setlocale(LC_CTYPE,"fr_FR");
//setlocale(LC_ALL,"");
if ( (mainwin = initscr()) == NULL ) {
fprintf(stderr, "Error initialisation ncurses.\n");
exit(EXIT_FAILURE);
}
pFile= fopen ("/home/adam/key/myfile.txt","w+");
CHG_TITRE("TITRE_CONSOLE");
cbreak();
noecho(); /* Turn off key echoing */
keypad(mainwin, TRUE); /* Enable the keypad for non-char keys */
/* Print a prompt and refresh() the screen */
mvaddstr(3, 10, "Press a key ('F1' to quit)...");
mvprintw(4, 10, "You pressed: ");
refresh();
while((ch = getch()))
{
switch(ch)
{
case KEY_F(1):
printw("Press KEY_CLOSE to exit");
exit(0);
break;
default:
// if(isprint(ch)) prinf(c,"%c,ch) si non imprimable pas de sortie ecran
mvprintw(5, 30," num teste ");
mvprintw(5, 30," num teste %d",ch);
mvprintw(6, 30," val teste %c",ch);
printw(" --- teste %4x",ch);
refresh();
break;
}
}
fclose (pFile);
return EXIT_SUCCESS;
}
__________________________________________________________________________________________________________________________
impossible de sortir le é è à etc......... voilà 4 jours de 10h 40h que je suis dessus
j'ai lu beaucoup mais je reste là sur ma fin au point que je me dis que je dois retourner développer sur windows
je ne parle pas de mes tests avec CDK qui est plein de beug mais là je peut recompiler la lib et la debeuger
pourquoi je veux faire du ncurses parce que j'ai des sources 5250 mode caractère que je peut récupérer facilement convertir
pouriez m'aidez
ps( s'abstenir commentaire du genre retourne sur windows .ou vas faire du graphique comme j'ai vus beaucoup ......)
mon env xterm
____________________________________________________________________________________________________________
ORBIT_SOCKETDIR=/tmp/orbit-xxxxxxxxxxxxxxxxx
SSH_AGENT_PID=1406
TERM=xterm
SHELL=/bin/bash
XDG_SESSION_COOKIE=fd5706bf1e04e119a63259c500000006-1310141899.770224-2077904104
WINDOWID=71303206
GNOME_KEYRING_CONTROL=/tmp/keyring-NwEKf1
GTK_MODULES=canberra-gtk-module
USER=jpmf
SSH_AUTH_SOCK=/tmp/keyring-NwEKf1/ssh
SESSION_MANAGER=local/HORUS:@/tmp/.ICE-unix/1373,unix/HORUS:/tmp/.ICE-unix/1373
USERNAME=jpmf
DEFAULTS_PATH=/usr/share/gconf/gnome.default.path
XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
DESKTOP_SESSION=gnome
PWD=/home/jpmf
GDM_KEYBOARD_LAYOUT=fr oss
GNOME_KEYRING_PID=1354
LANG=fr_FR.UTF-8
GDM_LANG=fr_FR
MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path
UBUNTU_MENUPROXY=libappmenu.so
COMPIZ_CONFIG_PROFILE=ubuntu
GDMSESSION=gnome
SHLVL=1
HOME=xxxxxxxxxxxxxxxxx
LANGUAGE=fr_FR:en
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LOGNAME=xxxxxxxxxxxxxxxx
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Ny8U2MNxag,guid=44c5500ce15a1e8a01d9257900000019
WINDOWPATH=7
DISPLAY=:0
COLORTERM=gnome-terminal
XAUTHORITY=/var/run/gdm/auth-for-jpmf-hr3UTp/database
_=/usr/bin/env
_____________________________________________________________________________________________________________
Dernière modification par JPlaroche (Le 08/07/2011, à 22:44)
depuis 2004 avec Ubuntu
depuis 1976 informaticien Mon site plein d'information pour les programmeurs http://www.ombrebleu.com
Hors ligne
#2 Le 08/07/2011, à 22:42
- JPlaroche
Re : Ncurses Ncursew C++ Pas d'accent (détail avec source )[resolu]
bon j'ai trouvé
mais vraiment pas idées de ce que cela peut coûté de pas mettre explicitement certaine chose
de linuxfr.org source
Il faut que tu compiles en rajoutant l'option -D_XOPEN_SOURCE_EXTENDED, car le support des wchar n'est pas standard, c'est une "nouveauté" de X/Open Unix.
ne pas oublier -lncursesw et libcursesw.a
UTF-8 vraiment pas une mince affaire ps(ne pas oublier d'activer la setlocale(LC_ALL,"")
merci a ceux qui on lue.
dommage ça fait plusieurs fois que pas de réponse
eh comme j'aime pas laisser une demande sans réponse .......
@bientôt
ok option de compile
g++ -pedantic-errors -pedantic -Wextra -Wall -fexceptions -fpermissive -D_XOPEN_SOURCE_EXTENDED -fexpensive-optimizations -O2 -D__RELEASE__ -D_XOPEN_SOURCE_EXTENDED -I/usr/lib -I/usr/include/ncursesw -I/home/jpmf/wx_lib -c /home/jpmf/P5250/key/main.cpp -o obj/Release/main.o
g++ -L/usr/include -L/usr/include/ncursesw -L/usr/include/cdk -L/home/jpmf/wx_lib/Kompex -o ../Release/key obj/Release/main.o -s -lncursesw -lformw -lpanelw -lmenuw -D -enable-ext-colors /usr/lib/x86_64-linux-gnu/libncursesw.a
Dernière modification par JPlaroche (Le 14/11/2012, à 22:46)
depuis 2004 avec Ubuntu
depuis 1976 informaticien Mon site plein d'information pour les programmeurs http://www.ombrebleu.com
Hors ligne
#3 Le 08/07/2011, à 23:31
- HP
Re : Ncurses Ncursew C++ Pas d'accent (détail avec source )[resolu]
Je sais pas… mais chez moi le code ne compile même pas…
J'ai essayé avec gcc et g++, dans le doute, parce que ça ressemble autant à du C qu'à du C++
La prochaine fois, si tu veux de l'aide, donne au moins un code qui compile, ou une version simplifiée permettant de mettre en exergue le souci… ça peut aider.
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#4 Le 09/07/2011, à 11:16
- JPlaroche
Re : Ncurses Ncursew C++ Pas d'accent (détail avec source )[resolu]
bonjour,
regarde ce que j'ai écris
j'essaye de faire sur Linux une chose tres simple un petit programme en c++ GCC (version ubuntu 11.04)
---------------------------------------------------------------------------------------------------------------------------------------------------------
j'ai déposé le code
il est très simple ce compile sur linux avec codeblock mais aussi avec GCC en dur il ne faut pas oublier d'avoir linké la lib lncursew et de faire comme j'ai expliqué.
pourquoi cela ne marchait pas d'autre part je veux dire que bien souvent quand il y a des changement (hélas le défaut du libre on ce casse bien la tête pour trouvé et apporté) la doc n'ai pas mise à jour
quand au C ou C++ c'est du C en vue de devenir une fois réglé les problèmes de base d C++ avec une classe pour accueillir un petit framework car CDK ne fonctionne pas, d'ailleurs je ne sais pas comment signaler cela il est très clair que le fameux CDK très connu dans ce domaine pour l'utilisation de ncurses ne fonctionne plus depuis les mise ajour de posix Xterm qui fonctionne en UTF8 d' ou ncursesw. Il y a bien sur le web une tentative de passage CDKW mais je ne sais pas si Ubuntu la mettra dans les PPA par contre il doit signaler que ce n'est plus compatible aujourd'hui. sauf si tu te fabrique ton propre terminal.......
Rappel Ncurses doit être vue comme l’écran vert d'IBM une façon de faire des applications très légère compatible Unix-Linux MS et depuis peut être un driver avec l'AS400. Une gestion d'écran ne prend que quelques Ko exemple gestion fichiers clients, j'ai encore des books de 1985 avec l’interruption INT86 qui permettait de faire un screen designer en "C" mode caractère en moins 10 mo tout compris, j'ai bien l'intention avec une vrais Classe jouer avec cela et refaire la même chose et ce même utilitaire pour servir à faire des listes PDF car le principe est le même on travaille à la ligne colonne et la maintenance sans trouve très alléger.
quand je travail sur AS400 il me faut moins de 10mn pour faire un ensemble d'écran avec SDA ceci permettant d'être lier avec une base de donnée au travers d'un programme cela s'appelle OPDP en simple partage d'accès des objets le constituant.avec une maintenance déconcertante.
voilà ce que je veux faire mais bien-sur pas avec la même ampleur.................... je ne suis pas IBM lol je suis seul sur ce projet "j'y vas tranquillement" ....
@bientôt
depuis 2004 avec Ubuntu
depuis 1976 informaticien Mon site plein d'information pour les programmeurs http://www.ombrebleu.com
Hors ligne
#5 Le 11/11/2012, à 03:58
- JPlaroche
Re : Ncurses Ncursew C++ Pas d'accent (détail avec source )[resolu]
pour que cela fonctionne parfaitement
j'ai utilisé un programme qui je le souhaite vous facilite la tache pour les contrôles de signaux
wxwidgets
console.h
/***************************************************************
* Name: CONSOLEApp.h
* Purpose: Defines Application Class
* Author: JPL
* Created: 2011-07-14
* Copyright: JPL (http://www.ombrebleu.com)
* License:
**************************************************************/
#ifndef CONSOLEAPP_H
#define CONSOLEAPP_H
#include <wx/app.h>
#include <wx/cmdline.h>
#include <wx/string.h>
class CONSOLEApp : public wxApp
{
public:
virtual bool OnInit();
// wxCmdLineParser parser(int argc,char **argv);;
};
#endif // CONSOLEAPP_H
console.cpp
/***************************************************************
* Name: CONSOLEApp.cpp
* Purpose: Code for Application Class
* Author: JPL (laroche.jeanpierre@gmail.com)
* Created: 2011-07-14
* Copyright: JPL (http://www.ombrebleu.com)
* License:
**************************************************************/
#ifdef WX_PRECOMP
#include "wx_pch.h"
#endif
#ifdef __BORLANDC__
#pragma hdrstop
#endif //__BORLANDC__
#include "CONSOLEApp.h"
#define _U(x) wxString((x),wxConvUTF8)
IMPLEMENT_APP(CONSOLEApp);
bool CONSOLEApp::OnInit()
{
/// On initialise le wxCmdLineParser avec les valeurs de la ligne de commande
wxCmdLineParser parser(argc,argv);
/// On lui indique quelles sont les commandes disponibles
/// La commande "-h" ou "--help" et sa description
parser.AddSwitch(_T('h'),_T("help"),_T("Afficher cette aide"));
/// Ensuite, une option de type "string" : "-p" ou "--path"
parser.AddOption(_T("p"),_T("path"),_T("Le chemin ou ce trouve le programme"),wxCMD_LINE_VAL_STRING);
/// Ensuite, une option de type "string" : "-n" ou "--name"
parser.AddOption(_T("n"),_T("name"),_T("Nom du Programmer à ouvrir"),wxCMD_LINE_VAL_STRING);
/// Maintenant, on demande le traitement de la ligne de commande
/// le paramètre false sert à ne pas afficher tout de suite les erreurs
bool bRes=(parser.Parse(false)==0);
/// S'il y avait des erreurs, on affiche l'aide et on sort
if (bRes==false)
{
parser.Usage();
exit (EXIT_SUCCESS);
}
/// Pour récupérer la valeur du paramètre "path" :
wxString sPath=_T("");
if (false == parser.Found(_T("p"),&sPath))
{
parser.Usage();
exit (EXIT_SUCCESS);
}
/// Pour récupérer la valeur du paramètre "name" :
wxString sName=_T("");
if (false == parser.Found(_T("n"),&sName))
{
parser.Usage();
exit (EXIT_SUCCESS);
}
wxString sCmd;
/// la constante de definition xterm -p "/home/jpmf/P5250/key/bin/Release/" -n key
/// pour tester avec code block
// /usr/bin/xterm -geometry 132x41+80+50 -fa 'Monospace' -fs 12 -bg DarkSlateGray -fg white -lc -e
sCmd = wxT("/usr/bin/xterm -geometry 132x41+80+50 -fa 'Monospace' -fs 12 -bg DarkSlateGray -fg white -lc "+ sPath + sName) ;
wxExecute(sCmd );
exit (EXIT_SUCCESS);
return true;
}
merci a ceux qui mon aidé
maitenant alt-f4 est intercepté ctrl-C et la crois de la fenêtre bien-sur dans l'exemple j’enlève exit(EXIT_SUCCESS); de sighup
Attention il faut mainteant que votre PROG ne soi pas beuguer sinon plus alt-f4
option de compile
g++ -pedantic-errors -pedantic -Wextra -Wall -fexceptions -fpermissive -D_XOPEN_SOURCE_EXTENDED -fexpensive-optimizations -O2 -D__RELEASE__ -D_XOPEN_SOURCE_EXTENDED -I/usr/lib -I/usr/include/ncursesw -I/home/jpmf/wx_lib -c /home/jpmf/P5250/key/main.cpp -o obj/Release/main.o
g++ -L/usr/include -L/usr/include/ncursesw -L/usr/include/cdk -L/home/jpmf/wx_lib/Kompex -o ../Release/key obj/Release/main.o -s -lncursesw -lformw -lpanelw -lmenuw -D -enable-ext-colors /usr/lib/x86_64-linux-gnu/libncursesw.a
Dernière modification par JPlaroche (Le 14/11/2012, à 22:48)
depuis 2004 avec Ubuntu
depuis 1976 informaticien Mon site plein d'information pour les programmeurs http://www.ombrebleu.com
Hors ligne