Как работает Java-ACL-апплет

Здесь дается краткая инструкция о том как написать html-файл, запускающий Java-ACL апплет.
Для этого используются стандартные тэги (скобки) <applet>...</applet>. Открывающая скобка 
имеет стандартный вид

<applet code="vkACL" archive="vkACLapp.zip" codebase="http://a.b.ru/" width="1%" height="1%">

Параметры code и archive всегда одни и те же, а вот параметр codebase может отсутствовать,
если архив находится в той же папке на локальной машине. Если же архив помещен на сервер,
то нужно указать координаты сервера. Область апплета в данном случае никак не используется
и ее можно задавать любой, но лучше всего небольших размеров, хотя можно и на весь экран.
Конкретная информация о главном окне ACL программы и о ее коде передается через теги 
<param ...>. В этих тегах параметр name задан, а вот параметр value можно меняться от 
программы к программе

<param name="title" value="Заголовок главного окна">
<param name="dimwin" value="смещениеX|смещениеY|ширина|высота">

Здесь первый параметр очевиден, второй задает положение и размеры главного окна в пикселах.
Положение задается относительно центра экрана, то есть например "0|0|600|500" означает
поместить окно размером 600*500 пикселей точно в центре экрана. Разделители значений в
виде вертикальной черты будут часто использоваться.

<param name="nmenu" value="2">
<param name="menu" value="Меню1 кнопка1|кнопка2 Меню2 кнопка1|кнопка2|кнопка3">

Здесь первый параметр задает число разделов меню, а второй - имена всех разделов и имена
всех кнопок каждого раздела через разделитель |. Все кнопки приобретают номера, начиная
от первого для первого раздела меню и первой кнопки и так далее подряд по всем разделам
меню.

<param name="imgf" value="imag1.png|imag2.jpg|imag3.gif">

Этот параметр указывает имена всех файлов с картинками, которые будут использоваться в 
программе, через разделитель |. Все эти файлы должны находиться в архиве vkACLapp.zip
вместе с классами апплета. Поэтому архив необходимо обновлять от программы к программе.
После считывания картинок в память, каждая из них затем используется по своему порядковому
номеру, начиная от нуля, то есть первая картинка имеет номер 0, вторая 1 и так далее.
Если картинок нет, то надо задавать один пробел, то есть " ".

<param name="audif" value="audic1.mid|audic2.au|audic3.wav">

Этот параметр точно таким же образом указывает все имена файлов с аудиоклипами в форматах
au, wave, midi, aiff. Они также считываются в самом начале работы программы в память и
затем используются по номерам в команде #ag. Если аудиоклипов нет, то надо задавать один 
пробел, то есть " ". Все файлы должны быть в архиве.
 
<param name="data" value=" "> 

Этот параметр зарезервирован для последующего развития программы, пока он не используется,
но считывается. Поэтому его надо ставить в неизменном виде.

<param name="prog" value="
#case 1 
 код программы выполняемый по выбору первой кнопки меню
#end |
#case 2 
 код программы выполняемый по выбору второй кнопки меню
#end | 
#case 3 
 код программы выполняемый по выбору второй кнопки меню
#end | 
#case 4 
 код программы выполняемый по выбору второй кнопки меню
#end |  
и так далее для всех кнопок меню, которые описаны выше в параметре menu.
">
</applet>

Параметр "prog" наиболее сложный. Он содержит полный код ACL программы. В данном случае
значение value можно и нужно писать в несколько строк. Единственным условием является то,
что код программы не должен содержать двойных апострофов. В самом коде апострофы не 
используются, а при задании апострофов в тексте сообщений (в форматированной строке)
необходимо использовать конструкцию \U34;. При каждом выборе кнопки меню программа 
запускается на исполнение с самого начала и при этом переменная & принимает значение,
равное номеру выбранной кнопки меню. Программа, написанная в виде, указанном выше, будет
выполнять только тот кусок, в котором код команды #case равен значению номера выбранного
меню. Код программы может содержать не более 200000 знаков, но это практически недостижимо. 
Общие процедуры можно описать перед командой #case 1 и затем использовать везьде. Локальные 
процедуры можно описывать в каждом блоке отдельно. В данной версии текст из внешних файлов 
использовать нельзя, хотя в последующем я попробую такую возможность сделать. Кроме того, 
в будушем параметр data будет поставлять статическую численную информацию (данные), пока 
и этого нет. Так как параметр "prog" последний, то после его закрытия нужно поставить 
закрывающую скобку апплета.
 
В самом html-файле до и после апплета можно записать любое содержание. Окна апплета
появляются независимо от окна браузера и ничего не загораживают, точнее их можно перемещать
по экрану.

Список команд и операций,
поддерживаемых Java-ACL-апплетом

Описание ACL можно посмотреть в разделах "Введение в язык ACL" и "Документация для КПК" на сайте
vkacl.narod.ru
В будущем я предполагаю написать цикл лекций по языку с более подробным изложеним методов 
программирования. Но пока пользуйтесь примерами. Важно знать какие команды и какие операции 
в данной версии НЕ ПОДДЕРЖИВАЮТСЯ. Поэтому я просто перечислю все команды и их операции, которые 
апплет выполняет. Делает он это стандартным образом, хотя внешний вид программы несколько 
отличается по причине использования версии Java ниже 1.2 (без SWING).

# a=..; i(1)=..; r(1)=..; s(1)=..; t(1)=..; математические вычисления

#ag [op=o;] открытие анимационного окна
#ag [op=m;] смена кадра в анимационном окне
#ag [op=c;] закрытие анимационного окна

#case cod ... #end | сложный цикл и условный оператор

#col [b= ; le= ; fir= ;] определение массива цветов

#d 5 r(1) 1,2 3,4 5,6 7,8*2 2 i(1) 1 2 задание значений переменным

#e [c=;] NAME NAME ... выполнение процедур по условию
#e _NAME NAME ... безусловное выполнение процедур
#e [c=; b=; le=;] text выполнение кода из текстового массива

#exit окончание работы интерпретатора

#g [op=open;] открытие графического режима и области рисования
#g [op=cont;] продолжение - область рисования не пуста
#g [op=clos;] закрытие графического режима, показ и запись картинки
#g [op=text;] рисование текста
#g [op=line;] рисование линии
#g [op=area;] рисование области
#g [op=rect;] рисование прямоугольника
#g [op=oval;] рисование эллипса
#g [op=arc;] рисование фрагмента эллипса
#g [op=imag;] вставка картинки в рисунок
#g [op=axes;] вставка осей координат
#g [op=rfun;] чтение данных для функций
#g [op=dfun;] рисование значений функций на осях
#g [op=axon;] рисование аксонометрической проекции функции z(x,y)

#go n безусловный переход

#init возвращение нормальной работы циклов

#inp [n=; le=;] FT ... установка панели с окнами ввода

#m [op=win;] сообщение в окне с кнопкой [OK]
#m [op=oce;] сообщение в окне с кнопками [OK] [Cancel] [Edit]
#m [op=yno;] сообщение в окне с кнопками [Yes] [No]
#m [op=uni;] сообщение в окне с произвольными кнопками

#ma [op=cwm;] вычисление ширины максимума
#ma [op=fis;] интерполяция строк матрицы кубическим сплайном
#ma [op=ffi;] интерполяция строк матрицы в произвольный интервал
#ma [op=fno;] нормирование матричных строк
#ma [op=mii;] инверсия индексов матрицы
#ma [op=mmi;] интерполяция матрицы в матрицу
#ma [op=mss;] суммирование строк и столбцов матрицы
#ma [op=mtr;] транспонирование матрицы
#ma [op=vac;] добавление к вектору константы (поэлементно)
#ma [op=vba;] преобразование вектора из байтов в ASCII коды
#ma [op=via;] инициализация вектора арифметической прогрессией.
#ma [op=vic;] инициализация вектора (все элементы равны константе)
#ma [op=vmc;] масштабирование вектора (умножение на константу)
#ma [op=vva;] сложение вектора с вектором
#ma [op=vvs;] скалярное умножение вектора на вектор

#p [...] предварительное определение параметров

#pas n r(101) r(501) пересылка данных из массива в массив

#pri FT печать в текстовый массив

#pro NAME ... @ оформление системы команд в процедуру

#read [fir=; n=; b=; le=;] чтение чисел из текстового массива

#rep n ... #end простой цикл

#rob [mo=1;]  остановка работы программы на заданное время 

#sel [nx=; ny=; mo=;] FT FT выбор кнопки из таблицы кнопок

#stop остановка работы ACL-программы

#sys [op=st;]  задание временной отметки
#sys [op=gt;]  получение разности между данным моментом и временной отметкой

#te [op=find;] поиск знаков в тексте
#te [op=repl;] замена знаков в тексте
#te [op=trim;] выделение текста без пробелов
#te [op=tail;] обработка хвоста текста
#te [op=show;] показ текста в редакторе
#te [op=edit;] редактирование текста
Hosted by uCoz