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

Документация системы Блэкбокс (BlackBox Component Builder)
ENGLISH			(c) Перевод на русский язык:
			ООО ОЦПИ "Метасистемы", 2005-2008
			Информатика-21, 2005-2009
			Переводчики   Опереводетерминологии
Легкий старт	Привет,профи!  Краткийобзор  Полезныесведения  Путеводитель  Примеры
Компонентное ПО: Компоненты BlackBox шаг за шагом				Оглавление
Часть I	1Взаимодействиеспользователем
	2Составныедокументы		3ШаблоныпроектированиявБлэкбоксе
Часть II	4Формы		5Тексты
Часть III	6Построениеобъектовпредставления(вьюшек)
Приложения	A:КраткаяисторияПаскаля 		B:ОтличияКомпонентногоПаскаля

Руководства	Руководства	Компонентный
пользователя	разработчика	Паскаль	Остальное
Среда	Среда	Сообщениеоязыке	Лицензия
ПодсистемаText	ПодсистемаText	Чтоновоговязыке?	Лицензионнаяполитика
ПодсистемаForm	ПодсистемаForm	Наборлитер	Разработчики
ПодсистемаDev	ПодсистемаDev	Одокументации	Особенностиплатформы
Другиекоманды	ПодсистемаSql	Обоформлениипрограмм
Docu/ru/Ominc-Contributors.odc

О создателях системы Блэкбокс из компании Oberon microsystems, Inc.


Система Блэкбокс (BlackBox Component Builder) построен на фундаменте, который заложили в университете ETH, Цюрих, профессора Никлаус Вирт (Niklaus Wirth) и Юрг Гуткнехт (Jьrg Gutknecht) (система и язык Оберон), Ханспетер Мёссенбёк (Hanspeter Mцssenbцck) (расширения языка, приведшие к Оберон-2) и несколько бывших ассистентов, в том числе Режи Крелье (Rйgis Crelier), Йозеф Темпл (Josef Templ) и Штефан Лудвиг (Stefan Ludwig). 
В компании Оберон майкросистемз (Oberon microsystems), в разработке Блэкбокса принимали участие следующие (возможно, бывшие) сотрудники:

 - Беат Хеб (Beat Heeb)
 - Куно Пфистер (Cuno Pfister)
 - Клеменс Шиперски (Clemens Szyperski)

 - Томас Амберг (Thomas Amberg)
 - Даниэль Диес (Daniel Diez)
 - Кристиан Ди Джорджо (Christian Di Giorgio)
 - Марк Фрай (Marc Frei)
 - Доминик Грунц (Dominik Gruntz)
 - Маттиас Хаузнер (Matthias Hausner)
 - Штефан Кох (Stephan Koch)
 - Иван Посва (Ivan Posva)
 - Бенгт Рутиссон (Bengt Rutisson)
 - Вольфганг Век (Wolfgang Weck)
 - Юрг Вулльшлегер (Jьrg Wullschleger)
Docu/ru/RuAuthors.odc

Пакет русскоязычной документации
BlackBox Component Builder 1.5
	

Версия от 19.01.2008 г., r116 (Метасистемы).
Редакция сентябрь, 2012 (проект Информатика-21).
Замечания и предложения можно 
высказать на форуме http://forum.oberoncore.ru/ 
или послать на адрес info21@inr.ac.ru.

Над переводом работали:

ООО ОЦПИ "Метасистемы":
	И.Е. Ермаков, Е.А. Семашко, Е.Э. Темиргалеев
Институт ядерных исследований РАН:
	Ф.В.Ткачев
Московский авиационный институт:
	Л.Н. Чернышев, студенты Адаменко Оскар и Забелин И.С.
Томский государственный университет:
	А.И. Попков, А.С. Ильин
А также:
	И.Х. Хайруллин, А.В. Козлов, В.В. Лось
Комплектование и настройка пакета:
	Б.В. Рюмшин (проект OberonCore)
Редактирование для проекта Инфоматика-21:
	Ф.В.Ткачев
Docu/ru/RuVersion.odc

(c) 2005-2008 ООО ОЦПИ МЕТАСИСТЕМЫ
http://metasystems.ru/
(c) 2001-2009 Коллектив переводчиков.
(с) 2001-2012 проект Информатика-21
http://www.inr.ac.ru/~info21/
Docu/ru/Tut-TOC.odc

Учебник по BlackBox
ENGLISH

Оглавление

Часть I: Подходы к проектированию
	1Взаимодействиеспользователем
		1.1 Дружественность к пользователю
		1.2 Циклы обработки сообщений
		1.3 Многопользовательский доступ
		1.4 Настройки на разные языки пользователей
	2Составныедокументы
		2.1 Перманентность
		2.2 Независимость от устройства отображения
		2.3 Редактирование нескольких отображений
		2.4 Распространение изменений
		2.5 Вложенные отображения
		2.6 Отложенное обновление
		2.7 Режимы контейнера
		2.8 Обработка событий
		2.9 Элементы управления
	3Приемыпроектирования
		3.1 Языковая поддержка
		3.2 Модули и подсистемы
		3.3 Интерфейсы типа узкое горло
		3.4 Создание объекта

Часть II: Библиотека
	4Формы
		4.1 Введение
		4.2 Пример "Телефонная книга"
		4.3 Интеракторы
		4.4 Охранники
		4.5 Уведомления
		4.6 Стандартные элементы управления
		4.7 Составные элементы управления и интеракторы
		4.8 Контроль ввода
		4.9 Прямой доступ к элементам управления
		4.10 Резюме
	5Тексты
		5.1 Запись текста
		5.2 Шаблон Модель-Отображение-Контроллер в применении к текстам
		5.3 Чтение текста
		5.4 Изменение текста
		5.5 Текстовые сценарии
		5.6 Резюме

Часть III: Конструирование отображений
	6Конструированиеотображений
		6.1 Введение
		6.2 Обработка сообщений
		6.3 Сообщения свойств по умолчанию
		6.4 Управляющие сообщения
		6.5 Свойства
		6.6 Разделение модели и отображения
		6.7 Операции
		6.8 Разделение интерфейса и реализации

Приложение A:КраткаяисторияПаскаля
ПриложениеB:ОтличиеКомпонентногоПаскаляотПаскаля
Form/Docu/Gen.odc

FormGen

DEFINITION FormGen;

	IMPORT Dialog;

	VAR
		new: RECORD 
			link: Dialog.String
		END;

	PROCEDURE Create;
	PROCEDURE Empty;
	PROCEDURE CreateGuard (VAR par: Dialog.Par);

END FormGen.


FormGen is a generator for a form layout. It takes the name of an interactor variable (any exported record) as input and creates a default layout for the fields of the interactor. The following list describes the mapping from field types to controls.

BYTE, SHORTINT, INTEGER	Field
SHORTREAL, REAL	Field
ARRAY OF CHAR	Field
BOOLEAN	CheckBox
Dates.Date	DateField
Dates.Time	TimeField
Dialog.Color	ColorField
Dialog.Currency	Field
Dialog.List	ListBox
Dialog.Selection	SelectionBox
Dialog.Combo	ComboBox

Alternatively, a dialog for all interactors of a module can be generated, by entering the module name into the dialog box field. In this case, a group box is generated for every exported record variable, and a command button for every exported parameterless procedure.

A possible menu using the above commands:

MENU "Form"
	"&New Form..."	""	"StdCmds.OpenAuxDialog('Form/Rsrc/Gen', 'New Form')"	""
END


VAR new
Interactor for the form generator dialog.

link: Dialog.String
The name of the interactor for which a default layout should be generated. The name must be an identifier qualified with the module name, e.g., "FormGen.new", or only a module name, e.g., "FormGen".

PROCEDURE Create
Guard: CreateGuard
Create a default layout for the interactor specified in link.

PROCEDURE Empty
Create an empty form layout.

PROCEDURE CreateGuard
Guard for Create.
Form/Docu/ru/Gen.odc

FormGen

DEFINITION FormGen;

	IMPORT Dialog;

	VAR
		new: RECORD 
			link: Dialog.String
		END;

	PROCEDURE Create;
	PROCEDURE Empty;
	PROCEDURE CreateGuard (VAR par: Dialog.Par);

END FormGen.


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

BYTE, SHORTINT, INTEGER	Field
SHORTREAL, REAL	Field
ARRAY OF CHAR	Field
BOOLEAN	CheckBox
Dates.Date	DateField
Dates.Time	TimeField
Dialog.Color	ColorField
Dialog.Currency	Field
Dialog.List	ListBox
Dialog.Selection	SelectionBox
Dialog.Combo	ComboBox

Также может быть создана форма для всех интеракторов модуля, если в поле диалога вводится его имя. В этом случае, для каждой экспортированной переменой типа запись создается рамка (GroupBox), и для каждой процедуры без параметров - кнопка (CommandButton).

Для команд модуля FormGen можно создать следующее меню:

MENU "Form"
	"&New Form..."	""	"StdCmds.OpenAuxDialog('Form/Rsrc/Gen', 'New Form')"	""
END


VAR new
Интерактор для диалога создания формы.

link: Dialog.String
Имя интерактора, для которого будет создана форма. Имя должно быть уточненным идентификатором, например, "FormGen.new", или просто именем модуля, например, "FormGen".

PROCEDURE Create
Охрана: CreateGuard
Создает форму для интерактора, указанного в поле link.

PROCEDURE Empty
Создает пустую форму.

PROCEDURE CreateGuard
Охрана для Create.
Form/Docu/ru/Sys-Map.odc

Карта подсистемы Form
ENGLISH

Руководство пользователя
Руководство разработчика

FormCmds	пакет команд формы
FormGen	авт-е создание формы
FormControllers	диспетчеры форм
FormViews	отображения форм
FormModels	модели форм
Form/Rsrc/Menus.odc

MENU "Разметка" ("FormViews.View")
	SEPARATOR
	"Выровнять влево"	""	"FormCmds.AlignLeft"	"FormCmds.SelectionGuard"
	"Выровнять вправо"	""	"FormCmds.AlignRight"	"FormCmds.SelectionGuard"
	"Выровнять вверх"	""	"FormCmds.AlignTop"	"FormCmds.SelectionGuard"
	"Выровнять вниз"	""	"FormCmds.AlignBottom"	"FormCmds.SelectionGuard"
	"Выровнять центры по горизонтали"	""	"FormCmds.AlignToRow"	"FormCmds.SelectionGuard"
	"Выровнять центры по вертикали"	""	"FormCmds.AlignToColumn"	"FormCmds.SelectionGuard"
	SEPARATOR
	"Set &Grid..."	""	"FormCmds.InitGridDialog; StdCmds.OpenToolDialog('Form/Rsrc/Cmds', 'Set Grid')"
				"FormCmds.FocusGuard"
	"&Select Off-Grid Views"	""	"FormCmds.SelectOffGridViews"	""
	"&Force To Grid"	""	"FormCmds.ForceToGrid"	"FormCmds.SelectionGuard"
	SEPARATOR
	"Сделать первым/задним"	""	"FormCmds.SetAsFirst"	"FormCmds.SingletonGuard"
	"Сделать последним/передним"	"F5"	"FormCmds.SetAsLast"	"FormCmds.SingletonGuard"
	"Сортировать элементы диалога"	""	"FormCmds.SortViews"	""
	SEPARATOR
	"Заменить..."	""	"StdCmds.OpenToolDialog('Form/Rsrc/Cmds2', '#Form:Replace Strings in Control Field')"	"StdCmds.ContainerGuard"	
	SEPARATOR
	"Пересчитать размер"	""	"StdCmds.RecalcFocusSize"	""
END
Form/Rsrc/Strings.odc

STRINGS
OK, Apply, Cancel, Close	см. System

(Form)Cmds	(Form)Cmds
&Resolution:	Разрешение:
&mm	мм
1/16 &inch	1/16 дюйма
Set	Установить

(Form)Cmds2	(Form)Cmds2
Replace this:	Заменить:
with this:	на:
Replace &All	Заменить все
in:	в:
Link Field	поле связи
Label Field	поле ярлыка
Guard Field	поле охраны
Notifier Field	поле уведомителя

(Form)Cmds2	(Form)Cmds2
&Link:	Связать с:
&Empty	Пустая

Replace Strings in Control Field	Замена строк в полях элементов упр-я
Set Grid	Set Grid

AlignBottom	Выровнять снизу
AlignHorizontal	Выровнять горизонтально
AlignLeft	Выровнять слева
AlignRight	Выровнять справа
AlignTop	Выровнять сверху
AlignVertical	Выровнять вертикально
BorderChange	Border Change
ChangeZOrder	Change Z Order
CntrlInstallFailed	form controller installation failed
ForceToGrid	Выровнять по сетке
Globals	Globals
GridChange	Изменение сетки
InsertAround	Вставка вокруг
ModuleNotFound	модуль ^0 не найден
SetEnabled	Set Enabled
SetName	Задать имя
VariableNoRecord	переменная ^0 не является записью или пустым указателем
VariableNotFound	переменная ^0 не найдена
VariableNotFoundIn	переменная ^0 не найдена в ^1
FormViews.StdViewDesc	standard Form view
FormModels.StdModelDesc	standard Form model
FormControllers.StdControllerDesc	standard Form controller
Host/Mod/Clipboard.odc

MODULE HostClipboard;
(**
	project	= "BlackBox"
	organization	= "www.oberon.ch"
	contributors	= "Oberon microsystems"
	version	= "System/Rsrc/About"
	copyright	= "System/Rsrc/About"
	license	= "Docu/BB-License"
	changes	= "
	- YYYYMMDD, nn, ...
	"
	issues	= "
	- ...
	"

**)


	IMPORT
		COM, WinApi, WinOle,
		Services, Stores, Views, Documents, OleData, HostWindows;
		
	
	TYPE
		EmptyView = POINTER TO RECORD (Views.View) END;
		
	
	VAR
		cloneAttributes*: BOOLEAN;	(* set by HostCmds, used by Importers *)
		isText*: BOOLEAN;	(* set by HostCmds, used by GetClipView *)

		doc: Documents.Document;	(* contents of clipboard window *)
		isSingleton: BOOLEAN;	(* contents of clipboard is singleton view *)
		width, height: INTEGER;	(* size of clipboard content *)
		empty: Views.View;	(* contents of empty clipboard *)
		cbdata: WinOle.IDataObject;	(* data object registred via OLE *)
		
	
	PROCEDURE Register* (v: Views.View; w, h: INTEGER; isSingle: BOOLEAN);
		VAR res: COM.RESULT;
	BEGIN
		doc.SetView(v, w, h);
		width := w; height := h;
		isSingleton := isSingle;
		cbdata := OleData.ViewData(v, w, h, isSingle);
		res := WinOle.OleSetClipboard(cbdata)
	END Register;
	
	PROCEDURE GetClipView* (
		type: Stores.TypeName; VAR v: Views.View; VAR w, h: INTEGER; VAR isSingle: BOOLEAN
	);
		VAR dobj: WinOle.IDataObject; res: COM.RESULT;
	BEGIN
		v := NIL;
		IF WinOle.OleIsCurrentClipboard(cbdata) = WinApi.S_OK THEN
			v := Views.CopyOf(doc.ThisView(), Views.deep);
			w := width; h := height; isSingle := isSingleton;
			IF (type # "") & ~Services.Is(v, type) THEN v := NIL END
		ELSE
			res := WinOle.OleGetClipboard(dobj);
			IF res >= 0 THEN
				IF isText THEN
					OleData.GetTextDataView(dobj, v, w, h, isSingle)
				ELSE
					OleData.GetDataView(dobj, type, v, w, h, isSingle)
				END;
				IF v # NIL THEN
					doc.SetView(Views.CopyOf(v, Views.deep), w, h);
					width := w; height := h;
					isSingleton := isSingle
				END
			END
		END
	END GetClipView;
	
	PROCEDURE ConvertibleTo* (type: Stores.TypeName): BOOLEAN;
		VAR dobj: WinOle.IDataObject; res: COM.RESULT;
	BEGIN
		IF WinOle.OleIsCurrentClipboard(cbdata) = WinApi.S_OK THEN
			RETURN (type = "") OR Services.Is(doc.ThisView(), type)
		ELSE
			res := WinOle.OleGetClipboard(dobj);
			IF res >= 0 THEN
				RETURN OleData.DataConvTo(dobj, type)
			END
		END;
		RETURN FALSE
	END ConvertibleTo;
	
	PROCEDURE Flush*;
		VAR res: COM.RESULT;
	BEGIN
		IF WinOle.OleIsCurrentClipboard(cbdata) = WinApi.S_OK THEN
			res := WinOle.OleFlushClipboard()
		END
	END Flush;
	
	PROCEDURE Dump*;
		VAR res: COM.RESULT; dobj: WinOle.IDataObject;
	BEGIN
		res := WinOle.OleGetClipboard(dobj);
		OleData.DumpData(dobj)
	END Dump;
	
	
	PROCEDURE (v: EmptyView) Restore (f: Views.Frame; l, t, r, b: INTEGER);
	END Restore;
	

	PROCEDURE Init;
		VAR e: EmptyView;
	BEGIN
		NEW(e); empty := e;
		(* init document to be used to display the clipboard *)
		doc := Documents.dir.New(empty, Views.undefined, Views.undefined);
		HostWindows.OpenClipboard(doc)
	END Init;
	
BEGIN
	Init
END HostClipboard.

	
HostClipboard.Flush

HostClipboard.Dump
Host/Rsrc/Strings.odc

STRINGS
Bottom:	Нижнее:
Caret	Курсор
Caret Period (in ms):	Период курсора (в мсек):
D&efault font...	Шрифт по умолчанию...
Di&alog font...	Шрифт в диалогах...
&Double	Двойная
Layout	Вид
Left:	Левое:
Margins	Поля
&No	Отсутствует
Printer...	Принтер...
Printing Page:	Печатается страница:
Read File As:	Читать файл как:
Right:	Правое:
&Simple	Простая
Standard Header	Стандартный заголовок
Status bar	Строка состояния
&Thick Caret	Толстый курсор
Top:	Верхнее:
&Use true type metric	Использовать метрику True Type
&Visual scrolling	Видимая прокрутка

Shift	Shift+
Ctrl	Ctrl+
Space	Пробел
Edit	Правка
Open	Открыть
MoveHere	Переместить сюда
CopyHere	Копировать сюда
LinkHere	Создать ярлык сюда
Object	Объект
MissingDirectory	Каталог не найден
CreateDir	Будет создан каталог ^0
FileError	Файловая ошибка
ReplaceWriteProtected	Не могу заменить ^0:^1защита от записи
ReplaceInUse	Не могу заменить ^0:^1уже используется
ReplaceAccessDenied	Не могу заменить ^0:^1доступ запрещен
AllocatedMemory	 Выделенная память: 
Total	    Всего: 
Bytes	 байт
Print	Печать
OpenFile	Открыть файл
ControlInspector	Просмотр свойств
SaveChanges	Файл ^0 был изменен.^1^2Вы хотите сохранить изменения?
Saving	сохраняю
Saved	сохранен
Failed	ошибка
Document	Документ
AllFiles	Все файлы
NotUnderWindows3	Недоступно под Windows 3.11

HostTextConv.ImportText	Простой текст
HostTextConv.ImportTabText	Простой текст (два пробела в таб)
HostTextConv.ImportRichText	Текст с форматированием
HostTextConv.ImportUnicode	Текст юникод
HostTextConv.ImportHex	Файл данных (hex)
HostTextConv.ImportDosText	Текст (кодировка Dos)
HostBitmaps.ImportBitmap	Картинка (Bitmap)
HostBitmaps.ExportBitmap	Bitmap

HostTextConv.ExportText	Простой текст
HostTextConv.ExportTabText	Простой текст (таб в два пробела)
HostTextConv.ExportRichText	Текст с форматированием
HostTextConv.ExportUnicode	Текст юникод
HostBitmaps.ExportBitmap	Bitmap

HostTextConv.ImportDRichText	Текст с форматированием
HostTextConv.ImportDUnicode	Текст юникод
HostTextConv.ImportDText	Простой текст
HostPictures.ImportDPict	Картинка (Metafile)
HostBitmaps.ImportDBitmap	Картинка (Bitmap)
HostBitmaps.ImportDPictAsBitmap	Картинка (Bitmap)

TextViews.StdView	текст
HostPictures.StdView	картинка
HostBitmaps.StdView	картинка bitmap

Properties.StdProp	HostDialog.FontDialog

Bitmaps.Evaluate.101	Недостаточно памяти для размещения bitmap
i21edu/Справка для учителя.odc

Справка для учителя
Знакомство
	Меню,документы,Рабочийжурнал
	Простейшаяпрограмма
	Онеанглийскихключевыхсловах
	ОтличияотстарогоПаскаля  на примере задачи С4, ЕГЭ-2010
Официальные документы:	СообщениеоязыкеКомпонентныйПаскаль
ОтличияКомпонентногоПаскаляотстарого
	Каккомпиляторсообщаетобошибках
	ТРАПы--аварийныеостановки
	ПримерырешенийзадачЕГЭ
	Справкапоучебномувводу-выводу (включает несколько примеров).
	СправкапоЧерепашке

   
	Каксоздатьихранитьпрограмму
	Ключевыесловаизпрописныхбукв
		Подробнее см. документы: ОбF5вшкольнойверсии
			ОбиспользованииклавишиF5дляпечатиключевыхслов
	Редактированиеиформатирование
		*Оботступах

Орг. вопросы
	*Организациякомпьютерногокласса
			Организацияработыдома
	Задачи и списки задач
		Чтохранитсявпапкеi21edu/Заготовки
			*Примерзадачи
		Подготовказадач
		Примерсписказадач
	Использованиенеанглийскихключевыхслов
	Настройкаменю (это легко и очень полезно: добавить в меню мини-среды, списки задач и т.п.)

Примеры  модули из подсистемы i21прим:
	*TPGraphics  пример рисования в стиле Турбо Паскаля
	Трап  пример аварийной остановки
	ПростыеЧисла  несколько процедур на тему простых чисел.
	Strings  пример с литерными цепочками
	Files  запись и чтение простых файлов
	Random  использование генератора случайных чисел
	Тетрис  сложный пример: движущаяся картинка + взаимодействие с клавиатурой
		i21eduТочкиЛинииПример  пример с перспективой.
	Ещё два старых примера ввода-вывода:
		StdLog  пример печати в Рабочий журнал.
		In  пример ввода данных из потока ввода.
	Пошаговаяразработка  подробное описание шагов (с картинками, указаниями, какие клавиши нажимать, и с проч. подробностями) написания программ на Блэкбоксе.
	СозданиепростыхдиалоговвБлэкбоксе
	ПримерыизкнигиН.ВиртаАлгоритмы...

Близкое знакомство
	Модули и т.п.:
		Загрузкаиперезагрузкамодулей  технические сведения
		Опроцедурахимодулях  идеология
	ПолезныесведенияоработевБлэкбоксе 
	КакорганизованадокументациявБлэкбоксе
	Штатнаядокументация

	Быстроевведениедляпрофессионалов

________________
info21@inr.ac.ru
последние изменения: 2010-10-23
i21edu/Docu/ru/Random.odc

i21eduRandom

DEFINITION i21eduRandom;

	PROCEDURE InitSeed (seed: INTEGER);
	PROCEDURE Int (n: INTEGER): INTEGER;
	PROCEDURE Real (): REAL;

END i21eduRandom.

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

PROCEDURE Real (): REAL;
Функция выдает очередное случайное вещественное число, лежащее внутри диапазона 0..1 (исключая границы). 

PROCEDURE Int ( n: INTEGER ): INTEGER
Функция выдает очередное случайное целое из диапазона 0 .. n-1.
При вызове должно быть n > 0.

PROCEDURE InitSeed ( seed: INTEGER )
Вызов InitSeed с одним и тем же значением seed гарантирует, что в дальнейшем будет порождаться одна и та же последовательность чисел.
Гарантируется, что для разных положительных seed, не превышающих MAX(INTEGER) - 1, последовательности будут разными.

Реализация: модуль-обертка датчика случайных чисел ObxRandom.
i21edu/Docu/ru/TPGraphics.odc

i21eduTPGraphics

DEFINITION i21eduTPGraphics;

	IMPORT Ports;

	VAR
		bkColor: Ports.Color;
		black-: Ports.Color;
		blue-: Ports.Color;
		brown-: Ports.Color;
		color: Ports.Color;
		cyan-: Ports.Color;
		darkGray-: Ports.Color;
		fillColor: Ports.Color;
		green-: Ports.Color;
		lightBlue-: Ports.Color;
		lightCyan-: Ports.Color;
		lightGray-: Ports.Color;
		lightGreen-: Ports.Color;
		lightMagenta-: Ports.Color;
		lightRed-: Ports.Color;
		magenta-: Ports.Color;
		red-: Ports.Color;
		white-: Ports.Color;
		yellow-: Ports.Color;

	PROCEDURE Arc (x, y, stAngle, endAngle, radius: INTEGER);
	PROCEDURE Bar (x0, y0, x1, y1: INTEGER);
	PROCEDURE Circle (x, y, radius: INTEGER);
	PROCEDURE Clear;
	PROCEDURE Ellipse (x, y, stAngle, endAngle, xradius, yradius: INTEGER);
	PROCEDURE FillEllipse (x, y, xradius, yradius: INTEGER);
	PROCEDURE Line (x0, y0, x1, y1: INTEGER);
	PROCEDURE LineTo (x, y: INTEGER);
	PROCEDURE MoveTo (x, y: INTEGER);
	PROCEDURE Open;
	PROCEDURE PutPixel (x, y: INTEGER);
	PROCEDURE Rectangle (x0, y0, x1, y1: INTEGER);
	PROCEDURE SetBkColor (c: INTEGER);
	PROCEDURE SetColor (c: INTEGER);
	PROCEDURE SetFillColor (c: INTEGER);
	PROCEDURE SetFont (название: ARRAY OF CHAR; размер: INTEGER; жирный, курсив: BOOLEAN);
	PROCEDURE String (x, y: INTEGER; s: ARRAY OF CHAR);
	PROCEDURE Update;

END i21eduTPGraphics.

Эмуляция графики Турбо Паскаля.
Пример см. i21примTPGraphics (дважды кликнуть по имени, нажать Ctrl+0).
i21edu/Docu/ru/Ввод.odc

i21eduВвод

Это модуль для чтения входного потока. Он предназначен  для учебных русскоязычных программ. Примеры:
	i21eduВводПример0  объяснение, что такое поток ввода; ввод чисел;
	i21eduВводПример1  ввод любого количества чисел в цикле;
	i21eduВводПример2  ввод литерных цепочек и отдельных литер;
	i21eduВводПример3  ещё о вводе (и выводе) литер.

Чтобы подключить к программе это модуль, в список инструкции ПОДКЛЮЧИТЬ/IMPORT нужно вставить
	Ввод := i21eduВвод
(см. примеры). 
Тогда в программе можно использовать следующие команды:
	Ввод.Открыть;	найти и открыть поток ввода; 
поток ввода определяется по правилам, описанным ниже;
в простых учебных программах обычно используется именно эта команда;
	Ввод.Сначала;	встать в начало потока ввода; 
используется, если нужно повторно прочесть ввод, а также если поток ввода определяется вручную (см. ниже);
	Ввод.сделано	логическая переменная, позволяющая проверять, успешно ли завершилась только что сделанная (любая) операция ввода; см. примеры, указанные выше;
	Ввод.Цел( цел );	считать целое число в переменную цел;
	Ввод.Вещ( вещ );	считать вещественное число в переменную вещ;
	Ввод.Литера( л );	считать литеру в переменную л;
	Ввод.Цепочка( цеп );	считать цепочку литер в массив литер.

	
Правила определения потока ввода

Поток ввода  это фрагмент текста, из которого процедуры модуля i21eduВвод считывают данные. В начале поток ввода пуст, а значение переменной Ввод.сделано равно НЕТ/FALSE. После каждого определения поток ввода запоминается и остаётся неизменным независимо от того, сколько раз и какие программы его читают (или не читают).

Есть две ситуации, когда заново определяется поток ввода:
 вручную (нажатием Shift+F1 или командой меню 1-Основное, Определить поток ввода); это делается до вызова своей программы;
 при вызове своей или чужой программы, в которой выполняется команда Ввод.Открыть.
В обоих случаях действуют одинаковые правила нахождения потока ввода:

Если в переднем окне в момент определения потока ввода есть выделенный фрагмент текста, то именно он и становится потоком ввода.

Если выделенного фрагмента нет, а программа вызвана с помощью коммандера, то поток ввода  это то, что стоит после коммандера до объекта  или до конца документа.

В остальных случаях потоком ввода считается документ в переднем окне.

Поток ввода можно читать с начала несколько раз. Чтобы снова начать читать поток ввода с начала, нужно использовать команду Ввод.Сначала.

Краткая справка (интерфейс модуля):

DEFINITION i21eduВвод;

	VAR
		сделано-: BOOLEAN;

	PROCEDURE Вещ (OUT в: REAL);
	PROCEDURE Литера (OUT л: CHAR);
	PROCEDURE Открыть;
	PROCEDURE Сначала;
	PROCEDURE Цел (OUT ц: INTEGER);
	PROCEDURE Цепочка (OUT ц: ARRAY OF CHAR);

END i21eduВвод.


Данный модуль сделан на основе англоязычного прототипа i21sysIn, но упрощён для учебных целей.


Таблица соответствий процедур в модулях i21eduВвод и i21sysIn:
Модули:	i21eduВвод	i21sysIn
	Вещ	Real
	Литера	Char
	Открыть	Open
	сделано	done
	Сначала	Restart
	Цел	Int
	Цепочка	String