<?xml version="1.0"  encoding="UTF-8" ?>

<sect1 id="specials">
<sect1info>
<title
>Особливі змінні і вбудовані загальні змінні</title>
<authorgroup>
<author
><firstname
></firstname
> <surname
></surname
> <affiliation
><address
> <email
></email>
</address
></affiliation>
</author>

<othercredit role="translator"
><firstname
>Юрій</firstname
><surname
>Чорноіван</surname
><affiliation
><address
><email
>yurchor@ukr.net</email
></address
></affiliation
><contrib
>Переклад українською</contrib
></othercredit
> 

</authorgroup>
</sect1info>

<title
>Особливі змінні і вбудовані загальні змінні</title>

<para
>Особливі функції — це функції, які обробляються &kommander;. Вам слід пам’ятати, що до того часу, доки у &kommander; не буде повного інструменту обробки, всі спеціальні функції &kommander; буде виконано спочатку, а вже потім буде виконано скрипт. У більшості випадків це не є проблемою, але іноді проблеми виникають. </para>

<variablelist>
<varlistentry>
<term
><function
>@dcop(<parameter
>ідентифікатор програми</parameter
>, <parameter
>об’єкт</parameter
>, <parameter
>функція</parameter
>, <parameter
>параметри</parameter
>)</function
></term>
<listitem>
<para
>Виконати виклик &DCOP;. @dcop(<quote
>kmail</quote
>, <quote
>KMailIface</quote
>, <quote
>checkMail()</quote
>, <quote
></quote
>) </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@dcopid</function
></term>
<listitem>
<para
>Ідентифікатор &DCOP; процесу. (kmdr-executor-@pid) </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@dialog(<parameter
>діалогове вікно</parameter
>[,<parameter
>параметри</parameter
>])</function
></term>
<listitem>
<para
>Відкриває вказане діалогове вікно Kommander. Пошук діалогового вікна буде виконано у каталозі діалогових вікон, а потім у поточному каталозі, — саме у такому порядку. Цей пошук передує виклику інструменту виконання і встановлює значення типового каталогу у значення адреси каталогу, де знаходиться Kommander. Параметри може бути передано у звичайний для Unix спосіб або передано як іменовані параметри на зразок <quote
>змінна=значення</quote
>. Передані параметри потім можна знайти у глобальній динамічно розподіленій області. Функція @global(змінна) поверне <quote
>значення</quote
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@env(<parameter
>змінна середовища</parameter
>)</function
></term>
<listitem>
<para
>Виводить повну назву вказаної змінної середовища. @env(PWD) виводить $PWD. Пам’ятайте, що <quote
>$</quote
> є частиною оболонок, цю частину використовувати не слід. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@exec(<parameter
>команда</parameter
>)</function
></term>
<listitem>
<para
>повертає дані, виведенні під час виконання вказаною командою. @exec(ls -l). </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@execBegin ... @execEnd</function
></term>
<listitem>
<para
>те саме, що і <function
>@exec</function
>, але з підтримкою послідовності символів «#!» і багаторядкових скриптів. Ця послідовність слугує для запису команд скриптових мов програмування шляхом декларування або за посередництва послідовності початку скрипту, «#!». </para>
<itemizedlist>
<listitem
><para
><function
>@execBegin(php)</function
></para
></listitem>
<listitem
><para
><function
>@execBegin</function
>#!/usr/bin/php</para
></listitem>
</itemizedlist>
<para
>У першому з прикладів використано назву виконуваного файла <acronym
>PHP</acronym
>. &kommander; шукатиме за змінною PATH програму <application
>php</application
>, і якщо його не буде знайдено шукатиме, чи не зареєстровано &kommander; за адресою поза вказаними у змінній PATH. Якщо файл все ж не буде знайдено, програма повідомить про це користувачеві. У другому з прикладів використовується класична послідовність початку скрипту («#!»), і це може дати певні переваги, а також призвести до проблем. Наприклад, якщо у вашій системі встановлено бета-копію <acronym
>PHP5</acronym
> у каталог <filename
>/usr/local/bin</filename
>, який не буде знайдено, оскільки пошук проводитиметься у каталозі <filename
>/usr/bin</filename
>, цей спосіб буде корисним. Якщо ж ви надасте створене діалогове вікно комусь, у кого <acronym
>PHP</acronym
> встановлено до <filename
>/usr/local/bin</filename
>, потрібну програму буде знайдено, якщо ви скористаєтеся варіантом з «#!». Отже вам слід уникати використання «#!» і використовувати назву виконуваного файла програми, якщо ви маєте намір поширювати файли скриптів.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@global(<parameter
>змінна</parameter
>)</function
></term>
<listitem>
<para
>показує значення вказаної загальної змінної. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@null</function
></term>
<listitem>
<para
>Повертає null. За використання цієї функції, під час перевірки Kommander того, чи порожнє значення widgetText, під час виконання повідомлення про неіснуючі помилки буде придушено у випадку невизначеного стану віджета.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@parentPid</function
></term>
<listitem>
<para
>Ідентифікатор батьківського процесу. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@pid</function
></term>
<listitem>
<para
>Ідентифікатор процесу. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@readSetting(<parameter
>ключ</parameter
>, <parameter
>типове значення</parameter
>)</function
></term>
<listitem>
<para
>читає значення з <filename
>kommanderrc</filename
> </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@selectedWidgetText</function
></term>
<listitem>
<para
>виділений вміст у віджеті, який може мати декілька значень, наприклад, у віджетах списків </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@setGlobal(<parameter
>змінна</parameter
>, <parameter
>значення</parameter
>)</function
></term>
<listitem>
<para
>Встановлює для загальної змінної вказане значення. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@widgetText</function
></term>
<listitem>
<para
>вміст віджета </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@writeSetting(<parameter
>ключ</parameter
>, <parameter
>значення</parameter
>)</function
></term>
<listitem>
<para
>записує значення до <filename
>kommanderrc</filename
> </para>
</listitem>
</varlistentry>
</variablelist>

<sect2 id="arrays">
<title
>Група функцій роботи з масивами</title>

<variablelist>
<varlistentry>
<term
><function
>@Array.values(<parameter
>масив</parameter
>)</function
></term>
<listitem>
<para
>Повертає відокремлений символами кінця рядка список всіх значень масиву. Отриманий результат можна використати для перегляду масиву.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.keys(<parameter
>масив</parameter
>)</function
></term>
<listitem>
<para
>Повертає список всіх ключів масиву, розділених між собою EOL (знаком кінця рядка).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.setValue(<parameter
>масив</parameter
>, <parameter
>ключ</parameter
>, <parameter
>значення</parameter
>)</function
></term>
<listitem>
<para
>Встановлює ключ і значення елемента масиву. Якщо масиву ще не існує, його буде створено.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.clear(<parameter
>масив</parameter
>)</function
></term>
<listitem>
<para
>Вилучає всі елементи з масиву.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.count(<parameter
>масив</parameter
>)</function
></term>
<listitem>
<para
>Повертає кількість елементів у масиві.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.value(<parameter
>масив</parameter
>,<parameter
>ключ</parameter
>)</function
></term>
<listitem>
<para
>Повертає значення, пов’язане з вказаним ключем.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.remove(<parameter
>масив</parameter
>,<parameter
>ключ</parameter
>)</function
></term>
<listitem>
<para
>Вилучити елемент з вказаним ключем з масиву.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.fromString(<parameter
>масив</parameter
>,<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Додає всі елементи у рядку до масиву. Рядок має бути вказано у форматі <emphasis
>key\tvalue\n</emphasis
> format.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.toString(<parameter
>масив</parameter
>,<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Повертає всі елементи у масиві у форматі <emphasis
>key\tvalue\n</emphasis
>.</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="files">
<title
>Група функцій, пов’язаних з роботою з файлами</title>
<variablelist>

<varlistentry>
<term
><function
>@File.read(<parameter
>файл</parameter
>)</function
></term>
<listitem>
<para
>Повертає вміст вказаного файла.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@File.write(<parameter
>файл</parameter
><parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Записує вказаний рядок до файла.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@File.append(<parameter
>файл</parameter
><parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Додає вказаний рядок в кінець вказаного файла.</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="strings">
<title
>Група функцій, пов’язаних з роботою з рядками</title>
<variablelist>

<varlistentry>
<term
><function
>@String.length(<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Повертає кількість символів у рядку.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.contains(<parameter
>рядок</parameter
>,<parameter
>підрядок</parameter
>)</function
></term>
<listitem>
<para
>Перевіряє, чи міститься у рядку заданий підрядок.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.find(<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Повертає позицію підрядка у рядку, або -1, якщо підрядок не буде знайдено.</para>
<note
><para
>Ця функція має додатковий цілочисельний параметр для наступного знайденого входження підрядка і використовується у Alpha 6.</para
></note>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.left(<parameter
>рядок</parameter
>, <parameter
>ціле число</parameter
>)</function
></term>
<listitem>
<para
>Повертає перші «ціле число» символів рядка.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.right(<parameter
>рядок</parameter
>, <parameter
>ціле число</parameter
>)</function
></term>
<listitem>
<para
>Повертає останні «ціле число» символів рядка.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.mid(<parameter
>рядок</parameter
>, <parameter
>початок (ціле число)</parameter
>, <parameter
>кінець (ціле число)</parameter
>)</function
></term>
<listitem>
<para
>Повертає підрядок рядка, починаючи з вказаної позиції.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.remove(<parameter
>рядок</parameter
>, <parameter
>підрядок</parameter
>)</function
></term>
<listitem>
<para
>Вилучає всі елементи, які збігаються з вказаним підрядком.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.replace(<parameter
>рядок</parameter
>, <parameter
>підрядок для пошуку</parameter
>, <parameter
>підрядок для заміни</parameter
>)</function
></term>
<listitem>
<para
>Замінює всі елементи, що збігаються з вказаним підрядком, на вказаний рядок-замінник.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.upper(<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Перетворює символи рядка на символи верхнього регістру.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.lower(<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Перетворює символи рядка на символи нижнього регістру.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.compare(<parameter
>рядок</parameter
>, <parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Порівнює два рядки. Повертає 0, якщо рядки рівні, -1, якщо перший з рядків менший, і 1, якщо перший з рядків більший.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.isEmpty(<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Перевіряє, чи є рядок порожнім.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.isNumber(<parameter
>рядок</parameter
>)</function
></term>
<listitem>
<para
>Перевіряє, чи є рядок коректним записом числа.</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="builtins">
<title
>Вбудовані загальні змінні</title>
<para
>Доступ до вбудованих загальних змінних можна здійснити так само, як для звичайних загальних змінних, за допомогою <function
>@global</function
>.</para>
<variablelist>
<varlistentry>
<term
><function
>@global(_KDDIR)</function
></term>
<listitem>
<para
>Каталог, у якому знаходиться поточне діалогове вікно.</para>
</listitem>
</varlistentry>
<varlistentry>
<term
><function
>@global(_NAME)</function
></term>
<listitem
><para
>Назва діалогового вікна.</para
></listitem>
</varlistentry>
</variablelist>
</sect2>

</sect1>
