Хрестоматия по программированию на Си в Unix



              

Экранные библиотеки и работа с видеопамятью. Хрестоматия по программированию на Си в Unix


Экранные библиотеки и работа с видеопамятью.

Терминал в UNIX с точки зрения программ - это файл. Он представляет собой два устройства: при записи write() в этот файл осуществляется вывод на экран; при чтении read()-ом из этого файла - читается информация с клавиатуры.

Современные терминалы в определенном смысле являются устройствами прямого доступа:

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

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

  • настройка на систему команд данного устройства, чтобы одна и та же программа работала на разных типах терминалов.
  • эмуляция недостающих в системе команд; максимальное использование предоставленных терминалом возможностей.
  • мимнимизация передачи данных через линию связи (для ускорения работы).
  • было бы полезно, чтобы библиотека предоставляла пользователю некоторые логические абстракции, вроде ОКОН - прямоугольных областей на экране, ведущих себя подобно маленьким терминалам.

В UNIX эти задачи решает стандартная библиотека curses (а только первую задачу более простая библиотека termcap). Для настройки на систему команд конкретного дисплея эти библиотеки считывают описание системы команд, хранящееся в файле /etc/termcap. Кроме них бывают и другие экранные библиотеки, а также существуют иные способы работы с экраном (через видеопамять, см. ниже).

В задачах данного раздела вам придется пользоваться библиотекой curses. При компиляции программ эта библиотека подключается при помощи указания ключа -lcurses, как в следующем примере:

cc progr.c -Ox -o progr -lcurses -lm

Здесь подключаются две библиотеки:

  • /usr/lib/libcurses.a (работа с экраном) и
  • /usr/lib/libm.a (математические функции, вроде sin, fabs). Ключи для подключения библиотек должны быть записаны в команде САМЫМИ ПОСЛЕДНИМИ. Заметим, что стандартная библиотека языка Си (содержащая системные вызовы, библиотеку stdio (функции printf, scanf, fread, fseek, ...), разные часто употребляемые функции (strlen, strcat, sleep, malloc, rand, ...)) /lib/libc.a подключается автоматически и не требует указания ключа -lc.




Содержание    Вперед