NEW INTEGER из Ады через записи

Операционная система, написанная на языке Оберон и проект её перевода на русский язык. Только технические вопросы.
Ответить
БудДен
Сообщения: 853
Зарегистрирован: 07.10.18 14:01

NEW INTEGER из Ады через записи

Сообщение БудДен » 18.04.20 15:48

Для наведения порядка в буквах, нужно избежать представления их числами. К счастью, по умолчанию записи из одного поля никак не выравниваются в A2 (проверено в 32-разядной или 64-разрядной версии). Поэтому можно сделать так:

Код: Выделить всё

MODULE Proba; 
IMPORT Commands, KernelLog;

PROCEDURE RangeFromInteger*(CONST integer: SIGNED32): ARRAY 2 OF SIGNED32;
BEGIN RETURN [integer, integer + 1];
END RangeFromInteger;

TYPE Utf16 = RECORD
	data : UNSIGNED16 END; 
	
TYPE Utf16x128 = ARRAY 128 OF Utf16;

PROCEDURE W*(c:Commands.Context);
BEGIN
	KernelLog.Int(SIZEOF(Utf16),0); KernelLog.Ln;
	KernelLog.Int(SIZEOF(Utf16x128),0); KernelLog.Ln;
END W;

END Proba.W~
Печатает 2 и 256, т.к. такая запись, будучи помещённой в массив, имеет размер 2 байта, что и требуется.
Проверено под Windows на 32 и 64 разрядных версиях.

Ответить