Что такое код ncurses_scr_dump

Создать изображение из файла ncurses scr_dump в C

Я работаю над терминальным редактором пиксельной графики. В настоящее время я использую scr_dump() и scr_restore() чтобы пользователи могли сохранять и загружать свою работу. Я также хотел бы добавить возможность экспортировать пиксельную графику в формат изображения, такой как png, jpeg или bmp.

Я понятия не имею, как я буду делать это, хотя. Я знаю, что есть библиотеки, подобные Imagemagick но я не знаю, как бы я использовал что-то подобное в своем проекте.

Код можно найти здесь.

Дайте мне знать, если вам нужна дополнительная информация. Спасибо!

Linux.yaroslavl.ru

Учебник РНР
Назад Вперёд

ncurses_scr_dump — дамп содержимого экрана в файл.

Описание

int ncurses_scr_dump (string filename)

Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

Пишем первую программу на Ncurses

Ncurses — это библиотека, предназначенная для управления вводом-выводом на терминал. Позволяет задавать экранные координаты и цвет выводимых символов. Это статья является переводом данного материала. Пишите в комментариях, если нашли ошибку или неточность в переводе.

Материал рассчитан в первую очередь, на пользователей Unix-подобных ОС. Тем не менее, для пользователей Windows есть клон библиотеки ncurses — PDcurses.

История

В стародавние времена все немногочисленные возможности терминалов (телетайп-терминалов) поддерживались с помощью последовательностей байт. Эти управляющие последовательности, обычно называемые escape -последовательностями, начинались со специального символа 0x1B . Отголоски того времени дошли и до нас. Сегодня мы можем сделать то же самое со своим терминалом (на самом деле с эмулятором терминала, но для краткости, здесь и далее, называемым терминалом), используя точно такую же технологию.

Рассмотрим пример. Допустим, вам захотелось написать строку «In color» красным цветом. Для этого напишем в терминале (работает только для UNIX-подобных систем!):

Первый символ является escape -символом («^[», догадайтесь сами какой HEX-код у этого символа). Чтобы набрать его в терминале нужно нажать CTRL+V , а затем ESC . Дальше набираете так, как есть.

Результат выполнения команды:

Тот же трюк можно провернуть и программно:

В С\C++ escape -символы задаются символом \ (к примеру, \n — переход на новую строку, \r — возврат каретки). Соответственно, чтобы загнать escape -символ 0×1B в поток, нужно вписать \x1B.

Представим, что вам захотелось в своей программе использовать различные цвета, чтобы программа выглядела красивее чем обычно. Не правда ли будет сложно запоминать значения каждых управляющих символов?

И к тому же, эти символы, скорее всего, различны для каждого типа терминала. Именно для того, чтобы избежать заучивания значения каждого символа, а также для написания кода, не зависящего от типа терминала, была придумана библиотека ncurses .

Что такое ncurses и с чем его едят?

ncurses — это клон оригинальной curses из System V Release 4.0 (SVr4), которая в свою очередь была улучшением классического curses из BSD (название произошло от «new curses»)

Но ncurses это не только обёртка над зависимыми от системы управляющими символами, это так же и хороший фреймворк для создания красивого пользовательского интерфейса в текстовом режиме. Библиотека содержит функции управления окнами и меню, а так же «библиотеку-сестру» panel , управляющую панелями.

Вот пример приложения, основанного на ncurses :

Разумеется, это не все возможности, предоставляемые этой библиотекой. По мере продвижения вперёд, мы увидим гораздо больше, не сомневайтесь :)

Установка ncurses

Установить ncurses очень просто. Для этого откроем терминал и напишем:

Всё. Библиотека установлена и теперь мы готовы писать код.

Привет, мир! (Hello world!)

Итак, добро пожаловать в мир ncurses . Перед погружением в библиотеку, напишем простую программу, которая скажет «Hello!» всему миру.

Чуть не забыл, чтобы компилировать программы, использующие библиотеку ncurses , нужно устанавливать флаг -lncurses :

Описание кода

ncurses.h

ncurses.h — заголовочный файл ncurses . В нём объявлены все функции и константы библиотек. Обязателен к подключению.

initscr()

Функция initscr() переводит терминал в curses -режим. Она чистит экран, выделяет память под необходимые данные для работы библиотеки, и инициализирует окно stdscr (об этом не сегодня, к сожалению). Вызов initscr() обязателен перед любым использованием ncurses . В некоторых случаях функция может завершиться неудачно, если не хватило памяти. Впрочем, такие ситуации маловероятны, учитывая ресурсы, предоставленные современным компьютерам и ресурсы, требуемые для нормальной работы библиотеки.

printw()

Функция printw() выполняет ту же роль что и printf() , и имеет точно такой же синтаксис. Почему используется именно printw() ? Потому что std::cout и printf() на работают в curses -режиме. В остальном эта функция полностью аналогична printf() . Для справки: ввод осуществляется при помощи функции scanw() (аналогично scanf() ).

refresh()

Функция printw() отправляет данные не напрямую на экран, а в так называемый буфер. Функция refresh() проверяет буфер и, если он не пуст, отправляет информацию на экран (обновляет только изменившиеся зоны экрана), она чем то схожа с flush() из stdio . Зачастую, её вызов не обязателен, но иногда без вызова этой функции можно получить странные ошибки.

getch()

Функция getch() , наверное, знакома всем по библиотеке conio.h . Так вот, это её полный аналог (даже чуть лучше, как мы увидим далее). Функция ожидает нажатие любой клавиши на клавиатуре и возвращает код этой самой клавиши.

endwin()

В конце не забывайте выйти из curses -режима, иначе, после завершения программы ваш терминал будет «странно» себя вести. Выходом из curses -режима занимается функция endwin() . Она очищает экран, освобождает память, которую выделяла initscr() и переводит терминал в нормальный режим (в тот, в котором он был до выполнения программы).

получить текст на дисплее с Ncurses

Есть ли способ, чтобы получить обратно символы, выводимые в переменную на Ncurses?

то я хочу, чтобы иметь возможность:

Мне нужна функция, чтобы получить обратно все символы на экране в переменный, scr_dump получить закрыть, но выходной формат не читается ..

Если положить вещи на экране с помощью проклятий функций (например , addch, mvaddch, addstr) можно использовать inchstr ) и связанные с ними функции , чтобы прочитать символы с экрана (извлекая их AND’ing возвращаемого значения с A_CHARTEXT ).

Однако, если вы используете Printf или любой другой способ без проклятий кладя текст на экране (в том числе системного вызова в другую программу, которая использует ругательства), вы не сможете прочитать содержимое экрана.

Проклятия сохраняет текущее содержимое экрана внутренне и функции inchstr использовать внутреннее представление экрана, чтобы найти текущее содержимое.

Есть два набора функций для извлечения данных с экрана. Если printw используется только (как и в вопросе) текст , который представлен в виде 8-битного кодирования (ASCII, POSIX, ISO-8859-1), то inch и inchstr работа:

  • inch извлекает одну ячейку вместе с его атрибутами
  • inchstr извлекает несколько ячеек вместе с их атрибутами

или более просто использовать instr и его вариации. Эти функции возвращают данные без дополнительной необходимости маскировки атрибутов символов.

Однако, если данные использует многобайтовое кодирование (например, UTF-8), то необходимо использовать другой интерфейс для извлечения символов. Они являются эквивалентами inch и inchstr :

Сложный характер представляет собой структуру, которая X / Open Проклинает лечит , как непрозрачные. Вы должны использовать getcchar для извлечения данных (например, в широких символов строки) из данных каждой клетки.

А (немного) более просто, вы можете прочитать широкий символьный строковую информацию из окна:

нет формы односимвольной; Вы должны получить данные в виде строки в один символов.

Таким образом, в то время как ваше приложение может поместить данные в виде массива char (или отдельных chtype значений), в среде UTF-8 он должен получить его в виде сложные символами или широкополые символы . Если вам случится использовать Linux, вы можете вообще рассматривать wchar_t как значения Unicode. Принимая во внимание данных в виде массива wchar_t значений, можно использовать другие (не-проклятия) функцию для получения многобайтного (UTF-8) строки.

Так как вопрос сказал Ncurses , а не просто ругается , это уместно указать на то , что приложения , использующие Ncurses могут отличаться от X / Open проклятий в пути они положили данные на экране (который может повлиять на ваши ожидания о получении его). В Ncurses, addch (и аналогичной char -ориентированной функций) будет обрабатывать байты в строке многобайтной , такие как UTF-8, сохраняя результат как широкий-символы. Ни один из других X / Open не проклинает реализации на сегодняшний день это сделать. Остальные лечить эти байты как независимые, и может представлять их как недействительные широкополой символы.

Кстати, так как этот вопрос был задан в 2010 году, Ncurses’ scr_dump формат был расширен, что делает его „читаемым“.

SYNOPSIS¶

int scr_dump(const char *filename);
int scr_restore(const char *filename);
int scr_init(const char *filename);
int scr_set(const char *filename);

DESCRIPTION¶

The scr_restore routine sets the virtual screen to the contents of filename, which must have been written using scr_dump. The next call to doupdate restores the physical screen to the way it looked in the dump file.

The scr_init routine reads in the contents of filename and uses them to initialize the curses data structures about what the terminal currently has on its screen. If the data is determined to be valid, curses bases its next update of the screen on this information rather than clearing the screen and starting from scratch. scr_init is used after initscr or a system call to share the screen with another process which has done a scr_dump after its endwin(3X) call. The data is declared invalid

  • if the terminfo capabilities rmcup and nrrmc exist, also
  • if the terminal has been written to since the preceding scr_dump call.

The scr_set routine is a combination of scr_restore and scr_init. It tells the program that the information in filename is what is currently on the screen, and also what the program wants on the screen. This can be thought of as a screen inheritance function.

To read (write) a window from (to) a file, use the getwin and putwin routines [see util(3NCURSES)].

RETURN VALUE¶

X/Open defines no error conditions. In this implementation, each will return an error if the file cannot be opened.

NOTES¶

PORTABILITY¶

The SVr4 docs merely say under scr_init that the dump data is also considered invalid «if the time-stamp of the tty is old» but do not define «old».

Что такое код ncurses_scr_dump

ncurses_scr_dump — Dump screen content to file

Description int ncurses_scr_dump ( string filename)

Предупреждение!

This function is EXPERIMENTAL . The behaviour of this function, the name of this function, and anything else documented about this function may change without notice in a future release of PHP. Use this function at your own risk.

Warning

This function is currently not documented; only the argument list is available.

Получить текст на дисплее с ncurses

Есть ли способ вернуть символы, выводимые в переменную на ncurses?

то я хочу иметь возможность:

Мне нужна функция, чтобы возвращать все символы на экране в переменную, scr_dump приближается, но выходной формат нечитабелен.

Если вы помещаете материал на экран с помощью функций curses (например, addch, mvaddch, addstr), вы можете использовать inchstr ) и связанные с ним функции для считывания символов с экрана (извлечение их с AND’им возвращаемого значения с помощью A_CHARTEXT ).

Однако, если вы используете printf или любой другой метод non-curses для размещения текста на экране (включая системный вызов другой программы, использующей проклятия), вы не сможете прочитать содержимое экрана.

Curses поддерживает текущее содержимое экрана внутри, а функции inchstr используют внутреннее представление экрана для поиска текущего содержимого.

Существует два набора функций для извлечения данных с экрана. Если ваш printw использует только текст (как в вопросе), который представляется как 8-битная кодировка (ASCII, POSIX, ISO-8859-1), то inch и inchstr работают:

  • inch извлекает одну ячейку вместе со своими атрибутами
  • inchstr извлекает несколько ячеек вместе со своими атрибутами

или более просто используя instr и его варианты. Эти функции возвращают данные без дополнительной маскировки атрибутов из символов.

Однако, если данные используют многобайтовое кодирование (например, UTF-8), тогда вы должны использовать другой интерфейс для извлечения символов. Это эквиваленты inch и inchstr :

Сложный символ — это структура, которую X/Open Curses рассматривает как непрозрачный. Вы должны использовать getcchar для извлечения данных (таких как широкосимвольная строка) из данных каждой ячейки.

A (немного) проще, вы можете прочитать широкоформатную строковую информацию из окна:

нет односимвольной формы; вы должны получать данные в виде односимвольной строки.

В целом, хотя ваше приложение может помещать данные в массив из char (или отдельных значений chtype ), в среде UTF-8 он должен получить его как сложные символы или широкий -персонажи. Если вы используете Linux, вы обычно можете рассматривать wchar_t как значения Unicode. Учитывая данные в виде массива значений wchar_t , вы должны использовать другие (не-проклятые) функции для получения многобайтовой строки (UTF-8).

Поскольку вопрос, указанный ncurses , а не просто curses , следует указать, что приложения, использующие ncurses, могут отличаться от X/Open Curses тем, как они помещают данные на экран (который может повлиять на ваши ожидания по его извлечению). В ncurses addch (и аналогичные char -ориентированные функции) будут обрабатывать байты в многобайтной строке, такой как UTF-8, сохраняя результат в виде широкоформатных символов. Ни одна из других реализаций X/Open Curses на сегодняшний день не делает этого. Другие обрабатывают эти байты как независимые и могут представлять их как недопустимые широкоформатные символы.

Кстати, поскольку в 2010 году был задан вопрос, ncurses ‘ scr_dump format был расширен, что делает его «читаемым».

Что такое код ncurses_scr_dump

(PHP 4 >= 4.2.0, PHP 5)

ncurses_scr_dump — Dump screen content to file

Description int ncurses_scr_dump ( string filename )

Warning

This function is EXPERIMENTAL . The behaviour of this function, the name of this function, and anything else documented about this function may change without notice in a future release of PHP. Use this function at your own risk.

Warning

This function is currently not documented; only the argument list is available.

Создать изображение из файла ncurses scr_dump в C

Я работаю над терминальным редактором пиксельной графики. В настоящее время я использую scr_dump() а также scr_restore() методы, позволяющие пользователям сохранять и загружать свою работу. Я также хотел бы добавить возможность экспортировать пиксельную графику в формат изображения, такой как png, jpeg или bmp.

Я понятия не имею, как я буду делать это, хотя. Я знаю, что есть такие библиотеки, как Imagemagick но я не знаю, как бы я использовал что-то подобное в своем проекте.

Код можно найти здесь.

Дайте мне знать, если вам нужна дополнительная информация. Спасибо!

Что такое код ncurses_scr_dump

ncurses_scr_dump — дамп содержимого экрана в файл.

Описание

int ncurses_scr_dump (string filename)

Warning

Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

Предупреждение!

Назад Оглавление Вперёд
ncurses_savetty Вверх ncurses_scr_init

Материалы, которые находятся на этой страничке, любезно предоставлены Игорем Ивановым

Илон Маск рекомендует:  Что такое код socket_readv
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL