OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 07:40

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему  [ Сообщений: 649 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 33  След.
Автор Сообщение
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 24 Май, 2023 17:22 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ну и из новостей: сделал протокол X11 selection (пока частично: вставка поддерживается полностью, включая incremental mode; отдавание пока без incremental). также, как временное решение — привинтил гткшные диалоги: их загрузят при первом использовании, а до того момента gtk не нужен. если загрузить не выйдет… ну, не фартануло, значит: будет так, как будто юзер просто нажал отмену.

сейчас надо решить неприятный баг в `.Input()` — и можно переходить на версию X11, допиливать её дальше из неё самой. оттуда уже буду делать поддержку Stores в X11 selection, чтобы можно было цельные view кидать из одного LC в другой. и попробую потом больше форматов поддержать — типа богатого текста, например (может быть, это пока не точно).

вообще, я дальше от модальных диалогов планирую избавиться совсем. поскольку мне не обязательно сражаться за совместимость — то переделаю все модалы на колбэки. ну, кроме `Views.Old()` — тут надо будет посмотреть, где в среде оно используется с запросом, и тоже нафиг переделать. и первый параметр в пень убрать: ломать — так ломать, чо уж…

p.s.: вообще, желание омиков «выглядеть нативно» вылезло боком со временем. хотя они, конечно, не виноваты: кто ж знал, что через тридцать лет это будет уже немодно, и делать надо строго наоборот…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 24 Май, 2023 17:28 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Views.Old должен теперь игнорировать параметр aks...
Если нет файла, или не сумели открыть, то считать, что пользователь ничего не выбрал.
Как-то так. Другого пути пока не вижу. Убирать параметр в 2.0 не буду, чтобы не ломать совместимость для большинства команд, где люди ставили dontAsk


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 24 Май, 2023 19:47 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
сделал более продвинутую поддержку NetWM (ставлю больше хинтов для WM по поводу того, что из себя представляет окно). заодно ставлю для окон иконки.

надо бы добавить к окнам апи для установки типа окна, и для смены иконки. у меня уже есть растры, их можно использовать для загрузки/создания иконок. о, кстати. для isTool надо бы ставить стиль Tool Window — а почему бы и да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 24 Май, 2023 20:57 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
запилил передачу views через x11 selection. теперь и views можно из одного ящика в другой вставлять, и вдобавок выделеный текст при копипасте сохраняет свои атрибуты.

я так часто пишу чисто чтобы можно было более-менее прикинуть, сколько времени это заняло.

вообще, если бы я не тупил, то: за три дня ящик можно портировать на новый (и довольно сложный) бэкэнд. в основном это благодаря тому, правда, что я сделал встроеную рисовалку и рендерилку шрифтов, так что от нового хоста требуется только умение создавать окна, да блитать в них RGBx или BGRx битмапы.

может потом SDL-бэкэнд запилю. чисто шутки ради, а почему бы и да. если только SDL2 нормально с несколькими окнами умеет работать (вроде бы умеет, но я никогда толком не разбирался).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 24 Май, 2023 21:25 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
может потом SDL-бэкэнд запилю. чисто шутки ради, а почему бы и да. если только SDL2 нормально с несколькими окнами умеет работать (вроде бы умеет, но я никогда толком не разбирался).

Да, несколько окон он умеет без проблем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 24 Май, 2023 23:33 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
всё, перелез на LinX11. ещё не все баги и недоработки устранены, но оно уже пригодно для. остальное вычистится по ходу. итого: три дня, в принципе, от «ничего» до «вполне комфортно пилим LinX11 в LinX11». ну, и плюс ещё пять месяцев, конечно, но их мы считать не будем, чтобы не ломать красивый срок.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Среда, 24 Май, 2023 23:39 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Было бы супер полезно ещё уметь Png показывать на любой View без pixmap или GDI+
Вы можете глянуть, как Vi делает отображение, чтобы понять, как показать без WinApi?
https://blackbox.oberon.org/extension/Vi
Может и вам для проектов пригодится картинки показывать.
Распаковку картинки он делает сам с помощью Zlib, а вот потом для показа на окне делает какие-то многочисленные манипулияции с WinApi, которые как, мне кажется, возможно заменить вашими пиксельными наработками.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Май, 2023 02:01 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
я загрузку картинок пока не делал, и вообще планирую imlib2 использовать, потому что ленивый.

в принципе, я могу и родные загрузчики запилить — png и сам, а для jpg, например, в A2 есть (и ещё какие-то там есть).

на винде их потом блитать несложно: просто создать DIB, заполнить его, да вывести. только мне очень лениво с виндой возиться, откровенно говоря: у меня её больше декады вообще нет ни в каком виде.

я бы, в принципе, растры на mainline портанул, но сделаю ещё одно признание: работать в mainline мне очень больно: редактор ничего не может, стрелки на нумпаде не работают, жестов нет (хихи), контролы не имеют QoL из LC, и так далее. и ассемблера в компиляторе нет, а растроблитеры активно его используют. ;-)

а более серьёзная причина: мне не нравится интерфейс растров, который я сделал. а его придётся тащить в mainline, если мы хотим картинки без внешних библиотек, и переносимо.

tl;dr: у меня в планах есть чистка кода растров — вероятно, после этого я портану его на mainline. такой план изначально и был, я пока не заморачивался потому что мне не нравится то, что получилось.

p.s.: ну и да, придётся тащить Zlib как зависимость, без вариантов. мне лень писать inflate самому. я могу, но мне лень. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Май, 2023 02:12 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
итак. LinX11 умеет всё, что умеет LinGtk — кроме загрузки картинок. и если этот нюанс опустить, то умеет на самом деле даже больше: иконки для окон (в том числе и юзерские можно), обмент views через клипбоард (пока небольшими, надо сделать инкрементальный протокол завтра), и — самое главное! — не требовать наличия gtk! ;-)

я молодец. из Больших Нереализованых Планов осталась только замена линейных списков балансироваными деревьями в TextModels, кажется. остальные озвученые тут планы я более-менее реализовал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Май, 2023 10:44 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
кстати, по мотивам стрёмного бага появилась идея: научить компилятор ругаться матом, если в процедуры-импорты .so передаётся какой-нибудь POINTER TO/VAR, и там что-то не untagged (тип параметра, то бишь). я вот так забыл — и GC с воплями ужаса улетал в космос, где успешно взрывался. потому что я не могу придумать случая, когда мне во внешнюю библиотеку надо было бы передать tagged record или подобное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Май, 2023 11:46 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
и ещё кстати к слову (то есть, некстати и не в тему): arisu — это Алиса, если что. только я не девочка. но Алиса. рассматривайте как хотите; говорят, такое сейчас модно. это в честь кэрролловской. чтобы было чудесатей. и да, по написанию ясно, что я люблю японию и аниме, хоть ничего о японии и не знаю.

p.s.: в конце концов, Элис Купер тоже мужик.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Май, 2023 12:21 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Пока проблема только как без WinApi вывести в окно то, что Vi сумел распаковать из Png картинки. Сам интерфейс для растров в целом в mainline устраивает. Не устраивает только зависимость от GDI+, так как при окончании памяти он просто не рисует картинки, так как себе не может выделить буфер для рисования новый у системы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Май, 2023 15:00 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
так чтобы это делать — как раз надо расширять и Rider, и Frame интерфейсами для создания и вывода растров. и добавлять соответствующий интерфейс в bottleneck. у меня эти интерфейсы вдобавок жёстко заточены на наличие заднего буфера с валидной картинкой, и ожидают, что можно делать альфа-блендинг с тем, что было нарисовано раньше.

так-то я переделал StdRasters на мой новый интерфейс, можно из любой загруженой картинки получить растр для рисования (или чтения пикселей). а декодеры живут в хосте. собственно, у меня так сейчас (см. мой Ports):
Код:
   TYPE
      (* raster with direct access to bitmap data.
         the data is always in RGBA format compatible with Color. A may be unused. *)
      RasterData* = POINTER TO RasterDataDesc;
      RasterDataDesc* = ARRAY OF INTEGER;
      Raster* = POINTER TO ABSTRACT RECORD
         w-, h-: INTEGER; (* in pixels, i.e. in array elements *)
         unit-: INTEGER; (* original unit *)
         data-: RasterData (* NIL when not locked *)
      END;

   (** RasterDirectory **)

   (* produce empty raster; NewRaster will call Init on it *)
   PROCEDURE (d: RasterDirectory) New- (): Raster, NEW, ABSTRACT;


   (** Raster **)

   (* draw alpha-blended image at the given rect; pixofs is the first image byte in img, pixstride is image width in img.
      WARNING! coordinates and dimensions are in pixels, not in universal coords! *)
   PROCEDURE (rd: Rider) BlendImage* (x, y, w, h, pixofs, pixstride: INTEGER; IN img: RasterDataDesc), NEW, ABSTRACT;

   (* TODO: various blit modes and scaling *)
   (* draw methods respect image alpha channel *)
   PROCEDURE (r: Raster) Draw* (rd: Rider; x, y, unit: INTEGER), NEW, ABSTRACT;
   PROCEDURE (r: Raster) DrawScaled* (rd: Rider; x, y, unit: INTEGER; sx, sy: SHORTREAL; q: INTEGER), NEW, ABSTRACT;

   (* will be called by NewRaster after setting dimensions and unit *)
   PROCEDURE (r: Raster) Init-, NEW, ABSTRACT;
   (* will be called by Resize after setting dimensions and unit; free to wipe the content *)
   PROCEDURE (r: Raster) Resized-, NEW, ABSTRACT;
   (* can return NIL if raster is immutable *)
   PROCEDURE (r: Raster) GetData- (): RasterData, NEW, ABSTRACT;
   PROCEDURE (r: Raster) ReleaseData-, NEW, ABSTRACT;

   (* wipes the contents, and sets the new size *)
   PROCEDURE (r: Raster) Resize* (w, h, unit: INTEGER), NEW;
   BEGIN ASSERT(w >= 0, 20); ASSERT(h >= 0, 21); ASSERT(unit > 0, 22); ASSERT(r.data = NIL, 23);
      w := w DIV unit; h := h DIV unit;
      IF (w = 0) OR (h = 0) THEN w := 0; h := 0 END;
      IF (r.w # w) OR (r.h # h) THEN
         r.w := w; r.h := h; r.unit := unit;
         r.Resized
      END
   END Resize;

   (* WARNING! locks are NOT recursive! *)
   (* there is no need to call Unlock if r.data is NIL *)
   PROCEDURE (r: Raster) Lock*, NEW;
   BEGIN ASSERT(r.w >= 0, 20); ASSERT(r.h >= 0, 21); ASSERT(r.unit > 0, 22); ASSERT(r.data = NIL, 23);
      r.data := r.GetData()
   END Lock;

   PROCEDURE (r: Raster) Unlock*, NEW;
   BEGIN ASSERT(r.w >= 0, 20); ASSERT(r.h >= 0, 21); ASSERT(r.unit > 0, 22);
      IF r.data # NIL THEN r.ReleaseData; r.data := NIL END
   END Unlock;

   (* this procedure put here because i couldn't find a better place for it.
      all coordinates are in pixels. color is Ports.Color.
      if r.data is NIL, then the raster will be locked, and then unlocked. *)
   PROCEDURE (r: Raster) DrawText* (font: Fonts.Font; x, y: INTEGER; IN s: ARRAY OF CHAR; color: Color), NEW, ABSTRACT;
   PROCEDURE (r: Raster) DrawTextClip* (font: Fonts.Font; x, y: INTEGER; IN s: ARRAY OF CHAR; color: Color;
                                                      x1, y1, x2, y2: INTEGER), NEW, ABSTRACT;
   PROCEDURE (r: Raster) DrawSpace* (font: Fonts.Font; x, y, w: INTEGER; color: Color), NEW, ABSTRACT;
   PROCEDURE (r: Raster) DrawSpaceClip* (font: Fonts.Font; x, y, w: INTEGER; color: Color;
                                                         x1, y1, x2, y2: INTEGER), NEW, ABSTRACT;


   (* create new drawable raster; size in UC *)
   PROCEDURE NewRaster* (w, h, unit: INTEGER): Raster;


я к тому, что если уж делать растры вручную — то нет ни одной причины не позволять прямой доступ к их пикселям: тогда пользователи смогут и сами их рисовать, и реализовывать дополнительные загрузчики картинок в разных форматах через стандартный интерфейс.

ну, и я предусмотрел вариант, когда реально картинка хранится не в обычном массиве: именно для этого введены `Lock()` и `Unlock()`. в варианте с gtk, например, массив для пикселов растра не создаётся, пока растр хоть раз не залочат: небольшая экономия, загруженый пиксмап остаётся в gtk, если на нём не рисуют потом. а вин-версия LC через GDI+, да, на том же интерфейсе. только она при `Lock()` пикселы вообще не возвращает: так можно, это штатно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Май, 2023 17:36 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
там, кстати, ещё одна проблема есть: те же пинги масштабируются в соответствии с DPI из заголовка. DPI-то взять не проблема, а вот рескалера-то нет. это мне ещё и рескалер с гамма-коррекцией портировать… ну, всё равно надо когда-нибудь, ладно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 26 Май, 2023 03:49 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ффух. в общем, поддержку INCR в X11 selections я сделал неправильно, пришлось переделать. теперь вроде бы работает: можно вставить из leadpad текст в 600 кб, и обратно в лифпад вставить, и между ящиками вставить тоже. 600 кб триггерит инкрементал, так что работает. адский хак, конечно, но и фиг с ним.

заодно повыкидывал оттуда мусор, и использую нормальную запись/чтение Stores.Store (соответственно, мы ещё зачем-то имеем версионированый клипборд, и потенциально с поддержкой разных типов обёрток).

вообще, надо отучаться писать файлы руками побайтово, и побольше использовать Stores. удобно же!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 26 Май, 2023 04:29 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
и ради интереса попробовал вставить 140 мегов текста. бедный ящик уже пятнадцать минут мучается, делает текстовую модель. интересно, доделает — или таки рухнет? по ходу, сожрал пол-гига памяти, и особо останавливаться не собирается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 26 Май, 2023 13:51 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
в общем, 140 мб текста вставить не вышло. два часа (не фигура речи) ящик мучался, сожрал 700 мегов памяти, а потом я пошёл спать. утром оказалось, что ящик таки упал. видимо, память кончилась, по трейсу не очень ясно. то есть, судя по трейсу — оно таки смогло доделать модель, и упало где-то на попытке вставить результат в документ (потому что там опять делается глубокая копия).

вообще, любопытно, где оно так адски тормозит. ну, там в тексте была кириллица вперемешку с латиницей, поэтому бедная модель понасоздавала спанов. надо будет потом это отменить, какой смысл уже, право: пусть делает только длинные спаны с 16-битными чарами.

кстати: у свежей модели же нет домена, ей некуда ундо писать, и она не пишет, насколько я понимаю. надо в исходник посмотреть.


p.s.: для реабилитации: 600+ кб исходника вставляется мгновенно. ну, там plain text, к тому же только латиница. тащемта, для всех практических применений ящиковые тексты вполне адекватны, это просто у меня гигантомания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 26 Май, 2023 13:54 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
если кому любопытно, трэйс. блин, ну сделайте на форум тэг спойлер, пожалуйста, ну! ;-)
Код:
selection contents size: 146486355
******************** TRAP REPORT -- BEGIN **************
 <PC=B7F7DABA, FP=BFCCFA78, SP=BFCCFA68>
dirty = { }
203 illegal memory read [ad = 00000005]
0: Stores.DomainOf [@=7559]  <PC=B7F7DABA FP=BFCCFA78>: `DevDebug.ShowSourceErrPos('Stores', 7559)`
1: Stores.Joined [@=41875]  <PC=B7F80E99 FP=BFCCFA94>: `DevDebug.ShowSourceErrPos('Stores', 41875)`
2: TextModels.Move [@=26878]  <PC=B72901CE FP=BFCCFAF4>: `DevDebug.ShowSourceErrPos('TextModels', 26878)`
3: TextModels.MoveOp.Do [@=28278]  <PC=B7290438 FP=BFCCFB2C>: `DevDebug.ShowSourceErrPos('TextModels', 28278)`
4: Models.Do [@=2857]  <PC=B7F6DA4E FP=BFCCFB44>: `DevDebug.ShowSourceErrPos('Models', 2857)`
5: TextModels.DoMove [@=28619]  <PC=B72904C3 FP=BFCCFB98>: `DevDebug.ShowSourceErrPos('TextModels', 28619)`
6: TextModels.StdModel.InsertCopy [@=42637]  <PC=B7291C68 FP=BFCCFBF8>: `DevDebug.ShowSourceErrPos('TextModels', 42637)`
7: TextControllers.InsertText [@=34865]  <PC=B726AE48 FP=BFCCFC18>: `DevDebug.ShowSourceErrPos('TextControllers', 34865)`
8: TextControllers.StdCtrl.NativePaste [@=52818]  <PC=B726C7E3 FP=BFCCFC40>: `DevDebug.ShowSourceErrPos('TextControllers', 52818)`
9: Containers.Paste [@=34630]  <PC=B7CC3C12 FP=BFCCFC58>: `DevDebug.ShowSourceErrPos('Containers', 34630)`
10: Containers.Edit [@=38868]  <PC=B7CC429F FP=BFCCFC8C>: `DevDebug.ShowSourceErrPos('Containers', 38868)`
11: Containers.Controller.HandleCtrlMsg [@=46551]  <PC=B7CC4E4A FP=BFCCFCA8>: `DevDebug.ShowSourceErrPos('Containers', 46551)`
12: TextControllers.StdCtrl.HandleCtrlMsg [@=61766]  <PC=B726D54E FP=BFCCFCD4>: `DevDebug.ShowSourceErrPos('TextControllers', 61766)`
13: Containers.View.HandleCtrlMsg [@=9578]  <PC=B7CC1D82 FP=BFCCFCF0>: `DevDebug.ShowSourceErrPos('Containers', 9578)`
14: Views.ForwardCtrlMsg [@=38705]  <PC=B7D27AA2 FP=BFCCFD30>: `DevDebug.ShowSourceErrPos('Views', 38705)`
15: Views.ForwardCtrlMsg [@=39156]  <PC=B7D27B33 FP=BFCCFD68>: `DevDebug.ShowSourceErrPos('Views', 39156)`
16: StdWindows.Window.ForwardCtrlMsg [@=29114]  <PC=B7C8DBFB FP=BFCCFD8C>: `DevDebug.ShowSourceErrPos('StdWindows', 29114)`
17: StdWindows.ForwardCtrlMsg [@=33911]  <PC=B7C8E1EB FP=BFCCFDA8>: `DevDebug.ShowSourceErrPos('StdWindows', 33911)`
18: StdWindows.Forwarder.Forward [@=72890]  <PC=B7C91674 FP=BFCCFDC0>: `DevDebug.ShowSourceErrPos('StdWindows', 72890)`
19: Controllers.ForwardVia [@=11204]  <PC=B7D1F097 FP=BFCCFDE4>: `DevDebug.ShowSourceErrPos('Controllers', 11204)`
20: Controllers.Forward [@=11309]  <PC=B7D1F0C4 FP=BFCCFE00>: `DevDebug.ShowSourceErrPos('Controllers', 11309)`
21: HostClipboard.ClipboardHook.Paste [@=30546]  <PC=B701A857 FP=BFCD0354>: `DevDebug.ShowSourceErrPos('HostClipboard', 30546)`
22: StdClipboard.Paste [@=2251]  <PC=B729F356 FP=BFCD0368>: `DevDebug.ShowSourceErrPos('StdClipboard', 2251)`
23: StdCmds.Paste [@=52362]  <PC=B7206896 FP=BFCD0378>: `DevDebug.ShowSourceErrPos('StdCmds', 52362)`
24: Kernel.Call [@=41909]  <PC=0804B0B0 FP=BFCD03A4>: `DevDebug.ShowSourceErrPos('Kernel', 41909)`
25: Meta.Item.ParamCallVal [@=28412]  <PC=B7F866F6 FP=BFCD0804>: `DevDebug.ShowSourceErrPos('Meta', 28412)`
26: StdInterpreter.CallProc [@=16372]  <PC=B7C84B5D FP=BFCD086C>: `DevDebug.ShowSourceErrPos('StdInterpreter', 16372)`
27: StdInterpreter.Command [@=28668]  <PC=B7C86654 FP=BFCD0874>: `DevDebug.ShowSourceErrPos('StdInterpreter', 28668)`
28: StdInterpreter.CallHook.Call [@=29078]  <PC=B7C86718 FP=BFCD0F8C>: `DevDebug.ShowSourceErrPos('StdInterpreter', 29078)`
29: Dialog.Call [@=41979]  <PC=B7F90C1D FP=BFCD0FB4>: `DevDebug.ShowSourceErrPos('Dialog', 41979)`
30: StdDialog.HandleItem [@=19173]  <PC=B7211973 FP=BFCD0FF0>: `DevDebug.ShowSourceErrPos('StdDialog', 19173)`
31: StdMenus.SafeAction.Do [@=15129]  <PC=B7010E92 FP=BFCD1004>: `DevDebug.ShowSourceErrPos('StdMenus', 15129)`
32: Services.TryHandler [@=11063]  <PC=B7F997E6 FP=BFCD101C>: `DevDebug.ShowSourceErrPos('Services', 11063)`
33: HostKernel.Try [@=16333]  <PC=0804F2B1 FP=BFCD10DC>: `DevDebug.ShowSourceErrPos('HostKernel', 16333)`
34: Kernel.Try [@=68784]  <PC=0804D312 FP=BFCD10FC>: `DevDebug.ShowSourceErrPos('Kernel', 68784)`
35: Services.Try [@=11201]  <PC=B7F9981C FP=BFCD1120>: `DevDebug.ShowSourceErrPos('Services', 11201)`
36: StdMenus.DoExecute [@=25348]  <PC=B70120D5 FP=BFCD113C>: `DevDebug.ShowSourceErrPos('StdMenus', 25348)`
37: StdMenus.Directory.Execute [@=25705]  <PC=B7012145 FP=BFCD1150>: `DevDebug.ShowSourceErrPos('StdMenus', 25705)`
38: HostBackends.KeyPressHandler.TryMenuShortcut [@=36928]  <PC=B7023257 FP=BFCD1180>: `DevDebug.ShowSourceErrPos('HostBackends', 36928)`
39: HostBackends.KeyPressHandler.Do [@=37410]  <PC=B70232C4 FP=BFCD11A0>: `DevDebug.ShowSourceErrPos('HostBackends', 37410)`
40: Services.TryHandler [@=11063]  <PC=B7F997E6 FP=BFCD11B8>: `DevDebug.ShowSourceErrPos('Services', 11063)`
41: HostKernel.Try [@=16333]  <PC=0804F2B1 FP=BFCD1278>: `DevDebug.ShowSourceErrPos('HostKernel', 16333)`
42: Kernel.Try [@=68784]  <PC=0804D312 FP=BFCD1298>: `DevDebug.ShowSourceErrPos('Kernel', 68784)`
43: Services.Try [@=11201]  <PC=B7F9981C FP=BFCD12BC>: `DevDebug.ShowSourceErrPos('Services', 11201)`
44: HostBackends.TrySignalHandlerRes [@=21159]  <PC=B7021334 FP=BFCD12CC>: `DevDebug.ShowSourceErrPos('HostBackends', 21159)`
45: HostBackends.TrySignalHandler [@=21283]  <PC=B7021351 FP=BFCD12DC>: `DevDebug.ShowSourceErrPos('HostBackends', 21283)`
46: HostBackends.KeyPressSignal [@=38571]  <PC=B702342C FP=BFCD1354>: `DevDebug.ShowSourceErrPos('HostBackends', 38571)`
47: HostBackends.ProcessXEvent [@=55342]  <PC=B7024AA4 FP=BFCD1374>: `DevDebug.ShowSourceErrPos('HostBackends', 55342)`
48: HostBackends.FetchEvent [@=62471]  <PC=B70252B5 FP=BFCD1484>: `DevDebug.ShowSourceErrPos('HostBackends', 62471)`
49: Loop.Loop [@=2012]  <PC=B7D1B601 FP=BFCD14A8>: `DevDebug.ShowSourceErrPos('Loop', 2012)`
50: HostKernel.Platform.Start [@=15087]  <PC=0804F14F FP=BFCD14B4>: `DevDebug.ShowSourceErrPos('HostKernel', 15087)`
51: Kernel.Start [@=65270]  <PC=0804CE78 FP=BFCD14D0>: `DevDebug.ShowSourceErrPos('Kernel', 65270)`
52: Loop.Start [@=4513]  <PC=B7D1B89D FP=BFCD14E8>: `DevDebug.ShowSourceErrPos('Loop', 4513)`
53: HostInit.Init [@=5441]  <PC=B7004BAE FP=BFCD1504>: `DevDebug.ShowSourceErrPos('HostInit', 5441)`
54: HostInit.$$ [@=5529]  <PC=B7004569 FP=BFCD1514>: `DevDebug.ShowSourceErrPos('HostInit', 5529)`
55: Kernel.InitModule [@=33758]  <PC=0804A637 FP=BFCD1720>: `DevDebug.ShowSourceErrPos('Kernel', 33758)`
56: Kernel.RegisterMod [@=38626]  <PC=0804AD32 FP=BFCD1938>: `DevDebug.ShowSourceErrPos('Kernel', 38626)`
57: StdLoader.LoadMod [@=10733]  <PC=08059482 FP=BFCD1950>: `DevDebug.ShowSourceErrPos('StdLoader', 10733)`
58: StdLoader.Hook.ThisMod [@=11212]  <PC=08059561 FP=BFCD1964>: `DevDebug.ShowSourceErrPos('StdLoader', 11212)`
59: Kernel.ThisMod [@=34718]  <PC=0804A758 FP=BFCD1984>: `DevDebug.ShowSourceErrPos('Kernel', 34718)`
60: Kernel.LoadMod [@=34873]  <PC=0804A788 FP=BFCD19A0>: `DevDebug.ShowSourceErrPos('Kernel', 34873)`
61: HostLoader.Load [@=608]  <PC=0805EF25 FP=BFCD21C0>: `DevDebug.ShowSourceErrPos('HostLoader', 608)`
******************** TRAP REPORT -- END ****************
FATAL trap in Garbage Collector, PC=00000000. Aborting immediately.

вот это вот «trap in Garbage Collector» обозначает ровно то, что написано. в LC трап чекер в курсе, когда работает GC, и при любом трапе в GC просто в панике всех убивает. потому что в общем случае в этот момент хип представляет из себя кашу.

а. так вот. это, скорее всего, обозначает ситуацию out of memory там где-то.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 26 Май, 2023 16:47 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
алсо, думаю вот: может, переделать кодоген на SSE вместо FPU? потеряем, конечно, промежуточную десятибайтовую точность — но она всё равно гарантирована только на x86. правда, SSE (если я верно помню, надо перепроверить) некорректно работает с nan-ами (и, возможно, inf-ами). поэтому придётся вставлять проверки, и не факт, что в итоге станет лучше.

кстати. неплохо бы ещё научить компилятор собирать все локальные переменные, которые указатели, в кучку. чтобы из было удобней чистить через stosd.

кстати, `VAR` и `OUT` параметры отличаются одной важной фичей: `OUT`-указатели компилятор тоже бережно зануляет. не помню, правда, только ли указатели, или в записи ныряет тоже. по-моему, в записи нет, но это неточно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 26 Май, 2023 19:41 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
запилил асинхронную отсылку клипборда, если там овердофига данных (т.е. если надо слать по чанкам через INCR). и вообще: переделал весь клипборд на временные файлы вместо массивов в памяти. заодно бампнул количество и размер файловых буферов до 32 кб на файл.

специфика в том, что пока буфера не переполнятся — система даже не пытается создать файл на диске: соответственно, для большинства копипасты диск не будет дёргаться вообще. поэтому вместо танцев с динамическими массивами я просто пишу всё сразу в файл, это удобней. к тому же для вставки TextViews.View всё равно временный файл нужен: при десериализации модель делает отложеное чтение, похоже. мне лень смотреть исходники, но если десериализовать и файл закрыть — то модель трапается. короче, со всех сторон так удобней.

заодно можно спокойно посылать клипбордовые чанки в обычном цикле обработки сообщений, и не одному, а куче клиентов за раз. по протоколу мы получаем событие-пульс, и просто на него реагируем, посылая очередной кусок файла. а как куски закончились — то запись об этом забываем. дёшево, сердито, держит кучу клиентов, не тратит лишнюю память, не блокирует среду, если попался ушибленый на голову тормозной клиент.

заодно чуть-чуть поменял стратегию выбора файлового буфера, если свободных нет: раньше их тупо циклически перебирали, сейчас я выбираю буфер, который использовался «давнее всего». и ещё не пытаюсь читать с диска буфера при `SetPos()`: лишнее оно. достаточно просто запомнить новую позицию, а реально на диск сходить кода реальный i/o будет.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 649 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 33  След.

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


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

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


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

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