<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF122:SciLab - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF122:SciLab&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 20:56:26 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF122:SciLab&amp;diff=10641&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''''Scilab''''' Создадим для него пакет расширений и обогатим новыми возможностями&lt;br /&gt;
&lt;br /&gt;
==''Scilab'': Создаем Toolbox==&lt;br /&gt;
&lt;br /&gt;
{{Цикл/SciLab}}&lt;br /&gt;
&lt;br /&gt;
: Если возможностей, встроенных в ''Scilab'', недостаточно для ваших целей, '''Александр Бикмеев''' покажет, как обучить его новым трюкам (ко всеобщей пользе, разумеется).&lt;br /&gt;
&lt;br /&gt;
Сегодня многие уже понимают, что свободное ПО часто может заменить проприетарное без особого ущерба для функциональности. Например, свободные математические пакеты прочно обосновались на жестких дисках не только зарубежных, но и российских пользователей. Но... оказывается, что для решения некоторых задач их возможностей не хватает. Что же делать? Наверное, следует действовать в лучших традициях мира Open Source – если чего-то недостает, то это следует создать самому! Тем более, что в программе Google Summer Code&lt;br /&gt;
все чаще появляются задачи по созданию расширений для свободных математических пакетов.&lt;br /&gt;
&lt;br /&gt;
На данном уроке мы познакомимся со стандартной процедурой создания пакета расширений (Toolbox) для СКА ''Scilab'' ([[LXF106:SciLab|LXF106–109]]) при помощи макросов на встроенном языке программирования. Англоязычное руководство по написанию пакетов расширений можно найти на официальной вики: http://wiki.scilab.org/howto/Create_a_toolbox.&lt;br /&gt;
&lt;br /&gt;
===Каталоги===&lt;br /&gt;
&lt;br /&gt;
Если мы создаем какой-то пакет, содержащий функции, то все его файлы должны находиться в одном каталоге. Имя корневого каталога должно совпадать с названием самого пакета. Внутри корневого каталога может находиться 8 подкаталогов:&lt;br /&gt;
&lt;br /&gt;
* '''macros''' Здесь расположены макросы ''Scilab'', то есть файлы-функции с расширением '''.sci''', написанные на встроенном языке, а также скрипт сборки макросов '''buildmacros.sce'''.&lt;br /&gt;
* '''src''' Если функции пакета представляют собой подпрограммы, написанные на ''C/C++'' или ''Fortran'', то в этом каталоге должны находиться файлы с их исходным кодом (с расширениями '''.c''' и '''.f''') и сценарий сборки '''buildsrc.sce'''.&lt;br /&gt;
* '''sci_gateway''' Здесь располагаются программы-интерфейсы для функций, написанных на сторонних языках программирования (''C/C++, Fortran'').&lt;br /&gt;
* '''help''' В этом каталоге находится текст справки, представляющий собой совокупность XML-файлов, на английском и французском языках, в подкаталогах с соответствующими именами '''eng''' и '''fr''', и традиционный скрипт сборки справочного материала: '''builder_help.sce'''. &lt;br /&gt;
* etc Если для пакета нужны еще какие-либо файлы ('''.html, .pdf, .txt, .jpeg, …'''), то они размещаются здесь. Кроме того, тут расположены скрипты подготовки загрузки и выгрузки пакета из системы.&lt;br /&gt;
* '''unit tests''' В этом каталоге расположены файлы с расширением '''.tst''', представляющие собой скрипты для тестирования пакета расширений.&lt;br /&gt;
* '''demos''' В этот каталог помещаются различные примеры, иллюстрирующие работу пакета.&lt;br /&gt;
* '''includes''' Здесь располагаются заголовочные файлы (с расширением '''.h''') для исходных текстов ''C/C++''.&lt;br /&gt;
&lt;br /&gt;
Кроме описанных подкаталогов, в корневом каталоге обычно располагаются 4 файла:&lt;br /&gt;
* '''readme.txt''' Описание самого пакета расширений, а также процесса его установки.&lt;br /&gt;
* '''builder.sce''' Основной скрипт сборки пакета...&lt;br /&gt;
* '''loader.sce'''...и основной скрипт его загрузки в ''Scilab''&lt;br /&gt;
* '''license.txt''' Лицензия.&lt;br /&gt;
&lt;br /&gt;
Следует отметить, что данная структура не всегда реализуется полностью. Например, если в пакете нет функций, реализованных на ''C/C++'', можно обойтись без '''src'''; в отсутствие примеров не нужен каталог '''demos'''. В репозитории пакетов расширений на сайте ''Scilab'' встречаются экземпляры, состоящие из одного файла с функциями, без каких-либо скриптов сборки и установки. Но нам кажется, что соблюдение правил, определенных разработчиками – это верный путь к безошибочной работе конечного продукта.&lt;br /&gt;
&lt;br /&gt;
В каталоге самого ''Scilab'' имеется шаблон нового пакета, который вы можете взять в качестве основы. Если вы используете двоичную версию ''Scilab'', загруженную вручную, то пакет-шаблон располагается в каталоге '''scilab/contrib/toolbox_skeleton'''; если же ''Scilab'' установлен при помощи менеджера пакетов, то ищите в каталогах '''/opt''' или '''/usr'''. Я пользуюсь Mandriva 2009.1, и у меня он находится в '''/usr/share/scilab/contrib/toolbox_skeleton'''.&lt;br /&gt;
&lt;br /&gt;
===Добавим функции===&lt;br /&gt;
&lt;br /&gt;
Давайте создадим пакет (назовем его '''Ballistic'''), в котором будут три функции, вычисляющие параметры движения тела, брошенного под углом к горизонту, в зависимости от времени:&lt;br /&gt;
* '''blst_height''' – высота тела,&lt;br /&gt;
* '''blst_length''' – дальность полета,&lt;br /&gt;
* '''blst_speed''' – вертикальная и горизонтальной скорости тела,&lt;br /&gt;
&lt;br /&gt;
а также справка по работе с ними. Все функции будут реализованы на встроенном языке ''Scilab''.&lt;br /&gt;
&lt;br /&gt;
Напомним ([[LXF107:SciLab|LXF107]]), что код внешних функций в ''Scilab'' вводится в редакторе, а описание функции имеет вид:&lt;br /&gt;
&lt;br /&gt;
 function [&amp;lt;список выходных параметров&amp;gt;] =&lt;br /&gt;
 &amp;lt;Имя Функции&amp;gt;(&amp;lt;список входных параметров&amp;gt;)&lt;br /&gt;
   &amp;lt;тело функции&amp;gt;&lt;br /&gt;
 endfunction&lt;br /&gt;
&lt;br /&gt;
Создадим в домашнем каталоге новый, с именем '''Scilab_Toolbox''': здесь будут размещаться все пакеты расширений, загруженные из сети или созданные лично нами. Организуем в нем подкаталог для нашего пакета ('''ballistic'''). В соответствии с выбранным содержимым создадим подкаталоги '''macros''' и '''help'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF122_81_1.jpg|300px]] Рис. 1. Текст первой функции будущего пакета расширений ''Ballistic''.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Запускаем ''Scilab'', открываем редактор либо командой ''scipad'', либо при помощи меню '''Инструменты &amp;gt; Редактор''' и вводим код, показанный на рис. 1. В самом тексте приведено достаточно комментариев, чтобы не вдаваться в его детальное объяснение. Поясним только один момент, который не совсем очевиден, а именно – для чего в тексте функции используется цикл.&lt;br /&gt;
&lt;br /&gt;
Поскольку мы бросаем тело с поверхности Земли, которую полагаем плоской, то отрицательная высота не имеет смысла. В связи с этим в код добавлена проверка рассчитанного значения, и если оно оказывается отрицательным, мы принудительно устанавливаем его в ноль. Однако&lt;br /&gt;
проблема в том, что в качестве входных параметров функций ''Scilab'' может использоваться не одно значение, а массив. Если оставить&lt;br /&gt;
только один оператор сравнения, то оно будет выполнено только для первого элемента массива. В результате мы получим или массив нулевых&lt;br /&gt;
значений (если первый элемент будет отрицательным), или массив, в котором имеются и отрицательные, и положительные элементы. &lt;br /&gt;
&lt;br /&gt;
Эта ошибка весьма типична для начинающих программировать в ''Scilab'', поскольку они часто забывают, что любая переменная в этой системе&lt;br /&gt;
рассматривается прежде всего как матрица. Таким образом, сравнение необходимо выполнить для всех элементов массива-результата, а для этого&lt;br /&gt;
необходим цикл. &lt;br /&gt;
&lt;br /&gt;
Сохраним данный код в каталоге '''macros''' под именем '''blst_height.sci'''. Затем создадим файлы '''blst_length.sci''' и '''blst_speed.sci''', которые будут вычислять дальность полета тела и компоненты скорости соответственно. В качестве входных параметров&lt;br /&gt;
всех трех функций выступают '''g''' – ускорение свободного падения, '''v0''' – абсолютная величина начальной скорости, '''alpha''' – угол наклона к горизонту, '''t''' – время, прошедшее с момента начала движения. Эти функции длиннее, так что мы не будем приводить их текст в журнале: воспользуйтесь файлами с '''LXFDVD'''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=Не забывайте вставлять в код комментарии! Напомним, что строка-комментарий начинается с двойного слэша ('''//'''), и'' Scilab5'' вполне терпимо относится к кириллическому тексту.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Конечно же, тексты этих макросов можно набрать в простом текстовом редакторе типа ''Kate'', но использование ''Scipad'' позволяет проверить работу функции сразу после ввода. Для этого следует выбрать последовательно пункты меню '''Execute &amp;gt; Load into Scilab'''. После&lt;br /&gt;
этого в основном окне ''Scilab'' можно будет выполнить тестовые вычисления с функциями будущего пакета. &lt;br /&gt;
&lt;br /&gt;
Загрузите функцию '''blst_height''' в ''Scilab'', как указано выше, и попробуйте следующие команды: &lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF122_81_2.jpg|300px]] Рис. 2. Траектории движения тела после броска на Земле и на Луне. |Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
 --&amp;gt;t=0:0.1:3;&lt;br /&gt;
 --&amp;gt;h1=blst_height(9.81,10,45,t);&lt;br /&gt;
 --&amp;gt;h2=blst_height(1.62,10,45,t);&lt;br /&gt;
 --&amp;gt;plot2d(t,[h1 h2],[color(0,255,0) color(255,128,0)]);&lt;br /&gt;
 --&amp;gt;hl=legend([‘Земля’;’Луна’],2);&lt;br /&gt;
&lt;br /&gt;
В результате получится график, показанный на рис. 2. На нем отображаются траектории первых трех секунд полета тела с одинаковыми исходными&lt;br /&gt;
параметрами, но на разных небесных телах: на Земле и на Луне (может, проверим, были ли там американцы?). Видно, что на Луне тело летит&lt;br /&gt;
выше, чем на Земле. Следовательно, функция работает. Мы рекомендуем вам разработать тестовые  примеры для каждой  функции, чтобы&lt;br /&gt;
впоследствии после любых изменений можно было убедиться, что новая версия функции дает тот же результат, что и старая. Собственно, для этого и нужны сценарии в подкаталоге '''unit tests''' нашего пакета.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Звголовок=Именование макросов|Содержание=Текст каждой функции следует хранить в отдельном файле, название которого должно совпадать с именем самой функции. Дело в том, что после загрузки пакета расширений в рабочую среду система ищет в каждом файле&lt;br /&gt;
пакета функцию, имя которой совпадает с именем файла. То есть, если есть файл макроса с именем '''func1.sci''', то система будет искать в нем функцию с именем '''func1'''. Если в этом файле присутствует несколько функций, они станут доступны только после вызова функции '''func1'''. Если же в файле '''func1.sci''' функции '''func1''' не окажется, то все функции этого  файла будут недоступны. &lt;br /&gt;
&lt;br /&gt;
Размещение функций в отдельных файлах позволяет быстрее находить исходный текст необходимой функции, упрощает тестирование, а впоследствии&lt;br /&gt;
– и модернизацию пакета.|Ширина=400px}}&lt;br /&gt;
&lt;br /&gt;
После того, как все макросы созданы, необходимо написать скрипт их сборки и загрузки. Это обычно делается вручную. В ''Scilab5'' появились специальные команды, упрощающие выполнение данной операции. Откройте каталог с макросами и создайте в нем простой текстовый документ с именем '''buildmacros.sce'''. Внутри него разместите следующий текст:&lt;br /&gt;
&lt;br /&gt;
 pathMB = get_absolute_file_path('buildmacros.sce');&lt;br /&gt;
 tbx_build_macros('Ballistic', pathMB);&lt;br /&gt;
 clear pathMB;&lt;br /&gt;
&lt;br /&gt;
и сохраните файл. Первая строка скрипта заносит во временную переменную '''pathMB''' каталог, где расположены макросы. Вторая строка содержит команду, выполняющую сборку всех макросов, расположенных в данном каталоге. В качестве параметров указываются название пакета и путь к каталогу с макросами. Третья строка удаляет из памяти временную переменную.&lt;br /&gt;
&lt;br /&gt;
В результате действия данной команды создается и скрипт загрузки макросов. Ранее его приходилось писать вручную, да и сборочный скрипт имел чуть более сложный вид.&lt;br /&gt;
&lt;br /&gt;
===Создаем описание===&lt;br /&gt;
&lt;br /&gt;
Функции написаны, но если мы не сопроводим их поясняющим текстом, то вряд ли кто-то станет разбираться, как с ними работать. Одним из вариантов является использование комментариев; однако, чтобы просмотреть их, пользователю придется лезть в исходный код. Конечно же, есть люди, которые полезут в него в любом случае, но если пользователю необходимы пояснения, он обычно открывает справочное руководство.&lt;br /&gt;
Справочная система ''Scilab'' обладает замечательным свойством – она динамическая. То есть при загрузке в рабочую среду нового пакета расширений, его справочное руководство – если оно имеется – появляется в основном дереве руководства по всему пакету.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Редактор справки|Содержание=На официальном сайте ''Scilab'' для создания текста справки рекомендуют использовать визуальный XML-редактор ''XMLmind'' (http://www.xmlmind.com/xmleditor/) вместе с шаблоном (http://www.scilab.org/download/xxe_scilab_config-1.1.0.tar.gz).&lt;br /&gt;
&lt;br /&gt;
Скачиваем ''XMLmind'' и распаковываем в домашний каталог. Заходим в директорию программы, далее в подкаталог '''bin'', и запускаем скрипт ''xxe''.&lt;br /&gt;
&lt;br /&gt;
Скачиваем шаблон и распаковываем его в каталог '''$HOME/.xxe4/addon''' (чтобы обнаружить каталог '''.xxe4''', необходимо включить режим отображения скрытых файлов).&lt;br /&gt;
&lt;br /&gt;
Перезапускаем редактор, выбираем последовательно пункты меню '''File &amp;gt; New'''. После этого появляется список доступных шаблонов, среди которых присутствует раздел '''Scilab'''. Выбираем необходимый шаблон (для описания функции используется '''Refentry''') и нажимаем кнопку '''OK'''.&lt;br /&gt;
&lt;br /&gt;
В появившемся пустом шаблоне заполняем все местозаполнители. Если необходимо вставить дополнительный абзац или элемент списка, нажимаем соответствующую кнопку на панели инструментов. В данном случае, для описания дополнительного параметра нам нужна '''Add listitem or varlistentry''' [Добавить элемент списка или элемент списка переменных].&lt;br /&gt;
&lt;br /&gt;
По завершении, сохраняем файл в каталоге '''название_пакета/help/en_US''' и даем ему имя, совпадающее с названием описываемой функции. В качестве расширения оставляем '''.xml'''.|Ширина=400px}}&lt;br /&gt;
&lt;br /&gt;
Для создания справочных материалов необходимо, чтобы в системе был установлен XML-анализатор ''sabcmd'', являющийся частью пакета ''Sablotron'', который можно найти в менеджере пакетов вашего дистрибутива. Если же там его не оказалось, то скачайте ''Sablotron'' здесь: http://www.gingerall.org/downloads.html.&lt;br /&gt;
&lt;br /&gt;
Впрочем, XML-структура файла справки достаточно проста, и его можно создать в любом текстовом редакторе. Начинается все со строки, в которой указывается версия XML и используемая кодировка:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=”1.0” encoding=”UTF-8”?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем идет «шапка» для ''Scilab''. Здесь указывается версия ''Scilab'', название функции, язык справочного материала, а также определяются некоторые пространства имен.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;refentry version=”5.0-subset Scilab” xml:id=”blst_height” xml:lang=”en”&lt;br /&gt;
    xmlns=”http://docbook.org/ns/docbook”&lt;br /&gt;
    xmlns:xlink=”http://www.w3.org/1999/xlink”&lt;br /&gt;
    xmlns:svg=”http://www.w3.org/2000/svg”&lt;br /&gt;
    xmlns:ns3=”http://www.w3.org/1999/xhtml”&lt;br /&gt;
    xmlns:mml=”http://www.w3.org/1998/Math/MathML”&lt;br /&gt;
    xmlns:db=”http://docbook.org/ns/docbook”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее идет краткое описание самой функции:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;refnamediv&amp;gt;&lt;br /&gt;
  &amp;lt;refname&amp;gt;blst_height&amp;lt;/refname&amp;gt;&lt;br /&gt;
  &amp;lt;refpurpose&amp;gt; calculate height of body's trajectory, that was thrown from earth &amp;lt;/refpurpose&amp;gt;&lt;br /&gt;
 &amp;lt;/refnamediv&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем указывается стандарт вызова:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;refsynopsisdiv&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Calling Sequence&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;synopsis&amp;gt;a = blst_height(g, v0, alpha, t)&amp;lt;/synopsis&amp;gt;&lt;br /&gt;
 &amp;lt;/refsynopsisdiv&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая секция описывает параметры, передаваемые нашей функции:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;refsection&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Parameters&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;variablelist&amp;gt;&lt;br /&gt;
      &amp;lt;varlistentry&amp;gt;&lt;br /&gt;
        &amp;lt;term&amp;gt;g&amp;lt;/term&amp;gt;&lt;br /&gt;
        &amp;lt;listitem&amp;gt;&lt;br /&gt;
           &amp;lt;para&amp;gt;gravitational acceleration&amp;lt;/para&amp;gt;&lt;br /&gt;
        &amp;lt;/listitem&amp;gt;&lt;br /&gt;
      &amp;lt;/varlistentry&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
    &amp;lt;/variablelist&amp;gt;&lt;br /&gt;
 &amp;lt;/refsection&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее идет раздел описания: в нем сообщается, что это за функция, для чего она нужна и так далее. Каждый параграф заключается в тэг '''para'''.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;refsection&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Description&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;para&amp;gt;calculate height of body’s trajectory, that was thrown from earth from given gravitational acceleration, &lt;br /&gt;
         initial speed and angle between the speed and horizon, and time since trow.&amp;lt;/para&amp;gt;&lt;br /&gt;
 &amp;lt;/refsection&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующий раздел предлагает примеры использования данной функции.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;refsection&amp;gt;&lt;br /&gt;
  &amp;lt;title&amp;gt;Examples&amp;lt;/title&amp;gt;&lt;br /&gt;
     &amp;lt;programlisting role=”example”&amp;gt;blst_height(9.81, 15,30, 3)&amp;lt;/programlisting&amp;gt;&lt;br /&gt;
 &amp;lt;/refsection&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В конце могут быть указаны необязательные разделы, такие как «Автор» и «Смотри также».&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;refsection&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Authors&amp;lt;/title&amp;gt;&lt;br /&gt;
     &amp;lt;simplelist type=”vert”&amp;gt;&lt;br /&gt;
      &amp;lt;member&amp;gt;Alexander&amp;lt;/member&amp;gt;&lt;br /&gt;
     &amp;lt;/simplelist&amp;gt;&lt;br /&gt;
 &amp;lt;/refsection&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого файл закрывается:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/refentry&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создайте в каталоге '''help''' подкаталог '''en_US''' (к сожалению, ''Scilab'' поддерживает справку только на двух языках: английском и французском). Затем создайте в '''help/en_US''' три файла с описанием функций с расширением '''.xml'''.&lt;br /&gt;
&lt;br /&gt;
Осталось создать там же сценарий сборки англоязычного справочного материала ('''build_help.sce''') со следующим содержанием:&lt;br /&gt;
&lt;br /&gt;
 pathHB = get_absolute_file_path('build_help.sce');&lt;br /&gt;
 tbx_build_help('Ballistic', pathHB);&lt;br /&gt;
 clear pathHB;&lt;br /&gt;
&lt;br /&gt;
Так же, как и в предыдущем случае, в первой строке определяется путь к текущему каталогу с файлами справки, затем вызывается команда сборки, а в третьей строке удаляется временная переменная.&lt;br /&gt;
&lt;br /&gt;
Далее, перейдите на один уровень выше в каталог '''help'''. Здесь следует создать скрипт сборки всех справочных материалов '''builder_help.sce''':&lt;br /&gt;
&lt;br /&gt;
 pathH = get_absolute_file_path('builder_help.sce');&lt;br /&gt;
 tbx_builder_help_lang(“en_US”, pathH);&lt;br /&gt;
 clear pathH;&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF122_83_1.jpg|300px]] Рис. 3. Справочная система ''Scilab'', содержащая главу по нашему пакету расширений ''Ballistic''.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
===Управляющие скрипты===&lt;br /&gt;
&lt;br /&gt;
Основное содержимое готово. Теперь необходимо создать три основных скрипта, без которых ничего работать не будет:&lt;br /&gt;
* '''builder.sce''' Это главный сценарий сборки пакета. Он располагается в его корневом каталоге и содержит следующие строки:&lt;br /&gt;
&lt;br /&gt;
 mode(-1)&lt;br /&gt;
 pathB = get_absolute_file_path('builder.sce');&lt;br /&gt;
 tbx_builder_macros(pathB);&lt;br /&gt;
 tbx_builder_help(pathB);&lt;br /&gt;
 tbx_build_loader('Ballistic', pathB);&lt;br /&gt;
 clear pathB;&lt;br /&gt;
&lt;br /&gt;
В первой строке отключается вывод сообщений. В процессе разработки ее желательно закомментировать, иначе при возникновении ошибок вы можете о них не узнать. В следующих строках во временную переменную записывается путь к каталогу пакета расширений, затем происходит сборка макросов и справки и создание загрузчика для пакета. По завершении временная переменная уничтожается.&lt;br /&gt;
* '''etc/Ballistic.start''' Это основный скрипт загрузки пакета, вызываемый из загрузчика. В нем прописывается все, что необходимо сделать во время загрузки пакета расширений. Ниже приведено содержание такого скрипта для нашего пакета:&lt;br /&gt;
&lt;br /&gt;
 //Запоминаем режим вывода предупреждений&lt;br /&gt;
 warning_mode = warning('query');&lt;br /&gt;
 //Отключаем режим вывода предупреждений&lt;br /&gt;
 warning('off');&lt;br /&gt;
 //Получаем путь к корневому каталогу пакета&lt;br /&gt;
 etc_tlbx = get_absolute_file_path('Ballistic.start');&lt;br /&gt;
 etc_tlbx = getshortpathname(etc_tlbx);&lt;br /&gt;
 root_tlbx = strncpy( etc_tlbx, length(etc_tlbx)-length('\etc\') );&lt;br /&gt;
 //Получаем путь к каталогу с макросами&lt;br /&gt;
 pathmacros = pathconvert( root_tlbx ) + 'macros'+ filesep(); &lt;br /&gt;
 //Загружаем функции пакета&lt;br /&gt;
 Ballisticlib = lib(pathmacros);&lt;br /&gt;
 //Восстанавливаем режим вывода предупреждений&lt;br /&gt;
 warning(warning_mode);&lt;br /&gt;
 //Добавляем новую главу в справочное руководство Scilab&lt;br /&gt;
 path_addchapter = root_tlbx + “/jar/”;&lt;br /&gt;
 if ( fileinfo(path_addchapter) &amp;lt;&amp;gt; [] ) then&lt;br /&gt;
 add_help_chapter('Ballistic', path_addchapter, %F);&lt;br /&gt;
 clear add_help_chapter;&lt;br /&gt;
 end&lt;br /&gt;
 //Удаляем все временные переменные&lt;br /&gt;
 clear warning_mode;&lt;br /&gt;
 clear path_addchapter;&lt;br /&gt;
 clear root_tlbx;&lt;br /&gt;
 clear etc_tlbx;&lt;br /&gt;
 clear pathmacros;&lt;br /&gt;
 clear pathconvert;&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=Желательно иметь два каталога с исходными текстами вашего пакета: один для хранения только исходных текстов, а второй – для сборки. В этом случае вам не придется чистить каталог от последствий сборки перед тем, как выпустить пакет в мир.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
* '''etc/Ballistic.quit''' Сценарий, определяющий, что следует выполнить при выгрузке пакета. Обычно он остается пустым.&lt;br /&gt;
&lt;br /&gt;
Итак, все готово! Запускаем ''Scilab'' и вводим команду на сборку нашего пакета, то есть вызываем основной сборочный сценарий:&lt;br /&gt;
&lt;br /&gt;
 exec('~/Scilab_Toolbox/ballistic/builder.sce’);&lt;br /&gt;
&lt;br /&gt;
Если он отработает без ошибок, в корневом каталоге пакета появится скрипт его загрузки в систему. Выполним команду загрузки пакета расширений:&lt;br /&gt;
&lt;br /&gt;
 exec('~/Scilab_Toolbox/ballistic/loader.sce');&lt;br /&gt;
&lt;br /&gt;
Все, теперь можно использовать функции пакета в расчетах. Более того, можно открыть справку и в самом низу (иногда вверху) увидеть название нашего пакета – ''' 'Ballistic' '''. Щелкнув на этом пункте, можно посмотреть, правильно ли мы оформили справку (рис. 3). Если все сделано верно, то осталось только создать файлы с описанием установки и текстом лицензии.&lt;br /&gt;
&lt;br /&gt;
Все скрипты, макросы и файлы справки можно создать, не запуская ''Scilab'': система понадобится только на последнем этапе для сборки пакета и проверки работоспособности. Более того, шаблоны скриптов можно взять из пакета ''toolbox_skeleton'' и убрать из них все лишнее или добавить свое.&lt;br /&gt;
&lt;br /&gt;
Дерзайте! А если эта статья вас заинтересовала, то напишите нам ([mailto:letters@linuxformat.ru letters@linuxformat.ru]), что бы вы еще хотели узнать о создании пакетов расширений или программировании в ''Sсilab''. Разработка графического интерфейса, создание пакетов из имеющихся специализированных библиотек или собственного блока для ''Scicos'' – что вам интересно?&lt;br /&gt;
'''LXF'''&lt;/div&gt;</description>
			<pubDate>Sat, 28 Aug 2010 17:15:59 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF122:SciLab</comments>		</item>
	</channel>
</rss>