OberonCore https://forum.oberoncore.ru/ |
|
Соединяем файлы https://forum.oberoncore.ru/viewtopic.php?f=35&t=6931 |
Страница 1 из 1 |
Автор: | Иван Денисов [ Среда, 19 Апрель, 2023 21:58 ] |
Заголовок сообщения: | Соединяем файлы |
Понадобилась программа, чтобы склеивать ресурсные файлы в прошивку. Вот такой код выделяется с двух сторон коммандерами, и запускается первый коммандер Код: 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. |
Автор: | arisu [ Среда, 19 Апрель, 2023 23:13 ] |
Заголовок сообщения: | Re: Соединяем файлы |
Иван Денисов писал(а): Вот такой код выделяется с двух сторон коммандерами но есть же специальная View — DevCommanders.EndView. её почему-то в стандартное меню не положили, и она незаслужено забыта…
|
Автор: | Иван Денисов [ Среда, 19 Апрель, 2023 23:15 ] |
Заголовок сообщения: | Re: Соединяем файлы |
arisu писал(а): Иван Денисов писал(а): Вот такой код выделяется с двух сторон коммандерами но есть же специальная View — DevCommanders.EndView. её почему-то в стандартное меню не положили, и она незаслужено забыта…Да, любой вид в конце подойдет. Убрали для простоты, если я правильно понял. Селекторы тоже. Чем меньше всяких штук, тем лучше. |
Автор: | arisu [ Четверг, 20 Апрель, 2023 00:39 ] |
Заголовок сообщения: | Re: Соединяем файлы |
Иван Денисов писал(а): Да, любой вид в конце подойдет. не, не любой. в `DevCommanders.GetParExtend()` явно проверяется на "DevCommanders.View" и "DevCommanders.EndView", все остальные игнорятся.
|
Автор: | Александр Ильин [ Четверг, 01 Июнь, 2023 01:26 ] |
Заголовок сообщения: | Re: Соединяем файлы |
Ctrl-L, кажется, было вставление EndView в оригинальном ББ. |
Автор: | Иван Денисов [ Четверг, 01 Июнь, 2023 01:43 ] |
Заголовок сообщения: | Re: Соединяем файлы |
Александр Ильин писал(а): Ctrl-L, кажется, было вставление EndView в оригинальном ББ. В оригинальном 1.6 они его убрали, нет команды меню. |
Автор: | Александр Ильин [ Вторник, 06 Июнь, 2023 18:24 ] |
Заголовок сообщения: | Re: Соединяем файлы |
Иван Денисов писал(а): В оригинальном 1.6 они его убрали, нет команды меню. Ну да, я скорее про 1.5 и ранее (точно не помню, с какого ББ я начинал).
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |