<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
  <head>
    <title>package</title>
  </head>

  <body>
    <h1>package</h1>

    <p>Команда загрузки пакетов библиотек и контроля версий.</p>

    <h2>СИНТАКСИС</h2>

    <pre>
      <a href=#forget><strong>package</strong> <strong>forget</strong></a> <em>package</em>

      <a href=#ifneeded><strong>package</strong> <strong>ifneeded</strong></a> <em>package</em> <em>version</em> ?<em>script</em>?

      <a href=#names><strong>package</strong> <strong>names</strong></a>

      <a href=#provide><strong>package</strong> <strong>provide</strong></a> <em>package</em> ?<em>version</em>?

      <a href=#require><strong>package</strong> <strong>require</strong> ?<strong>-exact</strong>?</a> <em>package</em> ?<em>version</em>?

      <a href=#unknown><strong>package</strong> <strong>unknown</strong></a> ?<em>command</em>?

      <a href=#vcompare><strong>package</strong> <strong>vcompare</strong></a> <em>version1</em> <em>version2</em>

      <a href=#versions><strong>package</strong> <strong>versions</strong></a> <em>package</em>
    
      <a href=#vsatisfies><strong>package</strong> <strong>vsatisfies</strong></a> <em>version1</em> <em>version2</em>
    </pre>


    <h2>ОПИСАНИЕ</h2>

    <p>Команда поддерживает простую базу данных со сведениями о том,
      какие пакеты библиотечных функций доступны для использования в
      данном интерпретаторе, и как их загрузить в интерпретатор. Она
      поддерживает многоверсионность пакетов и гарантирует загрузку в
      приложение необходимой версии пакета.  При этом она обеспечивает
      контроль непротиворечивости версий.  Обычно в Tcl-скриптах
      достаточно использовать команды <strong>package</strong> <strong>require</strong> и
      <strong>package</strong> <strong>provide</strong>. Остальные команды предназначены в
      первую очередь для системных скриптов, которые поддерживают базу
      данных пакетов.</p>

    <p>Поведение команды <strong>package</strong> определяется ее первым
      аргументом. Ниже описаны возможные формы команды.</p>

    <dl>
      <dt><a name=forget></a><strong>package</strong> <strong>forget</strong>
      <em>package</em></dt>

      <dd>Удаляет информацию о пакете из интерпретатора, включая как
        информацию, возвращаемую командой <strong>package</strong>
        <strong>ifneeded</strong>, так и информацию, возвращаемую командой
        <strong>package</strong> <strong>provide</strong>.</dd>

      <dt><a name=ifneeded></a><strong>package</strong>
	<strong>ifneeded</strong> <em>package</em> <em>version</em> ?<em>script</em>?</dt>

      <dd>Команда используется в системных скриптах. Если указана
        конкретная версия и скрипт, заносит в базу данных информацию о
        том, что соответствующая версия пакета доступна и может быть
        загружена в интерпретатор с помощью скрипта
        <em>script</em>. Если в базе данных уже хранится информация о
        скрипте, она обновляется. Если скрипт не указан, возвращается
        текущий скрипт.</dd>
      
      <dt><a name=names></a><strong>package</strong> <strong>names</strong></dt>

      <dd>Возвращает список всех пакетов в интерпретаторе, для которых
        известна доступная версия (заданная с помощью команды
        <strong>package</strong> <strong>provide</strong>) или скрипт загрузки (заданный
        командой <strong>package</strong> <strong>ifneeded</strong>).</dd>
      
      <dt><a name=provide></a><strong>package</strong> <strong>provide</strong>
	<em>package</em> ?<em>version</em>?</dt>

      <dd>Команда используется для того, чтобы указать, что версия
        <em>version</em> пакета <em>package</em> загружена в
        интерпретатор. Если ранее была загружена другая версия,
        возвращает ошибку. Если версия не указана, возвращает
        загруженную версию.</dd>
      
      <dt><a name=require></a><strong>package</strong> <strong>require</strong>
	  ?<strong>-exact</strong>? <em>package</em> ?<em>version</em>?</dt>

      <dd><p>Команда используется, если для выполнения дальнейшего
        кода необходим библиотечный пакет <em>package</em> версии <em>
        version</em>. Команда возвращает номер загруженной версии или
        ошибку. Если присутствуют оба аргумента <strong>-exact</strong> и
        <em>version</em>, то команда загружает именно указанную версию
        (или выдает ошибку, если эта версия недоступна). Если
        присутствует номер версии, а <strong>-exact</strong> опущено, то команда
        загружает указанную версию или более позднюю, но с тем же
        старшим номером версии (2.7, но не 3.1, когда указана версия
        2.5).</p>

        <p>Если база данных не содержит необходимой версии, а в
	  интерпретаторе определена команда для <strong>packageunknown</strong>
	  (см. ниже), то она исполняется, после чего повторно
	  проверяется доступность необходимой версии. Если версия
	  по-прежнему недоступна, команда возвращает ошибку.</p>
      </dd>

      <dt><a name=unknown></a><strong>package</strong> <strong>unknown</strong>
	?<em>command</em>?</dt>

      <dd><p>Команда <em>последней надежды</em> при поиске необходимой
	  версии пакета. Если аргумент <em>command</em> указан, то он
	  дополняется именем пакета и версии и полученный скрипт
	  выполняется. Если версия не указана, подставляется пустая
	  строка.</p>

        <p>Если аргумент <em>command</em> не указан, возвращает текущий
	  скрипт, заданный для команды <strong>package</strong>
	  <strong>unknown</strong>.</p>
      </dd>

      <dt><a name=vcompare></a><strong>package</strong>
	<strong>vcompare</strong> <em>version1</em> <em>version2</em></dt>

      <dd>Команда сравнения версий. Возвращает <strong>-1</strong>, если
        <em>version1</em> более ранняя версия, чем <em>version2</em>,
        <strong>1</strong> - в противном случае, и <strong>0</strong>, если они
        равны.</dd>
      
      <dt><a name=versions></a><strong>package</strong>
	<strong>versions</strong> <em>package</em></dt>

      <dd>Возвращает список всех доступных версий пакета (информация о
        которых занесена в базу данных с помощью команды
        <strong>package</strong> <strong>ifneeded</strong>).</dd>
      
      <dt><a name=vsatisfies></a><strong>package</strong>
      <strong>vsatisfies</strong> <em>version1</em> <em>version2</em></dt>

      <dd>возвращает <strong>1</strong>, если у <em>version1</em> и
        <em>version2</em> совпадают старшие номера, а младший номер у
        version1 не меньше, чем у <em>version2</em>, и <strong>0</strong> - в
        противном случае.</dd>
    </dl>

    <h2><a name=ИНДЕКСЫ ПАКЕТОВ></a>ИНДЕКСЫ ПАКЕТОВ</h2>

    <p>Рекомендованный способ работы с пакетами в Tcl состоит в том,
      чтобы включать в скрипты команды <a
      href=#require><strong>package</strong> <strong>require</strong></a> и <a
      href=#provide><strong>package</strong>
      <strong>provide</strong></a> и использовать процедуру <strong><a
      href=pkg_mkIndex.html>pkg_mkIndex</a></strong> (см.
      соответствующие пункты) для создания индексных файлов для
      пакетов. Это обеспечивает автоматическую загрузку необходимых
      пакетов.</p>

    <p>См.также <a href=close.html><strong>close</strong></a>(n), <a
	href=filename.html><strong>filename</strong></a>(n), <a href=
	gets.html><strong>gets</strong></a>(n), <a
	href=read.html><strong>read</strong></a>(n), <a
	href=puts.html><strong>puts</strong></a>(n), <a
	href=exec.html><strong>exec</strong></a>(n).</p>

  </body>
</html>