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

XCII. Funciones de Control de Pantalla con Terminal Ncurses

Introducción

ncurses (new curses) es un sistema de emulación del paquete curses del Sistema V 4.0 (y superiores). Usa formatos terminfo, soporta pads, colores, resaltados múltiples, caracteres de formulario y asignaciones de funciones de teclado. Debido a la naturaleza interactiva de esta biblioteca, ésta será de poca utilidad para la escritura de aplicaciones Web, pero puede ser útil cuando se escriben scripts orientados al uso de PHP desde la línea de comandos.

Aviso

Esta extensión es EXPERIMENTAL. Esto significa que el comportamiento de esta extensión, los nombre de sus funciones y en definitiva TODO lo documentado sobre esta extensión, puede cambiar en una futura versión de PHP SIN AVISO. La advertencia queda hecha, y utilizar esta extensión queda bajo su propia responsabilidad.

Ncurses se encuentra disponible para las siguientes plataformas:

  • AIX

  • BeOS

  • Cygwin

  • Digital Unix (aka OSF1)

  • FreeBSD

  • GNU/Linux

  • HPUX

  • IRIX

  • OS/2

  • SCO OpenServer

  • Solaris

  • SunOS

Nota: This extension has been moved to the PECL repository and is no longer bundled with PHP as of PHP 6.0.0

Requisitos

Necesita las bibliotecas ncurses y sus archivos de cabecera. Descargue la última versión desde ftp://ftp.gnu.org/pub/gnu/ncurses/ o algún otro mirror GNU.

Instalación

Para que estas funciones trabajen, debe compilar la versión CGI o CLI de PHP con --with-ncurses[=DIR].

Configuración en tiempo de ejecución

El comportamiento de estas funciones está afectado por los valores definidos en php.ini.

Tabla 1. Opciones de configuración de ncurses

NombrePredeterminadoModificableCambios
ncurses.value"42"PHP_INI_ALL 
ncurses.string"foobar"PHP_INI_ALL 
For further details and definitions of the PHP_INI_* constants, see the Apéndice G.

Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.

Códigos de error

En caso de fallos, las funciones ncurses devuelven NCURSES_ERR.

Colores

Tabla 2. constantes de color de ncurses

constantesignificado
NCURSES_COLOR_BLACKsin color (negro)
NCURSES_COLOR_WHITEblanco
NCURSES_COLOR_REDrojo - soportado cuando la terminal se encuentra en modo de color
NCURSES_COLOR_GREENverde - soportado cuando la terminal se encuentra en modo de color
NCURSES_COLOR_YELLOWamarillo - soportado cuando la terminal se encuentra en modo de color
NCURSES_COLOR_BLUEazul - soportado cuando la terminal se encuentra en modo de color
NCURSES_COLOR_CYANcyan - soportado cuando la terminal se encuentra en modo de color
NCURSES_COLOR_MAGENTAmagenta - soportado cuando la terminal se encuentra en modo de color

Teclas

Tabla 3. constantes de teclas ncurses

constantesignificado
NCURSES_KEY_F0 - NCURSES_KEY_F64teclas de función F1 - F64
NCURSES_KEY_DOWNflecha hacia abajo
NCURSES_KEY_UPflecha hacia arriba
NCURSES_KEY_LEFTflecha hacia la izquierda
NCURSES_KEY_RIGHTflecha hacia la derecha
NCURSES_KEY_HOMEtecla home (flecha arriba+izquierda)
NCURSES_KEY_BACKSPACEbackspace
NCURSES_KEY_DLeliminar línea
NCURSES_KEY_ILinsertar línea
NCURSES_KEY_DCeliminar caracter
NCURSES_KEY_ICinsertar caracter o entrar en modo de inserción
NCURSES_KEY_EICsalir de modo de inserción de caracteres
NCURSES_KEY_CLEARlimpiar la pantalla
NCURSES_KEY_EOSlimpiar hasta el fin de la pantalla
NCURSES_KEY_EOLlimpiar hasta el fin de la línea
NCURSES_KEY_SFdesplazarse una línea hacia adelante
NCURSES_KEY_SRdesplazarse una línea hacia atrás
NCURSES_KEY_NPAGEsiguiente página
NCURSES_KEY_PPAGEpágina anterior
NCURSES_KEY_STABdefinir tab
NCURSES_KEY_CTABeliminar tab
NCURSES_KEY_CATABeliminar todos los tabs
NCURSES_KEY_SRESETreset suave (parcial)
NCURSES_KEY_RESETreset o reset fuerte
NCURSES_KEY_PRINTimprimir
NCURSES_KEY_LLizquierda inferior
NCURSES_KEY_A1izquierda superior del teclado numérico
NCURSES_KEY_A3derecha superior del teclado numérico
NCURSES_KEY_B2centro del teclado numérico
NCURSES_KEY_C1izquierda inferior del teclado numérico
NCURSES_KEY_C3derecha inferior del teclado numérico
NCURSES_KEY_BTABtab hacia atrás
NCURSES_KEY_BEGcomienzo
NCURSES_KEY_CANCELcancelar
NCURSES_KEY_CLOSEcerrar
NCURSES_KEY_COMMANDcmd (comando)
NCURSES_KEY_COPYcopiar
NCURSES_KEY_CREATEcrear
NCURSES_KEY_ENDfin
NCURSES_KEY_EXITsalida
NCURSES_KEY_FINDencontrar
NCURSES_KEY_HELPayuda
NCURSES_KEY_MARKmarca
NCURSES_KEY_MESSAGEmensaje
NCURSES_KEY_MOVEmover
NCURSES_KEY_NEXTsiguiente
NCURSES_KEY_OPENabrir
NCURSES_KEY_OPTIONSopciones
NCURSES_KEY_PREVIOUSanterior
NCURSES_KEY_REDOrehacer
NCURSES_KEY_REFERENCEref (referencia)
NCURSES_KEY_REFRESHrefrescar
NCURSES_KEY_REPLACEreemplazar
NCURSES_KEY_RESTARTreiniciar
NCURSES_KEY_RESUMEreiniciar
NCURSES_KEY_SAVEguardar
NCURSES_KEY_SBEGcomienzo usando shift
NCURSES_KEY_SCANCELcancelar usando shift
NCURSES_KEY_SCOMMANDcomando usando shift
NCURSES_KEY_SCOPYcopiar usando shift
NCURSES_KEY_SCREATEcrear usando shift
NCURSES_KEY_SDCeliminar caracter usando shift
NCURSES_KEY_SDLeliminar línea usando shift
NCURSES_KEY_SELECTseleccionar
NCURSES_KEY_SENDfinal usando shift
NCURSES_KEY_SEOLfin de línea usando shift
NCURSES_KEY_SEXITsalida usando shift
NCURSES_KEY_SFINDencontrar usando shift
NCURSES_KEY_SHELPayuda usando shift
NCURSES_KEY_SHOMEhome usando shift
NCURSES_KEY_SICentrada usando shift
NCURSES_KEY_SLEFTflecha hacia la izquierda usando shift
NCURSES_KEY_SMESSAGEmensaje usando shift
NCURSES_KEY_SMOVEmover usando shift
NCURSES_KEY_SNEXTsiguiente usando shift
NCURSES_KEY_SOPTIONSopciones usando shift
NCURSES_KEY_SPREVIOUSanterior usando shift
NCURSES_KEY_SPRINTimprimir usando shift
NCURSES_KEY_SREDOrehacer usando shift
NCURSES_KEY_SREPLACEreemplazar usando shift
NCURSES_KEY_SRIGHTflecha hacia la derecha usando shift
NCURSES_KEY_SRSUMEreiniciar usando shift
NCURSES_KEY_SSAVEguardar usando shift
NCURSES_KEY_SSUSPENDsuspender usando shift
NCURSES_KEY_UNDOdeshacer
NCURSES_KEY_MOUSEevento del mouse ha ocurrido
NCURSES_KEY_MAXvalor máximo de tecla

Mouse

Tabla 4. constantes de mouse

Constantesignificado
NCURSES_BUTTON1_RELEASED - NCURSES_BUTTON4_RELEASEDbotón (1-4) liberado
NCURSES_BUTTON1_PRESSED - NCURSES_BUTTON4_PRESSEDbotón (1-4) presionado
NCURSES_BUTTON1_CLICKED - NCURSES_BUTTON4_CLICKEDbotón (1-4) pulsado
NCURSES_BUTTON1_DOUBLE_CLICKED - NCURSES_BUTTON4_DOUBLE_CLICKEDbotón (1-4) pulsado dos veces
NCURSES_BUTTON1_TRIPLE_CLICKED - NCURSES_BUTTON4_TRIPLE_CLICKEDbotón (1-4) pulsado tres veces
NCURSES_BUTTON_CTRLctrl presionado durante el clic
NCURSES_BUTTON_SHIFTshift presionado durante el clic
NCURSES_BUTTON_ALTalt presionado durante el clic
NCURSES_ALL_MOUSE_EVENTSreportar todos los eventos del mouse
NCURSES_REPORT_MOUSE_POSITIONreportar la posición del mouse
Tabla de contenidos
ncurses_addch -- Agregar un caracter en la posición actual y avanzar el cursor
ncurses_addchnstr -- Agregar cadena con atributos y longitud especificada en la posición actual
ncurses_addchstr -- Agregar una cadena con atributos en la posición actual
ncurses_addnstr -- Agregar una cadena con la longitud especificada en la posición actual
ncurses_addstr -- Imprimir texto en la posición actual
ncurses_assume_default_colors -- Definir colores predeterminados para el color 0
ncurses_attroff -- Deshabilitar los atributos dados
ncurses_attron -- Habilitar los atributos dados
ncurses_attrset -- Establecer los atributos dados
ncurses_baudrate -- Devuelve la tasa de baudios de la terminal
ncurses_beep -- Producir un beep en la terminal
ncurses_bkgd -- Establecer la propiedad de segundo plano para la pantalla de la terminal
ncurses_bkgdset -- Controla el segundo plano de la pantalla
ncurses_border -- Dibujar un borde alrededor de la pantalla usando caracteres con atributos
ncurses_bottom_panel --  Mueve un panel visible al fondo de la pila
ncurses_can_change_color -- Chequear si es posible cambiar los colores de la terminal
ncurses_cbreak -- Cambio de búferes de entrada
ncurses_clear -- Limpiar la pantalla
ncurses_clrtobot -- Limpiar la pantalla desde la posición actual al final
ncurses_clrtoeol -- Limpiar la pantalla desde la posición actual al final de la línea
ncurses_color_content --  Obtiene el valor RGB del color
ncurses_color_set -- Establecer los colores de primer y segundo plano
ncurses_curs_set -- Establecer el estado del cursor
ncurses_def_prog_mode -- Guarda los modos de terminal (programa)
ncurses_def_shell_mode -- Guarda los modos de terminal (intérprete de comandos)
ncurses_define_key -- Definir un código de tecla
ncurses_del_panel --  Remover un panel de la pila y eliminarlo (pero no la ventana asociada)
ncurses_delay_output -- Retrasar la salida en la terminal usando caracteres de relleno
ncurses_delch -- Eliminar un caracter en la posición actual, mover el resto de la línea hacia la izquierda
ncurses_deleteln -- Eliminar una línea en la posición actual, mover el resto de la pantalla hacia arriba
ncurses_delwin -- Eliminar una ventana ncurses
ncurses_doupdate -- Escribir todas las actualizaciones preparadas sobre la terminal
ncurses_echo -- Activar la repetición de entrada del teclado
ncurses_echochar -- Salida de un caracter sencillo, incluyendo actualización
ncurses_end -- Dejar de usar ncurses, limpiar la pantalla
ncurses_erase -- Limpiar pantalla de terminal
ncurses_erasechar -- Devuelve el caracter de borrado actual
ncurses_filter -- Definir LINES para iniscr() y newterm() a 1
ncurses_flash -- Relampaguear la pantalla de terminal (campana visual)
ncurses_flushinp -- Volcar el búfer de entrada de teclado
ncurses_getch -- Leer un caracter desde el teclado
ncurses_getmaxyx -- Devuelve el tamaño de una ventana
ncurses_getmouse -- Lee un evento del mouse
ncurses_getyx --  Devuelve la posición de cursor actual para una ventana
ncurses_halfdelay -- Colocar la terminal en modo de medio retraso
ncurses_has_colors -- Chequear si la terminal tiene colores
ncurses_has_ic -- Chequear por el soporte de inserción y borrado
ncurses_has_il -- Chequea el soporte de inserción y borrado
ncurses_has_key -- Chequear por la presencia de una tecla de función en el teclado de la terminal
ncurses_hide_panel --  Remover un panel de la pila, haciéndolo invisible
ncurses_hline -- Dibujar una línea horizontal en la posición actual usando un caracter con atributos, y de máximo n caracteres de largo
ncurses_inch -- Obtener el caracter y los atributos de la posición actual
ncurses_init_color -- Establecer un nuevo valor RGB para un color
ncurses_init_pair -- Reservar una pareja de color
ncurses_init -- Inicializar ncurses
ncurses_insch -- Insertar un caracter, moviendo el resto de la línea, incluyendo el caracter en la posición actual
ncurses_insdelln -- Insertar líneas antes de la línea actual, desplazando hacia abajo (los números negativos eliminan líneas y desplazan hacia arriba)
ncurses_insertln -- Insertar una línea, mover el resto de la pantalla hacia abajo
ncurses_insstr -- Insertar cadena en la posición actual, moviendo el resto de la línea hacia la derecha
ncurses_instr -- Lee una cadena desde la pantalla de terminal
ncurses_isendwin -- Ncurses se encuentra en modo endwin, puede efectuarse salida de pantalla normal
ncurses_keyok -- Habilitar o deshabilitar un código de tecla
ncurses_keypad --  Activa o desactiva el teclado numérico
ncurses_killchar -- Devuelve el caracter de eliminación de línea actual
ncurses_longname -- Devuelve la descripción de la terminal
ncurses_meta --  Habilita/deshabilita la meta-información de 8-bits de tecla
ncurses_mouse_trafo --  Transforma coordenadas
ncurses_mouseinterval -- Establecer el tiempo de espera para clics de botón del mouse
ncurses_mousemask -- Establece opciones del mouse
ncurses_move_panel --  Mueve un panel de modo que su esquina superior izquierda se encuentre en [comienzo_x, comienzo_y]
ncurses_move -- Mover la posición de salida
ncurses_mvaddch -- Mover la posición actual y agregar un caracter
ncurses_mvaddchnstr -- Mover la posición y agregar una cadena con atributos con la longitud especificada
ncurses_mvaddchstr -- Mover la posición y agregar una cadena con atributos
ncurses_mvaddnstr -- Mover la posición y agregar una cadena con la longitud especificada
ncurses_mvaddstr -- Mover la posición y agregar una cadena
ncurses_mvcur -- Mover el cursor inmediatamente
ncurses_mvdelch -- Mover la posición y eliminar un caracter, desplazar el resto de la línea hacia la izquierda
ncurses_mvgetch -- Mover la posición y obtener el caracter en la nueva posición
ncurses_mvhline -- Establecer una nueva posición y dibujar una línea horizontal usando un caracter con atributos y una longitud máxima de n caracteres
ncurses_mvinch -- Mover la posición y obtener el caracter con atributos en la nueva posición
ncurses_mvvline -- Establecer una nueva posición y dibujar una línea vertical usando un caracter con atributos y una longitud máxima de n caracteres
ncurses_mvwaddstr -- Agregar una cadena en una nueva posición al interior de una ventana
ncurses_napms -- Dormir
ncurses_new_panel --  Crear un nuevo panel y asociarlo con una ventana
ncurses_newpad --  Crea un nuevo pad (ventana)
ncurses_newwin -- Crear una nueva ventana
ncurses_nl -- Traducir línea nueva y retorno de carro / alimentación de línea
ncurses_nocbreak -- Cambiar la terminal a modo normal (cooked)
ncurses_noecho -- Desactivar la repetición de entrada del teclado
ncurses_nonl -- No traducir línea nueva y retorno de carro / alimentación de línea
ncurses_noqiflush -- No realizar volcados en caracteres de señales
ncurses_noraw -- Salir del modo puro en la terminal
ncurses_pair_content --  Obtiene el valor RGB del color
ncurses_panel_above --  Devuelve el panel encima del panel indicado
ncurses_panel_below --  Devuelve el panel por debajo del panel indicado
ncurses_panel_window --  Devuelve la ventana asociada con el panel
ncurses_pnoutrefresh --  Copia una región desde un pad a la pantalla virtual
ncurses_prefresh --  Copia una región desde un pad a la pantalla virtual
ncurses_putp -- Aplicar la información de márgenes a la cadena e imprimirla
ncurses_qiflush -- Producir volcado en caracteres de señales
ncurses_raw -- Colocar la terminal en modo puro
ncurses_refresh -- Refrescar la pantalla
ncurses_replace_panel --  Reemplaza la ventana asociada con el panel
ncurses_reset_prog_mode --  Restablece el modo de programa guardado por def_prog_mode
ncurses_reset_shell_mode --  Restablece el modo de intérprete de comandos guardado por def_shell_mode
ncurses_resetty -- Restablece el estado guardado de la terminal
ncurses_savetty -- Guarda el estado de la terminal
ncurses_scr_dump -- Vuelca el contenido de la pantalla en un archivo
ncurses_scr_init -- Inicializar la pantalla desde un volcado en un archivo
ncurses_scr_restore -- Recuperar la pantalla desde un volcado en un archivo
ncurses_scr_set -- Heredar la pantalla de un volcado en un archivo
ncurses_scrl -- Desplazar el contenido de la ventana hacia arriba o abajo sin cambiar la posición actual
ncurses_show_panel --  Coloca un panel invisible al comienzo de la pila, haciéndola visible
ncurses_slk_attr -- Devuelve el atributo de la etiqueta suave de teclado
ncurses_slk_attroff -- Deshabilitar los atributos dados para las etiquetas suaves de teclado
ncurses_slk_attron -- Habilitar los atributos dados para las etiquetas suaves de funciones de teclado
ncurses_slk_attrset -- Definir los atributos dados para las etiquetas suaves de funciones de teclado
ncurses_slk_clear -- Limpia las etiquetas suaves de la pantalla
ncurses_slk_color -- Establece el color para las etiquetas suaves de teclado
ncurses_slk_init -- Inicializa las etiquetas suaves de funciones de teclado
ncurses_slk_noutrefresh -- Copia las etiquetas suaves de teclado a la pantalla virtual
ncurses_slk_refresh -- Copia las etiquetas suaves de teclado a la pantalla
ncurses_slk_restore -- Recupera las etiquetas suaves de teclado
ncurses_slk_set --  Establece las etiquetas de teclado
ncurses_slk_touch -- Obliga a que se produzca salida cuando se ejecute ncurses_slk_noutrefresh
ncurses_standend -- Dejar de usar el atributo 'standout'
ncurses_standout -- Comenzar a usar el atributo 'standout'
ncurses_start_color -- Comenzar a usar colores
ncurses_termattrs -- Devuelve un valor OR lógico de todas las banderas de atributos soportados por la terminal
ncurses_termname -- Devuelve el nombre (corto) de la terminal
ncurses_timeout -- Establecer el tiempo de espera para secuencias especiales de teclas
ncurses_top_panel --  Mueve un panel visible al tope de la pila
ncurses_typeahead -- Especificar un descriptor de archivo diferente para el chequeo de escritura siguiente
ncurses_ungetch -- Colocar un caracter de vuelta en la secuencia de entrada
ncurses_ungetmouse -- Coloca un evento de mouse en la cola
ncurses_update_panels --  Refresca la pantalla virtual, para reflejar las relaciones entre los paneles en la pila
ncurses_use_default_colors -- Asignar los colores predeterminados de la terminal al id de color -1
ncurses_use_env -- Controlar el uso de información del entorno sobre el tamaño de la terminal
ncurses_use_extended_names -- Controlar el uso de nombres extendidos en descripciones de información de terminal
ncurses_vidattr -- Desplegar la cadena en la terminal con el atributo de modo de video
ncurses_vline -- Dibujar una línea vertical en la posición actual usando un caracter con atributos y una longitud máxima de n caracteres
ncurses_waddch --  Agrega un caracter en la posición actual de una ventana y avanza el cursor
ncurses_waddstr --  Imprime un texto en la posición actual de una ventana
ncurses_wattroff --  Deshabilita los atributos para una ventana
ncurses_wattron --  Habilita los atributos para una ventana
ncurses_wattrset --  Establecer los atributos para una ventana
ncurses_wborder -- Dibuja un borde alrededor de la ventana usando caracteres con atributos
ncurses_wclear --  Limpia la ventana
ncurses_wcolor_set --  Establece parejas de colores en la ventana
ncurses_werase --  Eliminar los contenidos de la ventana
ncurses_wgetch --  Lee un caracter desde el teclado (en la ventana)
ncurses_whline --  Dibuja una línea horizontal en una ventana en la posición actual usando un caracter con atributos y un largo máximo de n caracteres
ncurses_wmouse_trafo --  Transforma coordenadas de ventana/stdscr
ncurses_wmove --  Mueve la posición de salida de la ventana
ncurses_wnoutrefresh --  Copia la ventana a la pantalla virtual
ncurses_wrefresh -- Refrescar la ventana en la pantalla de terminal
ncurses_wstandend --  Finaliza el modo standout para una ventana
ncurses_wstandout --  Ingresar a modo standout en una ventana
ncurses_wvline --  Dibuja una línea vertical en una ventana en la posición actual usando un caracter con atributos y una longitud máxima de n caracteres


ncurses_addch> <mysqli_warning_count
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Funciones de Control de Pantalla con Terminal Ncurses
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