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

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

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

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

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

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

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

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

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