From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: ANN: Ada Resource Embedder for C, Ada and Go
Date: Fri, 11 Jun 2021 20:25:55 +0200 [thread overview]
Message-ID: <sa09rh$f4p$1@gioia.aioe.org> (raw)
In-Reply-To: ecc22bac-2f66-44ac-9496-3a2f46adbf32n@googlegroups.com
On 2021-06-11 19:32, Stephane Carrez wrote:
> Le vendredi 11 juin 2021 à 18:19:18 UTC+2, Dmitry A. Kazakov a écrit :
>> On 2021-06-11 15:51, Stéphane Rivière wrote:
>>> Hi Stephane,
>>>
>>>> I created a new tool to allow embedding any file in an Ada, C or Go binary.
>>>
>>> This is typically what I needed to improve my current AIDE v2 project
>>> (Ada Instant Development Environment - source GNAT CE 2019 2020 2021 -
>>> target Debian / Ubuntu with subtarget station (with GNATStudio, HAC,
>>> libs, debug aware RTS, and goodies) or server (bare minimal).
>> I considered embedding into relocatable libraries similar to Windows'
>> resource, e.g. for versioning plugins etc, but then decided to use an
>> easier and more universal method.
>>
>> I simply put an Ada constructing function into the library. The function
>> is exported. The address returned by GetProcAddress or dlsym goes to
>> Unchecked_Conversion to an access to subprogram, and here you are.
>>
>> The obvious advantage of this method over embedding is that the object
>> can be tagged of any derived type, which no embedding can do. And you
>> can add whatever further initialization or checks you might need.
>
> Can you elaborate a little?
> I don't see what you put in your Ada constructing function.
> I do see how you use it but not how and where you put the original content or file.
In my case I do not deal with files, it is always objects. In the
simplest case it could be a record type like:
type Library_Data is record
Do_This : not null access procedure;
Get_That : not null access function return That'Class;
end record;
That the library provides.
> Let's suppose you have some documentation file 'config/example.conf'.
The documentation would be an object ready for rendering. Say the
documentation renderer is GTK text view widget. Then that would require
a text buffer:
type Library_Data is record
Do_This : not null access procedure;
Get_That : not null access function return That'Class;
Documentation : not null Gtk_Text_Buffer;
end record;
The caller will drop the text buffer Documentation into a Gtk_Text_View
widget to show the documentation.
I usually use programmatically generated content. E.g. HTML
documentation would be a set of subprograms with parameters that put a
portion of HTML into a stream/string. I then decorate their output as
necessary, e.g. <tr>...</tr> if that must be a table cell etc.
The point that documentation is almost never a static text, but has all
sorts of parameters the provider of does not know in advance.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2021-06-11 18:25 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-11 13:30 ANN: Ada Resource Embedder for C, Ada and Go Stephane Carrez
2021-06-11 13:51 ` Stéphane Rivière
2021-06-11 15:41 ` Doctor Who
2021-06-12 11:41 ` Doctor Who
2021-06-12 12:03 ` Stéphane Rivière
2021-06-12 12:51 ` Doctor Who
2021-06-11 16:19 ` Dmitry A. Kazakov
2021-06-11 17:32 ` Stephane Carrez
2021-06-11 18:25 ` Dmitry A. Kazakov [this message]
2021-06-11 18:44 ` Stephane Carrez
2021-06-11 19:53 ` Dmitry A. Kazakov
2021-06-12 6:15 ` Stephane Carrez
2021-06-12 11:31 ` Stéphane Rivière
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox