OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 16 Апрель, 2024 22:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 01 Сентябрь, 2010 11:00 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Перетаскиваю в ВВ обероновский 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 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
id_ler писал(а):
Можно убрать X, но тогда не понятно будет ли целочисленный нуль читаться концом строки.


OX - это символ с кодом 0. Естественно, нуль всегда будет считаться концом строки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 09:47 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Ещё одна проблемка.
Код:
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 и не иметь зависимостей от модулей ВВ, какие в данном случае нужно внести минимальные изменения?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 10:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
id_ler писал(а):
Чтобы не переписывать JuiceFiles по примеру Stores ...
Stores как раз штука фундаментальная и краеугольная.

Стоит подумать о том, чтобы не плодить такие краеугольные сущности.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 02 Сентябрь, 2010 12:24 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Info21 писал(а):
Стоит подумать о том, чтобы не плодить такие краеугольные сущности.
Я рассчитываю применить Juice для WebGui. Если плагин собранный из подсистемы Juice будет импортировать Stores(или любой другой модуль из ВВ), то, видимо, при выполнении самого себя уже будет обращаться к хосту, тем самым, увеличивая трафик. Наверно, вопрос ещё можно сформулировать так. Структура модулей Juice должна сохраняться обероновской или нужно переписывать со всеми отличиями КП/ВВ от Оберона? Учитывая свою квалификацию, я склонен вносить изменения только самые необходимые. Но при этом хотелось бы сделать просто, но не примитивно.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB