[an error occurred while processing this directive]

─HM0
─TM0
─PL70
│.........*.......*.......*.......*.......*.......*.......*.......*<

─PE5
|||/CHAIN/ |||

/Назначение/

 |||CHAIN||| делает возможным разбивку программы на несколько небольших
частей.
 Оператор  |||CHAIN|||  позволяет одной программе  загрузить  (|||LOAD|||)  и
автоматически запустить (|||RUN|||)  другую  программу.  Например, одна
программа может позволить пользователю ввести информацию  о  том,
сколько  времени  работали  служащие, а затем передать управление
(|||CHAIN|||)  второй  программе,  которая   распечатает   ведомость  с
заработной платой. В свою  очередь  эта программа может запустить
(|||CHAIN|||)  третью  программу,  которая  выдаст  информацию  о  том,
сколько каждый из служащих заработал в среднем за один час.
 |||CHAIN|||  также  полезен  в играх  с  большим  обьемом  инструкций.
Инструкции можно поместить в  отдельную  программу, которая затем
вызывает (|||CHAIN|||) основную программу, и таким  образом высвободить
память компьютера.

/Примеры/ 900  CHAIN"GAME_1" 1234 CHAIN"NEWPROG" CHAIN A¤

|||/Описание/ |||

 Оператор, который позволяет загрузить и запустить программу, чье
имя указано в качестве аргумента.  Все переменные, за исключением
 % и от A% до Z% инициализируются.

|||/Синтаксис/ |||

CHAIN <string>

-----------------------------------------------------------------

─PE5
|||/CHR¤/ ||| символ

/Назначение/ Преобразование заданного числа в  символ (букву, цифру
и  т.д.).  Символ генерируется в соответствии  с  таблицей  ASCII
кодов.

Оператор VDU имеет тот же  эффект,  что  и  PRINT  CHR¤, но имеет
более универсальный характери применения.

/Примеры/

  220 RED¤=CHR¤(129)

 1070 PRINT CHR¤(8);

перемещает курсор на одну позицию влево.

PRINT CHR¤ (7)

вызывает подачу звукового сигнала.

|||/Описание  /|||  Символьная  функция, возвращающая  одиночный  символ.
Аргумент функции является ASCII кодом символа.

|||/Синтаксис /||| <string-var> = CHR¤(<numeric>)

-----------------------------------------------------------------

─PE5
|||/CLEAR /|||

/Назначение/

 Заставляет  компьютер  забыть все переменные,  которые  были  до
этого использованы, включая  символьные  переменые  и массивы, за
исключением  "резидентных  целых переменных"  % и  от  A%  до  Z%
значения которых остаются без изменений.

/Примеры/
 350 CLEAR
 CLEAR

|||/Описание/ |||

 Оператор,  который  уничтожает  все  переменные,  за  иключением
резидентных целых переменных  % и от A% до Z%.

|||/Синтаксис/ |||

CLEAR

-----------------------------------------------------------------

─PE5
|||/COLOUR/ |||

/Назначение/

 Этот оператор выбирает цвет в  котором  компьютер будет печатать
текст,  а также цвет фона. Если задается  номер  цвета  <128,  то
изменяется цвет текста на экране на указанный цвет. Для изменения
цвета фона  нужно  выполнить  этот  оператор с параметром, равным
номеру нужного цвета + 128.


/Примеры/
 COLOUR 4    - выбор синего цвета текста (4-й цвет)
 COLOUR 129  - выбор черного цвета фона (129-128=1-й цвет)

|||/Описание/|||

 Оператор, который позволяет изменять фоновый и основной цвета.

|||/Синтаксис|||/

COLOUR <num-expr>

-----------------------------------------------------------------

─PE5
|||/COUNT/|||

/Назначение/

 |||COUNT|||  считает  все символы, напечатанные  с  помощью  оператора
|||PRINT|||, в отличие  от  функции  |||POS|||,  которая  возвращает  позицию
курсора на экране.

/Примеры/
 290 A=COUNT
 75  FRED=COUNT
 PRINT COUNT

|||/Описание/ |||

 Функция,  возвращающая  число символов, напечатанных  с  момента
последнего перевода строки.

|||/Cинтаксис/ |||

<num_var>=COUNT

/Демонстрационная программа/ 

 |||Не самый простой способ печати 16 звездочек!|||

 10 X=16
 20 REPEAT PRINT "*";
 30 UNTIL COUNT=X

-----------------------------------------------------------------

─PE5
|||/DEF/||| определить

/Назначение/

 Слово |||DEF||| служит для информирования компьютера о том, что сейчас
начнется  определение  функции  или  процедуры.  Описанная  таким
образом  процедура или функция может  быть   вызвана  по  имени в
любом месте программы.

 Определения процедур и функций могут  находиться  в  любом месте
программы,  но  вне тела программы. Удобнее всего помещать  их  в
конце программы,-  например,  после последнего оператора |||END|||. Это
также улучшает читаемость программы.

 Язык |||Бейсик||| имеет много встроенных  функций  о которых компьютер
уже   знает.   Например,  функция  |||SQR|||  позволяет  ему  извлекать
квадратные корни.

 Однако, довольно часто возникает необходимость  определить  свои
собственные  функции.  Например,  Вам может понадобиться функция,
которая вычисляет факториал. Назовем ее |||fact|||.
 Приведем два варианта - рекурсивный и нерекурсивный: 
  а) Рекурсивный вариант сразу следует из формального определения
факториала:

       1,           если n=0
 n! =
       n*(n-1)!,    иначе

 /Описание функции:/
 1000 DEF FNfact(n%)
 1010 IF n%=0 THEN =1
 1020 =n%*FNfact(n%-1)

  б)   Нерекурсивный   вариант   получается   из   эквивалентного
предыдущему, но уже нерекурсивному описанию факториала:

       1,                  если n=0
 n! =  1*2*...*(n-1)*n,    в противном случае

 /Описание функции:/
 1000 DEF FNfact(n%)
 1010 IF n%=0 THEN =1
 1020 f%=1
 1030 FOR i%=1 TO n%
 1040 f%=f%*i%
 1050 NEXT i%
 1060 =f%

 Функция всегда возвращает результат, поэтому  Вы можете написать
|||X=FNST|||.  Процедура  же  отличается  тем,  что   обычно  выполняет 
несколько действий, и, в общем случае,  может  не  производить ни
какого  числового  результата.  Например,  может  быть определена
процедура, которая просто очищает экран и печатает какой-то текст
на экран.

 Возможно  Вы  не  все поняли,  но  не  отчаивайтесь!  Применение
процедур  и  функций  может,   сначала,  показаться  трудным  для
понимания,  но  это  стоит   Ваших   усилий.   Их   использование
значительно улучшит читаемость и надежность программ.

 Дальнейшее  изложение содержит более детальное  объяснение,  как
пользоваться  процедурами   и   функциями.   Кроме  текста  будут
приведены  несколько   примеров,  которые  Вам  надо  обязательно
разобрать.

 И  процедуры  и функции могут  содержать  локальные  переменные,
которые  объявляются  оператором   |||LOCAL|||.  В  третьем  примере  К
объявлена  как локальная  переменная.  Это  значит,  что  хотя  К
используется внутри  прцедуры,  ее  значение  неопределено  после
выхода  из  процедуры.  На  самом  деле  переменная  К может быть
использована  также  в  любой другой части программы. Но значение
переменной К, используемой где-то  в программе, не будет меняться
при использовании локальной переменной К  внутри процедуры. Любая
переменная,  которая  не  объявлена как локальная  (|||LOCAL|||)  будет
доступна вне процедуры, т.е. для остальной части программы. 

 Кроме этого, при вызове процедур  и  функций им можно передавать
параметры. Посмотрите на первый из приведенных примеров: в строке
 1010 выглядит следующим образом

 1010 DEF FNST(g)=1.15*g

 |||'g'|||  называется  'формальным  параметром'  функции   |||FNST|||.   Это
указывает компьютеру, что при вызове данной функции ей необходимо
передать одно число, и что  внутри функции мы решили использовать
букву g для обозначения переменной.

 Функция   'вызывается'  или  используется,  например,  следующим
образом :

 230  PRINT "За один год  Ваши  проценты  составят  ";
 236  PRINT FNST(P)

 и, в этом случае, 'Р'  -  это 'фактический параметр' для функции
|||FNST|||.  Какую бы переменную Вы не использовали  вместо  Р  Вы  все
равно ссылались бы на формальный параметр 'g' внутри функции. Это
очень удобно,  так  как позволяет использовать произвольные имена
для обозначения переменных внутри  процедуры, и затем вызывать ее
с параметрами, имеющими совершенно другие имена. Очень часто одна
и  таже  процедура  вызывается  несколько   раз  из  разных  мест
программы и при каждом вызове  фактические  параметры могут иметь
различные имена.

 Если  процедура  или  функция  определяется,   скажем,  с  тремя
формальными параметрами, то при вызове ей необходимо предоставить
три фактических параметра. Смотрите четвертый  пример  ниже,  где
функции передаются три параметра.

 Конец  процедуры помечается оператором |||ENDPROC|||.  Конец  функции,
состоящей из  нескольких  строк,  помечается  оператором, который
начинается  со  знака  |||=|||.  Функция  примет   значения  выражения,
стоящего справа от знака |||=|||.

/Примеры/
 /Первый пример - законченная программа:/

 210 REPEAT
 220 INPUT "Величина  вклада ",Р
 230 PRINT "За один год Ваши проценты составят ";
 236 PRINT  FNST(P)
 240 UNTIL P=0
 250 END
 1000 REM "числовая функция из одной  строки" 
 1010 DEF FNST(g)=0.03*g

 /Второй пример - фрагмент программы:/
 Многострочная строковая функция с одним строковым параметром.

 1000 DEF FNreverse(A¤)
 1010 REM  "переставляет символы в A в обратном порядке"
 1015 LOCAL d%,B¤
 1030 FOR d%=1 TO LEN(A¤)
 1040 B¤=MID¤(A¤,d%,1)+B¤
 1050 NEXT d%
 1060 =B¤

 /Третий пример:/ 
 Многострочная процедура с одним параметром.

 200 DEF PROCbye(X)
 210 REM  "печатает  До  свидания!  X  раз"
 220 LOCAL K
 230 FOR K=1 TO X
 240 PRINT "До  свидания!"
 250 NEXT K
 260 ENDPROC

/Четвертый пример - законченная программа/

 110 INPUT  X,Y,Z
 120 M=FNmean(X,Y,Z)
 130 PRINT "среднее арифметическое для ",X,Y,Z
 140 PRINT  "есть  ";M
 150 END
 8990 REM "Числовая функция из одной строки"
 8995 REM "с тремя параметрами"
 9000 DEF FNmean(A,B,C)=(A+B+C)/3

|||/Описание/ |||

 Программный  объект, который  должен  предшествовать определению
функции или  процедуры пользователя. Возможно не только числовые,
но  и   строковые  функции.  Разрешается  определение  функций  и
процедур, состоящих более,  чем  из одной строки. Все процедуры и
функции  должны быть помещены в  неисполняемую  часть  программы,
например, после  оператора  |||END|||. Возможно использование локальных
переменных, разрешена рекурсия.

|||/Синтаксис/ |||

DEF FN | PROC<variable name>
    [ ( <string> | <numeric> { , <string> | <numeric> } ) ]

-----------------------------------------------------------------

─PE5
|||/DEG/||| градусы

/Назначение/

 Эта  функция  переводит  значение  величины  угла,  заданного  в
радианах,  в  градусы.  Один  радиан   равен   приблизительно  57
градусам.

/Примеры/

 100 X=DEG(PI/2)

 300 angle=DEG (1.36)

 PRINT DEG(PI/2)

|||/Синтаксис/|||

<num-var>=DEG<numeric>

-----------------------------------------------------------------

─PE5
|||/DIM/||| размер массива

/Назначение/

 Вы можете работать не только  с простыми переменными, такими как
'X' или 'name¤', но и с 'массивами' переменных. Это очень полезно
при  работе  с  группами  чисел  или  слов.  Например,  если  Вам
предстоит   работать   с  некоторой  информацией  о   номерах   в
четырехэтажной гостинице с 30 номерами на  каждом этаже то массив
из 4 на 30 ячеек можно создать следующим образом:

 DIM hotel(4,30)

 Создав  таким  образом  массив, Вы  можете  занести  необходимую
информацию в любой из  его 'элементов'. Например стоимость номера
на одну ночь может быть равной 26.50 и 165.00

 hotel(1,22)=26.50
 hotel(4,1)=165.00

 На самом деле оператор |||DIM hotel(4,30)||| создает массив из 5 на 31
ячеек, так как наименьший элемент массива это hotel(0,0).

 Массив /hotel/ - это пример 'числового двумерного массива'. Другой
массив может содержать имена тех, кто остановился в гостинице:

 DIM name¤(4,30) 
 name¤(1,22)="Иванов И.И."
 name¤(4,1)="Петров П.П."

 Такой массив называется 'двумерным числовым массивом'.

 Массивы  могут быть одно- или  многомерными.  Одномерный  массив
подойдет для всех зданий на улице, например :

 DIM MainStreet(150)

 Такой  массив  называется  'одномерным числовым  массивом'.  Все
массивы  обычно объявляются в  самом  начале  программы.  Попытки
изменить размеры  или  размерность  ранее  объявленного массива -
'незаконны'. Число элементов массива, также как и его размерность
ограничиваются  только  объемом памяти компьютера. При объявлении
массива оператором |||DIM|||  следите за тем, чтобы между |||DIM||| и скобкой
не было пробелов. Таким  образом |||DIM A(10)||| - это правильно, а |||DIM
A (10)||| - не будет объявлять массив.

/Примеры/
 100 DIM partnumbers(1000)

 3000 DIM employeename¤(35)

 240 DIM ALL_hours_in_the_week(24,7)

 100 DIM A(X)

|||/Описание/|||

 Оператор,   который  объявляет  массив.  Массивы   должны   быть
объявлены прежде чем Вы будете ими пользоваться. После объявления
все  элементы  числовых массивов принимают  нулевое  значение,  а
элементы  символьных  массивов  заполняются  'пустыми  строками'.
Младший элемент массива  - это нулевой элемент. Таким образом |||DIM
X(4)||| создает массив из пять элементов (от 0 до 4 включительно).

 Есть  второй,  существенно  отличающийся,  вариант использования
оператора  |||DIM|||.  Он  может быть  использован  для  резервирования
байтов  в памяти для  специальных  приложений.  Для  того,  чтобы
зарезервировать 25 байт, напишите :

 DIM X 24

 Обратите внимание на то, что   между переменной X и (числом байт
минус 1) ставится пробел (во всяком  случае должен присутствовать
любой  допустимый  разделитель  отличный от скобки). Адрес начала
группы из 25 байт будет помещен в переменной X для этого примера.
Такая форма оператора |||DIM|||  находит  очень  широкое применение при
работе  со  ссылочными  структурами  данных и вообще  при  прямых
обращениях  к  памяти (см. операции  ?,  !  и  ¤),  а  также  при
резервировании места для  размещения машинных кодов, получаемых с
помощью  встроенного  в |||BBC  BASIC|||  транслятора  ассемблера  (см.
соответствующий разделы).

|||/Синтаксис/|||

    DIM <num-var> | <str-var> ( <numeric> { , <numeric> } ) или
    DIM <num-var> <numeric>

-----------------------------------------------------------------

─PE5
|||/ELSE/|||

/Назначение/

 Для  обеспечения  альтернативных  действий.  |||ELSE|||   может   быть
использовано в операторах |||IF...THEN|||, |||ON...GOTO||| и |||ON...GOSUB|||. 

/Примеры/
  560 IF length>0 THEN  PRINT  "Отлично"  ELSE  PRINT  "Не
правильно"

 100 IF A<>B THEN C=D ELSE PRINT "Совпадают!"

|||/Описание/|||

 Часть структуры |||IF ... THEN ... ELSE|||.

|||/Синтаксис/|||

    IF <num-expr> [ THEN ] [ <statement> ]
                  [ ELSE [ <statement> ] ] 

или

    ON <num-var> GOTO <numeric> { , <numeric> }
               [ ELSE [ <statement> ] ]  или
    ON <num-var> GOSUB <numeric> { , <numeric> }
               [ ELSE [ <statement> ] ]

-----------------------------------------------------------------

─PE5
|||/END/|||

/Назначение/

 Информирует компьютер о том, что достигнут конец программы.
 |||END|||  -  необязательный оператор, но  может  быть  использован  в
программе столько раз, сколько нужно.

/Пример/
 9000 END

|||/Описание/|||

 Необязательное  обозначение  места  окончания  программы  (может
размещаться где угодно в программе и сколько угодно раз).

 Команда |||END||| выполняет также следующую  специальную  функцию: она
заставляет |||BASIC||| просмотреть программу в памяти на предмет поиска
маркера  конца  программы.  После  чего  |||BASIC||| устанавливает свои
внутренние указатели. Это может оказаться полезным  при необычных
процедурах  загрузки.  Если пользователь меняет значение |||PAGE|||, то
внутренние указатели, такие  как  |||TOP|||  не  сбрасываются  пока  не
встретится команда или оператор |||END|||.

|||/Синтаксис/|||

END

-----------------------------------------------------------------

─PE5
|||/ENDPROC/ |||конец процедуры

/Назначение/

 Отмечает  конец определения процедуры. Смотрите  ключевое  слово
|||DEF||| для большей информации.

/Пример/
 1000  DEF PROCdash(param)
 1030  LOCAL  counter 
 1040  FOR counter=1  TO param 
 1050  PRINT"-";
 1060  NEXT  counter 
 1070  ENDPROC

|||/Описание/ |||

 Часть структуры |||DEF PROC ... ENDPROC|||

|||/Синтаксис/|||

ENDPROC

-----------------------------------------------------------------

─PE5
|||/ERL/||| номер строки, в которой произошла ошибка

/Назначение/

 Позволяет программе определить номер строки, в которой произошла
последняя ошибка.

/Примеры/
 8500 X=ERL

 8100 IF ERL=100 THEN PRINT "Я не понял"

 300 IF ERL=10000 THEN CLOSE#0

|||/Описание/ |||

 Функция,   возвращающая  номер  строки,  в   которой   произошла
последняя ошибка.

|||/Синтаксис/|||

<num-var>=ERL

-----------------------------------------------------------------

─PE5
|||/ERR/||| ошибка

/Назначение/

 Если  компьютер  обнаружил  ошибку,  с   которой   он  не  может
справиться, он выводит сообщение об  ошибке на экран. Кроме этого
он  запоминает  'номер  ошибки'.  Например, если  Вы  попытаетесь
провести вычисления с числами, которые  являются слишком большими
для  компьютера, он выдаст сообщение |||Too  big|||  и  запомнит  номер
ошибки 20.

 Нажатие на клавишу |||РЕД||| приводит  к ошибке (ошибке номер 17) и Вы
можете обнаружить это и произвести какие-либо  действия по Вашему
желанию.

 Можно   заставить   компьютер   самостоятельно   справляться   с
большинством   из   таких   ошибок,   написав  специальный  кусок
программы,  который  будет  отвечать  за  поведение  программы  в
непредвиденных  ситуациях.  Эта часть программы должна знать, где 
и  какая ошибка произошла.
 Функция  |||ERR|||  позволяет Вашей программе  найти  номер  последней
зафиксированной ошибки. Это,  в общем случае, позволяет программе
выдавать   информативное   сообщение  пользователю,  допустившему
ошибку.

/Примеры/
 1000 wrong=ERR

 100 IF ERR=17 THEN PRINT "Вам не удастся от меня убежать!"

 1230 IF ERR=18 THEN PRINT "На ноль делить нельзя!"

|||/Описание/|||

 Возвращает номер последней зафиксированной ошибки.

|||/Синтаксис/|||

<num-var>=ERR

-----------------------------------------------------------------

─PE5
|||/EVAL/||| вычислить

/Назначение/

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

 Например, предположим, что программа должна  вычислять  значения
некоторой  функции  и  Вам  необходимо  ввести выражение для этой
функции  во время работы программы. В  большинстве  версий  |||BASIC|||
сделать это  чрезвычайно  трудно.  В  |||BBC  BASIC|||  выражение можно
поместить  в  символьную  переменную, а затем попросить компьютер
обработать эту переменную с помощью |||EVAL|||.

 Так как эта функция не  входит  в  стандартный  набор операторов
|||BASIC|||, то мы приведем несколько примеров выражений, которые могут
быть вычислены с помощью |||EVAL|||.

 EVAL A¤

 A¤="M*X+C"

 A¤="SIN(x/120)+COS(x/30)"

 Надо отметить, что хотя функция  |||EVAL||| может вычислять выражения,
содержащие такие функции, как |||SIN, COS, SQR||| и т.д., она не сможет
выполнять  операторы,  например, |||A=EVAL"MODE 0"||| вызовет сообщение
об ощибке.

/Примеры/
 100 X=EVAL(A¤)

 234 value=EVAL(z¤)

|||/Описание/|||

 Функция,  которая  передает  на  вход   подпрограммы  вычисления
выражений  символы,  содержащиеся  в  аргументе.  Простой  способ
вычисления функции, введенной пользователем  в программу.

|||/Синтаксис/ |||

<num-var> = EVAL <string> 

или

<str-var> = EVAL <string>

/Демонстрационная программа/

 10 INPUT A¤
 20 FOR  X=1 TO 5
 30   Y=EVAL A¤ 
 40 PRINT Y
 50 NEXT X
 >RUN
 ? 5*X
          5
         10
         15
         20
         25

 Bторая программа заставляет компьютер работать как калькулятор

 5  REPEAT
 10 INPUT B¤
 20 PRINT  EVAL B¤
 30 UNTIL FALSE
 >RUN
 ?3+4
          7
 ?SIN (RAD (45))
 0.707106781
 ?

-----------------------------------------------------------------

─PE5
|||/EXT#/ |||

/Назначение/

 Определение   размера   файла.   Возвращаемое   число   означает
количество   байт   в   файле.   Исследуемый   файл  должен  быть
предварительно открыт командами OPENIN или OPENOUT.

/Примеры/

   100 X=EXT#(employee)
 PRINT EXT# (N)

|||/Описание/|||

 Функция  возвращает  длину  файла  в  байтах.  Аргумент  функции
является номером открытого файла.

|||/Синтаксис/|||

<num-var>=EXT#(<num-var>)

-----------------------------------------------------------------

─PE5
|||/FALSE/ |||

/Назначение/

 Иногда компьютеру приходится решать является  что-либо  истинным
или нет. Например:

 10 X=12
 20 IF X=20 THEN PRINT "X равно 20"

 Ясно, что в этом примере  утверждение  X=20  -  ложно.  Так  что
программа никогда не напечатает 'X равно 20'.

 100 X=12
 110 REPEAT
 120 PRINT "Привет"
 130 UNTIL X=20

 будет все время печатать 'Привет',  так  как X никогда не станет
равным 20. X=20 - это, в данном случае, ложь (|||FALSE|||). Аналогичный
результат производит и следующая программа:

 110 REPEAT
 120 PRINT "Привет"
 130 UNTIL FALSE

 где в 130 строке указано не заканчивать цикл никогда.

 На самом деле у компьютера есть числовое значение для |||FALSE|||. Это
ноль. Таким образом  

 PRINT FALSE
 напечатает 0.

 Аналогично

 PRINT 2*2=5
 тоже напечатает 0, так как 2*2=5 - это ложь (|||FALSE|||).

 Часто бывает удобно написать где-нибудь в программе, например:

CLOCKSET = FALSE

 и, в дальнейшем, Вы можете пользоваться этим:
  IF CLOCKSET THEN PRINT "Часы показывают правильное время"

/Примеры/
 100 oldenough = FALSE

 245 UNTIL FALSE

|||/Описание/ |||

 Функция, возвращающая нулевое значение.

|||/Синтаксис/|||

<num-var> = FALSE

-----------------------------------------------------------------

─PE5
|||/FN/||| функция

/Назнaчение/

 |||FN|||,  стоящее перед именем переменной,  указывает,  что  это  имя
используется для  обозначения  функции. Могут быть определены как
числовые, так и символьные  функции.  Дополнительную информацию о
функциях и процедурах Вы можете найти  в описании ключевого слова
|||DEF|||.

 Так как функция всегда возвращает  некоторое  значение, она чаще
всего  появляется  в  правой части оператора присваивания  или  в
операторе |||PRINT|||. Процедуры, в  отличии  от  функций не возвращают
результа.

/Пример/
 100 DEF FNmean2(x,y)=(x+y)/2

|||/Описание/|||

 Зарезервированное    слово   для   обозначения   имен   функций,
определенных пользователем.

|||/Синтаксис/|||

<num-var> = FN<variable-name>
  [ ( <num-expr> | <str-expr> { , <num-expr> | <str-expr> } ) ]
     или  <str-var> = FN<variable-name>
  [ ( <num-expr> | <str-expr> { , <num-expr> | <str-expr> } ) ]

-----------------------------------------------------------------
[an error occurred while processing this directive]