   Система событийного программирование SEvents реализует простейший язык 
 событийного программирования с элементом случайности, написана на Java. 
 БНФ языка событийного программирования можно найти в файле BNF.
 Поддерживает подключение модулей в виде динамических библиотек (dll, so).
 Автор: Ринат Биков. mailto: <becase@altlinux.org>
 Лицензия: GPL v3.
 
  Для установки программы достаточно запустить на выполнение jar-файл
  (если не запускается по двойному щелчку, то можно запустить из консоли
  как java -jar sevents.jar).
  Для запуска программы используется скрипт start.bat (start.sh для Linux).
  
Замечание: каталог, куда установлена программа, далее будет называться ~home.

   Краткое описание языка:
 Используется 3 типа переменных и констант: int, double, boolean.

Замечание: система чувствительна к регистру букв.

Заголовок скрипта:
 описание переменных и констант(до тела скрипта):
   Начало описания переменных: var
   Начало описания констант: const
     Переменные и константы перечисляются через запятую,
     при этом возможна начальная инициализация переменных
     необходимым значением через знак "=". По умолчанию
     переменные инициализируются нулевыми значениями.


 Начало тела скрипта: begin
 Начало события: event
 Параметры события (указываются до тела события):
   Имя события: name
   Условие выполнения события: cond
   Возобновимо ли событие: repeatable (true/false)
   Вероятность выполнения события: probability (double 0..1)
     Присвоение значений параметрам имеет синтаксис: 
     <параметр> = <значение>; (пробелы важны)
   Приоритет операторов события: priority (0..MAX_PRIORITY)
 Тело события: body
   Тут список строк, с командами для вычисления. 
   Новую команду необходимо помещать в новой строке.
   Команды после ";" в строке не выполняются.
 Конец события: end
   end необходимо помещать в отдельной строке
 
 Описание используемых в скрипте функций (формат: "<вызов функции> - (<тип значения>)"):
   isSleep(eventName) - (boolean)
   isRun(eventName) - (boolean)
   isFinished(eventName) - (boolean)
   wasEvent(eventName) - (boolean)
   getTime - (int)
   setSleep(eventName) - (void)
   killEvent(eventName) - (void)
   setWake(eventName) - (void)
   getDelay(eventName) - (int)
   setDelay(eventName, delay) - (void)

 Доступные операции скрипта:
 "=" -  операция присваивания,
 "+" - сложение,
 "-" - бинарный минус,
 "*" - операция умножения,
 "/" - операция деления,
 "&&" - логическое "и",
 "||" - логическое "или",
 "^" - логический "XOR",
 "!" - логическое отрицание,
 ">" - операция "больше",
 ">=" - операция "больше или равно",
 "<" - операция "меньше",
 "<=" - операция "меньше или равно",
 "==" - операция сравнения на равенство.
 
Замечание: Операции необходимо отделять от переменных и констант пробелом.

 Приоритеты операций в порядке убывания:
 1. "!".
 2. "*", "/".
 3. "-", "+".
 4. ">", ">=", "<", "<=", "==".
 5. "&&".
 6. "||", "^".
 7. "=".
 

   Работа системы событийного программирования заключается в исполнении
 строк событий сценария, при этом последовательность исполнения строк
 событий зависит от приоритета события и некоторых случайных обстоятельств:
 положения луны на небе, течения ваших мыслей :) (DISORDER_PROBABILITY).
 Строка события с максимальным приоритетом гарантировано выполняется раньше
 строк событий с меньшим приоритетом, строка события с минимальным приоритетом  
 выполняется гарантировано позже строк событий с большим приоритетом.
 Остальное ничего не гарантируется. Также существует вероятность мгновенного
 обновления значений переменных (UPDATE_PROBABILITY).
 
   В системе также есть перменная времени time. 
 В каждый момент времени time выполняются строки активных событий согласно
 порядку, описанному выше, также запускаются подключаемые модули (находящиеся в 
 каталоге ~home/lib). Программа прекращает выполнение скрипта, когда незримой
 переменной terminate в скрипте присвоится истинное значение (выполнится строка
 terminate = true), либо когда системная переменная времени time достигнет значения
 MAX_TIME (это значение можно изменить в пункте меню Настройки->Константы). 
 Текущее значение системной переменной time из скрипта можно получить вызовом 
 функции getTime либо обратившись как к обычной переменной, изменять значение
 переменной time не разрешается.
 
   Для подключения/написания своего модуля, необходимо:
     * В Windows:
       - установить MinGW (http://sf.net/projects/mingw)
       - добавить в переменную окружения path путь к mingw/bin, и в include mingw/include
       - написать модуль в ~home/src/, подключив ~home/src/libloader/include/functions.h
       - вызвать скрипт в ~home/src makemodule-gcc.bat с соответствующим модулю параметром.
     * В Linux:
       - установить gcc
       - написать модуль в ~home/src/, подключив ~home/src/libloader/include/functions.h
       - вызвать скрипт в ~home/src makemodule.sh с соответствующим модулю параметром.
 
Замечание: исходные файлы стандартных модулей лежат в каталоге ~home/src/.
           Там же находятся скрипты для их компиляции под Unix и Windows системы.

   Функции, доступные модулям, можно найти в файле
   * ~home/src/libloader/include/functions.h

 Для вызова модулей используется функция с именем run.
 