hodza/BlackBox.Shkola.2014 huggingface dataset:
Dev/Docu/MsgSpy.odc

DevMsgSpy

A tool that allows to inspect the messages which are sent to a view.


About the message spy
Message Spy is a tool that logs the messages which are sent to a view through one of the methods HandleCtrlMsg, HandleModelMsg, HandlePropMsg, or HandleViewMsg. The message spy displays the type of all messages which are sent to the view and, upon request, also the complete message records.
This tool can help you if your view does not behave as you expect. With the message spy you can learn which messages the frameworks sends to your view and thus which messages you should answer.

How to inspect a view
To open the Message Spy, choose Message Spy... from menu Info. This opens a dialog box similar to the one shown in Figure 1. If you want to inspect a view with the message spy, select it as a singleton and press the Add View button. If you want to remove a view from the message spy, select it as a singleton and press the same button, which is now labeled Remove View.




Figure 1: The tool window of Message Spy

The tool dialog box of the message spy is divided into two parts. In the upper part, all recognized message types are displayed. This list grows over time. Whenever the message spy meets a message of a new type through any of its inspected views, this type is added to the list of recognized types. Since you might loose the overview over the message types soon, the Mark New Messages in List option causes all newly added message types to be selected. In this way you easily learn about messages involved in a particular action. The list of message types can be cleared with the Clear List button.

If the option Show Messages in Log is selected, then all messages sent to all inspected views whose types are selected in the type selection box are displayed in the lower part of the message spy dialog box. For each message, the type name is displayed followed by a diamond. If this diamond is clicked, then all instance variables of the message record are displayed in a separate window. The log is a regular text which can be scrolled and edited.

More information
As message records are static (stack-allocated) variables they have to be copied in order to make them accessible beyond the call of the message handler. The consequence thereof is that only the contents of the message upon message call can be inspected, not how the message is answered by a particular view.

Note that the message spy displays messages of any type sent to an intercepted view, this also includes messages of types which are not exported.

In order to intercept a view, the message spy adds a wrapper around the original view. This wrapper displays the messages and then forwards them to the wrapped view. By replacing a view by its wrapper, the type of the view changes, and thus some tools which depend on a view's type no longer work with inspected views.

Menu command:

	"Message Spy..."	""	"StdCmds.OpenToolDialog('Dev/Rsrc/MsgSpy', 'Message Spy')"	""
Dev/Docu/RBrowser.odc

DevRBrowser

DEFINITION DevRBrowser;

	PROCEDURE ShowRepository;
	PROCEDURE Update;
	PROCEDURE OpenFile (path, name: ARRAY OF CHAR);
	PROCEDURE ShowFiles (path: ARRAY OF CHAR);

END DevRBrowser.


This tool module allows to list all subsystems as folds (-> StdFolds). A fold contains links to its subsystem's symbol, code, source, and documentation files. It makes it easier to get an overview over the elements of a large BlackBox application, or over BlackBox itself.
For the resources of a subsystem, a Rsrc link is generated. Clicking this link creates a list of all documents in the Rsrc subdirectory.
For the documentation files, those which contain one or several dashes ("-") in their names are not treated as module documentations, but rather as auxiliary documentation files which are listed at the beginning. In particular, files with name Sys-Map, User-Man, and Dev-Man are extracted this way. They are the standard names for a map document which contains hyperlinks to the relevant files of the subsystems; the user manual for the subsystem (user in this context means a programmer); and the programmer's reference.

Menu command:
	"Repository"	""	"DevRBrowser.ShowRepository"	""


PROCEDURE ShowRepository
Create a report which lists all subsystems.

PROCEDURE Update
Update the report (used as command in the update link that is on top of the generated report).

PROCEDURE OpenFile (path, name: ARRAY OF CHAR)
Used internally. Opens the file at location path and with name name.

PROCEDURE ShowFiles (path: ARRAY OF CHAR)
Used internally. Lists all resource documents at location path.
Dev/Docu/References.odc

DevReferences

DEFINITION DevReferences;

	IMPORT TextMappers, Files;

	PROCEDURE  ShowDocu;
	PROCEDURE  ShowSource;
	PROCEDURE  ShowText (module, ident: TextMappers.String; category: Files.Name);

END DevReferences.


This module provides two commands which, given the name of a module or of a qualified identifier, look up the corresponding documentation or source text.

Typical menu:

MENU
	"&Source"	""	"DevReferences.ShowSource"	"TextCmds.SelectionGuard"
	"&Documentation"	""	"DevReferences.ShowDocu"	"TextCmds.SelectionGuard"
END


PROCEDURE ShowDocu
Guard: TextCmds.SelectionGuard
Looks up the documentation text of the module whose name is selected. If a qualified identifier is selected, i.e., "module.ident", the corresponding item is searched. It must be written in boldface and in a smaller than 14 point type. The document must be located in the Docu directory of the module's subsystem.

PROCEDURE ShowSource
Guard: TextCmds.SelectionGuard
Looks up the source text of the module whose name is selected. If a qualified identifier is selected, i.e., "module.ident", the corresponding item is searched. It must be written in boldface and in a smaller than 14 point type. The document must be located in the Mod directory of the module's subsystem.

PROCEDURE  ShowText (module, ident: TextMappers.String; category: Files.Name)
Used internally.
Dev/Docu/Search.odc

DevSearch

DEFINITION DevSearch;

	PROCEDURE Compare;
	PROCEDURE SearchInDocu (opts: ARRAY OF CHAR);
	PROCEDURE SearchInSources;
	PROCEDURE SelectCaseInSens (pat: ARRAY OF CHAR);
	PROCEDURE SelectCaseSens (pat: ARRAY OF CHAR);

END DevSearch.


This tool provides global search facilities (in all subsystems' Docu or Mod directories) and a text comparison feature. The search engine cooperates with module TextCmds, in that it uses the latter's find & replace interactor. This means that after having found a string using one of the search commands, the text command "Find Again" can be used to conveniently find further occurrences of the same string in the same text.

Typical menu:

MENU
	"Search In Sources"	""	"TextCmds.InitFindDialog; DevSearch.SearchInSources"	"TextCmds.SelectionGuard"
	"Search In Docu (Case Sensitive)"	""	"TextCmds.InitFindDialog; DevSearch.SearchInDocu('s')"	"TextCmds.SelectionGuard"
	"Search In Docu (Case Insensitive)"	""	"TextCmds.InitFindDialog; DevSearch.SearchInDocu('i')"	"TextCmds.SelectionGuard"
	"Compare Texts"	""	"DevSearch.Compare"	"TextCmds.FocusGuard"
END


PROCEDURE Compare
Guard: top two windows are document windows
Perform a textual comparison of the two topmost windows' contents. The comparison starts at each window's current caret position, or alternatively, at the end of its selection. The next difference which is found is indicated by advancing the caret or selection to the found difference. White space (spaces, tabs, carriage returns) are ignored during comparison.

PROCEDURE SearchInSources
Guard: TextCmds.SelectionGuard
Search all available sources (in all subsystems) for the occurrence of the selected text pattern. Search is case-sensitive.

PROCEDURE SearchInDocu (opts: ARRAY OF CHAR)
Guard: TextCmds.SelectionGuard
Search all available documentation texts (in all subsystems and in Manuals) for the occurrence of the selected text pattern. If the string opts starts with an 's' or 'S' then the search is case sensitive, if it starts with an 'i' or 'I' the search is case-insensitive and in all other cases the value from the Find dialog is used.

PROCEDURE SelectCaseInSens (pat: ARRAY OF CHAR)
Sets up TextCmds.find.find with pat, calls TextCmds.FindFirst and opens the find dialog. This procedure is used by link views created with the above procedure SearchInDocu when the search was performed case-insensitive.

PROCEDURE SelectCaseSens (pat: ARRAY OF CHAR)
Sets up TextCmds.find.find with pat and calls TextCmds.FindFirst. This procedure is used by link views created with the above procedures SearchInSource and SearchInDocu when the search was performed case-sensitive.
Dev/Docu/Sys-Map.odc

Map to the Dev Subsystem

UserManual

DevAlienTool 	display infos on aliens
DevAnalyzer	source code analyzer
DevBrowser	symbol file browser
DevCmds	miscellaneous commands
DevComInterfaceGen 	generate Automation
		interfaces
DevCommanders	command interpreters
DevCompiler	Component Pascal
	compiler
DevDebug	symbolic debugger
DevDependencies 	display module graph
DevHeapSpy	visual heap display
DevInspector	control property inspector
DevLinkChk	check hyperlinks
DevLinker	linker
DevMarkers	error markers
DevMsgSpy	log messages to a view
DevPacker 	pack files into an EXE file
DevProfiler	statistical profiler
DevRBrowser	repository browser
DevReferences	source/docu symbol lookup
DevSearch	global search tool
DevSubTool	template generator
Dev/Docu/ru/AlienTool.odc

DevAlienTool

DEFINITION DevAlienTool;

	PROCEDURE Analyze;

END DevAlienTool.


Нелегальными называются отображения, которые по каким-либо причинам не могут быть корректно загружены. Причиной может быть программная ошибка, например, число прочитанных байт отличается от того, сколько было записано, или это может быть проблема версий (была обнаружена неизвестная версия). Однако обычно проблема в том, что некоторый код для отображения не может быть загружен, поскольку он поврежден или противоречив. Инструмент Alien помогает в анализе таких проблем.

PROCEDURE Analyze
Охрана: StdCmds.SingletonGuard
Эта команда выполняет анализ нелегального отображения, выделенного монолитно, и открывает окно с текстовым отчетом.
Dev/Docu/ru/Cmds.odc

DevCmds

DEFINITION DevCmds;

	IMPORT Dialog;

	PROCEDURE FlushResources;
	PROCEDURE OpenModuleList;
	PROCEDURE OpenFileList;
	PROCEDURE RevalidateViewGuard (VAR par: Dialog.Par);
	PROCEDURE RevalidateView;
	PROCEDURE SetCancelButton;
	PROCEDURE SetDefaultButton;
	PROCEDURE ShowControlList;

END DevCmds.


Возможное меню:

MENU
	"&Open Module List"	""	"DevCmds.OpenModuleList"	"TextCmds.SelectionGuard"
	"Open &File List"	""	"DevCmds.OpenFileList"	"TextCmds.SelectionGuard"
	"Flus&h Resources"	""	"DevCmds.FlushResources"	""
	"Re&validate View"	""	"DevCmds.RevalidateView"	"DevCmds.RevalidateViewGuard"
	SEPARATOR
	"&Control List"	""	"DevCmds.ShowControlList"	"StdCmds.ContainerGuard"
	"Set &Default Button"	""	"DevCmds.SetDefaultButton"	"StdCmds.ContainerGuard"
	"Set Canc&el Button"	""	"DevCmds.SetCancelButton"	"StdCmds.ContainerGuard"
END


PROCEDURE FlushResources
Сбрасывает стражи меню и ресурсы отображения строк. Эта команда необходима, когда элемент меню отключается из-за того, что его код не может быть выполнен, но когда код стал исполняемым (например, при перекомпиляции модуля и возможной выгрузки старой версии модуля). Это также необходимо, если тексты строковых ресурсов были изменены и сохранены, и следует получить эффект от изменений немедленно, а не тогда, когда BlackBox будет запущен в следующий раз.

PROCEDURE OpenModuleList
Охрана: TextCmds.SelectionGuard
Открывает модуль, имя которого выделена, например,
"FormModels FormViews".

PROCEDURE OpenFileList
Охрана: TextCmds.SelectionGuard
Открывает файлы, имена которых выделены. Имена должны использовать портируемый синтакисис имен путей, например,
"Form/Mod/Models Form/Mod/Views".

PROCEDURE RevalidateViewGuard (VAR par: Dialog.Par)
Охрана меню для RevalidateView.

PROCEDURE RevalidateView
Охрана: RevalidateViewGuard
Отображение может становиться некорректным после сбоя. В результате отображение затеняется и становится пассивным (так что тот же сбой не может произойти снова, таким образом предотвращается цепь ошибок). Однако иногда полезно восстановить отображение и продолжить работу с ним.

PROCEDURE SetCancelButton
Охрана: StdCmds.ContainerGuard
Делает выделенное отображение в фокусированном контейнере кнопкой "отмена", то есть, в режиме маски (см. Containers) оно становится нажатым, когда пользователь вводит символ escape.

PROCEDURE SetDefaultButton
Охрана: StdCmds.ContainerGuard
Делает выделенное отображение в фокусированном контейнере кнопкой "по умолчанию", то есть, в режиме маски (см. Containers) оно становится нажатым, когда пользователь вводит символ return.

PROCEDURE ShowControlList
Охрана: StdCmds.ContainerGuard
Создает список свойств всех отображений в фокусированном контейнере, который возвращает свойства элементов управления (см. Controls).
Dev/Docu/ru/Commanders.odc

DevCommanders

DEFINITION DevCommanders;

	TYPE
		Par = POINTER TO RECORD 
			text: TextModels.Model;
			beg, end: INTEGER
		END;

	VAR
		par: Par;

	PROCEDURE Deposit;
	PROCEDURE DepositEnd;
	... plus some private items ...

END DevCommanders.


Коммандер представляет собой отображение, которое может интерпретировать и выполнять команду или последовательность команд, записанных после коммандера. Он работает только, когда внедрен в текст.
Коммандеры могут быть полезны при разработке; например, они могут внедряться прямо в исходный текст программы. Они не предназначены для использования конечными пользователями, из-за своего непривычного интерфейса.

Команды меню:
"Insert Commander"	""	"DevCommanders.Deposit; StdCmds.PasteView"	"StdCmds.PasteViewGuard"
"Insert EndCommander"	""	"DevCommanders.DepositEnd; StdCmds.PasteView"	"StdCmds.PasteViewGuard"


TYPE Par
Контекстные параметры выполнения команды. Используется в командах типа
	DevCompiler.CompileThis ObxViews1 ObxViews2

text: TextModels.Model
Текст, содержащий активируемый коммандер и команду.

beg: INTEGER
Начало параметров команды, то есть, позиция в тексте сразу за последним символом собственно команды.

end: INTEGER
Конец параметров команды. Это либо конец текста, либо позиция следующего командера, или EndView в тексте.


VAR par-: Par	par # NIL точно в течение текущей выполняемой команды
Через эту  переменную команда во время выполнения может получить доступ к тексту, и следовательно, к своему контексту.


PROCEDURE Deposit
Команда размещения в буфер обмена для коммандеров.

PROCEDURE DepositEnd
Команда размещения в буфер обмена для DevCommanders.EndView .Помечает конец команды для предыдущего коммандера. Если конечного отображения нет, то коммандер считывает до следующего коммандера или до конца текста.

Модуль включает в себя несколько других элементов, которые используются внутри.
Dev/Docu/ru/Compiler.odc

DevCompiler

DEFINITION DevCompiler;

	PROCEDURE Compile;
	PROCEDURE CompileAndUnload;
	PROCEDURE CompileModuleList;
	PROCEDURE CompileSelection;
	PROCEDURE CompileThis;
	... плюс некоторые закрытые команды ...

END DevCompiler.


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

Типичное меню:

MENU
	"&Компилировать"	""	"DevCompiler.Compile"	"TextCmds.FocusGuard"
	"Компилировать и выгрузить"	""	"DevCompiler.CompileAndUnload"	"TextCmds.FocusGuard"
	"Компилировать выделенное"	""	"DevCompiler.CompileSelection"	"TextCmds.SelectionGuard"
	"Компилировать список модулей"	""	"DevCompiler.CompileModuleList"	"TextCmds.SelectionGuard"
END


PROCEDURE Compile
Охрана: TextCmds.FocusGuard
Компилирует модуль Компонентного Паскаля, исходный текст которого находится в фокусированном отображении.

PROCEDURE CompileAndUnload
Охрана: TextCmds.FocusGuard
Компилирует модуль, исходный текст которого находится в фокусированном отображении. Если компиляция проходит успешно, то старая версия этого модуля выгружается. CompileAndUnload полезна при разработке модулей верхнего уровня, то есть таких, которые не импортируются другими модулями и поэтому могут быть отдельно выгружены.

PROCEDURE CompileModuleList
Охрана: TextCmds.SelectionGuard
Компилирует список модулей, имена которых выделены. Когда обнаруживается первая ошибка, содержащий ее исходный код открывается, показывая ошибку.

PROCEDURE CompileSelection
Охрана: TextCmds.SelectionGuard
Компилирует модуль, начало которого выделено.

PROCEDURE CompileThis
Используется в тексте с DevCommanders.View. Эта команда берет текст, следующий за ним, и интерпретирует его как список модулей, которые следует откомпилировать. Похожа на CompileModuleList за исключением того, что не нужно выделение.

... плюс некоторые закрытые команды ...
Dev/Docu/ru/HeapSpy.odc

DevHeapSpy
Редактирование: Ф.В.Ткачев, 2009

DEFINITION DevHeapSpy;

	VAR
		par-: RECORD 
			allocated-, clusters-, heapsize-: INTEGER
		END;

	PROCEDURE GetAnchor (adr: INTEGER; OUT anchor: ARRAY OF CHAR);
	PROCEDURE ShowAnchor (adr: INTEGER);
	PROCEDURE ShowHeap;

END DevHeapSpy.


DevHeapSpy  инструмент, который наглядно показывает содержимое динамической памяти (кучи). Динамически размещаемые блоки памяти показываются в виде "интерактивной карты памяти", которая периодически обновляется. DevHeapSpy показывает символическую информацию о каждом блоке памяти, который вы указываете мышью. Он позволяет проверять значения полей записей в объектах и просматривать сложные структуры данных.
Куча Блэкбокса делится на кластеры. Кластеры - это непрерывные блоки памяти. Каждый кластер содержит несколько объектов кучи. DevHeapSpy показывает кластеры как длинные серые блоки. Динамически размещенные объекты показываются в кластерах красными и синими областями. Красные области соответствуют фрагментам памяти, отведенным под переменные некоторого типа записей. Синие  отведенным под динамические массивы.

Чтобы увидеть информацию по куче, выполните команду HeapSpy... из меню Info. Откроется маленькое диалоговое окно, показывающее суммарную информацию о куче.
Чтобы открыть окно DevHeapSpy, нажмите кнопку Show Heap в этом диалоговом окне. Откроется окно с картой динамической памяти. Когда вы нажмете левую кнопку мыши над областью кластера, DevHeapSpy даст информацию об объекте, на который указывала мышь. Если мышь указывает на динамически размещенный объект, то есть на красную или синию область, объект подсвечивается. При отпускании кнопки мыши открывается окно отладчика, которое показывает детальную символьную информацию об объекте.

В меню можно использовать следующую команду:
	"Heap Spy..."	""	"StdCmds.OpenAuxDialog('Dev/Rsrc/HeapSpy', 'Heap Spy')"	""

VAR par-: RECORD
Интерактор для диалога.

allocated-: INTEGER
Объем памяти, занятой размещенными на куче объектами (в байтах).

clusters-: INTEGER
Количество размещенных кластеров.

heapsize-: INTEGER
Полный объем кучи в байтах (количество кластеров, умноженное на размер одного кластера).


PROCEDURE GetAnchor (adr: INTEGER; OUT anchor: ARRAY OF CHAR)
PROCEDURE ShowAnchor (adr: INTEGER)
PROCEDURE ShowHeap
Разлчиные процедуры, используемые в диалоге.
Dev/Docu/ru/Inspector.odc

DevInspector

DEFINITION DevInspector;

	IMPORT Dialog;

	VAR
		inspect: RECORD
			control-: Dialog.String;
			label: ARRAY 40 OF CHAR;
			link, guard, notifier: Dialog.String;
			level: INTEGER;
			opt0, opt1, opt2, opt3, opt4: BOOLEAN
		END;

	PROCEDURE GetNext;
	PROCEDURE Set;
	PROCEDURE InitDialog;
	PROCEDURE ControlGuard (VAR par: Dialog.Par);
	PROCEDURE GuardGuard (VAR par: Dialog.Par);
	PROCEDURE LabelGuard (VAR par: Dialog.Par);
	PROCEDURE LevelGuard (VAR par: Dialog.Par);
	PROCEDURE LinkGuard (VAR par: Dialog.Par);
	PROCEDURE OptGuard (opt: INTEGER; VAR par: Dialog.Par);
	PROCEDURE NotifierGuard (VAR par: Dialog.Par);
	PROCEDURE Notifier (idx, op, from, to: INTEGER);

END DevInspector.


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

Инспектор открывается командой Edit->Object Properties... (Windows) / Edit->PartInfo (MacOS). Она принимает на входе монолитно выделенный элемент управления (-> Controls). Запуск инспектора можно сделать напрямую в среде, командой StdCmds.ShowProp.


VAR inspect: RECORD
Интерактор для диалога свойств.

control-: Dialog.String
Имя элемента управления. Это (возможно, проецированное) имя типа элемента.

label: ARRAY 40 OF CHAR
Текстовая метка элемента управления.

link: Dialog.String
Связь с полем интерактора, в форме module.variable.field.

guard: Dialog.String
Имя команды охраны для элемента управления.

notifier: Dialog.String
Имя команды уведомления для элемента управления.

level: INTEGER
Только если значение переключателя равно level, он "включен".

opt0, opt1, opt2, opt3, opt3: BOOLEAN
Различные свойства, которые зависят от текущего выделенного элемента управления. Например, командная кнопка использует opt0 и opt1 для показа свойств "default" и "cancel".

PROCEDURE GetNext
Показывает следующий элемент управления в этом контейнере. После последнего элемента GetNext возвращается по кругу к первому.

PROCEDURE Set
Set the control's properties to the currently displayed values.
Устанавливает свойствам элемента управления текущие показываемые значения.

PROCEDURE InitDialog
Устанавливает интерактор в соответствие с текущим выделенным элементом управления.

PROCEDURE ControlGuard (VAR par: Dialog.Par)
PROCEDURE GuardGuard (VAR par: Dialog.Par)
PROCEDURE LabelGuard (VAR par: Dialog.Par)
PROCEDURE LevelGuard (VAR par: Dialog.Par)
PROCEDURE LinkGuard (VAR par: Dialog.Par)
PROCEDURE OptGuard (opt: INTEGER; VAR par: Dialog.Par)
PROCEDURE NotifierGuard (VAR par: Dialog.Par)
PROCEDURE Notifier (idx, op, from, to: INTEGER)
Различные стражи и уведомители, используемые диалогом инспектора.