ncurses

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

ncurses

Непрочитанное сообщение Olej » 25 июл 2016, 23:47

Здесь где-то на соседних форумах возник разговор: канонический режим ввода/вывода терминала, неканонический режим...
Это знать бы надо, ... Но!

... есть такая библиотека ncurses - это классика UNIX начиная с самых древних BSD, на ней сделано множество широкоизвестных используемых проектов Linux. ncurses и переводит терминал в некононический режим, и обеспечивает прямое позиционирование курсора, и посимвольный ввод/вывод ... и мн. других вещей. И когда окажется необходимым посимвольный ввод, то (хорошо понимая режимы ввода/вывода и termios) - лучше использовать ncurses.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: ncurses

Непрочитанное сообщение Olej » 25 июл 2016, 23:53

Olej писал(а): ... есть такая библиотека ncurses - это классика UNIX начиная с самых древних BSD
Для использования библиотека ncurses установлена практически всегда и во всех дистрибутивах - слишком многие проекты её используют.
Но вот для того чтобы писать свои программы, используя ncurses, нужно сделать доустановку:

Код: Выделить всё

[olej@dell Игнатенко]$ dnf provides '*/ncurses.h'
Последняя проверка окончания срока действия метаданных: 6 days, 22:32:23 назад, Mon Jul 18 19:46:57 2016.
latrace-0.5.11-9.fc23.i686 : LD_AUDIT feature frontend for glibc 2.4+
Источник: fedora

latrace-0.5.11-9.fc23.x86_64 : LD_AUDIT feature frontend for glibc 2.4+
Источник: fedora

ncurses-devel-5.9-21.20150214.fc23.i686 : Development files for the ncurses library
Источник: fedora

ncurses-devel-5.9-21.20150214.fc23.x86_64 : Development files for the ncurses library
Источник: fedora

Код: Выделить всё

[root@dell include]# dnf install ncurses-devel
Последняя проверка окончания срока действия метаданных: 2:16:11 назад, Mon Jul 25 16:05:58 2016.
Зависимости разрешены.
=============================================================================================================================================
 Package                            Архитектура                 Версия                                     Репозиторий                 Размер
=============================================================================================================================================
Установка:
 ncurses-devel                      x86_64                      5.9-21.20150214.fc23                       fedora                      732 k

Результат операции
=============================================================================================================================================
Установка  1 Пакет

Объем загрузки: 732 k
Объем изменений: 2.2 M
Продолжить? [д/Н]: y
Загрузка пакетов:
ncurses-devel-5.9-21.20150214.fc23.x86_64.rpm                                                                1.4 MB/s | 732 kB     00:00
---------------------------------------------------------------------------------------------------------------------------------------------
Общий размер                                                                                                 311 kB/s | 732 kB     00:02
Проверка транзакции
Проверка транзакции успешно завершена.
Идет проверка транзакции
Тест транзакции проведен успешно
Выполнение транзакции
  Установка    : ncurses-devel-5.9-21.20150214.fc23.x86_64                                                                               1/1
  Проверка     : ncurses-devel-5.9-21.20150214.fc23.x86_64                                                                               1/1

Установлено:
  ncurses-devel.x86_64 5.9-21.20150214.fc23

Код: Выделить всё

[root@dell include]# ls -l /usr/include/ncurses.h
lrwxrwxrwx. 1 root root 8 июн 18  2015 /usr/include/ncurses.h -> curses.h

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: ncurses

Непрочитанное сообщение Olej » 25 июл 2016, 23:58

А теперь смотрим как красиво (и как просто!) в API ncurses описывается прямое управление курсором, неканонический (посимвольный) режим ввода и мн. другие вещи (для этого только и тема заведена - для напоминания, как памятка):

Код: Выделить всё

#include <signal.h> 
#include <stdlib.h> 
#include <ncurses.h> 

void handler( int signo ) {
   endwin();                     // завершение работы с ncurses
   exit( 0 );
};

int main( int argc,char *argv[] ) {
   signal( SIGINT, handler );
   initscr();                    // инициализация (должна быть выполнена перед использованием ncurses)
   int c, y, x, my, mx;
   getmaxyx( stdscr, my, mx );
   move( my / 2, mx / 2 );       // перемещение курсора в стандартном экране y=10 x=30
   noecho();
   keypad( stdscr, TRUE );
   while( ( c = getch() ) != KEY_F( 3 ) ) {	
      getyx( stdscr, y, x );
      if( c == KEY_RESIZE ) {      
         getmaxyx( stdscr, my, mx );
         continue;
      }
      switch( c ) { 
         case KEY_UP:    move( y > 0 ? --y : y, x ); break;
         case KEY_DOWN:  move( y < my ? ++y : y, x ); break;
         case KEY_LEFT:  move( y, x > 0 ? --x : x ); break;
         case KEY_RIGHT: move( y, x < mx ? ++x : x ); break;
         case KEY_BACKSPACE: if( x > 1 ) {
               move( y, x - 1 ); 
               addch( ' ' );
               move( y, x - 1 ); 
               break;
            }
         case KEY_DC: addch( ' ' ); break;
         default:
            addch( c );
            break;
      }
   }
   endwin(); 
   return 0;
}
Это что?
Это практически полноценный визуальный редактор экрана ... как заготовка визуального текстового редактора может быть.

Код: Выделить всё

[olej@dell ncurses]$ gcc nc1.c -o nc1 -lncurses

[olej@dell ncurses]$ make
gcc -Wall nc1.c -o nc1 -lncurses
Вложения
nc.png
ncurses.tgz
(2.17 КБ) 230 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: ncurses

Непрочитанное сообщение Olej » 26 июл 2016, 00:10

Olej писал(а):А теперь смотрим как красиво (и как просто!) в API ncurses описывается прямое управление курсором, неканонический (посимвольный) режим ввода и мн. другие вещи (для этого только и тема заведена - для напоминания, как памятка):
Но в таком виде ncurses (и во всех где найдёте примеры) будет работать только с английским, латинским (ASCII) текстом.
Для того, чтобы ncurses работал с русскими текстами, нужно использовать API ncurses для работы не с символами char, а с широкими символами wchar_t.
Всё это есть в /usr/include/ncurses.h

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: ncurses

Непрочитанное сообщение Olej » 26 июл 2016, 20:03

2 полезных ссылки (статьи) по ncurses:
http://alexber220.narod.ru/ncurses/
http://alexber220.narod.ru/ncurses/page2.htm
Только читать - аккуратно, там парень в залихватскости своей много неточностей пишет ... но как подсказка - годится.

А дальше: /usr/include/ncurses.h - там большинство вопросов можно разобрать из заголовков, определений и комментариев.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: ncurses

Непрочитанное сообщение Olej » 27 июл 2016, 01:33

Полная инструкция от одного из участников проекта - NCURSES Programming HOWTO
Pradeep Padala
v1.9, 2005-06-20

Table of Contents
1. Introduction

1.1. What is NCURSES?
1.2. What we can do with NCURSES
1.3. Where to get it
1.4. Purpose/Scope of the document
1.5. About the Programs
1.6. Other Formats of the document
1.7. Credits
1.8. Wish List
1.9. Copyright

2. Hello World !!!

2.1. Compiling With the NCURSES Library
2.2. Dissection

3. The Gory Details
4. Initialization

4.1. Initialization functions
4.2. raw() and cbreak()
4.3. echo() and noecho()
4.4. keypad()
4.5. halfdelay()
4.6. Miscellaneous Initialization functions
4.7. An Example

5. A Word about Windows
6. Output functions

6.1. addch() class of functions
6.2. mvaddch(), waddch() and mvwaddch()
6.3. printw() class of functions
6.4. addstr() class of functions
6.5. A word of caution

7. Input functions

7.1. getch() class of functions
7.2. scanw() class of functions
7.3. getstr() class of functions
7.4. Some examples

8. Attributes

8.1. The details
8.2. attron() vs attrset()
8.3. attr_get()
8.4. attr_ functions
8.5. wattr functions
8.6. chgat() functions

9. Windows

9.1. The basics
9.2. Let there be a Window !!!
9.3. Explanation
9.4. The other stuff in the example
9.5. Other Border functions

10. Colors

10.1. The basics
10.2. Changing Color Definitions
10.3. Color Content

11. Interfacing with the key board

11.1. The Basics
11.2. A Simple Key Usage example

12. Interfacing with the mouse

12.1. The Basics
12.2. Getting the events
12.3. Putting it all Together
12.4. Miscellaneous Functions

13. Screen Manipulation

13.1. getyx() functions
13.2. Screen Dumping
13.3. Window Dumping

14. Miscellaneous features

14.1. curs_set()
14.2. Temporarily Leaving Curses mode
14.3. ACS_ variables

15. Other libraries
16. Panel Library

16.1. The Basics
16.2. Compiling With the Panels Library
16.3. Panel Window Browsing
16.4. Using User Pointers
16.5. Moving and Resizing Panels
16.6. Hiding and Showing Panels
16.7. panel_above() and panel_below() Functions

17. Menus Library

17.1. The Basics
17.2. Compiling With the Menu Library
17.3. Menu Driver: The work horse of the menu system
17.4. Menu Windows
17.5. Scrolling Menus
17.6. Multi Columnar Menus
17.7. Multi Valued Menus
17.8. Menu Options
17.9. The useful User Pointer

18. Forms Library

18.1. The Basics
18.2. Compiling With the Forms Library
18.3. Playing with Fields
18.4. Form Windows
18.5. Field Validation
18.6. Form Driver: The work horse of the forms system

19. Tools and Widget Libraries

19.1. CDK (Curses Development Kit)
19.2. The dialog
19.3. Perl Curses Modules CURSES::FORM and CURSES::WIDGETS

20. Just For Fun !!!

20.1. The Game of Life
20.2. Magic Square
20.3. Towers of Hanoi
20.4. Queens Puzzle
20.5. Shuffle
20.6. Typing Tutor

21. References

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя