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);
...
BEGIN
     ...
         ELSE
                 x := 0X[incompatible assignment]; R.eof := TRUE
         END
END Read;
Можно убрать X, но тогда не понятно будет ли целочисленный нуль читаться концом строки. Если изменить тип на SHORTCHAR, тогда придется изменять тип массивов BYTE в других местах модуля.

Иная проблема.
Код:
 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;

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);
Чтобы не переписывать JuiceFiles по примеру Stores и не иметь зависимостей от модулей ВВ, какие в данном случае нужно внести минимальные изменения?

Автор:  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/