Alarm 1.02.03b for FreeBSD by MATPOCKuH


Содержание.

  1. Что это?
  2. Системные требования.
  3. Изменения.
  4. Инсталляция.
  5. Запуск.
  6. Работа с программой.
  7. Ограничения.
  8. Проблемы.
  9. Где взять?
  10. Обратная связь.


Что это?

Данная программа реализует функции будильника.

Особенности:

  1. Программа работает в терминале.
  2. Реализована привязка к виртуальной консоли.
  3. Возможен запуск как программы-getty из /etc/ttys.
  4. Возможно указание нескольких "будильников"
  5. Имеется функция повтора сигнала.
  6. Автоблокирование клавиатуры и автосохранение состояния "будильников".
  7. Воспроизведение сигнала на устройство /dev/speaker.
  8. Автоматическое отключение сигнала по истечении интервала времени.
  9. Простая локализация интерфейса.
Преимущества:
  1. Программа способна "мертвого" разбудить ;)
  2. При загрузке из /etc/ttys программа автоматически запустится даже после случайного падения машины
  3. Программа нетребовательна к ресурсам
ЭТА ПРОГРАММА ЯВЛЯЕТСЯ СВОБОДНО РАСПРОСТРАНЯЕМОЙ И ПОСТАВЛЯЕТСЯ ПО ПРИНЦИПУ "AS IS". АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОСЛЕДСТВИЯ ЕЕ ИСПОЛЬЗОВАНИЯ.


Системные требования.

Программа написана на FreeBSD 4.4, однако должна работать на всех (?) версиях FreeBSD. Для успешной компиляции и работы необходима библиотека ncurses(3x) и наличие устройства speaker(4) в ядре.

Портирование в другие операционные системы возможно в случае наличия в них устройства speaker(4) и идентичного интерфейса к нему. Если вы заинтересованы в портировании под системы, не удовлетворяющие этому требованию, попробуйте связаться со мной.


Изменения.

1.02.03b:
[*] - исправлена ошибка, приводившая к незакрытию устройства /dev/speaker при автоматическом отключении сигнала.
[*] - испpавлены некотоpые ошибки в документации.

1.02.02b:
[+] - расширена обработка параметров командной строки.
[+] - добавлена возможность отключения сигнала по истечении промежутка времени.

1.01.01b:
[-] - при остановке сигнала закрывается устройство /dev/speaker, что позволяет другим задачам использовать его.

1.01b:
[*] - испpавлены некотоpые ошибки в документации.


Инсталляция.

Для установки программы необходимо скачать исходный код и выполнить следующие команды из-под пользователя root:
	gzip -cd alarm-1.02.03b.tar.gz | tar xf -
	cd alarm-1.02.03b
	make
	make install
Перед компиляцией можно изменить PREFIX и некоторые другие настройки в Makefile. По умолчанию PREFIX=/usr/local.

После инсталляции настройте конфигурационный файл alarm.cfg, который располагается в каталоге $PREFIX/etc/alarm. Назначение переменных конфигурационного файла описано внутри самого файла.


Запуск.

Запуск будильника может быть реализован как в "ручном" режиме, так и из файла /etc/ttys.

Формат команды:

	alarm [options ...]
Возможные опции:
ОпцияПараметр конфига Значение по умолчаниюОписание
-h вывести справку по опциям и выйти.
-d devicedevice ttyv9 Терминал, к которому присоединится будильник. Если значение пустое, программа запускается в текущем терминале. Если первый символ не равен /, в начало добавляется /dev/.
-t termtermcons25 Тип терминала
-p playdeviceplaydevice /dev/speaker Путь к устройству speaker(4).
-s savefilesavefile $(PREFIX)/etc/alarm/save Имя файла, в который будет производиться сохранение "будильников".
-locktime Nlocktime10 Время (минут), через которое блокируется клавиатура при отсутствии нажатий.
-unlockstr passwordunlockstrunlock Строка для разблокирования клавиатуры.
-autosave {yYnN}autosaveY Автосохранение "будильников".
-autodisable Nautodisable120 Автоматическое отключение сигнала после истечения указанного времени (минут).

Для запуска из файла /etc/ttys в него необходимо добавить строку

	ttyv9	"/usr/local/bin/alarm -d"	cons25	on	insecure
и перегрузить машину или послать сигнал HUP процессу init.

ВНИМАНИЕ! Для запуска программы ядро должно быть собрано с устройством speaker(4). Если это условие не выполнено, программа не сможет издавать звуковой сигнал.


Работа с программой.

Назначение колонок:

Alarm - время, на которое поставлен будильник.
Repeat - время (в минутах), через которое будет дан повторный сигнал.
Autounlock - автоматическое разблокирование будильника в 00:00:00. Сделано для повтора сигнала на следующие сутки.
Locked - блокировка будильника.

Для управления программой можно использовать следующие клавиши:

A a - добавить новый будильник
I i Insert - вставить новый будильник
D d Delete - удалить будильник
Стрелки управления курсором - перемещение
0-9 - изменение значений времени и повтора
Пробел - при нахождении курсора в колонке Autounlock и Locked - изменение их значения
L l - переключение состояния блокировки
U u - переключение состояния авторазблокировки
S s W w - сохранение будильников
R r ^L - перерисовка экрана
Escape - отключение сигнала
Q q - выход.

При отсутствии нажатий в течение времени заданного параметром locktime (по умолчанию 10 мин.) клавиатура блокируется, что сопровождается выводом соответствующего сообщения в строку подсказки. Если параметр autosave равен Y, при этом сохраняется состояние будильников. Для разблокирования клавиатуры необходимо набрать строку, заданную параметром unlockstring (по умолчанию unlock). В режиме заблокированной клавиатуры сохраняет функциональность только клавиша Escape, с помощью которой можно отключить сигнал. Данная функциональность реализована для защиты от случайных нажатий и гарантированного просыпания, которое необходимо для набора пароля. Наибольший эффект достигается при использовании будильников с автоповтором сигнала, для отключения которых необходимо разблокировать клавиатуру.

При срабатывании будильника включается звуковой сигнал. Если значение повтора для сработавшего будильника равно 0, он блокируется, иначе, если авторазблокирование отключено, к времени срабатывания добавляется время повтора, иначе будильник блокируется и создается временный будильник с отключенным авторазблокированием и нужным временем следующего срабатывания, на который устанавливается курсор. Таким образом, при срабатывании будильника с ненулевым временем повтора и включенным авторазблокированием создается временный будильник, который обеспечивает дальнейшие повторы сигнала, а основной сохраняет время для срабатывания на следующие сутки. Для удаления вспомогательного будильника и, таким образом отключения повторов сигнала, необходимо, если клавиатура заблокирована, что наиболее вероятно к моменту срабатывания, разблокировать ее.

Если в течении времени autodisable сигнал не был запрещен, происходит автоматическая блокировка сигнала. Разблокировка сигнала происходит при разблокировании клавиатуры, или, если она не заблокирована, при нажатии любой клавиши, или по достижению полуночи.

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


Ограничения.

  1. Вывод текущего времени и проверка необходимости подачи сигнала производится каждые 0.2 секунды, из-за чего программа немного "подъедает" процессорное время (~2 секунды процессорного времени в час на Celeron-333 при одном будильнике) и немного неравномерно отображает секунды. "Съедаемое" процессорное время сильно зависит от количества созданных будильников.
  2. Если из-за очень высокой нагрузки на процессор программа в течение секунды не получает управление возможны пропуски срабатываний будильника. Постоянно крутящийся dnetc не является такой нагрузкой ;)
  3. При запуске в текущем терминале переменная TERM устанавливается в значение, указанное в конфигурационном файле или параметрах командной строки, только в том случае, если она не установлена.
  4. Я не утверждаю, что программа написана идеально, и я готов выслушать ваши претензии и предложения (второе лучше).


Проблемы.

  1. Я не уверен в корректности привязки к виртуальному терминалу. Я это делаю примерно так:
    	close(0); close(1);
    	open(device, O_RDONLY);
    	open(device, O_WRONLY);
    
    Подробнее смотри alarm.c функция init_alarm(). Если вы знаете, как это делать корректнее - сообщите
    мне. Использование freopen(3) для данной цели точно хуже, так как init(8) почему-то забывает открыть stdin, stdout и stderr при перезапуске.
  2. Я не проверял, как будет вести себя программа при попытках задать в конфигурационном файле строки длиннее 1024 символов. По идее она должна или обрезать их до указанной длины, или выругаться на неправильность строки. Других возможных мест переполнения буферов по идее не должно быть.
  3. В документации и различных сообщениях программы возможно страшное количество различных грамматических и не только ошибок и опечаток. При их обнаружении, пожалуйста, напишите мне.


Где взять?

Данная документация доступна по адресу
http://kot.spb.ru/projects/alarm/.

Исходный код доступен по адресу
FTP: ftp://kot.spb.ru/pub/src/projects/alarm/alarm-1.02.03b.tar.gz. HTTP: http://kot.spb.ru/projects/alarm/alarm-1.02.03b.tar.gz.


Обратная связь.

По всем вопросам, касающимся данной программы вы можете обращаться ко мне по адресам:
E-Mail:
KOT@MATPOCKuH.SPb.Ru
FIDONet: 2:5030/1340@fidonet.org
IRC: MATPOCKuH@IRCNet, EFNet, Dalnet, Undernet.

Если вы имеете желание и возможность перевести документацию на английский язык, или создать man page для программы, или заняться каким либо продвижением программы - пожалуйста, свяжитесь со мной.



MATPOCKuH
06.11.2001