25. РАЗНЫЕ СПОСОБЫ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ vkACL

Программа-интерпретатор языка ACL -- vkACL.jar сделана в таком виде, что она способна работать в трех модификациях:
___ 0 - полный вариант, то есть среда разработки и проигрыватель всех готовых ACL программ
___ 1 - специальный вариант с окном под конкретную ACL программу
___ 2 - проигрыватель конкретной ACL программы без внешнего вида
Указание в какой модификации должна работать программа делается следующим образом. В тексте файла стартовой ACL программы [start.acl] в первой строке должны быть набраны 12 параметров, заканчивающихся символом вертикальной черты. Как раз 11-й параметр и должен иметь значение 0, 1 или 2 для разных модификаций (мод). Остальные параметры имеют смысл только для моды 0. Cодержание программы [start.acl], которая исходно находится внутри jar файла, должно быть написано в соответствии с правилами для каждой модификации.

При модe 0 там может вообще ничего не быть, кроме первой строки. А может быть произвольный код, который будет выполнен при запуске программы.

При моде 1 там должен быть весь код программы, который должен реагировать на значения переменной &. Код должен быть разбит на процедуры, которые вызываются по условию. В случае #case 100 должен быть записан код, который сработает в самом начале. Случаи #case 1, #case 2 и так далее должны соответствовать коду, который будет выполнен при клике на n-м разделе меню, считая слева направо. При этом дополнительно в файле person.aba должен быть набран код, который запускается при клике в меню Help на русском (#case 1) и английском (#case 2) языках. А в разделе меню Exit должен быть выход по команде #exit. Кроме того, в первых строках файла должен быть записан протокол для записи всех разделов меню окна. Об этом я напишу чуть позже. Протокол работает также и в моде 0, если он записан, там он добавляется к основным разделам меню.

При моде 2 код программы [start.acl] может быть произвольным, но необходимо предусмотреть выход из программы по команде #exit. В этом случае просто выполняется код из этого файла, сам интерпретатор никак себя не показывает. Если необходимо что-то показывать, то это должна делать ACL программа.

Удобство нового подхода в том, что ACL программы для вариантов (1) и (2) можно сначала разрабатывать в варианте (0), а потом уже ставить в те программы, где они реально будут использоваться. Варианты (1) и (2) удобны для сторонних пользователей, которые могут вообще не знать про язык программирования ACL. Они будут считать, что программа написана на языке Java. Поэтому сейчас удобно начинать разработку новой ACL программы в варианте интерпретатора (0), из которого легко и быстро можно получить любые варианты, в том числе спец-вариант и проигрыватель.

У меня существуют образцы готовых программ для спец-варианта и проигрывателя. Специальный вариант программы можно делать так, чтобы основное окно совсем не было видно, а меню отсутствовало. Например, если программа сразу начинает с окна диалога, который приклеен к основному окну. Поэтому иконка в статусной строке есть, но по ней открывается диалог, а не основное окно. Иногда основное окно полезно убрать в левый нижний угол экрана под статусную строку так, что его совсем не будет видно. Но проблема в том, что есть окна, которые явно ориентируются на позицию основного окна, например, менеджер файлов. И в этом варианте они плохо позиционируются.

Чтобы этого избежать можно оставить окно на экране в левой верхней позиции, но оно всегда будет закрыто окном диалога. Зато все другие зависимые окна также будут в левой верхней позиции. Такой вариант программы можно сделать основным для программ без меню, но с иконкой с статусной строке. А проигрыватель удобен только для программ, которые вообще не имеют внешнего вида, а просто читают одни файлы, что-то считают и записывают другие файлы. Делать образцы таких программ не очень удобно, так как они со временем будут устаревать. Разумно сделать программу, которая будет автоматически превращать моду (0) в моду (1) или (2).

Важно, что jar файл проигрывателя в любой моде может иметь произвольное имя, и список служебных файлов может быть любым. Для среды разработки это не актуально и можно переименованием не заниматься. Работа программы в виде среды разработки имеет некую специфику. При первом запуске программа вынимает из себя файл start.acl в папку программы. Затем она каждый раз перезаписывает в нем первую строку, и считывает из нее все праметры, кроме индекса модификации. При запуске программы индекс модификации все равно считывается из файла start.acl внутри файла vkACL.jar. А все другие параметры считываются из файла start.acl в папке программы.

Инструкция по записи файла [start.acl] для специального варианта

Про первую строку я уже написал. Далее по порядку:

2-я строка должна содержать заголовок программы, показываемый в исходном окне с меню

3-я строка содержит 6 полей, разделенных знаком "|". В этих полях должно быть определено 6 чисел: x,y,w,h,tw,th, где x,y -- сдвиг центра окна из центра экрана, w,h -- ширина и высота окна в пикселах экрана, tw,th -- ширина и высота окна терминала. Сдвиг можно задавать произвольно большим, при этом окно всегда располагается в соответствующем угле в пределах экрана.

4-я строка содержит одно число N - число устанавливаемых пользователем иконок меню. Можно задавать 0, тогда меню не будет и остальные строки не нужны.

5-я строка содержит имя первого меню и его мнемонический код, то есть номер клавиши, по которой меню вызывается с клавиатуры (через Alt). Таблица номеров клавиш прилагается вместе с программой.

6-я строка содержит список имен разделов первого меню, разделенных символом "|"

7-я строка содержит список имен-меток каждого раздела, разделенных символом "|". В отличие от первых имен, эти имена должны быть уникальными для всех разделов всех меню и ни разу не повторяться. Кроме того, имена "pppp" и "llll" зарезервированы и не могут быть использованы.

8-я строка содержит числа, разделенные пробелами, парами для каждого раздела меню. Первое число пары есть мнемонический код раздела, то есть номер клавиши по которой меню вызывается с клавиатуры (но теперь без Alt). Второе число пары есть код-ускоритель, то есть опять номер клавиши, по которой данный раздел меню вызывается с клавиатуры непосредственно (через Alt). Эти номера должны быть уникальными для каждого раздела из всех разделов и не повторяться.

Замечу, что число имен в строках 6 и 7 должны совпадать, а в строке 8 число чисел должно быть в 2 раза больше.

(9, 10, 11, 12) (13, 14, 15, 16) .... Последующие строки имеют такую же структуру как 5-8 и содержат такую же информацию для каждой последующей иконки меню. Номера клавиш F1 и F2 для ускорителей зарезервированы и не могут использоваться. Внутрь jar-файла нужно поставить программу [start.acl] и файл фоновой картинки. В меню нужно предусмотреть выход по Exit и в соответствующей процедуре можно уничтожить некоторые файлы перед выходом из программы.

Надо иметь в виду, что в основной моде тоже можно добавить меню, но это делается несколько иначе. Об этом написано тут   .

 Коды клавиш клавиатуры для настройки меню проигрывателя 

 Клавиши, которые предпочтительно использовать

 [0] = 48  [5] = 53  [A] = 65  [F] = 70  [K] = 75  [P] = 80  [U] = 85  [Z] = 90    [F5] = 116
 [1] = 49  [6] = 54  [B] = 66  [G] = 71  [L] = 76  [Q] = 81  [V] = 86  [F1] = 112  [F6] = 117
 [2] = 50  [7] = 55  [C] = 67  [H] = 72  [M] = 77  [R] = 82  [W] = 87  [F2] = 113  [F7] = 118
 [3] = 51  [8] = 56  [D] = 68  [I] = 73  [N] = 78  [S] = 83  [X] = 88  [F3] = 114  [F8] = 119
 [4] = 52  [9] = 57  [E] = 69  [J] = 74  [O] = 79  [T] = 84  [Y] = 89  [F4] = 115  [F9] = 120

 Клавиши, которые лучше не использовать, но если очень надо, то можно

 [BackSp] = 8    [Tab] = 9     [Enter] = 10     [Shift] = 16    [Ctrl] = 17  [Alt] = 18   [CapsLock] = 20
 [Esc] = 27      [Space] = 32  [PageUp] = 33    [PageDn] = 34   [End] = 35   [Home] = 36
 [LeftArr] = 37  [UpArr] = 38  [RightArr] = 39  [DownArr] = 40
 [,] = 44        [-] = 45      [.] = 46         [/] = 47        [;] = 59     [=] = 61 
 [[] = 91        []]=93        [\] = 92         [Insert] = 155  [Delete]=127