OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:32

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Соединяем файлы
СообщениеДобавлено: Среда, 19 Апрель, 2023 21:58 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Понадобилась программа, чтобы склеивать ресурсные файлы в прошивку.

Вот такой код выделяется с двух сторон коммандерами, и запускается первый коммандер
Код:
      RecBake.Join "Final.bin"
         0H "Tablet.bin"
         24000H "Fonts/Files/PTAstraSans16.fbin"
         28000H "Fonts/Files/PTAstraSans23.fbin"
      

Получается файл прошивки Final.bin, в котором все ресурсы по нужным адресам.

Подумал, что может быть полезно, как пример для новичков, как работать с файлами в Блэкбоксе.

Код:
MODULE RecBake;

   IMPORT Log, Files, TextModels, TextMappers, DevCommanders;

   VAR rd: Files.Reader; s: TextMappers.Scanner;

   PROCEDURE Join*;
      VAR p: DevCommanders.Par; error: BOOLEAN;
         res, src: Files.File; wr: Files.Writer; rd: Files.Reader;
         resName, path, name: Files.Name; n, i, pos: INTEGER; b: BYTE;
   BEGIN
      p := DevCommanders.par;
      IF p # NIL THEN
         DevCommanders.par := NIL;
         s.ConnectTo(p.text); s.SetPos(p.beg);
         s.SetOpts(s.opts + {TextMappers.returnViews});
         s.Scan;
         IF s.type = TextMappers.string THEN
            Log.String(s.string); Log.Ln;
            resName := s.string$;
            error := FALSE;
            res := Files.dir.New(Files.dir.This(""), Files.shared);
            wr := res.NewWriter(NIL);
            REPEAT
               s.Scan;
               IF s.type # TextMappers.view THEN
                  IF s.type = TextMappers.int THEN
                     Log.Int(s.int); Log.Ln;
                     WHILE wr.Pos() < s.int DO
                        wr.WriteByte(0)
                     END;
                     s.Scan;
                     IF s.type = TextMappers.string THEN
                        Log.String(s.string); Log.Ln;
                        i := 0; pos := 0;
                        path := s.string$;
                        WHILE i < LEN(path$) DO IF path[i] = "/" THEN pos := i END; INC(i) END;
                        path[pos] := 0X;
                        i := pos; n := 0;
                        WHILE i < LEN(s.string$) DO name[n] := s.string[i]; INC(i); INC(n) END;
                        name[n] := 0X;
                        src := Files.dir.Old(Files.dir.This(path), name, Files.shared);
                        IF src # NIL THEN
                           rd := src.NewReader(NIL);
                           WHILE ~rd.eof DO
                              rd.ReadByte(b);
                              IF ~rd.eof THEN wr.WriteByte(b) END
                           END
                        ELSE
                           error := TRUE; Log.String('не удалось открыть файл'); Log.Ln
                        END;
                     ELSE
                        error := TRUE;
                        Log.String('ошибка, ожидается формат: 0H "/path/name.bin"'); Log.Ln;
                     END;
                  ELSE
                     error := TRUE;
                     Log.String('ошибка, ожидается формат: 0H "/path/name.bin"'); Log.Ln;
                  END;
               END
            UNTIL (s.type = TextMappers.view) OR (s.Pos() >= p.end) OR error;
            IF ~error THEN res.Register(resName, "", Files.dontAsk, n) END;
         ELSE
            Log.String("ожидается название файла финальной прошивки"); Log.Ln;
         END
      END
   END Join;


END RecBake.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединяем файлы
СообщениеДобавлено: Среда, 19 Апрель, 2023 23:13 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Вот такой код выделяется с двух сторон коммандерами
но есть же специальная View — DevCommanders.EndView. её почему-то в стандартное меню не положили, и она незаслужено забыта…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединяем файлы
СообщениеДобавлено: Среда, 19 Апрель, 2023 23:15 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
Вот такой код выделяется с двух сторон коммандерами
но есть же специальная View — DevCommanders.EndView. её почему-то в стандартное меню не положили, и она незаслужено забыта…

Да, любой вид в конце подойдет. Убрали для простоты, если я правильно понял. Селекторы тоже. Чем меньше всяких штук, тем лучше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединяем файлы
СообщениеДобавлено: Четверг, 20 Апрель, 2023 00:39 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Да, любой вид в конце подойдет.
не, не любой. в `DevCommanders.GetParExtend()` явно проверяется на "DevCommanders.View" и "DevCommanders.EndView", все остальные игнорятся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединяем файлы
СообщениеДобавлено: Четверг, 01 Июнь, 2023 01:26 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Ctrl-L, кажется, было вставление EndView в оригинальном ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединяем файлы
СообщениеДобавлено: Четверг, 01 Июнь, 2023 01:43 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Александр Ильин писал(а):
Ctrl-L, кажется, было вставление EndView в оригинальном ББ.

В оригинальном 1.6 они его убрали, нет команды меню.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Соединяем файлы
СообщениеДобавлено: Вторник, 06 Июнь, 2023 18:24 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Иван Денисов писал(а):
В оригинальном 1.6 они его убрали, нет команды меню.
Ну да, я скорее про 1.5 и ранее (точно не помню, с какого ББ я начинал).


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

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


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

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


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

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