hodza/BlackBox.Shkola.2014 huggingface dataset:
Obx/Docu/ru/Fern.odc

Описание системы примерами: Fractal Fern
(Пример из "Программирование на Обероне",  Вирта и Райсера)
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

Компилируем модуль ObxRandom

Компилируем модуль ObxFern

Инициализируем программу:
 
  ObxFern.Init
	120	0	25
	0.0	0.85	0.2	-0.15
	0.0	0.04	-0.26	0.28
	0.0	-0.04	0.23	0.26
	0.16	0.85	0.22	0.24
	0.0	0.0	0.0	0.0
	0.0	1.6	1.6	0.44
	0.01	0.85	0.07	0.07

Запускаем отрисовку:	

 ObxFern.Draw

Прекращаем итерации нажатием клавиши "s".

Изменив набор чисел на входе, получим другой рисунок.
Obx/Docu/ru/FileTree.odc

Описание системы примерами: ObxFileTree

	Этот пример иллюстрирует использование дерева (TreeControl). Цель состоит в том, чтобы создать файловый браузер, подобный Windows Explorer. Чтобы сделать его более простым, интерфейс пользователя будет состоять из текстового поля, трех кнопок и дерева. Когда пользователь набирает путь к директории в текстовом поле и нажимает на кнопку Display, файлы и папки в данной директории демонстрируются в виде дерева. Пользователь может просмотреть файлы и папки в дереве, а двойной щелчок на файле открывает файл в Блэкбоксе.

Интеракторы
	Чтобы реализовать такой пользовательский интерфейс, необходима переменная типа Dialog.String для присоединения к текстовому полю, нам нужно две процедуры, чтобы присоединиться к кнопкам Display и Open соответственно; и нам нужна переменная Dialog.Tree, чтобы присоединить к дереву. Нам также нужно присоединить к дереву уведомителя. Этот уведомитель будет распознавать двойной щелчок на листе дерева и открывать соответствующий файл.

Дерево имеет ряд свойств, которые могут быть изменены при помощи инспектора свойств. Для этого примера стандартных свойств достаточно. Лишь в редких случаях опция "Значки папки" (Folder icons) должна быть включена. Эта опция заставляет дерево отображать значок перед каждым узлом. Листья получают изображение файла, а ветви получают изображение папки. Эта опция придает нашей программе такой же вид, как и у Windows Explorer.

Единственная проблема заключается в том, что если файловая директория не содержит никаких файлов, то это будет лист и, таким образом, будет выглядеть, как файл, а не как папка. С этой целью Dialog.TreeNode предлагает метод, называемый ViewAsFolder, которая представляет лист дерева как папку.

Реализация
В примере используются четыре процедуры:

PROCEDURE BuildDirTree (loc: Files.Locator; parent: Dialog.TreeNode);
PROCEDURE Update*;
PROCEDURE Open*;
PROCEDURE OpenGuard* (VAR par: Dialog.Par);

BuildDirTree рекурсивно добавляет файлы и папки в дерево, а также демонстрирует, что атрибут ViewAsFolder  устанавливается для узлов, которые являются папками. Update - это процедура, которая привязана к командной кнопке Display в интерфейсе пользователя. Эта процедура очищает дерево и затем вызывает BuildDirTree. Процедура Open открывает выделенную папку или файл. StdCmds.DefaultOnDoubleClick, которая устанавливается как уведомляющая процедура дерева, выполняет команду Open по умолчанию, когда происходит двойной щелчок на дереве.

 "StdCmds.OpenToolDialog('Obx/Rsrc/FileTree', 'ObxFileTree Demo')"
 "StdCmds.OpenAuxDialog('Obx/Rsrc/FileTree', 'ObxFileTree Демо')"

ObxFileTreesources

Перевел студент группы 08-302 Забелин И.С.
Obx/Docu/ru/Hello1.odc

Примеры. ObxHello1
Редакция перевода: Ф.В.Ткачев, 2009-03-24
ENGLISH
В системе Блэкбокс всё вращается вокруг т.наз. объектов отображения (или, выражаясь неформально, вьюшек, англ. views; по поводу этого термина см. замечания прим. ред.). Объект отображения (в дальнейшем вьюшка)  это прямоугольная часть документа; документ состоит из иерархии вставленных друг в друга вьюшек. Текст, который вы сейчас читаете, является текстовой вьюшкой; ниже находится ещё одна текстовая вьюшка, вставленная в первую:
	
	MODULE ObxHello1;

	IMPORT Views, TextModels, TextMappers, TextViews;

	PROCEDURE Do*;
		VAR t: TextModels.Model; f: TextMappers.Formatter; v: TextViews.View;
	BEGIN
		t := TextModels.dir.New();	(* создать новый пустой текстовый объект *)
		f.ConnectTo(t);	(* присоединить к тексту форматтер *)
		f.WriteString("Приветствие"); f.WriteLn;	(* записать в новый текст цепочку литер и 0DX *)
		v := TextViews.dir.New(t);	(* создать новую текстовую вьюшку для t *)
		Views.OpenView(v)	(* открыть вьюшку в новом окне *)
	END Do;

END ObxHello1.

 ObxHello1.Do
Текстовая вьюшка, показанная выше, содержит чуть более сложную программу "Hello World", чем ObxHello0. В ней не используется модуль StdLog для записи в рабочий журнал. Вместо этого программа создаёт новый пустой текст, к которому подключается форматтер текста (от англ. to format, форматировать). Форматтер  это объект, который предоставляет процедуры для записи в текст значений всех элементарных типов Компонентного Паскаля. В примере, показанном выше, в текст записываются литерная цепочка и возврат каретки, и подразумевается, что они приписываются в конце уже существующего текста. Поскольку вновь созданный текст был пуст, переменая t в итоге содержит в точности то, что в нее записал форматтер.
Текст  это объект, который содержит собственно текст и атрибуты текста; то есть последовательность литер и информацию о шрифте, цвете и вертикальном смещении каждой литеры. Однако текст не знает, как изобразить себя на экране; для этого и предназначена текстовая вьюшка. (Да, то, на что вы сейчас смотрите,  это отрисовка такой вьюшки. (Чтобы увидеть границы этой вьюшки, нажмите Ctrl+Space; должна появиться рамочка, подобная той, что видна вокруг вьюшки с текстом модуля, когда та в фокусе; чтобы вернуться в нормальный режим, нажмите Esc. прим. ред.)) При создании текстовой вьюшки текст передается ей в качестве параметра. Один и тот же текстовый объект могут показывать несколько вьюшек одновременно. Когда вы редактируете текст в одной вьюшке, изменения распространяются на все другие вьюшки, показывающие этот текст.
Для создания текста выполняются следующие общие шаги:
1) создание текстовой модели;
2) подключение к ней текстового форматтера;
3) запись содержимого текста при помощи форматтера;
4) создание новой текстовой вьюшки для созданной модели;
5) открытие этой текстовой вьюшки в окне.

В этом примере мы увидели, как использовать текстовую подсистему для создания нового текста.

Текст перевёл Адаменко Оскар. 08-302
Obx/Docu/ru/Links.odc

Описание системы примерами:  ObxLinks

Этот пример демонстрирует, как может быть создан текст, содержащий отображения-ссылки (link views). Текст представляет содержимое каталога. Имеются ссылки для каждого подкаталога, и ссылки для каждого файла, который может быть преобразован в отображение. Таким образом, этот пример также демонстрирует, как перечисляются файлы и локаторы (locators) и как используются файловые конверторы Блэкбокса.
 "ObxLinks.Directory('')"  содержание текущей папки Блэкбокса
 "ObxLinks.Directory('C:')" содержание диска C
 "ObxLinks.Directory('C:\Program Files')" содержание папки Program Files диска C

ObxLinkssources
Obx/Docu/ru/Omosi.odc

Описание системы примерами: ObxOmosi
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

			
	
Дальнейшие примеры:
Omosi1	Omosi2	Omosi3	Omosi4	Omosi5	Omosi6

Отображение (view) Омоси (богиня земли у шаманов Монголии - прим. пер.) состоит из области, заполненной треугольниками. Для каждого из этих треугольников может быть выбран один из четырех цветов. При нажатии на треугольник его цвет изменяется. Нажатием с удержанием клавиши shift можно выбрать несколько треугольников, у которых цвет изменится одновременно. При нажатии на треугольник с клавишей Ctrl, появляется диалог цветовой палитры, который позволяет привести цветовой набор к другому цвету RGB.

ObxOmosisources

 "ObxOmosi.Deposit; StdCmds.Open"
Obx/Docu/ru/Open0.odc

Описание системы примерами:ObxHello0

Этот пример запрашивает у пользователя файл, открывает документ, содержащийся в файле, и присоединяет строку к тексту, содержащемуся в документе. В заключение текст (в своей текстовом отображении (view)) открывается в окне
	MODULE ObxOpen0;

	IMPORT Files, Converters, Views, TextModels, TextMappers, TextViews;

	PROCEDURE Do*;
		VAR loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
			v: Views.View; t: TextModels.Model; f: TextMappers.Formatter;
	BEGIN
		loc := NIL; name := ""; conv := NIL;	(* нет умолчаний для Views.Old *)
		v := Views.Old(Views.ask, loc, name, conv);	(* Запрос у пользователя файла и открытие его как картинки*)
		IF (v # NIL) & (v IS TextViews.View) THEN		(* надо убедиться, что это текстовая картинка *)
			t := v(TextViews.View).ThisModel();	(* получение модели представления текста  *)
			f.ConnectTo(t);
			f.SetPos(t.Length());	(* установка форматтера на конец текста *)
			f.WriteString("приложение");	f.WriteLn; (* присоединение строки *)
			Views.OpenView(v)	(* открытие текстовой картинки в окне*)
		END
	END Do;

END ObxOpen0.

После компиляции можно опробовать исполнение приведенного примера:

  ObxOpen0.Do

В открывшемся каталоге выберите тестовый файл (например, Address2), в конец которого будет добавлен текст "приложение".

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

Заметьте, что, как и для предыдущих примеров, отображения играют основополагающую роль.

В отличие от традиционных систем разработки и каркасов, в Блэкбоксе файлы, окна и приложения либо играют незначительную роль, либо совершенно исчезли как абстракции самих себя. Напротив, отображение стало центральной абстракцией. Существенным свойством отображений является то, что они могут быть вложенными для создания иерархических  документов.

Эти аспекты Блэкбокса составляют фундаментальное смещение:
	от целостных приложений к программным компонентам;
	от интероперабельных программ к  интегрируемым компонентам;
	от автоматизированных изолированных участков к открытыму окружению (environment);
	от дизайна, ориентированного на приложения, к дизайну, ориентированному на документы.


Текст перевёл Адаменко Оскар. 08-302
Obx/Docu/ru/Open1.odc

Описание системы примерами:ObxHello1

Этот пример - вариация предыдущего; вместо открытия визуального объекта происходит его запись в тот же файл.

	MODULE ObxOpen1;

	IMPORT Converters, Files, Views, TextModels, TextMappers, TextViews;

	PROCEDURE Do*;
		VAR loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
			v: Views.View; t: TextModels.Model; f: TextMappers.Formatter;
			res: INTEGER;
	BEGIN
		loc := NIL; name := ""; conv := NIL;
		v := Views.Old(Views.ask, loc, name, conv);
		IF (v # NIL) & (v IS TextViews.View) THEN
			t := v(TextViews.View).ThisModel();
			f.ConnectTo(t);
			f.SetPos(t.Length());
			f.WriteString("appendix");
			Views.Register(v, Views.ask, loc, name, conv, res) (* запрос пользователю, куда сохранить документ *)
		END
	END Do;

END ObxOpen1.

  ObxOpen1.Do


В этом примере мы увидели, как визуальный объект может быть сохранен в файл.
Obx/Docu/ru/Orders.odc

Описание системы примерами: ObxOrders

	ObxOrders - это более реалистичный пример программы, которая использует формы для ввода данных и манипуляций с данными. Она дает возможность пользователю заполнять новые заказы, просматривать существующие заказы и сохранять все заказы в файл, или загружать их из файла. Диалог всегда показывает текущий заказ. Для этого заказа может быть сгенерирован текст на оплату, готового для печати.

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

	В нашем примере программы база данных - глобальный объект. Это проще, чем в типичных приложениях подобного типа. Двусвязный кольцевой список связан с глобальной переменной, поэтому есть максимум  одно поле базы данных, открытое в данный конкретный момент времени.

	В этом примере стоит выделить четыре примечательных аспекта:
- во-первых, процедура NewRuler показывает, как может быть создана новая линейка разметки, обладающая специфическими свойствами;
- во-вторых, в процедуре Invoice можно увидеть, как стиль шрифта может быть изменен на полужирный и обратно при создании текста;
- в-третьих, диалог использует охранные команды (Guard commands), чтобы сделать доступными или недоступными элементы управления в диалоге в зависимости от того, есть ли в данный момент открытая база данных, вводятся ли данные, генерируется ли счет и т.д., элементы управления становятся доступны либо недоступны;
- в-четвертых, процедура форматтера WriteView дважды используется для вставки картинки в текст: сначала пишется картинка-линейка, а немного позже - стандартная картинка-часы.

ObxOrderssources

Maindialog

"Delete"dialog

 "StdCmds.OpenAuxDialog('Obx/Rsrc/Orders', 'Order Processing')"

В Obx/Samples/Odata есть образец с некоторой информацией. 

Перевел студент группы 08-302 Забелин И.С.
Obx/Docu/ru/ParCmd.odc

Описание системы примерами:  ObxParCmd

Этот пример показывает, как можно обратиться к контексту командной кнопки. Например, кнопка в тексте может вызвать команду, которая читает текст, непосредственно следующий за командой. Этот текст может использоваться как входной параметр для команды.

ObxParCmd реализует две команды, которые просматривают текст после командной кнопки в строке. В первой команде строка записывается в рабочий журнал:
 "this is a string following a command button"

Таким образом могут быть созданы тексты, подобные инструментальным средствам оригинальной ОС ETH Oberon.

Во втором примере строка после кнопки выполняется как команда, работая как коммандер (-> DevCommanders):
 "DevDebug.ShowLoadedModules"

ObxParCmdsources
Obx/Docu/ru/Patterns.odc

Описание системы примерами: ObxPatterns
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

Это отображение (view) показывает серии концентрических прямоугольников. Отображение не содержит никакого состояния; его вид полностью определяется текущим размером.

Реализация отображения очень проста. Однако есть три аспекта этой программы, которые являются примечательными:

Во-первых, хотя отображение не имеет никакого состояния, оно все-таки расширяет процедуры Internalize и Externalize, связанные с типом View. Это сделано только для того, чтобы хранить номер версии отображения. Настоятельно рекомендуется хранить такой номер версии даже в самом простом из отображений, чтобы обеспечить расширяемость формата файла для будущих версий реализации отображения.

Во-вторых, отображение не содержит никакого специального состояния самого себя. Однако его вид может меняться в зависимости от текущего размера. Отображение не управляет своим собственным размером, так как его размер полностью определен контекстом, в который отображение помещено. Отображение может узнавать свой текущий размер через процедуру контекста GetSize.

В-третьих, хотя размер отображения полностью контролируется его контекстом, контекст все равно может (но не должен!) сотрудничать при определении размера. Например, когда отображение вставляется в контейнер, контейнер может запросить у отображения его предпочтительный размер; или когда он хочет изменить текущий размер вложенного отображения, он может давать отображению возможность задать ограничения на его размер, например, минимальное или максимальное значение ширины или высоты. Контейнер может оказывать влияние, при посылке запроса предпочтения по размерам (Properties.SizePrefs) вложенному отображению, устанавливая предлагаемые размеры (которые могут быть неопределенными). Таким образом, отображение получает возможность изменить эти значения, чтобы указать свои предпочтения.

ObxPatternsисходник

 "ObxPatterns.Deposit; StdCmds.Open"

Обратите внимание: чтобы изменить размер отображения, сначала выберите его с помощью команды Правка - > Выделить документ, а затем манипулируйте маркерами изменения размера.
Obx/Docu/ru/Pi.odc

Описание системы примерами: ObxPi
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

Данный пример демонстрирует использование модуля Integers для вычислительной работы с десятичными числами любой точности. В примере реализована команда ObxPi.WritePi, которая подсчитывает n десятичных знаков числа Пи и выводит результат в рабочий журнал. Команда ObxPi.Pi только подсчитывает число Пи, но не печатает результат. Пример может быть использован для измерения эффективности применения модуля целых чисел произвольной точности.
Для подсчета числа используется формула

	 Pi = 16 * atan(1/5) - 4 * atan(1/239)

где арктангенс аппроксимируется своим разложением в ряд Тейлора по степеням х:

		atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ... 

Вычисления проводятся только с целыми числами. Каждое десятичное число представляется как целое  x*10^d, где d есть число десятичных знаков после запятой. Арифметические операции с десятичными числами производятся с использованием целочисленной арифметики. Таким образом, результат получается обрезанным, а не округленным. При каждой операции может быть внесена ошибка не более одной ULP. Поэтому, вычисление числа Пи выполняется с несколькими страховочными знаками. Эти избыточные знаки отбрасываются от конечного результата. Если вы хотите подсчитать больше знаков числа Пи, увеличьте число лишних знаков. Используйте Ceiling(Log10(1.43*n)) защитных знаков чтобы вычислить n знаков числа Пи.

Пример:
 "ObxPi.WritePi(1000)"

31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989

ObxPisources
Obx/Docu/ru/RatCalc.odc

  : ObxRatCalc
(C)    :  . ., 2005.

          . ,   ,     ,  "+", "-", "*", "/", "^",   .   ("^")    ,        MAX(INTEGER).

    ,   ( ObxRatCalc.Simplify),      (ObxRatCalc.Approximate).
 ObxRatCalc   Integers,             .     , :

 		ObxRatCalc.Simplify		ObxRatCalc.Approximate
((100 + 27 - 2) / (-5 * (2 + 3))) ^ (-3)	=	-1 / 125	=	-8*10^-3
999999999 * 999999999 / 81	=	12345678987654321
1234567890 / 987654321	=	137174210 /  109739369	= 1.2499999886093750001423828...
30.2 + 60.5	=	907 / 10	=	90.7

,   /    .

 :

	expression := ["-"] {term addop} term.
	term := {factor mulop} factor.
	factor := ("(" expression ")" | integer) ["^" factor].
	integer := digit {digit} [ "." digit {digit} ].
	addop := "+".
	mulop := "*" | "/".

  "Obx":
	"Simplify"	""	"ObxRatCalc.Simplify"	"TextCmds.SelectionGuard"
	"Approximate"	""	"ObxRatCalc.Approximate"	"TextCmds.SelectionGuard"

ObxRatCalcsources
Obx/Docu/ru/Tabs.odc

Описание системы примерами: ObxTabs

Этот пример демонстрирует простое преобразование текста: первый, второй и седьмой символы табуляции в каждой текстовой строке, начиная с выделенного фрагмента текста, преобразуются в пробел. Эта команда действительно была использована при подготовке некоторых адресов, на которые отправлялся первый выпуск The Oberon Tribune.
 
ObxTabssources

Для использования этой команды выберите начало адресного списка (т.е., строку "Mr.	Alan...") и затем кликните на коммандер:
 ObxTabs.Convert

Mr.	Alan	Taylor	Moon, Inc.	EDP department	Upping Street 10	23987	Surlington	Lunaland
Ms.	Dianna	Gloor	Future SW Corp.	Marketing	Manhatten Blvd.	93842	Powderdale	Otherland

Перевел студент группы 08-302 Забелин И.С.
Obx/Docu/ru/TabViews.odc

Описание системы примерами: ObxTabViews
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

Инспектор свойств для StdTabViews предоставляет графический пользовательский интерфейс для создания и редактирования StdTabViews. Этот пользовательский интерфейс достаточен для большинства приложений. Однако, если закладки (tabs) должны быть добавлены и удалены динамически во время выполнения, должен использоваться программынй интерфейс StdTabViews.

Данный пример создает отображение StdTabViews.View с тремя закладками. После этого могут быть добавлены новые закладки либо выбранная закладка может быть удалена во время выполнения. Любые виды отображений могут быть добавлены на StdTabViews.View. В этом примере добавлено одно отображение ObxCube, и несколько раз добавлено одно и то же отображение ObxCalc. Это показывает другую характеристику StdTabViews; когда отображение добавляется, оно копируется. Хотя для создания нескольких закладок используется одно и то же отображение, у каждой закладки имеется свой собственных экземпляр. Вы можете легко проверить это, вводя число в отображение-калькулятор, а переключаясь на закладку с другим отображением-калькулятором и вводя другое число. Когда вы переключаетесь назад на первый калькулятор, он по-прежнему отображает первое число.

Пример также устанавливает простой уведомитель, который просто отображает уведомляющее сообщение в рабочем журнале.

Здесь Вы можете пробовать пример:
 "ObxTabViews.Deposit; StdCmds.Open"

Чтобы добавить новое отображение-калькулятор, используйте команду:
 ObxTabViews.AddNewCalc

Для удаления выбранной закладки используйте команду:
 ObxTabViews.DeleteTab

ObxTabViewssources
Obx/Docu/ru/Tickers.odc

Описание системы примерами: ObxTickers
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

Этот пример реализует простой биржевой показатель (stock ticker). Кривая, которая отображается, показывает случайное блуждание. Черная линия - начало координат, от которого начиналось блуждание. Если кривая достигнет верхней или нижней границы отображения (view), то начало координат будет соответственно перемещено.

			

Этот пример показывает использование действий (actions). Services.Actions - объекты, процедуры Do которых выполняются отложенно, когда система простаивает. Действие, которое повторно устанавливает себя всякий раз, когда оно вызывается, как в этом примере, работает как непрерывающая (фоновая) задача.

 "ObxTickers.Deposit; StdCmds.Open"

ObxTickerssources
Obx/Docu/ru/Trap.odc

Описание системы примерами: ObxTrap
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

Данный пример содержит программную ошибку, которая приводит к программному прерыванию (run-time trap). Пример может быть использован для исследования механизма прерываний и информации, отображаемой в обработчике прерываний  (trap viewer).

   ObxTrap.Do

ObxTrapsources
Obx/Docu/ru/UnitConv.odc

Описание системы примерами: ObxUnitConv

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


ObxUnitConvsources

Текст перевёл Адаменко Оскар, гр.08-302