Std/Docu/ru/Log.odc

StdLog
Редакция перевода: Ф.В.Ткачев, 2010-09-30

DEFINITION StdLog;

	IMPORT TextViews, Views, TextRulers, TextModels;

	CONST
		charCode = -1; decimal = 10; hexadecimal = -2;
		hideBase = FALSE; showBase = TRUE;

	VAR
		buf-: TextModels.Model;
		defruler-: TextRulers.Ruler;
		dir-: TextViews.Directory;
		text-: TextModels.Model;

	PROCEDURE Bool (x: BOOLEAN);
	PROCEDURE Char (ch: CHAR);
	PROCEDURE Int (i: INTEGER);
	PROCEDURE IntForm (x: LONGINT; base, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN);
	PROCEDURE Real (x: REAL);
	PROCEDURE RealForm (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR);
	PROCEDURE Set (x: SET);
	PROCEDURE String (IN str: ARRAY OF CHAR);
	PROCEDURE ParamMsg (IN msg, p0, p1, p2: ARRAY OF CHAR);
	PROCEDURE Msg (IN msg: ARRAY OF CHAR);
	PROCEDURE Tab;
	PROCEDURE Para;
	PROCEDURE Ln;
	PROCEDURE View (v: Views.View);
	PROCEDURE ViewForm (v: Views.View; w, h: INTEGER);

	PROCEDURE New;
	PROCEDURE Open;
	PROCEDURE Clear;
	PROCEDURE NewView (): TextViews.View;
	PROCEDURE SetDefaultRuler (ruler: TextRulers.Ruler);
	PROCEDURE SetDir (d: TextViews.Directory);

END StdLog.


Модуль StdLog предоставляет доступ к тексту Рабочего журнала и к процедурам, которые упрощают вывод данных в него. Обычно журнал используется только в процессе разработки программ, пользователи готовых программ обычно с журналом не имеют дела. 
Окно журнала открывается следующим оператором в процедуре Config.Setup:
	Dialog.Call("StdLog.Open", "", res)


CONST charCode
Возможное значение параметра base для процедуры IntForm; задаёт форматирование целых чисел в соответствии с синтаксисом числового представления явных литерных констант Компонентного Паскаля. (Например, 0DX  код для line, а 37X  код для "7".)

CONST decimal
Возможное значение параметра base для процедуры IntForm; задаёт форматирование целых чисел как явных десятичных констант.

CONST hexadecimal
Возможное значение параметра base для процедуры IntForm; задаёт форматирование целых чисел как явных шестнадцатиричных констант.

CONST hideBase
Возможное значение параметра showBase для процедуры IntForm, требует не показывать индикатор основания.

CONST showBase
Возможное значение параметра showBase для процедуры IntForm; задаёт вывод индикатора основания.


PROCEDURE Bool (x: BOOLEAN)
Записывает в журнал значение типа Boolean.
За исключением быстродействия эквивалентно следующему фрагменту:
	IF x THEN String("$TRUE") ELSE String("$FALSE") END

PROCEDURE Char (ch: CHAR)
Записывает в журнал литерное значение. Для управляющих символов будет записана явная числовая константа (например, 9X для символа табуляции).
Для записи в журнал более одной литеры эффективней использовать процедуру String.

PROCEDURE Int (i: INTEGER)
Записывает в журнал целое значение.
За исключением быстродействия эквивалентно следующему фрагменту:
	IntForm(x, decimal, 0, digitspace, showBase)
где digitspace = 8FX.

PROCEDURE IntForm (x: LONGINT; base, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN)
Записывает в журнал целое число x. Последовательность цифр, формируемая для представления числа, соответствует основанию base. Полное представление будет состоять из не менее чем minWidth литер, причём избыточные позиции заполняются, если это требуется, слева литерами fillCh. В недесятичном случае можно потребовать включить в представление основание, если указано showBase. Для специального значения base=charCode выводится суффикс основания "X", для base=hexadecimal выводится суффикс "H". Все другие недесятичные основания представляются  приписыванием в конце литеры "%", за которой следует десятичное число, соответствующее основанию. Недесятичное представление отрицательных чисел формируется в дополнительном коде по основанию base шириной minWidth литер. Например, x=-3 для base=16 и minWidth=2 выводится как "FD".

Предусловие
(base = charCode) OR (base = hexadecimal) OR ((base >= 2) & (base <= 16))	20
minWidth >= 0	22

PROCEDURE Real (x: REAL)
Выводит в журнал действительное значение.
За исключением быстродействия эквивалентно слеующему фрагменту:
	WriteRealForm(x, 16, 0, 0, digitspace)
где digitspace = 8FX.

PROCEDURE RealForm (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR)
Выводит в журнал действительное число x. Используется либо представление с фиксированной точкой, либо в научном формате, в зависимости от expW. precision задаёт число допустимых десятичных позиций (обычно 7 для коротких вещественных чисел и 16 для обычных вещественных). minW обозначает минимальную длину представления в литерах. Если необходимо, представление дополняется слева литерами fillCh. Числа всегда округляются до последнего значимого и видимого разряда.
expW > 0: научный формат с не менее чем expW разрядами в показателе экспоненты.
expW = 0: формат с фиксированной или плавающей точкой в зависимости от x.
expW < 0: формат с фиксированной точкой с -expW разрядами после десятичной точки.
Подробности см. в описании процедуры Strings.RealToStringForm.

Предусловие
precision > 0	20
0 <= minW	21
expW <= 3	22

PROCEDURE Set (x: SET)
Выводит в журнал значение типа SET (множество).
За исключением быстродействия эквивалентно следующему фрагменту:
	VAR i: INTEGER;
	Char("{"); i := MIN(SET);
	WHILE x # {} DO
		IF i IN x THEN
			Int(i); EXCL(x, i);
			IF (i + 2 <= MAX(SET)) & (i + 1 IN x) & (i + 2 IN x) THEN
				String("..");
				x := x - {i + 1, i + 2}; INC(i, 3);
				WHILE (i <= MAX(SET)) & (i IN x) DO EXCL(x, i); INC(i) END;
				Int(i - 1)
			END;
			IF x # {} THEN String(", ") END
		END;
		INC(i)
	END;
	Char("}")

PROCEDURE String (IN str: ARRAY OF CHAR)
Записывает в журнал цепочку литер.

PROCEDURE ParamMsg (IN msg, p0, p1, p2: ARRAY OF CHAR)
Записывает в журнал параметризованную цепочку литер, транслированную с помощью Dialog.MapParamString.

PROCEDURE Msg (IN msg: ARRAY OF CHAR)
Записывает в журнал цепочку литер, транслированную с помощью Dialog.MapParamString.

За исключением быстродействия эквивалентно следующему фрагменту:
	ParamMsg(msg, "", "", "")

PROCEDURE Tab
Записывает в журнал символ табуляции (9X).

PROCEDURE Para
Записывает в журнал символ абзаца (0EX). После этого обеспечивается, чтобы конец текста журнала был виден пользователю.

PROCEDURE Ln
Записывает в журнал символ возврата каретки (0DX). После этого обеспечивается, чтобы конец текста журнала был виден пользователю.


PROCEDURE View (v: Views.View)
Записывает в журнал вьюшку (объект изображения). Размер вьюшки устанавливается в результате взаимодействия текста-контейнера и самой вьюшки.

PROCEDURE ViewForm (v: Views.View; w, h: INTEGER)
Записывает в журнал вьюшку, принудительно устанавливая её размер равным w и h в универсальных единицах.

PROCEDURE New
Для внутреннего использования.

PROCEDURE Open
Открывает окно журнала, если оно не открыто, иначе выводит его поверх других окон.

PROCEDURE Clear
Очищает текст журнала.

PROCEDURE NewView (): TextViews.View
Для внутреннего использования.

PROCEDURE SetDefaultRuler (ruler: TextRulers.Ruler)
Устанавливает линейку по умолчанию.

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

Постусловие
defruler = ruler

PROCEDURE SetDir (d: TextViews.Directory)
Определяет фабричный объект для порождения текстовых вьюшек журнала.

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

Постусловие
dir = d


VAR buf-: TextModels.Model
Буфер используется каркасом Блэкбокса для минимизации обновлений экрана.

VAR defruler-: TextRulers.Ruler
Линейка по умолчанию для текста журнала.

VAR dir-: TextViews.Directory
Для внутреннего использования.

VAR text-: TextModels.Model
Текст журнала.