RuLibrary.com

ГЛАВНАЯ | ПОИСК | ТОП | КАРТА САЙТА      

 
 


 

Сейдж Рассел >> Приемы профессиональной работы в UNIX (страница 32)


Строки 71-80 обрабатывают отключение подсчета времени. Здесь поч- ти все идентично тексту программы, который включает эту операцию, только если там было слово "on", то здесь слово "off".

Строки 81-101 обрабатывают подчиненное меню выдачи отчетов и ста- тистики. Как видите, экранное меню спланировано таким же образом: цикл while, печать меню, чтение ответа, выполнение оператора case в зависи- мости от выбранной команды и т.д. Команда r подобна главному меню, только сокращена для того, чтобы поместиться внутри оператора case. Вы также можете заметить, что в строках 96-99 выполняется не очень много обработки. Это то место, где вы должны выполнить некоторую работу.

Строка 102 выполняет обработку ошибок при любом неверном вводе. Печатается сообщение об ошибке, оператор case выходит на следующую итерацию цикла while, и все начинается сначала.

 

МОДИФИКАЦИИ

Основной возможностью для модификации является добавление факти- ческой обработки информации о времени. Один из подходов к этому - зап- росить почасовой тариф времени в момент создания файла проекта (если считать, что вы работаете на таких основаниях). Этот тариф может хра- ниться первым пунктом в файле проекта. Следующие две строки могут быть отведены для "счета по текущему сеансу" и "общего счета" соответствен- но. Когда подсчет времени работы над проектом отключается, можно проа- нализировать текущее системное время и начальное время подсчета и за- тем пересчитать в минуты (для упрощения арифметики) с использованием команды expr (или, возможно, awk). Затем это значение можно умножить на хранимый в файле тариф времени, а результат сохранить в записи о текущем сеансе работы и ДОБАВИТЬ к совокупной общей записи.

 

ИМЯ: today
today Печать календаря с подсвеченной сегодняшней датой
 
НАЗНАЧЕНИЕ

Модифицирует вывод утилиты cal для печати сегодняшней даты ин-

версным цветом.
 

ФОРМАТ ВЫЗОВА

today
 
ПРИМЕР ВЫЗОВА

today Печатает календарь на этот месяц с подсвеченной

сегодняшней датой

ТЕКСТ ПРОГРАММЫ today
1 : 2 # @(#) today v1.0 Calendar with today highlighted Author: Russ Sage 2а Календарь с подсветкой сегодняшнего дня
4 SYSV=n
6 set `date`
8 if [ "$SYSV" = "y" ] 9 then RVR=`tput smso` 10 BLNK=`tput blink` 11 NORM=`tput rmso` 12 cal ${2} ${6} | sed "s/${3}/${RVR}${BLNK}${3}${NORM} /g" -e "s/^/ /" 13 else RVR="^[[7m" # termcap so 14 NORM="^[[0m" # termcap se 15 cal ${2} ${6} | sed -e "s/ ${3}/ ${RVR}${3}${NORM} /" -e "s/^/ /" 16 fi

ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ
RVR Управляющий символ инверсного отображения для

вашего терминала BLNK Управляющий символ мерцания для вашего терминала,

если таковой имеется NORM Управляющий символ для возврата терминала в

обычный режим

ОПИСАНИЕ

ЗАЧЕМ НАМ НУЖЕН today?

Всегда приятно иметь инструментальные средства, предоставляющие нам информацию о нашей среде. Тип информации, который мы здесь рассматриваем - это модифицированный вывод календаря. Стандартная ко- манда cal выводит дни месяца, но не сообщает вам, какой день сегодня. Как мы это узнаем? Мы должны запустить команду date для определения текущего дня. Довольно тривиальная задача, однако наше решение может дать некоторую ценную графику, которая может добавить действительно полезную информацию к календарю.

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

ЧТО ДЕЛАЕТ today?

Today - это постпроцессор для команды cal, который делает ее ре- зультат более информативным и графически наглядным. Выполнение модифи- кации команды cal зависит от того, в какой системе вы работаете. Если вы в системе UNIX System V (версия 2 или старше), то у вас есть утили- та terminfo. Terminfo является заменой для файла termcap и поставля- ется с несколькими утилитами, которые возвращают значения с информаци- ей о ПРИЕМЫ ПРОФЕССИОНАЛЬНОЙ РАБОТЫ В UNIX нальных характеристик. Если ваш компьютер работает не с системой System V, то вам необходимо немного поисследовать тип ваших конкретных терминалов и внести полученные значения в вашу программу.

Вся история с утилитами termcap и terminfo иллюстрирует эволюцию работы в среде UNIX. UNIX с самых первых дней стремился быть независи- мым от типов устройств. Первым шагом явилось использование файлов уст- ройств и драйверов. Следующим шагом был файл termcap, который пре- доставил единообразный способ получения информации о терминалах. Последним этапом является утилита terminfo, предоставляющая эту инфор- мацию таким способом, который лучше обеспечивает функциональный доступ из программ.

Поскольку в пределах командного файла не так легко определить, с какой системой работает ваш компьютер, использована переменная SYSV. Эту переменную можно изменить при помощи редактора, поэтому today мо- жет работать в разных системах. Способами выяснения системы могли бы служить программа uname, существование определенных shell-программ в каталоге /bin или какой-нибудь системный файл, содержащий номер версии. По умолчанию переменная SYSV установлена так, чтобы утилита today работала НЕ в системе System V. С этим связано существование фрагмента программы, который нужно изменять вручную.

Как вы можете самостоятельно получить информацию о терминале? Каждый терминал имеет свои специфические особенности. Все терминалы характеризуются в основном файлом описания терминала termcap. В этом файле каждая характеристика дается под своим именем вместе с аппарат- ным кодом этой функции. Таким образом, мы можем, например, редактором vi заглянуть в termcap и увидеть, как управлять терминалом, на котором мы работаем. Файл termcap сильно зашифрован и загадочен. По данному вопросу не очень много документации, что порождает множество экспери- ментов и ошибок.

Переменными, которые нас интересуют, являются "so" для выделения информации (инверсный режим) и "se" для завершения выделения (обычный режим), а также режим мерцания, если он есть у вашего терминала. Termcap, похоже, не содержит информацию о том, как включить режим мер- цания, поэтому вам, вероятно, нужно будет для этого посмотреть доку- ментацию на терминал. В системе System V (версия 2) команда tput возв- ращает соответствующее значение.

По умолчанию в today выполнены установки для ANSI терминала, яв- ляющегося консольным в системе XENIX. Эти коды были вручную извлечены из файла /etc/termcap и вставлены в текст программы. Если ваши коды отличаются, вы должны выяснить их. Обратите внимание, что в файле /etc/termcap символ ESCAPE представлен как \E. Это не годится для today, и вы должны изменить такое представление на настоящий ESCAPE. Поскольку ESCAPE является символом выхода из режима ввода в редакторе vi, вы должны использовать команду control-V в этом редакторе для вво- да управляющих символов. Последовательность control-V вызывает печать символа ^, а ESCAPE - печать символа [. Таким образом, реальная коман- да входа в инверсный режим в редакторе vi представлена последователь- ностью ^[[7m. Эта команда включает символы ^[ в качестве ESCAPE и за- тем обычные символы [7m для изменения режима.

Теперь, когда характеристики терминала учтены, цель утилиты today - выделить текущий день календаря в инверсном виде, а все остальное оставить в обычном виде. Это делается путем передачи по конвейеру вы- хода команды cal команде sed. Утилита sed находит число в выходных данных и подставляет специальную графическую ESC-последовательность. Поскольку ваш терминал использует специальные символы для изменения режима, вы не увидите их выдачи на экран.

Данная программа не имеет опций или какого-то особого входа. Она распечатывает календарь с отмеченным сегодняшним днем.
 

ПОЯСНЕНИЯ

В строке 4 выполняется инициализация переменной SYSV значением "n". Это заставляет программу переходить к особой области, в которой жестко закодированы управляющие коды терминала, определенные вручную. Если вы работаете с последними версиями системы System V, то вам нуж- но, чтобы эта переменная имела значение "y".

В строке 6 позиционным параметрам присваивается результат команды date. Мы обратимся к этим значениям позже.

Строки 8-16 - это остальная часть программы. Они представляют со- бой один оператор if-then-else. Строки 9-12 поддерживают принятый в System V метод tput для получения характеристик терминала, а строки 13-15 управляют ручным способом их получения.

В обоих случаях переменным shell присваиваются ESC-последователь- ности. Эти значения используются позже. В обоих случаях выполняется вызов команды cal с использованием значений месяца и года, полученных от команды date. Этот образ календаря пропускается по конвейеру через утилиту sed, которая ищет указанный день "сегодня", также полученный от команды date. Когда этот день найден, sed заменяет цифры дня на последовательность включения инверсного режима, последовательность включения режима мерцания, если он есть, и символы дня, а затем после- довательность возврата в обычный режим работы терминала. Последняя ко- манда sed заполняет пробелами начало строки для размещения ее в центре экрана.

 

УПРАВЛЕНИЕ ДЕЛОПРОИЗВОДСТВОМ

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

Хотя мощные коммерческие программы для сохранения такой информа- ции имеются в среде MS-DOS, эти программы не имеют широкого распрост- ранения в UNIX. Часто у вас нет необходимости в отдельной большой программе для выполнения таких работ в UNIX. UNIX обеспечивает хороший компромисс между легкими в применении, но не гибкими коммерческими программами и программированием на мощных, но непростых в использова- нии традиционных языках программирования. Возможности языка shell плюс богатый ассортимент встроенных команд UNIX дают мощный, гибкий и СРАВ- НИТЕЛЬНО простой в использовании компромисс. В данном разделе мы представляем широкий набор средств управления личной информацией, ко- торые вы можете приспособить для своих нужд.

Для шутки начнем с программы по имени jargon - генератора техни- ческих терминов, конструирующего замысловатые фразы. С его помощью можно удивлять людей тем, как много вы знаете, или начать прибыльную вторую карьеру в качестве составителя рекламы. Комбинирование слов по- рождает сотни фраз.

Затем мы рассмотрим программу phone. Phone - это командный файл, управляемый с помощью меню, который поддерживает базу телефонных номе- ров и сопутствующей информации. Она сводит воедино разнообразные аспекты сопровождения базы данных и обслуживания запросов к ней.

Последнее инструментальное средство называется office. Это управ- ляемая при помощи меню утилита, которая дает одноклавишный доступ ко всем функциям делопроизводства. Сюда относятся почта, новости, кален- дарь, номера телефонов и автоматические напоминания.

 

ИМЯ: jargon


 
НАЗНАЧЕНИЕ

Компьютеризованная версия старого настольного генератора техни-

ческих терминов.
 

ФОРМАТ ВЫЗОВА

jargon
 
ПРИМЕР ВЫЗОВА

jargon Если ввести 125 в ответ на запрос, то на выходе

125 получится фраза Total Monitored Concept

ТЕКСТ ПРОГРАММЫ jargon
1 : 2 # @(#) jargon v1.0 Technical jargon generator Author: Russ Sage 2а Генератор технического жаргона
4 echo "\n\t\tThe Jargon Generator" 5 while : 6 do 7 echo "\nEnter a 3 digit number (000-999), ? , or : \c" 8 read NUM
10 case $NUM in 11 "") exit;; 12 \?) cat <!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Название книги: Приемы профессиональной работы в UNIX
Автор: Сейдж Рассел
Просмотрено 36047 раз

1234567891011121314151617181920212223242526272829303132


 
Page generation 0.003 seconds