PHPKonf Istanbul PHP Conference 2019 - Call for Papers

Функции Ncurses

Содержание

  • ncurses_addch — Добавить символ в текущую позицию и переместить курсор вперед
  • ncurses_addchnstr — Добавить строку атрибутов с указанной длиной в текущую позицию
  • ncurses_addchstr — Добавить строку атрибутов в текущую позицию
  • ncurses_addnstr — Добавить строку с указанной длиной в текущую позицию
  • ncurses_addstr — Выводить текст в текущей позиции
  • ncurses_assume_default_colors — Определить цвета по умолчанию для цвета 0
  • ncurses_attroff — Отключить заданные атрибуты
  • ncurses_attron — Включить заданные атрибуты
  • ncurses_attrset — Задать заданные атрибуты
  • ncurses_baudrate — Возвращает скорость передачи данных терминала
  • ncurses_beep — Указать терминалу издать звуковой сигнал
  • ncurses_bkgd — Установить свойства фона для экрана терминала
  • ncurses_bkgdset — Управление фоном экрана
  • ncurses_border — Нарисовать границу вокруг экрана с помощью атрибутов
  • ncurses_bottom_panel — Перемещает видимую панель в нижнюю часть стека
  • ncurses_can_change_color — Проверяет, можно ли изменить определения цветов терминала
  • ncurses_cbreak — Выключить буферизацию ввода
  • ncurses_clear — Очистить экран
  • ncurses_clrtobot — Очистить экран с текущей позиции до нижней
  • ncurses_clrtoeol — Очистить экран от текущей позиции до конца строки
  • ncurses_color_content — Извлекает компоненты RGB цвета
  • ncurses_color_set — Set active foreground and background colors
  • ncurses_curs_set — Set cursor state
  • ncurses_def_prog_mode — Сохраняет режим терминалов (программы)
  • ncurses_def_shell_mode — Saves terminals (shell) mode
  • ncurses_define_key — Определить код клавиши
  • ncurses_del_panel — Убрать панель из стека и удалить ее (но не соответствующее окно)
  • ncurses_delay_output — Сделать задержку вывода на терминале с использованием отступов
  • ncurses_delch — Delete character at current position, move rest of line left
  • ncurses_deleteln — Delete line at current position, move rest of screen up
  • ncurses_delwin — Удалить окно ncurses
  • ncurses_doupdate — Write all prepared refreshes to terminal
  • ncurses_echo — Activate keyboard input echo
  • ncurses_echochar — Single character output including refresh
  • ncurses_end — Прекратить использование ncurses и очистить экран
  • ncurses_erase — Erase terminal screen
  • ncurses_erasechar — Возвращает текущий символ стирания
  • ncurses_filter — Установить LINES для iniscr() и newterm() на значение 1
  • ncurses_flash — Flash terminal screen (visual bell)
  • ncurses_flushinp — Flush keyboard input buffer
  • ncurses_getch — Read a character from keyboard
  • ncurses_getmaxyx — Returns the size of a window
  • ncurses_getmouse — Reads mouse event
  • ncurses_getyx — Возвращает текущую позицию курсора для окна
  • ncurses_halfdelay — Put terminal into halfdelay mode
  • ncurses_has_colors — Checks if terminal has color capabilities
  • ncurses_has_ic — Check for insert- and delete-capabilities
  • ncurses_has_il — Check for line insert- and delete-capabilities
  • ncurses_has_key — Check for presence of a function key on terminal keyboard
  • ncurses_hide_panel — Remove panel from the stack, making it invisible
  • ncurses_hline — Рисует горизонтальную линию в окне в текущей позиции с использованием атрибута-символа и определенного максимального количества символов
  • ncurses_inch — Получить символ и атрибут в текущей позиции
  • ncurses_init_color — Define a terminal color
  • ncurses_init_pair — Define a color pair
  • ncurses_init — Initialize ncurses
  • ncurses_insch — Insert character moving rest of line including character at current position
  • ncurses_insdelln — Insert lines before current line scrolling down (negative numbers delete and scroll up)
  • ncurses_insertln — Insert a line, move rest of screen down
  • ncurses_insstr — Insert string at current position, moving rest of line right
  • ncurses_instr — Reads string from terminal screen
  • ncurses_isendwin — Ncurses is in endwin mode, normal screen output may be performed
  • ncurses_keyok — Enable or disable a keycode
  • ncurses_keypad — Turns keypad on or off
  • ncurses_killchar — Returns current line kill character
  • ncurses_longname — Returns terminals description
  • ncurses_meta — Enables/Disable 8-bit meta key information
  • ncurses_mouse_trafo — Преобразует координаты
  • ncurses_mouseinterval — Set timeout for mouse button clicks
  • ncurses_mousemask — Sets mouse options
  • ncurses_move_panel — Moves a panel so that its upper-left corner is at [startx, starty]
  • ncurses_move — Переместить выходную позицию
  • ncurses_mvaddch — Move current position and add character
  • ncurses_mvaddchnstr — Переместить позицию и добавить строку-атрибут с указанной длиной
  • ncurses_mvaddchstr — Move position and add attributed string
  • ncurses_mvaddnstr — Move position and add string with specified length
  • ncurses_mvaddstr — Переместить позицию и добавить строку
  • ncurses_mvcur — Немедленно переместить курсор
  • ncurses_mvdelch — Move position and delete character, shift rest of line left
  • ncurses_mvgetch — Переместить позицию и получить символа в новой позиции
  • ncurses_mvhline — Set new position and draw a horizontal line using an attributed character and max. n characters long
  • ncurses_mvinch — Переместить позицию и получить символ-атрибут в новой позиции
  • ncurses_mvvline — Установить новую позицию и отрисовать вертикальную линию с использованием атрибута и максимального количества символов
  • ncurses_mvwaddstr — Добавить строку в новую позицию окна
  • ncurses_napms — Sleep
  • ncurses_new_panel — Создать новую панель и связать ее с окном
  • ncurses_newpad — Creates a new pad (window)
  • ncurses_newwin — Создать новое окно
  • ncurses_nl — Перевод новой строки и возврата каретки/перевода строки
  • ncurses_nocbreak — Switch terminal to cooked mode
  • ncurses_noecho — Switch off keyboard input echo
  • ncurses_nonl — Do not translate newline and carriage return / line feed
  • ncurses_noqiflush — Do not flush on signal characters
  • ncurses_noraw — Switch terminal out of raw mode
  • ncurses_pair_content — Retrieves foreground and background colors of a color pair
  • ncurses_panel_above — Возвращает панель над панелью
  • ncurses_panel_below — Возвращает панель под панелью
  • ncurses_panel_window — Возвращает окно, связанное с панелью
  • ncurses_pnoutrefresh — Copies a region from a pad into the virtual screen
  • ncurses_prefresh — Copies a region from a pad into the virtual screen
  • ncurses_putp — Apply padding information to the string and output it
  • ncurses_qiflush — Flush on signal characters
  • ncurses_raw — Switch terminal into raw mode
  • ncurses_refresh — Обновить экран
  • ncurses_replace_panel — Replaces the window associated with panel
  • ncurses_reset_prog_mode — Resets the prog mode saved by def_prog_mode
  • ncurses_reset_shell_mode — Resets the shell mode saved by def_shell_mode
  • ncurses_resetty — Restores saved terminal state
  • ncurses_savetty — Saves terminal state
  • ncurses_scr_dump — Dump screen content to file
  • ncurses_scr_init — Initialize screen from file dump
  • ncurses_scr_restore — Восстановить экран из файла дампа
  • ncurses_scr_set — Наследовать экран из файла дампа
  • ncurses_scrl — Прокрутить содержимого окна вверх или вниз без изменения текущего положения
  • ncurses_show_panel — Помещает невидимую панель поверх стека, делая ее видимой
  • ncurses_slk_attr — Returns current soft label key attribute
  • ncurses_slk_attroff — Turn off the given attributes for soft function-key labels
  • ncurses_slk_attron — Turn on the given attributes for soft function-key labels
  • ncurses_slk_attrset — Set given attributes for soft function-key labels
  • ncurses_slk_clear — Clears soft labels from screen
  • ncurses_slk_color — Sets color for soft label keys
  • ncurses_slk_init — Initializes soft label key functions
  • ncurses_slk_noutrefresh — Copies soft label keys to virtual screen
  • ncurses_slk_refresh — Copies soft label keys to screen
  • ncurses_slk_restore — Restores soft label keys
  • ncurses_slk_set — Sets function key labels
  • ncurses_slk_touch — Forces output when ncurses_slk_noutrefresh is performed
  • ncurses_standend — Остановить использование атрибута 'standout'
  • ncurses_standout — Начать использование атрибута 'standout'
  • ncurses_start_color — Initializes color functionality
  • ncurses_termattrs — Возвращает логическое ИЛИ всех флагов атрибутов, поддерживаемых терминалом
  • ncurses_termname — Returns terminals (short)-name
  • ncurses_timeout — Set timeout for special key sequences
  • ncurses_top_panel — Перемещает видимую панель в верхнюю часть стека
  • ncurses_typeahead — Указать другой файловый дескриптор для проверки типа
  • ncurses_ungetch — Поставить символ обратно во входной поток
  • ncurses_ungetmouse — Pushes mouse event to queue
  • ncurses_update_panels — Обновляет виртуальной экран для отображения связей между панелями в стеке
  • ncurses_use_default_colors — Назначить цвета терминала по умолчанию на идентификатор цвет -1
  • ncurses_use_env — Управляет использованием информации окружения о размере терминала
  • ncurses_use_extended_names — Управляет использованием расширенных имен в описаниях terminfo
  • ncurses_vidattr — Отобразить строку в терминале в режиме атрибута видео
  • ncurses_vline — Отрисовывает вертикальную линию в текущей позиции, используя символ-атрибут и макс. количество символов
  • ncurses_waddch — Добавляет символ в текущую позицию в окне и перемещает вперед курсор
  • ncurses_waddstr — Выводит текст в текущей позиции в окне
  • ncurses_wattroff — Выключить атрибуты для окна
  • ncurses_wattron — Включить атрибутов для окна
  • ncurses_wattrset — Установить атрибуты для окна
  • ncurses_wborder — Рисует границу вокруг окна с помощью символов-атрубитов
  • ncurses_wclear — Очищает окно
  • ncurses_wcolor_set — Устанавливает цветовые пары окон
  • ncurses_werase — Стереть содержимое окна
  • ncurses_wgetch — Читает символ с клавиатуры (окна)
  • ncurses_whline — Рисует горизонтальную линию в окне в текущей позиции с использованием атрибута-символа и определенного максимального количества символов
  • ncurses_wmouse_trafo — Преобразует координаты окна/stdscr
  • ncurses_wmove — Перемещает позицию вывода окна
  • ncurses_wnoutrefresh — Копирует окно на виртуальный экран
  • ncurses_wrefresh — Обновить окно на экране терминала
  • ncurses_wstandend — End standout mode for a window
  • ncurses_wstandout — Enter standout mode for a window
  • ncurses_wvline — Рисует вертикальную линию в окне в текущей позиции с использованием атрибута-символа и определенного максимального количества символов
add a note add a note

User Contributed Notes 16 notes

up
3
kermodebear at kermodebear dot org
14 years ago
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.
up
2
Anonymous
15 years ago
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]);
}
up
1
krzysztof dot gorzelak at gmail dot com
13 years ago
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");
}
up
1
kermodebear at kermodebear dot org
14 years ago
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();
?>
up
1
Habib Valanejad
14 years ago
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 */
}
up
1
Habib Valanejad
15 years ago
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);
   }
}
up
1
rainman at darkwired dot org
15 years ago
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.
up
1
Habib Valanejad
15 years ago
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.
up
1
joeldegan AT yahoo.com
15 years ago
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.
up
1
joeldegan AT yahoo.com
15 years ago
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());
?>
up
1
joeldegan AT yahoo.com
16 years ago
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();
}
?>
up
1
nweeks at utas dot edu dot au
16 years ago
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;

You'll notice the second addstr simply tacks onto the first.
up
0
g_a at freemail dot deletethispart dot hu
12 years ago
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";
?>
up
0
kermodebear at kermodebear dot org
14 years ago
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 ];
}

?>
up
0
Habib Valanejad
15 years ago
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.
up
0
joeldegan AT yahoo.com
16 years ago
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
To Top