{" ","VA","NC","SC","GA","FL",0};
char **st = states;
while (*st)
if (strcmp(*st++, bf) == 0)
return OK;
error_message("Недопустимое состояние ");
return ERROR;
}
/*-------выдает сегодняшнюю дату------*/
void help_date(bf)
char *bf;
{
struct date dat;
getdate(&dat);
sprintf(bf, "%02d%02d%02d",
dat.da_day, dat.da_mon, dat.da_year % 100);
}
Листинг 8.4: order.prj
order
ordent (twindow.h)
entry (twindow.h, keys.h)
thelp (twindow.h, keys.h)
twindow (twindow.h, keys.h)
ibmpc.obj
Резюме
-----------------------------------------------------------------
Оконная библиотека содержит сейчас средства создания
контекстно-зависимой help-информации и форматного ввода данных.
Эти средства вы можете с успехом использовать при создании систем
интерактивного ввода данных. Шаблон ввода данных поддерживает
фиксированные форматы вводимых данных. В Главе 9 в функции
текстового редактора добавлены новые, одна из них - возможность
использования окна для ввода и модификации произвольного текста.
ГЛАВА 9
-------
Оконный текстовый редактор
-----------------------------------------------------------------
В Главе 8 обсуждалось применение видеоокон для
использования ввода данных в поля формо-ориентированного шаблона
ввода данных. Естественно, что не все поля данных имеют заранее
определенный, фиксированный формат. Многие поля и файлы состоят
из текстов свободной, неопределенной формы и последовательности,
например, слова в книге или комментарии к программе. Текстовые
процессоры и редакторы текстов позволяют вам строить текстовые
файлы, игнорируя формат исходных данных (текста), однако, если
вы создаете действительно интегрированную систему , то доступ
к функциям ввода текста в вашу программу и его редактирование
может вам понадобиться непосредственно из вашей прикладной
программы.
Эта глава является предварительным описанием оконного
текстового редактора, который использует видеоокна для ввода и
модификации текста точно так же, как большинство программ
редактирования текста и текстовых процессоров. Эта отличительная
черта оконного редактора используется при создании программных
систем, в которых требуется ввод текста произвольной формы. Пакет
Sidekick является примером системы, в которой имеется сходный с
рассматриваемым в этой главе редактор текстов. Пример программы,
представленный в этой главе, вполне может использоваться в
качестве редактора текстов в системах типа Sidekick. Оконный
текстовый редактор может также применяться в системах ввода
данных, когда требуется ввести в качестве данных текст
произвольной формы, занимающий более одной строки. Прикладная
программа типа программы ввода данных в заданном порядке с
помощью шаблона ввода данных из Главы 8 может потребовать ввода
поля, содержащего описательный текст. Это требование можно легко
реализовать, применяя оконный текстовый редактор. Многие базы
данных оперируют с данными, характеризующимися наличием
поясняющего их текста, различных описаний или определенной
терминологии предметной области. При использовании шаблонов ввода
данных поля данных такого типа могут с успехом обрабатываться
оконным редактором. вы также можете использовать текстовый
редактор для подготовки текстов help-окон в вашей программе путем
обработки файла описаний help-окон, описанного в Главе 7.
Для использования текстового редактора программа вначале
устанавливает окно, а затем резервирует буфер, в котором будут
храниться и редактироваться данные, вводимые пользователем.
Текстовый буфер редактора представляет собой массив,
резервирующий память, достаточную для хранения фиксированного
числа строк, каждая из которых равна ширине области окна,
отводимой для ввода и редактирования текста. Например, если вы
установили ширину окна в 42 символа, то область текста будет
иметь ширину 40 символов (рамка окна занимает 2 позиции). Если вы
в этом случае отвели под буфер 4000 символов (длина массива), то
редактор сможет обрабатывать одновременно только 100 строк
текста, так как буфер может содержать не более 100 строк текста
по 40 символов в строке. При вводе пользователем текста он
накапливается в буфере без специальных символов новой строки (\n)
и табуляции (\t).
Если текстовый буфер уже содержит текст, который был занесен
в него при первом обращении к редактору, то этот старый текст
отображается на экране дисплея в виде строк фиксированной длины в
соответствии с описанием окна.
Команды тестового редактора
-----------------------------------------------------------------
Текстовый редактор содержит полный набор команд
редактирования. Команды сведены в один перечень и могут быть
отображены на экране дисплея в виде, представленном на рисунке
9.1. В прошлой главе была рассмотрена программа, которая
использовала help-окно для выдачи различной информации. Help-окно
отображается при нажатии клавиши . Точно такой же прием
используется для отображения набора команд редактора. Большинство
из команд редактирования закреплено за функциональными клавишами,
остальные используют комбинации клавиш или с другими
клавишами. Ниже будут рассмотрены все команды оконного текстового
редактора.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ ¦
¦¦ДДДДДДCursor MovementДДДДДДДДДДДДДДPage MovementДДДДДДДД ¦ ¦
¦¦arrows = move text cursor Ctrl-Home = Beginning of File ¦ ¦
¦¦Ctrl-T = Top of Window Ctrl-End = End of File ¦ ¦
¦¦Ctrl-B = Bottom of Window PgUp = Previous Page ¦ ¦
¦¦Ctrl ->= Next Word PgDn = Next Page ¦ ¦
¦¦Ctrl <-= Previons Word Г¬ ¦
¦¦Home = Beginning of Line ДДДДДДДДEditor controlДДДДДДД ¦¦ ¦
¦¦End = End of Line Scroll Lock = No Auto Reform ¦¦ ¦
¦¦ ¦¦ ¦
¦¦ ¦¦ ¦
¦¦ДДДДДДДBlock controlsДДДДДДДДДДДДДДДEdit commandsДДДДДДД ¦¦ ¦
¦¦F4 = Form Paragraph F2 or Esc = Done ¦¦ ¦
¦¦F5 = Mark Block Beginning F3 = Erase File ¦¦ ¦
¦¦F6 = Mark Block End Ins = Togle Insert Mode ¦¦ ¦
¦¦F7 = Move Block Del = Delete Char ¦¦ ¦
¦¦F8 = Copy Block <-- = Rubout ¦¦ ¦
¦¦F9 = Delete Block Ctrl-D = Delete Word ¦¦ ¦
¦¦F10 = Unmark Block Alt-D = Delete Line ГЩ ¦
¦¦ [Help] to return ¦ ¦
¦АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
¦ ¦
¦ ¦
¦ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рис. 9.1. Команды текстового редактора
Управление курсором
-----------------------------------------------------------------
Используя клавиши управления курсором, его можно перемещать
по всему экрану. Если вы переместили курсор в начало или в конец
экрана и продолжаете нажимать клавишу перемещения курсора вверх
(или вниз), то тем самым вы инициируете скроллинг текста, который
будет продолжаться до достижения начала (конца) буфера данных.
- и перемещают буфер в начало и конец экрана;
- перемещает курсор в начало следующего
слова в буфере хранения текста;
- перемещает курсор в начало предыдущего
слова в буфере хранения текста;
- <курсор в начало экрана> позиционирует курсор в начало
текущей строки;
- <КОН> позиционирует курсор в конец текущей строки;
- <ТАБ> перемещает курсор к следующей позиции табуляции;
- <РЕГИСТР/ТАБ> перемещает курсор к предыдущей позиции
табуляции.
Постраничная работа
-----------------------------------------------------------------
- <Страница вверх> и <Страница вниз> перемещает текст на
страницу вперед или назад;
- устанавливает текст на
первую страницу, позиционируя курсор в первой позиции
первой строки текста;
- устанавливает текст на последнюю страницу в
буфере и позиционирует курсор в первой позиции строки,
которая следует за последней строкой текста в буфере.
Команды работы с блоками текста
-----------------------------------------------------------------
Текстовый редактор имеет в своем составе команды работы с
блоками текста. Эти команды позволяют оперировать с блоками
текстов, которые определены ограничительными линиями.
- формирует параграф из текста, помеченного как блок;
- помечает первую строку блока. Строка текста, в
которой находится курсор, становится первой строкой
блока. Текст, образующий блок, отображается в цвете,
определяемом значением параметра ACCENT для данного
окна;
- помечает последнюю строку блока текста;
- перемещает весь блок текста к строке текста, в
которой расположен в данный момент курсор.
Перемещение блока происходит без его разрушения;
пространство для размещения блока выделяется
автоматически;
- копирует блок к текущей строке текста. Отличие этой
команды от предыдущей в том, что настоящая команда не
приводит к разрушению блока-оригинала на его прежнем
месторасположении в тексте.
- уничтожает блок. Строки текста, следующие за
удаленным блоком, перемещаются вверх, заполняя
освободившееся пространство в тексте;
- отменяет маркировку фрагмента текста как блока.
Команды редактирования
-----------------------------------------------------------------
После того, как вы ввели текст и осуществили перемещение
курсора, редактор автоматически переформатирует текущий параграф.
Редактор определяет параграф как группу строк текста,
начинающуюся с первой строки, состоящей из пробелов.
Переформатирование параграфов может подавляться путем нажатия
перечисленных ниже клавиш в режиме (Scroll Lock):
- уничтожает весь текст, хранящийся в буфере "Команда".
Команда требует подтверждения;
- переключает режимы работы редактора Вставка/Замена,
а также изменяет форму курсора, индицирующего режим
работы редактор;
- уничтожает символ, находящийся после курсора в
тексте, перемещая весь текст в строке на одну позицию
влево;
- Забой (длинная стрелка в правом верхнем углу
клавиатуры) уничтожает символ, находящийся левее
курсора, перемещая сам курсор и весь следующий за ним
текст строки на одну позицию влево;
- () уничтожает слово, перед которым
позицирован курсор;
- уничтожает строку текста, в которой был
предварительно позицирован курсор;