downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ncurses_addch> <mysqli_warning_count
[edit] Last updated: Mon, 01 Nov 2010

view this page in

XCVII. Fonctions de contrôle d'écran de terminal

Introduction

ncurses (new curses, les nouveaux curseurs) sont une émulation libre des curseurs du System V Rel 4.0 (et plus récente). Ils utilisent le format terminfo, supportent les pavés numériques, les couleurs, les colorations multiples, les caractères de formulaire et les touches de fonctions. De par la nature intéractive de cette bibliothèque, il est hors de question de l'utiliser pour écrire des applications pour le Web mais, par contre, elle peut être très intéressante pour écrire des scripts en ligne de commande.

Avertissement

Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utilisez ce module à vos risques et périls.

Ncurses est disponible sur les plates-formes suivantes :

  • AIX

  • BeOS

  • Cygwin

  • Digital Unix (aka OSF1)

  • FreeBSD

  • GNU/Linux

  • HPUX

  • IRIX

  • OS/2

  • SCO OpenServer

  • Solaris

  • SunOS

Note : Cette extension a été déplacée dans le module PECL et ne sera plus intégrée dans PHP à partir de PHP 6.0.0

Pré-requis

Vous devez disposer des bibliothèques ncurses et des fichiers d'en-têtes. Téléchargez la dernière version sur le site de ftp://ftp.gnu.org/pub/gnu/ncurses/ ou sur un miroir GNU.

Installation

Pour installer cette extension, compilez PHP en mode CGI ou CLI, avec l'option --with-ncurses[=DIR].

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Tableau 1. Options de configuration

NomPar défautModifiableHistorique
ncurses.value"42"PHP_INI_ALL 
ncurses.string"foobar"PHP_INI_ALL 
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Annexe G.

Types de ressources

Cette extension ne définit aucune ressource.

Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Codes d'erreurs

En cas d'erreur, les fonctions ncurses retournent NCURSES_ERR.

Colors

Tableau 2. Constantes de couleurs ncurses

ConstanteSignification
NCURSES_COLOR_BLACKPas de couleur
NCURSES_COLOR_WHITEblanc
NCURSES_COLOR_REDrouge - supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_GREENvert - supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_YELLOWjaune - supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_BLUEbleu - supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_CYANcyan - supporté lorsque le terminal est en mode couleurs
NCURSES_COLOR_MAGENTAmagenta - supporté lorsque le terminal est en mode couleurs

Touches

Tableau 3. Constantes de touches ncurses

ConstanteSignification
NCURSES_KEY_F0 - NCURSES_KEY_F64Touches de fonctions F1 - F64
NCURSES_KEY_DOWNflèche vers le bas
NCURSES_KEY_UPflèche vers le haut
NCURSES_KEY_LEFTflèche vers la gauche
NCURSES_KEY_RIGHTflèche vers la droite
NCURSES_KEY_HOMEtouche home (vers le haut + flèche vers la gauche)
NCURSES_KEY_BACKSPACEretour en arrière
NCURSES_KEY_DLefface une ligne
NCURSES_KEY_ILinsère une ligne
NCURSES_KEY_DCefface un caractère
NCURSES_KEY_ICinsère un caractère, ou bien passe en mode insertion
NCURSES_KEY_EICtermine le mode insertion
NCURSES_KEY_CLEARefface l'écran
NCURSES_KEY_EOSefface l'écran jusqu'en bas
NCURSES_KEY_EOLefface l'écran jusqu'à la fin de la ligne
NCURSES_KEY_SFscrolle une ligne vers le bas
NCURSES_KEY_SRscrolle une ligne vers le haut
NCURSES_KEY_NPAGEpage suivante
NCURSES_KEY_PPAGEpage précédente
NCURSES_KEY_STABplace une tabulation
NCURSES_KEY_CTABsupprime une tabulation
NCURSES_KEY_CATABsupprime toutes les tabulations
NCURSES_KEY_SRESETremise à zéro partielle
NCURSES_KEY_RESETremise à zéro totale
NCURSES_KEY_PRINTimprime
NCURSES_KEY_LLinférieur gauche (sur le pavé numérique)
NCURSES_KEY_A1supérieur gauche (sur le pavé numérique)
NCURSES_KEY_A3supérieur droit (sur le pavé numérique)
NCURSES_KEY_B2centre (sur le pavé numérique)
NCURSES_KEY_C1inférieur gauche (sur le pavé numérique)
NCURSES_KEY_C3inférieur droit (sur le pavé numérique)
NCURSES_KEY_BTABtabulation arrière
NCURSES_KEY_BEGdébut
NCURSES_KEY_CANCELannule
NCURSES_KEY_CLOSEferme
NCURSES_KEY_COMMANDcommande
NCURSES_KEY_COPYcopie
NCURSES_KEY_CREATEcrée
NCURSES_KEY_ENDfin
NCURSES_KEY_EXITquitte
NCURSES_KEY_FINDtrouve
NCURSES_KEY_HELPaide
NCURSES_KEY_MARKmarque
NCURSES_KEY_MESSAGEmessage
NCURSES_KEY_MOVEdéplace
NCURSES_KEY_NEXTsuivant
NCURSES_KEY_OPENouvre
NCURSES_KEY_OPTIONSoptions
NCURSES_KEY_PREVIOUSprécédent
NCURSES_KEY_REDOrefaire
NCURSES_KEY_REFERENCEréférence
NCURSES_KEY_REFRESHrafraîchis
NCURSES_KEY_REPLACEreplace
NCURSES_KEY_RESTARTredémarre
NCURSES_KEY_RESUMErecommence
NCURSES_KEY_SAVEsauve
NCURSES_KEY_SBEGshift et début
NCURSES_KEY_SCANCELshift et annule
NCURSES_KEY_SCOMMANDshift et commande
NCURSES_KEY_SCOPYshift et copie
NCURSES_KEY_SCREATEshift et crée
NCURSES_KEY_SDCshift et efface un caractère
NCURSES_KEY_SDLshift et efface une ligne
NCURSES_KEY_SELECTsélectionne
NCURSES_KEY_SENDshift et fin
NCURSES_KEY_SEOLshift et fin de ligne
NCURSES_KEY_SEXITshift et quitte
NCURSES_KEY_SFINDshift et trouve
NCURSES_KEY_SHELPshift et aide
NCURSES_KEY_SHOMEshift et home
NCURSES_KEY_SICshift et entrée
NCURSES_KEY_SLEFTshift et flèche vers la gauche
NCURSES_KEY_SMESSAGEshift et message
NCURSES_KEY_SMOVEshift et déplace
NCURSES_KEY_SNEXTshift et suivant
NCURSES_KEY_SOPTIONSshift et options
NCURSES_KEY_SPREVIOUSshift et précédent
NCURSES_KEY_SPRINTshift et imprime
NCURSES_KEY_SREDOshift et refait
NCURSES_KEY_SREPLACEshift et remplace
NCURSES_KEY_SRIGHTshift et flèche vers la droite
NCURSES_KEY_SRSUMEshift et recommnence
NCURSES_KEY_SSAVEshift et sauve
NCURSES_KEY_SSUSPENDshift et suspend
NCURSES_KEY_UNDOdéfait
NCURSES_KEY_MOUSEun événement souris est survenu
NCURSES_KEY_MAXvaleur maximale de clé

Souris

Tableau 4. Constantes de souris

ConstanteSignification
NCURSES_BUTTON1_RELEASED - NCURSES_BUTTON4_RELEASEDbouton (1-4) relaché
NCURSES_BUTTON1_PRESSED - NCURSES_BUTTON4_PRESSEDbouton (1-4) pressé
NCURSES_BUTTON1_CLICKED - NCURSES_BUTTON4_CLICKEDbouton (1-4) cliqué
NCURSES_BUTTON1_DOUBLE_CLICKED - NCURSES_BUTTON4_DOUBLE_CLICKEDbouton (1-4) double cliqué
NCURSES_BUTTON1_TRIPLE_CLICKED - NCURSES_BUTTON4_TRIPLE_CLICKEDbouton (1-4) triple cliqué
NCURSES_BUTTON_CTRLctrl pressé durant le clic
NCURSES_BUTTON_SHIFTshift pressé durant le clic
NCURSES_BUTTON_ALTalt pressé durant le clic
NCURSES_ALL_MOUSE_EVENTSindique tous les événements souris
NCURSES_REPORT_MOUSE_POSITIONindique la position de la souris
Table des matières
ncurses_addch -- Ajoute un caractère à la position courante et avance le curseur
ncurses_addchnstr -- Ajoute une chaîne de taille donnée à la position courante
ncurses_addchstr -- Ajoute une chaîne à la position courante
ncurses_addnstr -- Ajoute une chaîne à la position courante
ncurses_addstr -- Affiche du texte à la position courante
ncurses_assume_default_colors -- Définit la couleur 0
ncurses_attroff -- Désactive les attributs donnés
ncurses_attron -- Active les attributs suivants
ncurses_attrset -- Modifie les attributs donnés
ncurses_baudrate -- Retourne le baudrate du terminal
ncurses_beep -- Fait beeper le terminal
ncurses_bkgd -- Définit les propriétés de fond d'écran pour le terminal
ncurses_bkgdset -- Définit le fond d'écran
ncurses_border -- Dessine un bord autour de l'écran avec les caractères données
ncurses_bottom_panel --  Place un conteneur visibile en bas de la pile
ncurses_can_change_color -- Vérifie si le terminal peut changer de couleurs
ncurses_cbreak -- Change la bufferisation d'entrée
ncurses_clear -- Efface l'écran
ncurses_clrtobot --  Efface l'écran depuis la position courante jusqu'au bas de l'écran
ncurses_clrtoeol --  Efface l'écran depuis la position courante jusqu'à la fin de la ligne
ncurses_color_content --  Lit la valeur RGB d'une couleur
ncurses_color_set -- Modifie la couleur de fond et de devant
ncurses_curs_set -- Modifie l'état du curseur
ncurses_def_prog_mode -- Sauve le mode du terminal
ncurses_def_shell_mode -- Sauve le mode de terminal (shell)
ncurses_define_key -- Défini un code de clé (keycode)
ncurses_del_panel --  Retire un conteneur de la pile et l'efface (mais pas la fenêtre associée)
ncurses_delay_output -- Retarde l'affichage sur les terminaux utilisant des caractères de remplissage
ncurses_delch -- Efface le caractère courant et décale le reste de la ligne vers la gauche
ncurses_deleteln -- Efface la ligne courante, et monte l'écran d'une ligne
ncurses_delwin -- Efface une fenête ncurses
ncurses_doupdate -- Affiche tout ce qui est prêt, et rafraîchit l'écran
ncurses_echo -- Active l'écho d'entrée clavier
ncurses_echochar -- Affiche un caractère et rafraîchit l'écran
ncurses_end -- Cesse l'utilisation de ncurses et efface l'écran
ncurses_erase -- Efface l'écran du terminal
ncurses_erasechar -- Lit le caractère qui se fait effacer
ncurses_filter -- Définit LINES pour iniscr() et newterm() à 1
ncurses_flash -- Fait flasher le terminal (visual bell)
ncurses_flushinp -- Vide le buffer d'entrée du clavier
ncurses_getch -- Lit un caractère sur le clavier
ncurses_getmaxyx --  Retourne la taille d'une fenêtre
ncurses_getmouse -- Lit les événements souris
ncurses_getyx --  Retourne la position courante du curseur pour une fenêtre
ncurses_halfdelay -- Met le terminal en mode semi-retardé
ncurses_has_colors -- Vérifie que le terminal supporte les couleurs
ncurses_has_ic -- Vérifie les capacités d'insertion et d'effacement
ncurses_has_il -- Vérifie les capacités d'insertion et d'effacement
ncurses_has_key -- Vérifie la présence des touches de fonctions sur le clavier
ncurses_hide_panel --  Retire un conteneur de la pile, pour le rendre invisible
ncurses_hline -- Dessine une ligne horizontale à la position courante, en utilisant un caractère et une taille maximale
ncurses_inch -- Lit le caractère et ses attributs à la position courante
ncurses_init_color -- Configure une nouvelle valeur RGB pour une couleur
ncurses_init_pair -- Alloue une paire de couleur
ncurses_init -- Initialise ncurses
ncurses_insch -- Insère un caractère et décale le reste de la ligne vers la droite, y compris le caractère courant
ncurses_insdelln -- Insère des lignes devant la ligne courante en scrollant vers le bas (des nombres négatifs donneront un scroll vers le haut)
ncurses_insertln -- Insère une ligne et décale le reste de l'écran vers le bas
ncurses_insstr -- Insère une chaîne à la position courante, et décale le reste de la chaîne à droite
ncurses_instr -- Lit une chaîne depuis le terminal
ncurses_isendwin -- Ncurses est en mode endwin, des affichages normaux sont possibles
ncurses_keyok -- Active ou désactive un code de clé (keycode)
ncurses_keypad --  Active ou désactive le keypad
ncurses_killchar -- Retourne la ligne du caractère actuellement supprimé
ncurses_longname -- Retourne la description du terminal
ncurses_meta --  Active/désactive les informations de méta clé 8-bits
ncurses_mouse_trafo --  Transforme les coordonnées
ncurses_mouseinterval -- Configure les délais entre les clics de souris
ncurses_mousemask -- Configure les événements de souris à surveiller
ncurses_move_panel --  Déplace un conteneur pour que son coin supérieur gauche soit aux coordonnées [startx, starty]
ncurses_move -- Déplace la position d'affichage
ncurses_mvaddch -- Déplace la position courante et ajoute un caractère
ncurses_mvaddchnstr -- Déplace la position et ajoute la chaîne attribuée avec la taille donnée
ncurses_mvaddchstr -- Déplace la position et ajoute une chaîne attribuée
ncurses_mvaddnstr -- Déplace la position et ajoute une chaîne de taille donnée
ncurses_mvaddstr -- Déplace la position et ajoute une chaîne
ncurses_mvcur -- Déplace immédiatement le curseur
ncurses_mvdelch -- Déplace la position et efface le caractère, puis décale le reste de la ligne à gauche
ncurses_mvgetch -- Déplace la position et lit le caractère à la nouvelle position
ncurses_mvhline -- Choisi une nouvelle position et dessine une ligne horizontale avec le caractère donné, et de taille maximale donnée
ncurses_mvinch -- Déplace la position et lit le caractère à la nouvelle position
ncurses_mvvline -- Modifie la position et dessine une ligne verticale avec le caractère donné, de taille maximale donnée
ncurses_mvwaddstr -- Ajoute une chaîne à une nouvelle position dans la fenêtre
ncurses_napms -- Fait une pause
ncurses_new_panel --  Crée un nouveau conteneur et l'associe à une fenêtre
ncurses_newpad --  Crée un nouveau pad (fenêtre)
ncurses_newwin -- Crée une nouvelle fenêtre
ncurses_nl -- Convertit les nouvelles lignes et retours chariot en sauts de ligne
ncurses_nocbreak -- Passe le terminal en mode cooked
ncurses_noecho -- Désactive l'écho clavier
ncurses_nonl -- Ne convertit par les nouvelles lignes et retours chariot en sauts de ligne
ncurses_noqiflush -- Ne vide pas les buffers sur réception des caractères de signaux
ncurses_noraw -- Déconfigure le mode brut du terminal
ncurses_pair_content --  Retourne la valeur RGB d'une couleur
ncurses_panel_above -- Retourne le conteneur au-dessus du conteneur
ncurses_panel_below -- Retourne le conteneur sous le conteneur
ncurses_panel_window --  Retourne la fenêtre associée avec un conteneur
ncurses_pnoutrefresh --  Copie une région depuis un pad dans un écran virtuel
ncurses_prefresh --  Copie une région depuis un pad dans l'écran virtuel
ncurses_putp -- Applique l'information d'espacement à la chaîne et l'affiche
ncurses_qiflush -- Vide les buffers après détection d'un caractère de signal
ncurses_raw -- Passe le terminal en mode brut (raw)
ncurses_refresh -- Rafraîchit l'écran
ncurses_replace_panel --  Remplace la fenêtre associée à un conteneur
ncurses_reset_prog_mode --  Restaure le mode prog sauvé par def_prog_mode
ncurses_reset_shell_mode --  Restaure le mode shell, mode sauvé par def_shell_mode
ncurses_resetty -- Rétablit le terminal sauvé
ncurses_savetty -- Sauve l'état du terminal
ncurses_scr_dump -- Sauve un écran dans un fichier
ncurses_scr_init -- Initialise un écran depuis un fichier de sauvegarde
ncurses_scr_restore -- Rétablit un écran depuis un fichier de sauvegarde
ncurses_scr_set -- Configure un écran depuis un fichier de sauvegarde
ncurses_scrl -- Scrolle le contenu de la fenêtre vers le haut ou le bas, sans changer la position courante
ncurses_show_panel --  Place un conteneur invisible en haut de la pile, pour le rendre visible
ncurses_slk_attr -- Retourne l'attribut de la clé soft label courante
ncurses_slk_attroff -- Désactive l'attribut donné pour les étiquettes des function-key (fonctions clés)
ncurses_slk_attron -- Active l'attribut donné pour les étiquettes des function-key (fonctions clés)
ncurses_slk_attrset -- Définit les attributs donnés à une étiquette function-key
ncurses_slk_clear -- Efface les soft labels de l'écran
ncurses_slk_color -- Configure la couleur des clés soft label
ncurses_slk_init -- Initialise les fonctions de clés soft label
ncurses_slk_noutrefresh -- Copie toutes les clés soft label à l'écran virtuel
ncurses_slk_refresh -- Copie les clés soft label à l'écran
ncurses_slk_restore -- Rétablit les clés soft label
ncurses_slk_set --  Modifie les étiquettes de clé de fonction (function key labels)
ncurses_slk_touch -- Force l'affichage lorsque ncurses_slk_noutrefresh est utilisé
ncurses_standend -- Cesse l'utilisation de l'attribut 'standout'
ncurses_standout -- Commence l'utilisation de l'attribut 'standout'
ncurses_start_color -- Active les couleurs
ncurses_termattrs -- Retourne toutes les options supportées par le terminal, combinées ensemble par l'opérateur OR
ncurses_termname -- Retourne le nom court du terminal
ncurses_timeout -- Configure le temps d'expiration des séquences clavier spéciales
ncurses_top_panel --  Place un conteneur visible sur le haut de la pile
ncurses_typeahead -- Spécifie un autre descripteur de fichier pour la vérification à la volée des données saisies
ncurses_ungetch -- Replace un caractère dans la queue d'entrée
ncurses_ungetmouse -- Ajoute un événement souris dans la queue
ncurses_update_panels --  Rafraîchit l'écran virtuel pour prendre en compte les relations entre les conteneurs de la pile
ncurses_use_default_colors -- Assigne la couleur de terminal pour l'index -1
ncurses_use_env -- Contrôle l'utilisation des informations d'environnement concernant la taille du terminal
ncurses_use_extended_names -- Contrôle l'utilisation des noms étendus dans les descriptions terminfo
ncurses_vidattr -- Affiche la chaîne sur un terminal dans le mode d'attribut vidéo
ncurses_vline -- Dessine une ligne verticale à la position courante en utilisant un caractère donné, pour une taille donnée
ncurses_waddch --  Ajoute un caractère à la position courante, dans une fenêtre, et avance le curseur
ncurses_waddstr --  Affiche le texte à la position courante dans la fenêtre
ncurses_wattroff --  Désactive les attributs d'une fenêtre
ncurses_wattron --  Efface les attributs de la fenêtre
ncurses_wattrset --  Modifie les attributs d'une fenêtre
ncurses_wborder --  Dessine le bord d'une fenêtre avec un caractère qualifié
ncurses_wclear --  Efface la fenêtre
ncurses_wcolor_set --  Modifie les paires de couleurs de la fenêtre
ncurses_werase --  Efface le contenu de la fenêtre
ncurses_wgetch --  Lit un caractère depuis le clavier (fenêtre)
ncurses_whline --  Dessine une ligne horizontale à partir de la position courante, avec un caractère qualifié, et d'une taille maximale
ncurses_wmouse_trafo --  Transforme les coordonnées d'une fenêtre
ncurses_wmove --  Déplace la position d'affichage de la fenêtre
ncurses_wnoutrefresh --  Copie la fenêtre dans l'écran virtuel
ncurses_wrefresh -- Rafraîchit la fenêtre sur l'écran du terminal
ncurses_wstandend --  Termine le mode standout de la fenêtre
ncurses_wstandout --  Passe une fenêtre en mode standout
ncurses_wvline --  Dessine une ligne verticale dans une fenêtre, à la position courante, en utilisant un caractère qualifié, avec une taille maximale


ncurses_addch> <mysqli_warning_count
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Fonctions de contrôle d'écran de terminal
g_a at freemail dot deletethispart dot hu 02-Feb-2006 06:03
To determine screen width and height without any external (OS specific) commands, I use:

<?php
ncurses_init
();
$fullscreen = ncurses_newwin ( 0, 0, 0, 0);
ncurses_getmaxyx($fullscreen,&$a,&$b);
ncurses_end();
echo
"Width:$b\nHeight:$a\n";
?>
krzysztof dot gorzelak at gmail dot com 05-Nov-2005 02:36
Here is a small example, how to use STDIN to read keys combinations in console.

$stdin = fopen('php://stdin', 'r');
stream_set_timeout($stdin, 1);
while (1) {
  $temp="";
    while (1) {
      if(stream_select($read = array($stdin), $write = NULL, $except = NULL, 0))
        $temp .= ord(fgetc($stdin));
      else break;
    }

    // F1 : $temp == 27914949126
    // ALT+F1 : $temp = 2727914949126
    // ....
   
    usleep("50000");
}
kermodebear at kermodebear dot org 17-Jun-2004 12:27
An implementation of a scrolling selection box:

<?php
function ncurses_menu_select( $options, $values, $max_height = 7, $max_width = 20, $y = 2, $x = 2 ) {
       
// Size inside of borders
       
$height = $max_height - 2;
       
$width  = $max_width  - 2;

       
// Number of options
       
$num_options = count( $options );

       
// Trim all values to fit
       
foreach( $options as $key => $value ) {
               
$options[ $key ] = substr( $value, 0, $width );
        }

       
// Create Window
       
$menu_window = ncurses_newwin( $max_height, $max_width, $y, $x );
       
ncurses_wborder( $menu_window, 0, 0, 0, 0, 0, 0, 0, 0 );

       
// Initialize Window
       
$current = 0; // Currently selected
       
$position = 1; // Position in list
       
$topitem = 0; // Top menu item
       
for ( $a = 0; $a < min( $height, $num_options ); $a++ ) {
                if (
$a == $current ) {
                       
ncurses_wattron( $menu_window, NCURSES_A_REVERSE );
                       
ncurses_mvwaddstr( $menu_window, 1 + $a, 1, $options[ $a ] );
                       
ncurses_wattroff( $menu_window, NCURSES_A_REVERSE );
                } else {
                       
ncurses_mvwaddstr( $menu_window, 1 + $a, 1, $options[ $a ] );
                }
        }
       
ncurses_mvwaddstr( $menu_window, 1, 0, '*' );
       
ncurses_wrefresh( $menu_window );
       
// Loop until a selection is made
       
while( ! in_array( $key = ncurses_getch( $menu_window ), array( 13, 10 ) ) ) {
                if (
$key == NCURSES_KEY_UP && $current > 0 ) {
                       
$move = -1;
                } else if (
$key == NCURSES_KEY_DOWN && $current < $num_options - 1 ) {
                       
$move = 1;
                } else {
                        continue;
                }

               
$current += $move;
               
$position += $move;
               
// If we scroll off the window, redraw items.
               
if ( $position < 1 || $position > $height ) {
                        if (
$position < 1 ) {
                               
$position = 1;
                        } else {
                               
$position = $height;
                        }
                       
$topitem += $move;
                        for (
$a = 1; $a <= $height; $a++ ) {
                               
ncurses_mvwaddstr( $menu_window, $a, 1, str_repeat( ' ', $width ) );
                                if (
$a == $position ) {
                                       
ncurses_wattron( $menu_window, NCURSES_A_REVERSE );
                                       
ncurses_mvwaddstr( $menu_window, $a, 1, $options[ $topitem + $a - 1 ] );
                                       
ncurses_wattroff( $menu_window, NCURSES_A_REVERSE );
                                } else {
                                       
ncurses_mvwaddstr( $menu_window, $a, 1, $options[ $topitem + $a - 1 ] );
                                }
                        }
                } else {
// Just update changed items
                       
ncurses_wattron( $menu_window, NCURSES_A_REVERSE );
                       
ncurses_mvwaddstr( $menu_window, $position, 1, $options[ $current ] );
                       
ncurses_wattroff( $menu_window, NCURSES_A_REVERSE );
                       
ncurses_mvwaddstr( $menu_window, $position - $move, 1, $options[ $current - $move ] );
                }
               
// Update 'scroll bar dot'
               
ncurses_wborder( $menu_window, 0, 0, 0, 0, 0, 0, 0, 0 );
               
$dot_position = round ( ( $current / $num_options ) * ( $height - 1 ) );
               
ncurses_mvwaddstr( $menu_window, 1 + $dot_position, 0, '*' );

               
ncurses_wrefresh( $menu_window );
        }
        return
$values[ $current ];
}

?>
kermodebear at kermodebear dot org 16-Jun-2004 10:21
Not calling ncurses_end() can (will) cause issues with terminals. Although registering a shutdown function which includes ncurses_end() may help, sometimes things go awry and you're stuck with a terminal that is acting in strange ways.

This can be fixed! *NIX systems (FreeBSD, Linux, UNIX, et al.) usually support the 'reset' command which resets the terminal settings and allows you to get things back to normal.
kermodebear at kermodebear dot org 16-Jun-2004 10:17
Here is a function that takes an associative array, presents a menu in a new window, allows the user to make a choice using up and down arrows and the enter key, and returns the value of the menu item.

Limitations include:
No way of scrolling a long list, either horiontally or vertically;
No arguments for placement on screen, although this is easy to add;
No multiple selection;
Will produce all kinds of errors and warnings if the terminal is smaller than is necessary to create the window.

I'm very new at using the ncurses library; Comments and improvements would be greatly appreciated!

<?php
/**
 * Create a simple selection menu
 * @param array Associative array; The value will be shown on the menu, while the key will be returned when the associated value is selected.
 * @return mixed
 */
function ncurses_menu_select( $menu ) {
       
$keys = array_keys( $menu );
       
$values = array_values( $menu );

       
$height = $width = 0;
       
$height = count( $menu ) + 2;
        foreach(
$values as $value ) {
               
$width = max( $width, strlen( $value ) + 2 );
        }

       
$menu_window = ncurses_newwin( $height, $width, 5, 5 );
       
ncurses_wborder( $menu_window, 0,0, 0,0, 0,0, 0,0 );

       
$current = 0;
        for(
$a = 0; $a < count( $values ); $a++ ) {
                if (
$a == $current ) {
                       
ncurses_wattron( $menu_window, NCURSES_A_REVERSE );
                       
ncurses_mvwaddstr( $menu_window, 1 + $a, 1, $values[ $a ] );
                       
ncurses_wattroff( $menu_window, NCURSES_A_REVERSE );
                } else {
                       
ncurses_mvwaddstr( $menu_window, 1 + $a, 1, $values[ $a ] );
                }
        }
       
ncurses_wrefresh( $menu_window );

        while( !
in_array( $key = ncurses_getch( $menu_window ), array( 13, 10 ) ) ) {
                if (
$key == NCURSES_KEY_UP AND $current > 0 ) {
                       
$move = -1;
                } else if (
$key == NCURSES_KEY_DOWN and $current < count( $values ) - 1 ) {
                       
$move = 1;
                } else {
                       
$move = 0;
                }
               
ncurses_mvwaddstr( $menu_window, 1 + $current, 1, $values[ $current ] );
               
$current += $move;
               
ncurses_wattron( $menu_window, NCURSES_A_REVERSE );
               
ncurses_mvwaddstr( $menu_window, 1 + $current, 1, $values[ $current ] );
               
ncurses_wattroff( $menu_window, NCURSES_A_REVERSE );
               
ncurses_wrefresh( $menu_window );
        }
       
ncurses_delwin( $menu_window );
        return
$keys[ $current ];
}
?>

Example Use:

<?php
// Initialie ncurses
$ncurse = ncurses_init();
// A full screen window
$fullscreen = ncurses_newwin ( 0, 0, 0, 0);
// Add a pretty border
ncurses_border(0,0, 0,0, 0,0, 0,0);
// Draw everything so far
ncurses_refresh();

// Set up menu array
$menu_items = array(
       
'one'   => 'Menu Item #1',
       
'two'   => 'Menu Item #2',
       
'three' => 'Menu Item #3' );
// Display menu and return selection
$selection = ncurses_menu_select( $menu_items );

// Print selection
ncurses_mvaddstr( 1, 1, 'You selected ' . $menu_items[$selection] . ' with the value ' . $selection );

// Draw updates
ncurses_refresh( $fullscreen );
// End
ncurses_end();
?>
Habib Valanejad 24-Feb-2004 09:46
What if you want to draw a new window and after removing it, showing the pervious screen again? Unfortunately, there is no such a thing in php/ncurses as there is in original curses library (touchwin if I'm not mistaken - It has been a long time!).
However, you can do this by a simple trick! You can
dump the screen to a temp file and then restore it back
again!
Take a look at this function:

# Function: show_a_win()
# - Displays a small window and writes something in it.
# - waits for a key
# - shows the pervious screen again
function show_a_win()
{
   # Dump the current screen into a temp file:
   $tmpfile = tempnam("/tmp", "dump.");
   # Create a new window.
   $newwin = ncurses_newwin(4, 60, 10, 10);
   # Write something and then refresh it
   ncurses_mvwaddstr($newwin, 1, 1, "This is a test.");
   ncurses_wrefresh($newwin);
   # Wait for a key
   ncurses_wgetch($newwin);
   ncurses_delwin($newwin);  /* delete the window */
   /* Restore the screen the same way it was before entering
    * into the function:
    */
   ncurses_scr_restore($tmpfile);
   unlink($tmpfile);   /* Remove temp file */
}
Habib Valanejad 11-Dec-2003 02:30
Here is a function which would do the job for missing
ncurses_wclrtoeol() function:
/* wclrtoeol()
 * Erases  the  current line to the right of the cursor
*/
function wclrtoeol($win)
{
   # get current position
   ncurses_getyx($win, &$crow, &$ccol);
   # get maximum row and col for this window:
   ncurses_getmaxyx($win, &$max_row, &$max_col);
   for ($col = $ccol; $col < $max_col; $col ++){
      ncurses_wmove($win, $crow, $col);
      ncurses_waddch($win, 32);
   }
}
rainman at darkwired dot org 31-Jul-2003 04:55
This is not meant as spam to get people to use my client.

I have been working on a PHP4 IRC client with ncurses interface and I think it is a useful example of how ncurses with php could be used.
It is GPL licensed so you can just go and take a loot at it.

It can be found at http://torc.sourceforge.net or http://www.darkwired.org/projects/torc/

I hope this will help out some of you because php ncurses can be quite difficult I experienced :]

For any questions about the code you can ofcourse just mail me.
Habib Valanejad 25-Jun-2003 02:50
I had a small problem building php+ncurses support.
ncurses include files were installed in:
ncurses_installed_dir/include/ncurses
This caused problems when building php with ncurse support.
php was looking for include files in:
ncurses_installed_dir/include
However, include files were located in include/ncurses

I had to make symbolic links of files in ncurses directory so php could see them:
# cd ncurses_insalled_directory/include
# ln -s ncurses/* .
After that it worked.
Habib Valanejad 27-Mar-2003 06:13
For those of you who want to check if <ENTER> key is passed,
you have to check the key agains both NL and CR keys:

function get_str()
{
   for ($str = "";;){
      $key = ncurses_getch();
      switch ($key){
        case 10:   // newline
        case 13:   // Carrige Return
           return($str);
        default:
           $str .= chr($key);
            ncurses_refresh();
      } // switch
   } // for
} // get_str()

Hope that would help.
24-Mar-2003 07:18
In the example above, if you run resize from a C shell it will output the sizes in C shell syntax, run resize with -u to force Bourne syntax:
The $win parameter is just for future compatibility.

function ncurses_getmaxyx($win, &$y, &$x)
{
        exec("/usr/X11R6/bin/resize -u", $output);
        $cols = explode("=", $output[0]);
        $rows = explode("=", $output[1]);
        $x = intval($cols[1]);
        $y = intval($rows[1]);
}
joeldegan AT yahoo.com 15-Dec-2002 12:26
See the documentation for ncurses_border and ncurses_wrefresh for some more examples of doing windowing and dynamic sizing.. I also posted some information to the zend.com code-gallery for doing ncurses under php.
joeldegan AT yahoo.com 14-Dec-2002 03:10
I noticed a lack of a getxy() function so I wrote one.
You may need to change the path for your resize cmd.

<?
function getxy(){
   
$rez = `/usr/X11R6/bin/resize`;
   
$rez = explode("\n",$rez);
    while(list(
$key,$val)=each($rez)){
       
$a=explode("=",$val);
        if(
trim($a[0])=="COLUMNS"){ $COLUMNS = $a[1]; }
        if(
trim($a[0])=="LINES"){ $LINES = $a[1]; }
    }
//
   
$retval[0]=$COLUMNS;
   
$retval[1]=$LINES;
   return
$retval;
}

print_r(getxy());
?>
joeldegan AT yahoo.com 14-Dec-2002 02:37
This is from the examples that come with the latest release.

From:
php-4.3.0RC3/ext/ncurses/example1.php

I found this useful...

<?php
$n
=0;
ncurses_init();
if(
ncurses_has_colors()){
ncurses_start_color();
       
ncurses_init_pair(1,NCURSES_COLOR_RED,NCURSES_COLOR_BLACK);
       
ncurses_init_pair(2,NCURSES_COLOR_GREEN,NCURSES_COLOR_BLACK);
       
ncurses_init_pair(3,NCURSES_COLOR_YELLOW,NCURSES_COLOR_BLACK);
       
ncurses_init_pair(4,NCURSES_COLOR_BLUE,NCURSES_COLOR_BLACK);
       
ncurses_init_pair(5,NCURSES_COLOR_MAGENTA,NCURSES_COLOR_BLACK);
       
ncurses_init_pair(6,NCURSES_COLOR_CYAN,NCURSES_COLOR_BLACK);
       
ncurses_init_pair(7,NCURSES_COLOR_WHITE,NCURSES_COLOR_BLACK);
}
while(
1){
for (
$x=0; $x<80; $x++) {
for (
$y=0; $y<24; $y++) {
 
$n++;
 
ncurses_move($y,$x);
 
ncurses_addch($n+64);
 
ncurses_color_set($n%8);
 
ncurses_refresh();
  if(
$n>26)$n=0;
}
}
ncurses_getch();
}
?>
joeldegan AT yahoo.com 13-Dec-2002 10:56
actually *that* example does not work...
here is one that I took and trimmed down from the ncurses examples.
I will do some more and post them here..

<?
ncurses_init
();
##############################################
ncurses_noecho();

   
$large = ncurses_newwin(20, 60, 2, 10);
   
$small = ncurses_newwin(10, 30, 7, 25);
   
   
ncurses_refresh();
   
ncurses_wrefresh($large);
   
ncurses_wrefresh($small);

   
ncurses_mvwaddstr($small, 5, 5, "   Test  String   ");
   
ncurses_wrefresh($small);
   
ncurses_getch();

##############################################
ncurses_end(); // Clean up, and quit
?>

This is from PHP 4.3.0RC0 compiled with the following flags..
./configure --prefix=/wwwroot/php --with-config-file-path=/wwwroot/php --with-mysql --enable-pcntl --with-tsrm-pthreads --enable-sysvsem --enable-sysvshm --with-curl --enable-bcmath --enable-sigchild --enable-sockets --with-ncurses
nweeks at utas dot edu dot au 07-Nov-2002 04:43
With your CGI version of PHP compiled with ncurses support, console apps are amazingly easy!

For example:
whack the following into a file, chmod +x it, and run it.

#!/usr/local/bin/php -q
<?php
ncurses_init
();
ncurses_border(25,25,18,18,24,24,23,23); // Do a lovely border
ncurses_move(1,1); // Start top left(inside border)
ncurses_addstr("Welcome to NCurses");
ncurses_addstr(" with PHP!");
ncurses_refresh(); // Send buffer to screen
ncurses_end(); // Clean up, and quit
?&gt;

Youll notice the second addstr simply tacks onto the first.

 
show source | credits | sitemap | contact | advertising | mirror sites