System/Docu/ru/Dialog.odc

Dialog
ENGLISH
Редакция перевода: Ф.В.Ткачев, 2010-10-07; исправления 2012-12-04.

DEFINITION Dialog;

	IMPORT Files;

	CONST
		pressed = 1; released = 2; changed = 3; included = 5; excluded = 6; set = 7;
		ok = 1; yes = 2; no = 3; cancel = 4;
		windows32s = 11; windows95 = 12; windowsNT3 = 13; windowsNT4 = 14; windows2000 = 15;
		windows98 = 16; macOS = 21; macOSX = 22; linux = 30; tru64 = 40;
		firstPos = 0; lastPos = -1;
		persistent = TRUE; nonPersistent = FALSE;

	TYPE
		String = ARRAY 256 OF CHAR;

		List = RECORD
			index, len-: INTEGER;
			(VAR l: List) GetItem (index: INTEGER; OUT item: String), NEW;
			(VAR l: List) SetItem (index: INTEGER; IN item: ARRAY OF CHAR), NEW;
			(VAR l: List) SetLen (len: INTEGER), NEW;
			(VAR l: List) SetResources (IN key: ARRAY OF CHAR), NEW
		END;

		Selection = RECORD
			len-: INTEGER;
			(VAR s: Selection) Excl (from, to: INTEGER), NEW;
			(VAR s: Selection) GetItem (index: INTEGER; OUT item: String), NEW;
			(VAR s: Selection) In (index: INTEGER): BOOLEAN, NEW;
			(VAR s: Selection) Incl (from, to: INTEGER), NEW;
			(VAR s: Selection) SetItem (index: INTEGER; IN item: ARRAY OF CHAR), NEW;
			(VAR s: Selection) SetLen (len: INTEGER), NEW;
			(VAR s: Selection) SetResources (IN key: ARRAY OF CHAR), NEW
		END;

		Combo = RECORD
			item: String;
			len-: INTEGER;
			(VAR c: Combo) GetItem (index: INTEGER; OUT item: String), NEW;
			(VAR c: Combo) SetItem (index: INTEGER; IN item: ARRAY OF CHAR), NEW;
			(VAR c: Combo) SetLen (len: INTEGER), NEW;
			(VAR c: Combo) SetResources (IN key: ARRAY OF CHAR), NEW
		END;
 
		TreeNode = POINTER TO LIMITED RECORD 
			(tn: TreeNode) Data (): ANYPTR, NEW;
			(tn: TreeNode) GetName (OUT name: String), NEW;
			(tn: TreeNode) IsExpanded (): BOOLEAN, NEW;
			(tn: TreeNode) IsFolder (): BOOLEAN, NEW;
			(tn: TreeNode) NofChildren (): INTEGER, NEW;
			(tn: TreeNode) SetData (data: ANYPTR), NEW;
			(tn: TreeNode) SetExpansion (expanded: BOOLEAN), NEW;
			(tn: TreeNode) SetName (name: String), NEW;
			(tn: TreeNode) ViewAsFolder (isFolder: BOOLEAN), NEW
		END;

		Tree = RECORD 
			(VAR t: Tree) Child (node: TreeNode; pos: INTEGER): TreeNode, NEW;
			(VAR t: Tree) Delete (node: TreeNode): INTEGER, NEW;
			(VAR t: Tree) DeleteAll, NEW;
			(VAR t: Tree) Move (node, parent: TreeNode; pos: INTEGER), NEW;
			(VAR t: Tree) NewChild (parent: TreeNode; pos: INTEGER; name: String): TreeNode, NEW;
			(VAR t: Tree) Next (node: TreeNode): TreeNode, NEW;
			(VAR t: Tree) NofNodes (): INTEGER, NEW;
			(VAR t: Tree) NofRoots (): INTEGER, NEW;
			(VAR t: Tree) Parent (node: TreeNode): TreeNode, NEW;
			(VAR t: Tree) Prev (node: TreeNode): TreeNode, NEW;
			(VAR t: Tree) Select (node: TreeNode), NEW;
			(VAR t: Tree) Selected (): TreeNode, NEW
		END;

		Color = RECORD
			val: INTEGER
		END;

		Currency = RECORD 
			val: LONGINT;
			scale: INTEGER
		END;

		Par = RECORD
			disabled: BOOLEAN;
			checked: BOOLEAN;
			undef: BOOLEAN;
			readOnly: BOOLEAN;
			label: String
		END;

		GuardProc = PROCEDURE (VAR par: Par);

		NotifierProc = PROCEDURE (op, from, to: INTEGER);

		Language = ARRAY 3 OF CHAR;

		LangNotifier = POINTER TO ABSTRACT RECORD 
			(n: LangNotifier) Notify-, NEW, ABSTRACT
		END;

	VAR
		metricSystem: BOOLEAN;
		showsStatus: BOOLEAN;
		version: INTEGER;
		platform: INTEGER;
		appName: ARRAY 32 OF CHAR;
		language-: Language;
		user: ARRAY 32 OF CHAR;
		thickCaret: BOOLEAN;
		caretPeriod: INTEGER;
		commandLinePars: String;
		silent: BOOLEAN;

	PROCEDURE Update (IN interactor: ANYREC);
	PROCEDURE UpdateBool (VAR b: BOOLEAN);
	PROCEDURE UpdateByte (VAR x: BYTE);
	PROCEDURE UpdateChar (VAR x: CHAR);
	PROCEDURE UpdateInt (VAR i: INTEGER);
	PROCEDURE UpdateLInt (VAR l: LONGINT);
	PROCEDURE UpdateList (IN interactor: ANYREC);
	PROCEDURE UpdateReal (VAR r: REAL);
	PROCEDURE UpdateSChar (VAR x: SHORTCHAR);
	PROCEDURE UpdateSInt (VAR x: SHORTINT);
	PROCEDURE UpdateSReal (VAR x: SHORTREAL);
	PROCEDURE UpdateSString (IN x: ARRAY OF SHORTCHAR);
	PROCEDURE UpdateSet (VAR x: SET);
	PROCEDURE UpdateString (IN x: ARRAY OF CHAR);
	PROCEDURE MapParamString (in, p0, p1, p2: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
	PROCEDURE MapString (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
	PROCEDURE RegisterLangNotifier (notifier: LangNotifier);
	PROCEDURE RemoveLangNotifier (notifier: LangNotifier);
	PROCEDURE SetLanguage (lang: Language; persistent: BOOLEAN);
	PROCEDURE ResetLanguage;
	PROCEDURE ShowParamMsg (IN str, p0, p1, p2: ARRAY OF CHAR);
	PROCEDURE ShowMsg (IN str: ARRAY OF CHAR);
	PROCEDURE ShowParamStatus (IN str, p0, p1, p2: ARRAY OF CHAR);
	PROCEDURE ShowStatus (IN str: ARRAY OF CHAR);
	PROCEDURE FlushMappings;
	PROCEDURE GetOK (IN str, p0, p1, p2: ARRAY OF CHAR; form: SET; OUT res: INTEGER);
	PROCEDURE GetIntSpec (defType: Files.Type; VAR loc: Files.Locator; OUT name: Files.Name);
	PROCEDURE GetExtSpec (defName: Files.Name; defType: Files.Type; VAR loc: Files.Locator;
												OUT name: Files.Name);
	PROCEDURE GetColor (in: INTEGER; OUT out: INTEGER; OUT set: BOOLEAN);
	PROCEDURE Call (IN cmd, errorMsg: ARRAY OF CHAR; OUT res: INTEGER);
	PROCEDURE Beep;
	PROCEDURE Notify (id0, id1: INTEGER; opts: SET);

END Dialog.


МодульDialog предоставляет ряд вспомогательных сервисов для упрощения взаимодействия пользователя с программой. В частности, поддерживается вывод сообщений, например, об ошибках. Кроме того, предоставляются различные полезные типы: List, Selection, Combo, Currency, Tree, и т.п. Эти типы известны каркасу Блэкбокса (точнее, модулю Controls) и могут отображаться соответствующими элементами управления, то есть объектами изображения, которые показывают не обычную модель (в смысле не переопределение типа Models.Model, что было бы нормально для объектов изображения прим. Ф.Т.), а переменную одного из вышеупомянутых типов.


CONST pressed
(нажато) Это значение может быть передано параметру op процедуры-уведомителя (notifier). Оно сообщает о событии нажатия мыши, то есть о том, что основная кнопка мыши была только что нажата.

CONST released
(отпущено) Это значение может быть передано параметру op процедуры-уведомителя (notifier). Оно сообщает о событии отпускания мыши, то есть, о том, что была отпущена основная кнопка мыши.

CONST changed
(изменено) Это значение может быть передано параметру op процедуры-уведомителя (notifier). Оно сообщает о каком-то изменении значений полей интерактора. Для типа Selection используются специальные константы included (включено), excluded (исключено) или set (установлено).

CONST included
(включено) Это значение может быть передано параметру op процедуры-уведомителя (notifier). Оно сообщает о включении диапазона [from..to] в Selection. Перед операцией этот диапазон не принадлежал множеству.

CONST excluded
(исключено) Это значение может быть передано параметру op процедуры-уведомителя (notifier). Оно сообщает об исключении диапазона [from..to] в Selection. Перед операцией этот диапазон принадлежал множеству.

CONST set
(установлено) Это значение может быть передано параметру op процедуры-уведомителя (notifier). Оно сообщает о таком изменении Selection или SET, что результатом стало множество {from..to}. Любое предыдущее выделение было снято.

CONST ok
Это значение может быть использовано как элемент для параметра-множества form процедуры GetOK. Оно указывает, что пользователь нажал кнопку OK.

CONST yes
Это значение может быть использовано как элемент для параметра-множества form процедуры GetOK. Оно указывает, что пользователь нажал кнопку Yes.

CONST no
Это значение может быть использовано как элемент для параметра-множества form процедуры GetOK. Оно указывает, что пользователь нажал кнопку No.

CONST cancel
Это значение может быть использовано как элемент для параметра-множества form процедуры GetOK. Оно указывает, что пользователь нажал кнопку Cancel.

CONST windows32s
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на Windows 3.1 (Win32s). Это платформа более не поддерживается.

CONST windows95
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на Windows95, Windows98, Windows98SE или Windows98 MЕ.

CONST windowsNT3
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на WindowsNT3.x.

CONST windowsNT4
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на WindowsNT4.x.

CONST windows2000
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на Windows2000 (формально названной WindowsNT5.0).

CONST windows98
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на одной из версий Windows98 (исходной Windows98, Windows98SE или Windows98 MЕ).

CONST macOS
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на MacOS7.x, 8.x или 9.x. Эта платформа больше не поддерживается.

CONST macOSX
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на MacOSX. Эта платформа пока не поддерживается.

CONST linux
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на Linux. Эта платформа пока не поддерживается.

CONST tru64
Возможное значение переменной platform. Оно указывает, что Блэкбокс запущен на Compaq Tru64 Unix. Эта платформа пока не поддерживается.

CONST firstPos
Это значение может быть использовано при обращении к переменным Tree. Оно указывает, что запрашивается первый потомок вершины.

CONST lastPos
Это значение может быть использовано при обращении к переменным Tree. Оно указывает, что запрашивается последний потомок вершины.

CONST persistent
Это значение можно использовать при обращении к переменным SetLanguage. Оно указывает, что настройка будет сохранена в некотором реестре между вызовами Блэкбокса и снова использована, когда Блэкбокс будет запущен в следующий раз.

CONST nonPersistent
Это значение можно использовать при обращении к переменным SetLanguage. Оно указывает, что настройку не нужно сохранять между вызовами Блэкбокса, так что она не повлияет на работу Блэкбокса при его следующей активации.


TYPE String
Тип литерных цепочек для различных имен, предъявляемых пользователю или вводимых им.


TYPE List
(Список) Объект этого типа определяет поддиапазон типа INTEGER и для каждого элемента из этого поддиапазона  некоторое имя (литерную цепочку). Все доступные имена индексируются целыми числами от 0 до len - 1 включительно.
(Для ясности: состояние объекта этого типа характеризуется количеством элементов len, соответствующим набором имён, а также выбранным элементом index. Все эти характеристики являются динамическими, то есть могут меняться на протяжении времени жизни объекта. прим. Ф.Т.)

index: INTEGER	index >= -1  &  index < len
Текущий выбранный элемент в списке. Если index = -1, то выбранного элемента нет, что может иметь место, например, при len = 0.

len-: INTEGER	len >= 0
Количество элементов в списке.

PROCEDURE (VAR l: List) SetLen (len: INTEGER)
NEW
Обеспечивает, что список содержит по меньшей мере len доступных элементов. Если len > l.len, то размер существующего списка увеличивается соответственно. Заметим, что в случае необходимости SetItem тоже увеличивает размер списка, так что процедура SetLen нужна только для сокращения списка. SetLen следует вызывать, когда размер конструируемого списка известен заранее, чтобы избежать избыточных операций размещения в памяти и копирования при вызове SetItem.
Если len > l.len, то процедура SetLen не затрагивает существующие l.len элементов.

Предусловие
len >= 0	20

Постусловие
l.len = len

PROCEDURE (VAR l: List) SetItem (index: INTEGER; IN item: String)
NEW
Задаёт или переопределяет (если оно уже было задано) имя элемента, соответствующего значению индекса index. Если index >= l.len, то длина списка увеличивается соответственно.

Предусловие
index >= 0	20
item # ""	21

Постусловие
index <l.len'
	l.len = l.len'
index >= l.len'
	l.len = index + 1

PROCEDURE (VAR l: List) GetItem (index: INTEGER; OUT item: String)
NEW
Возвращает имя элемента, соответствующего значению индекса index. Если значение index находится за пределами допустимого диапазона, то возвращается пустая литерная цепочка "".

Предусловие
name # "" iff index is in 0 .. l.len - 1

PROCEDURE (VAR l: List) SetResources (IN key: ARRAY OF CHAR)
NEW
Определяет элементы списка в соответствии с информацией в файле текстовых ресурсов. Например, для значения key="#System:colors" будет построен список элементов (красный, зеленый, синий), если файл ресурсов System/Rsrc/Strings содержит строчки
	key[0]	красный
	key[1]	зеленый
	key[2]	синий

Предусловие
key # ""	20


TYPE Selection
Тип Selection (выборка) аналогичен List, за исключением того, что здесь можно выбрать не одно значение, а любое подмножество значений из интервала от 0 до произвольного целого, то есть выбранное подмножество может быть большим. В этом контексте термин список (list) обозначает все элементы, среди которых можно сделать выбор. 
(Для ясности: состояние объекта этого типа характеризуется количеством элементов len, соответствующим набором имён, а также выборкой, то есть подмножеством элементов. Все эти характеристики являются динамическими, то есть могут меняться на протяжении времени жизни объекта. прим. Ф.Т.)

len-: INTEGER	len >= 0
Количество элементов в списке.

PROCEDURE (VAR s: Selection) SetLen (len: INTEGER)
NEW
Обеспечивает, что список содержит по меньшей мере len элементов. Если len > l.len, то размер существующего списка увеличивается соответственно. Заметим, что SetItem также увеличивает размер списка в случае необходимости, так что вызов SetLen является обязательным только для сокращения списка. SetLen следует вызывать, когда размер конструируемого списка известен заранее, чтобы избежать ненужных операций размещения в памяти и копирования при вызовах SetItem.
Если len > l.len, то SetLen никак не затрагивает существующие l.len элементов.

Предусловие
len >= 0	20

Постусловие
s.len = len

PROCEDURE (VAR s: Selection) SetItem (index: INTEGER; IN item: String)
NEW
Задаёт или переопределяет (если оно уже было задано) имя элемента, соответствующего значению индекса index. Если index >= l.len, то длина списка увеличивается соответственно.

Предусловие
index >= 0	20
item # ""	21

Постусловие
index <s.len'
	s.len = s.len'
index >= s.len'
	s.len = index + 1

PROCEDURE (VAR s: Selection) GetItem (index: INTEGER; OUT item: String)
NEW
Возвращает имя элемента, соответствующего значению индекса index. Если значение index находится за пределами допустимого диапазона, то возвращается пустая литерная цепочка "".

Постусловие
name # "" iff index is in 0 .. s.len - 1

PROCEDURE (VAR s: Selection) SetResources (IN key: ARRAY OF CHAR)
NEW
Определяет элементы списка в соответствии с информацией в файле текстовых ресурсов. Например, для значения key="#System:colors" будет построен список элементов (красный, зеленый, синий), если файл ресурсов System/Rsrc/Strings содержит строчки
	key[0]	красный
	key[1]	зеленый
	key[2]	синий

Предусловие
key # ""	20

PROCEDURE (VAR s: Selection) Incl (from, to: INTEGER)
NEW
Включить в выборку пересечение диапазона [from..to] с [0..s.len-1]. Если from > to, то диапазон трактуется как пустой.

PROCEDURE (VAR s: Selection) Excl (from, to: INTEGER)
NEW
Исключить из выборки пересечение диапазона [from..to] с [0..s.len-1]. Если from > to, то диапазон трактуется как пустой.

PROCEDURE (VAR s: Selection) In (index: INTEGER): BOOLEAN
NEW
Отвечает на вопрос, входит ли элемент index в текущую выборку. Если index выходит за диапазон [0..s.len-1], то возвращается FALSE.


TYPE Combo
Тип Combo (комбинированный список) подобен типу List за исключением того, что он воспринимает также другие значения, а не только предопределенные в списке. Обычно представляется на экране как элемент управления с выпадающим списком. Такой элемент управления является гибридом выпадающего списка (где можно выбрать только одно из значений), и текстового поля (в которое можно ввести нестандартное значение).

item: String
Текущее значение списка ввода.

len-: INTEGER	len >= 0
Число элементов в списке.

PROCEDURE (VAR c: Combo) SetLen (len: INTEGER)
NEW
Обеспечивает, что список содержит по меньшей мере len элементов. Если len > l.len, то размер существующего списка увеличивается соответственно. Заметим, что SetItem также увеличивает размер списка в случае необходимости, так что вызов SetLen является обязательным только для сокращения списка. SetLen следует вызывать, когда размер конструируемого списка известен заранее, чтобы избежать ненужных операций размещения в памяти и копирования при вызовах SetItem.
Если len > l.len, то SetLen никак не затрагивает существующие l.len элементов.

Предусловие
len >= 0	20

Постусловие
c.len = len

PROCEDURE (VAR c: Combo) SetItem (index: INTEGER; IN item: String)
NEW
Задаёт или переопределяет (если оно уже было задано) имя элемента, соответствующего значению индекса index. Если index >= l.len, то длина списка увеличивается соответственно.

Предусловие
index >= 0	20
item # ""	21

Постусловие
index <c.len'
	c.len = c.len'
index >= c.len'
	c.len = index + 1

PROCEDURE (VAR c: Combo) GetItem (index: INTEGER; OUT item: String)
NEW
Возвращает имя элемента, соответствующего значению индекса index. Если значение index находится за пределами допустимого диапазона, то возвращается пустая литерная цепочка "".

Постусловие
name # "" iff index is in 0 .. c.len - 1

PROCEDURE (VAR c: Combo) SetResources (IN key: ARRAY OF CHAR)
NEW
Определяет элементы списка в соответствии с информацией в файле текстовых ресурсов. Например, для значения key="#System:colors" будет построен список элементов (красный, зеленый, синий), если файл ресурсов System/Rsrc/Strings содержит строчки
	key[0]	красный
	key[1]	зеленый
	key[2]	синий

Предусловие
key # ""	20


TYPE TreeNode
(Узел дерева) Хранит информацию об узле дерева Tree. Объект типа TreeNode принадлежит в точности одному дереву.

PROCEDURE (tn: TreeNode) SetName (name: String)
NEW
Задает имя для tn. Это текст, который показывается, когда Tree связана с соответствующим элементом управления.

PROCEDURE (tn: TreeNode) GetName (OUT name: String)
NEW
Возвращает имя узла tn.

PROCEDURE (tn: TreeNode) SetData (data: ANYPTR), NEW;
Связывает некоторые данные с узлом tn. Это можно использовать для связывания с каждым узлом дерева Tree некоторых данных, определяемых приложением.

PROCEDURE (tn: TreeNode) Data (): ANYPTR
NEW
Возвращает данные, связанные с tn предшествующим вызовом SetData. Если процедура SetData не вызывалась, то возвращается NIL.

PROCEDURE (tn: TreeNode) NofChildren (): INTEGER
NEW
Возвращает количество непосредственных потомков tn, то есть всех узлов n дерева t, для которых t.Parent(n) = tn.

PROCEDURE (tn: TreeNode) SetExpansion (expanded: BOOLEAN)
NEW
Помечает узел tn как развернутый или свернутый. Когда дерево отображается элементом управления, соответствующий узел будет свернут или развернут в зависимости от значения expanded.

PROCEDURE (tn: TreeNode) IsExpanded (): BOOLEAN
NEW
Возвращает TRUE, если tn была развернут элементом управления или явным вызовом SetExpansion. В противном случае возвращается FALSE.

PROCEDURE (tn: TreeNode) ViewAsFolder (isFolder: BOOLEAN)
NEW
Когда элемент управления Tree Control имеет установленную опцию "Folder Icons", он автоматически показывает узлы, у которых есть потомки, как папки. Если tn должен быть показан как папка даже при отсутствии потомков, то следует вызвать tn.ViewAsFolder(TRUE). Если у узла есть потомки, он будет показан как папка, даже если имел место вызов tn.ViewAsFolder(FALSE). ViewAsFolder позволяет показывать листья как папки, но не наоборот.

PROCEDURE (tn: TreeNode) IsFolder (): BOOLEAN
NEW
Возвращает TRUE если tn имеет потомков или если была вызвана tn.ViewAsFolder(TRUE), в противном случае возвращает FALSE.


TYPE Tree
Определяет структуру дерева для хранения TreeNodes. Обычно запись типа Tree связана с элементом управления деревом в пользовательском интерфейсе. Дерево может иметь несколько корней. Можно перемещаться как вверх и вниз по дереву, так и между потомками на одном уровне. Все операции на дереве t, которые запрашивают узел tn типа TreeNode, ставят предусловием, чтобы tn был создан через t.NewChild и чтобы узел tn был частью t, то есть что tn является узлом дерева t и только этого дерева, и что узел tn не был удален из t.

Примечание: Элементы управления деревом выглядят по-разному под Windows NT и под другими версиями Windows. В WindowsNT фон дерева не затеняется, когда элемент управления отключен или доступен только для чтения.
См. подробности в Особенностиплатформы.

PROCEDURE (VAR t: Tree) NofNodes (): INTEGER
NEW
Возвращает общее число вершин в дереве.

Постусловие
Возвращаемое значение больше или равно 0.

PROCEDURE (VAR t: Tree) NofRoots (): INTEGER
NEW
Общее число корней в дереве. Узел tn является корнем, если tn.Parent() = NIL.

Постусловие
Возвращаемое значение больше или равно 0.

PROCEDURE (VAR t: Tree) NewChild (parent: TreeNode; pos: INTEGER; name: String): TreeNode
NEW
Создает новый узел в дереве. Новый узел вставляется в позиции pos среди потомков parent. Если parent не имеет потомков или pos = firstPos, то новый узел вставляется как первый потомок parent. Если parent имеет меньше потомков, чем значение pos или pos = lastPos, то новый узел вставляется как последний потомок parent. Если parent = NIL, то новый узел добавляется в дерево как новый корень на позицию pos.

Предусловие
(pos >= 0) OR (pos = firstPos) OR (pos = lastPos)

Постусловие
t.NofNodes() = t.NofNodes()' + 1

PROCEDURE (VAR t: Tree) Delete (node: TreeNode): INTEGER
NEW
Удаляет узел node и всех его потомков из дерева.

Предусловие
node # NIL

Постусловие
t.NofNodes < t.NofNodes()'

PROCEDURE (VAR t: Tree) DeleteAll
NEW
Удаляет все узлы из дерева.

Постусловие
t.NofNodes() = 0
t.NofRoots() = 0

PROCEDURE (VAR t: Tree) Move (node, parent: TreeNode; pos: INTEGER)
NEW
Перемещает узел в дереве с его текущего места на место, заданное parent и pos. Интерпретация parent и pos такая же, как в NewChild.

Предусловие
node # NIL
(pos >= 0) OR (pos = firstPos) OR (pos = lastPos)

Постусловие
t.NofNodes() = t.NofNodes()'

PROCEDURE (VAR t: Tree) Parent (node: TreeNode): TreeNode
NEW
Возвращает родительский узел для node. Если node является корнем, то возвращается NIL.

Предусловие
node # NIL
			
PROCEDURE (VAR t: Tree) Child (node: TreeNode; pos: INTEGER): TreeNode
NEW
Возвращает потомка узла node в позиции pos. Если node равен NIL, то возвращается корень в позиции pos. Константы firstPos и lastPos можно использовать для получения первого и последнего потомка узла. Если у node потомков нет или их меньше, чем pos, то возвращается NIL.

Предусловие
(pos >= 0) OR (pos = firstPos) OR (pos = lastPos)

PROCEDURE (VAR t: Tree) Next (node: TreeNode): TreeNode
NEW
Возвращает следующий узел того же уровня, что и node. Если node находится в позиции pos, то возвращаемый узел  в позиции pos + 1. Если node является последним потомком своего родителя, то возвращается NIL.

Предусловие
node # NIL

PROCEDURE (VAR t: Tree) Prev (node: TreeNode): TreeNode
NEW
Возвращает предыдущий узел того же уровня и с тем же предком, что и node. Если node находится в позиции pos, то возвращается узел в позиции pos - 1. Если node является первым потомком своего родителя, возвращается NIL.

Предусловие
node # NIL

PROCEDURE (VAR t: Tree) Select (node: TreeNode)
NEW
Делает node выделенным узлом в дереве. Если node = NIL, то выделение в дереве снимается.

PROCEDURE (VAR t: Tree) Selected (): TreeNode
NEW
Возвращает выделенный узел дерева. Если такого нет, возвращается NIL.


TYPE Color
Тип для цветов.

val: INTEGER
Текущее значение цвета (в том же формате, что Ports.Color).


TYPE Currency
Тип для денежных значений.

val: LONGINT
Значение денежной суммы с фиксированной точкой. Настоящее значение равно val / 10^scale.

scale: INTEGER	scale > 0
Масштабный коэффициент для val. Например, val = 12475 и scale = 2 соответствуют значению 124.75. Если за валюту принимается доллар США, то scale = 2 означает, что значение может быть показано и введено с точностью до цента. Значение 3 увеличит точность до 1/10 цента.


TYPE Par
Значения этого типа используются для настройки имен пунктов меню, а также отключения или пометки пунктов меню. Процедура типа GuardProc имеет параметр-переменную типа Par.

disabled: BOOLEAN
Изначально установленное в FALSE, это поле может быть установлено в TRUE командами охраны для отключения меню или элемента управления.

checked: BOOLEAN
Изначально установленное в FALSE, это поле может быть установлено в TRUE, чтобы пометить галочкой пункт меню.

undef: BOOLEAN
Изначально установленное в FALSE, это поле может быть установлено в TRUE, чтобы перевести элемент управления в неопределенное состояние.

readOnly: BOOLEAN
Изначально установленное в FALSE, это поле может быть установлено в TRUE, чтобы перевести элемент управления в состояние только для чтения.

label: String
Для пунктов меню или элементов управления, которые показывают различные заголовки в зависимости от контекста, здесь может быть записано текущее значение.


TYPE GuardProc = PROCEDURE (VAR par: Par)
Такую сигнатуру (или расширенную версию, описанную ниже) должны иметь команды охраны меню или элементов управления. Они могут устанавливать поля параметра par по ситуации. Команды охраны вызываются для определения текущего состояния пункта меню или элемента управления (в частности, чтобы выяснить, активирован пункт/элемент или нет).
Для пунктов меню команды охраны заданы в текстах /Rsrc/Menus соответствующих подсистем или в System/Rsrc/Menus. Команды охраны меню вызываются после щелчка пользователя в панель меню, но перед появлением меню.
Команды охраны для элементов управления задаются с помощью диалога Инспектора, который позволяет устанавливать различные свойства элементов управления. Такие команды вызываются после интерактивного изменения состояния элемента или после программного вызова процедур Update или UpdateList  (или какой-либо из других процедур обновления).

Заметим, что когда пользователь щелкает по панели меню, могут быть выполнены все команды охраны меню. После изменения содержимого интерактора и вызова Update или UpdateList (или какой-либо из других процедур обновления), выполняются охраны всех элементов управления. Из этого следуют две вещи. Во-первых, команды охраны должны быть эффективными. Во-вторых, модуль, который содержит команды охраны, загружается, как только охрана вызвана в первый раз. В этом отношении команды меню представляют некоторую проблему в ходе разработки: только что выгруженный модуль будет перезагружен сразу, как только пользователь попытается выполнить команду меню.

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

В качестве альтернативы можно использовать расширенную версию GuardProc, которая имеет следующую сигнатуру:

	PROCEDURE (n: INTEGER; VAR par: Par)

Фактический параметр для n должен быть константой.


TYPE NotifierProc = PROCEDURE (op, from, to: INTEGER)
Процедура-уведомитель должна иметь одну из следующих сигнатур:

	PROCEDURE (op, from, to: INTEGER)
	PROCEDURE (n, op, from, to: INTEGER)

Через вызовы процедур-уведомителей приложение может узнать о манипуляциях с элементом управления. Тип манипуляции определяется значением параметра op:
op = pressed: Произошло нажатие кнопки мыши.
op = released: Произошло отпускание кнопки мыши.
op = changed: Значение элемента управления (кроме SET или Selection) было изменено.
op = included: Диапазон [from..to] был включен в SET или Selection. Он не был включен ранее.
op = excluded: Диапазон [from..to] был исключен в SET или Selection. Он был включен ранее.
op = set: Диапазон [from..to] был установлен в SET или Selection после сброса предыдущего значения.

Фактический параметр для n должен быть константой.


TYPE LangNotifier = POINTER TO ABSTRACT RECORD  END;
Объекты этого типа могут быть зарегистрированы или дерегистрированы с помощью RegisterLangNotifier и RemoveLangNotifier.

PROCEDURE (n: LangNotifier) Notify-
NEW, ABSTRACT
Этот метод вызывается для всех зарегистрированных объектов-уведомителей LangNotifiers, когда изменяется язык. Порядок, в котором вызываются уведомители, не определен.


VAR metricSystem: BOOLEAN
Эта переменная показывает, следует ли измерять размеры в метрических единицах или в дюймах.

VAR showsStatus: BOOLEAN
Показывает, отображаются ли сообщения в строке состояния приложения. Если showStatus = FALSE, процедуры ShowParamStatus и ShowStatus не будут иметь видимого эффекта.

VAR version: INTEGER
Показывает текущую старшую версию Блэкбокса:
	10 = версия 1.0
	11 = версия 1.1
	12 = версия 1.2
	13 = версия 1.3
	14 = версия 1.4
	15 = версия 1.5

VAR platform: INTEGER
Показывает, на какой операционной системе запущено приложение. В настоящий момент поддерживаются платформы  windows95, windowsNT3, windowsNT4, windows2000.

VAR appName: ARRAY 32 OF CHAR
Имя программы, которая запущена в настоящий момент; по умолчанию "BlackBox". (В версиях от проекта Информатика-21 могут использоваться имена рабочих папок с целью облегчить ориентацию при нескольких активных экземплярах Блэкбокса. прим. Ф.Т.)

VAR language-: Language
Текущий язык в кодах ISO639. См. SetLanguage для более подробной информации.

VAR user: ARRAY 32 OF CHAR
Имя текущего пользователя. В настоящий момент не используется.

VAR thickCaret: BOOLEAN
Определяет, когда текстовая подсистема использует толстый курсор, подобную Word, или нормальный тонкий курсок.

VAR caretPeriod: INTEGER
Определяет период мерцания курсора, который использует текстовая подсистема. Период задается в миллисекундах. По умолчанию равен 500, то есть полсекунды.

VAR commandLinePars: String
Параметры командной строки, переданные при запуске Блэкбокса. Переменная commandLinePars содержит литерную цепочку, введенную в командной строке после опции /PAR. Цепочка может быть записана в одиночных или двойных кавычках. Кавычки могут быть опущены, если в строке нет пробелов. Если опция /PAR отсутствовала, commandLinePars содержит пустую цепочку.

Примеры:
/PAR test
/PAR "parameter string"
/PAR 'A string containing a " can be entered like this'

VAR silent: BOOLEAN
Выключает звук в процедуре Beep. Проще всего управлять ею в Config.Setup.
Beep вызывается в часто используемых командах поиска в документах, но сложность звукового оборудования современных компьютеров закономерно оборачивается иногда ненадёжностью. Вчастности, соответствующий системный вызов приводит (2010) к зависанию на некоторых весьма популярных моделях компьютеров (Dell 500), традиционно изготовляемых из хорошо стандартизованных компонент под управлением ОС Windows.
Переменная введена в т.наз. базовой сборке Блэкбокса от проекта Информатика-21. 

PROCEDURE Update (IN interactor: ANYREC)
Эта процедура должна вызываться после того, как программой были изменены одно или несколько полей записи interactor (процедура вызывается автоматически, когда поле изменяется интерактивно через элемент управления). Она вызывает обновление всех элементов управления, которые связаны с полями этой записи, и затем вычисляет их охраны.

PROCEDURE UpdateList (IN interactor: ANYREC)
Форсируется пересоздание списков для списко-ориентированных элементов управления (списков, блоков выбора, выпадающих списков, деревьев). Это не делается после вызова Update из соображений эффективности.
Заметим, что UpdateList включает в себя также функциональность Update, поэтому не следует вызывать UpdateList(rec); Update(rec).

Следующие процедуры работают подобно Update, но имеют дело с указанными параметрами элементарных или литерных типов:
PROCEDURE UpdateBool (VAR x: BOOLEAN)
PROCEDURE UpdateByte (VAR x: BYTE)
PROCEDURE UpdateChar (VAR x: CHAR)
PROCEDURE UpdateInt (VAR x: INTEGER)
PROCEDURE UpdateLInt (VAR x: LONGINT)
PROCEDURE UpdateReal (VAR x: REAL)
PROCEDURE UpdateSChar (VAR x: SHORTCHAR)
PROCEDURE UpdateSInt (VAR x: SHORTINT)
PROCEDURE UpdateSReal (VAR x: SHORTREAL)
PROCEDURE UpdateSString (IN x: ARRAY OF SHORTCHAR)
PROCEDURE UpdateSet (VAR x: SET)
PROCEDURE UpdateString (IN x: ARRAY OF CHAR)

PROCEDURE MapParamString (in, p0, p1, p2: ARRAY OF CHAR; OUT out: ARRAY OF CHAR)
Производит настройку цепочки in, помещая результат в out. Цепочки вида "#Subsystem:message" подвергаются замене, если есть файл текстовых ресурсов "Strings" для этой подсистемы (в папке "Rsrc" подсистемы). В противном случае просто удаляется префикс "#Subsystem:".
Например, "#System:Cancel" может быть превращена в "Cancel" в США и в "Abbrechen" в Германии; или в "Cancel", если отсутствует файл ресурсов или в нем нет соответствующего перевода.
В цепочку in могут быть внедрены три дополнительных цепочки p0, p1, p2. Они вставляются там, где в in встречаются "^0", "^1" или "^2". Параметры не настраиваются, а просто подставляются.
MapParamString позволяет убрать из исходников литерные цепочки, специфичные для страны или языка, в то же время сохраняя там цепочку, используемую по умолчанию, так что программа будет работать, даже если будут утеряны файлы ресурсов.

PROCEDURE MapString (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR)
Упрощенная версия MapParamString без дополнительных параметров.

За исключением быстродействия эквивалентно:
	MapParamString(in, "", "", "", out)

PROCEDURE RegisterLangNotifier (notifier: LangNotifier)
Добавляет notifier в список объектов-уведомителей типа LangNotifier, которые вызываются всякий раз, когда изменяется язык.

Предусловие
notifier # NIL	20

PROCEDURE RemoveLangNotifier (notifier: LangNotifier)
Удаляет notifier из списка объектов типа LangNotifier.

Предусловие
notifier # NIL, 20

PROCEDURE SetLanguage (lang: ARRAY OF CHAR; persistent: BOOLEAN)
Устанавливает текущий язык в lang, заданный в соответствии с ISO 639. Это значит, что файлы текстовых ресурсов (задающие настройку сообщений и т.п.; см. ниже прим. Ф.Т.) читаются не прямо из папки Rsrc, но из подпапки с тем же именем, что и код языка. Одновременно устанавливается значение глобальной переменной language.

Например, если lang = "de", файл ресурсов Strings читается из папки "Rsrc/de". Если такой папки нет или запрошенного файла там нет, то файл берётся из стандартной папки Rsrc. Пустая цепочка означает, что никакого конкретного языка не указано, и ресурсы читаются из папки Rsrc.

Параметр persistent задаёт, должна ли настройка сохраниться и использоваться и при следующем запуске Блэкбоксса. Если этому параметру задано значение nonPersistent вызывает несохраняемое изменение, которое влияет только не текущую активацию Блэкбокса. Если же задано значение persistent, то изменение будет записано в некотором реестре, и указанный язык будет сразу установлен при следующем запуске Блэкбокса.

О том, как программа может узнавать об изменениях глобальной переменной language, см. описание процедуры RegisterLangNotifier.

Предусловие
(lang = "") OR (LEN(lang$) = 2)	20

PROCEDURE ResetLanguage
Текущий язык сбрасывается в последнее значение, сохранённое в реестре.

PROCEDURE ShowParamMsg (IN str, p0, p1, p2: ARRAY OF CHAR)
Предъявляет цепочку str как сообщение пользователю. Производится настройка цепочки str (см. MapParamString прим. Ф.Т.). Дополнительные параметры p0, p1 и p2 не настраиваются. Эта процедура используется для неотложных сообщений, обычно для уведомления пользователя об ошибке в каком-либо действии. Ее не следует использовать для вывода рутинных сообщений об успехе. Если имеется окно журнала, то предполагается, что пользователь предпочел бы видеть такие сообщения там. Поэтому сообщения выводятся в рабочий журнал, если он есть, иначе они показываются в отдельном диалоговом окне.

Предусловие
str # NIL	20

PROCEDURE ShowMsg PROCEDURE (IN str: ARRAY OF CHAR)
Упрощенная версия ShowParamMsg без дополнительных параметров.

За исключением быстродействия, эквивалентно:
	ShowParamMsg(str, "", "", "")

Предусловие
str # NIL	20

PROCEDURE ShowParamStatus (IN str, p0, p1, p2: ARRAY OF CHAR)
Предъявляет цепочку str как сообщение пользователю. Производится настройка цепочки str (см. MapParamString прим. Ф.Т.). Дополнительные параметры p0, p1 и p2 не настраиваются. В противоположность ShowParamMsg, эта процедура используется для короткоживущих и менее значимых сообщений; например, для сообщений о текущем состоянии длительного процесса. Эта процедура не должна использоваться для важных сообщений, так как некоторые платформы могут не предусматривать полоску (строку) состояния, или механизм уведомления может быть отключен. Эти обстоятельства отражены в глобальной переменной showStatus.

PROCEDURE ShowStatus PROCEDURE (IN str: ARRAY OF CHAR)
Упрощенная версия ShowParamStatus, которая не имеет дополнительных входных параметров.

За исключением быстродействия, эквивалентно:
	ShowParamStatus(str, "", "", "")

PROCEDURE FlushMappings
По соображениям быстродействия настроенные цепочки литер сохраняются во внутренних таблицах. Данная процедура очищает все такие таблицы, чем форсируется их перезагрузка из соответствующих файлов (Rsrc/Strings и т.д.), как только они вновь потребуются.

PROCEDURE GetOK (IN str, p0, p1, p2: ARRAY OF CHAR; form: SET; OUT res: INTEGER)
Модальный диалог
<Здесь и далее пометка "Модальный диалог" означает, что процедура открывает диалог, не позволяющий работать в других окнах, пока не будет закрыт этот диалог. --прим. ред.>
Предъявляет пользователю в модальном диалоговом окне настроенную литерную цепочку (см. объяснения для процедуры MapParamString) с необязательными параметрами от p0 до p2. form указывает набор кнопок в диалоговом окне. Допустимы только осмысленные комбинации:
	{ok}
	{ok, cancel}
	{yes, no}
	{yes, no, cancel}
res сообщает, какая кнопка была нажата пользователем.

Предусловие
((yes IN form) = (no IN form))  &  ((yes IN form) # (ok IN form))	20

Постусловие
res IN form

PROCEDURE GetIntSpec (defType: Files.Type; VAR loc: Files.Locator; OUT name: Files.Name)
Модальный диалог
Просит пользователя указать для файла пару (loc, name). defType указывает требуемый тип файла (пустая цепочка "" означает, что допустим любой тип; другие типы зависят от платформы, например, "txt" для ASCII-файлов Windows или "TEXT" для ASCII-файлов MacOS.)
loc # NIL указывает допустимое местоположение (папку) для файла.
Mac OS: loc игнорируется.

Предусловие
defType = ""  OR  defType является допустимым именем типа для данной платформы	20

PROCEDURE GetExtSpec (defName: Files.Name; defType: Files.Type; VAR loc: Files.Locator;
												OUT name: Files.Name)
Модальный диалог
Просит пользователя указать данные файла для его выгрузки. defName  имя, предъявляемое пользователю по умолчанию. defType  тип файла, который следует использовать по умолчанию. loc # NIL  указывает допустимое местоположение (папку) для файла.
Mac OS: loc игнорируется.

Предусловие
defType = ""  OR  defType является допустимым именем типа для данной платформы	20

PROCEDURE GetColor (in: INTEGER; OUT out: LONGINT; OUT set: BOOLEAN)
Модальный диалог
Запрашивает у пользователя цвет. in   цвет, предъявляемый пользователю по умолчанию.

PROCEDURE Call (IN cmd, errorMsg: ARRAY OF CHAR; OUT res: INTEGER)
Call выполняет последовательность команд Блэкбокса, заданную в cmd. Если соответствующие модули не загружены, Call  пытается загрузить их. Если возникает ошибка, выполнение прерывается, и res возвращает значение # 0. Если errorMsg = "", Call не показывает сообщений об ошибках. 
Если errorMsg # "", то в случае ошибки Call показывает errorMsg, дополненное кратким описанием конкретной ошибки.
Синтаксис команд с параметрами описан в документации к модулю StdInterpreter.

PROCEDURE Beep
Дает короткий звуковой сигнал. Отключается выставлением silent := TRUE.

PROCEDURE Notify
Для внутреннего использования в каркасе Блэкбокса.