OberonCore https://forum.oberoncore.ru/ |
|
Конвертация обероновских исходников на КП https://forum.oberoncore.ru/viewtopic.php?f=1&t=2820 |
Страница 1 из 1 |
Автор: | id_ler [ Среда, 01 Сентябрь, 2010 11:00 ] |
Заголовок сообщения: | Конвертация обероновских исходников на КП |
Перетаскиваю в ВВ обероновский Juice. Чтобы не вносить собственных ляпов, пользуюсь конвертером, но он не предусматривает преобразование типа BYTE в SHORTCHAR, а проблемы возникают. Например Код: PROCEDURE Read(VAR R: Rider; VAR x: BYTE); Можно убрать X, но тогда не понятно будет ли целочисленный нуль читаться концом строки. Если изменить тип на SHORTCHAR, тогда придется изменять тип массивов BYTE в других местах модуля.... BEGIN ... ELSE x := 0X[incompatible assignment]; R.eof := TRUE END END Read; Иная проблема. Код: PROCEDURE FreeEntry(): INTEGER; Пока делаю так VAR i, j: INTEGER; BEGIN FOR j := 0 TO 1 DO FOR i := 0 TO MaxFiles-1 DO IF FileTab[i] = S.VAL(INTEGER, NIL[operand inapplicable to (this) function]) THEN RETURN i END END; Kernel.GC() END; HALT(99) END FreeEntry; Код: PROCEDURE FreeEntry(): INTEGER; Но как будет правильно?
VAR a, i, j: INTEGER; BEGIN a := 0; FOR j := 0 TO 1 DO FOR i := 0 TO MaxFiles-1 DO IF FileTab[i] = S.VAL(INTEGER, a) THEN RETURN i END END; Kernel.GC() END; HALT(99) END FreeEntry; |
Автор: | Иван Кузьмицкий [ Среда, 01 Сентябрь, 2010 11:09 ] |
Заголовок сообщения: | Re: Конвертация обероновских исходников на КП |
id_ler писал(а): Можно убрать X, но тогда не понятно будет ли целочисленный нуль читаться концом строки. OX - это символ с кодом 0. Естественно, нуль всегда будет считаться концом строки. |
Автор: | id_ler [ Четверг, 02 Сентябрь, 2010 09:47 ] |
Заголовок сообщения: | Re: Конвертация обероновских исходников на КП |
Ещё одна проблемка. Код: MODULE JuiceFiles; Чтобы не переписывать JuiceFiles по примеру Stores и не иметь зависимостей от модулей ВВ, какие в данном случае нужно внести минимальные изменения?
… Rider* = EXTENSIBLE RECORD (** Riders are the access mechanisms for files. *) eof*: BOOLEAN; (** Rider has reached the end of the file. *) res*: INTEGER; (** Rider operation result code. *) buf: Buffer; org, offset: INTEGER END; … PROCEDURE ReadBytes(VAR R: Rider; VAR x: ARRAY OF BYTE; n: INTEGER); VAR F: File; xpos, min, remaining, offset: INTEGER; buf: Buffer; BEGIN ASSERT(LEN(x) >= n); buf := R.buf; F := buf.F; xpos := 0; offset := R.offset; WHILE n > 0 DO IF (R.org # buf.org) OR (offset >= BufSize) THEN set(R, F, R.org + offset); buf := R.buf; offset := R.offset; END; remaining := buf.size - offset; IF remaining = 0 THEN R.res := n; R.eof := TRUE; RETURN ELSE (* min := MIN(remaining, n) *) IF n > remaining THEN min := remaining ELSE min := n END; END; S.MOVE(S.ADR(buf.data) + offset, S.ADR(x) + xpos, min); INC(offset, min); R.offset := offset; INC(xpos, min); DEC(n, min); END; R.res := 0; R.eof := FALSE END ReadBytes; … PROCEDURE ReadChar*(VAR R: Rider; VAR x: CHAR); BEGIN ReadBytes(R, x[actual parameter corresponding to open array is not an array], 1) END ReadChar; … PROCEDURE ReadSInt*(VAR R: Rider; VAR x: SHORTINT); BEGIN ReadBytes(R, x[actual parameter corresponding to open array is not an array], 1) END ReadSInt; … PROCEDURE ReadInt*(VAR R: Rider; VAR x: INTEGER); … |
Автор: | Info21 [ Четверг, 02 Сентябрь, 2010 10:52 ] |
Заголовок сообщения: | Re: Конвертация обероновских исходников на КП |
id_ler писал(а): Чтобы не переписывать JuiceFiles по примеру Stores ... Stores как раз штука фундаментальная и краеугольная.Стоит подумать о том, чтобы не плодить такие краеугольные сущности. |
Автор: | id_ler [ Четверг, 02 Сентябрь, 2010 12:24 ] |
Заголовок сообщения: | Re: Конвертация обероновских исходников на КП |
Info21 писал(а): Стоит подумать о том, чтобы не плодить такие краеугольные сущности. Я рассчитываю применить Juice для WebGui. Если плагин собранный из подсистемы Juice будет импортировать Stores(или любой другой модуль из ВВ), то, видимо, при выполнении самого себя уже будет обращаться к хосту, тем самым, увеличивая трафик. Наверно, вопрос ещё можно сформулировать так. Структура модулей Juice должна сохраняться обероновской или нужно переписывать со всеми отличиями КП/ВВ от Оберона? Учитывая свою квалификацию, я склонен вносить изменения только самые необходимые. Но при этом хотелось бы сделать просто, но не примитивно.
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |