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

Начиная с версии 2.8.5 программа сделана в таком виде, что она способна работать в нескольких модификациях сразу. Как и прежде, есть короткая и полная версия программы. Но обе версии фактически полностью идентичны, за исключением того, что короткая версия прокомпилирована с файлом MainPro.java, имеющем тот же код и столько же строк, сколько и полная версия, но строки 22-23, 76-77 и 1814-1926 закомментированы, а папка [com] не содержит папки [Lowagie]. Таким образом превратить полную версию программы в короткую очень просто: достаточно закомментировать указанные строки в тексте полной версии. Номера строк процедуры pdocop со временем могут измениться, но алгоритм ясный.

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

Естественно, что содержание программы [start.acl], которая находится внутри jar файла, должно быть написано в соответствии с правилами для каждой модификации.

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

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

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

Обычно среду разработки удобно использовать в полном варианте программы (t0), а спец-вариант и проигрыватель в коротком варианте (s1) и (s2). Однако, с учетом того, что короткая программа развивается быстрее полной, отладку программ для вариантов (s1) и (s2) также удобно проводить в (s0). Удобство нового подхода в том, что ACL программы для вариантов (s1) и (s2) можно сначала разрабатывать в варианте (s0), а потом уже ставить в те программы, где они реально будут использоваться. Варианты (s1) и (s2) удобны для сторонних пользователей, которые могут вообще не знать про язык программирования ACL. Теперь две модификации программы: без pdf (1) и с pdf (2) практически идентичны, первая отличается от второй только тем, что в ней закоментированы куски кода, связанные с работой над pdf файлами и вынута библиотека классов для работы с pdf файлами. Все остальное полностью совпадает.

Это не совсем так реально, но к этому я буду стремиться. Я буду продолжать развивать короткую версию, и периодически доводить полную версию до короткой, когда изменений накопится достаточно много.

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

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

Чтобы этого избежать разумно оставить окно на экране в левой верхней позиции, но оно всегда будет закрыто окном диалога. Зато все другие зависимые окна также будут в левой верхней позиции. Такой вариант программы можно сделать основным для программ без меню, но с иконкой с статусной строке. А проигрыватель хорош только для программ, которые вообще не имеют внешнего вида, а просто читают одни файлы и записывают другие. Образцы находятся в папке [ACL-unit] как [frame-example-1], [frame-example-2] и [player-example-1]. Их можно использовать для создания новых вариантов программ. Кое-какие служебные файлы есть также в папках с кодом программ.

Важно, что 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