Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <v3fg2m$2rkd2$1@dont-email.me>
Deutsch   English   Français   Italiano  
<v3fg2m$2rkd2$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Malcolm McLean <malcolm.arthur.mclean@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: C23 thoughts and opinions
Date: Sat, 1 Jun 2024 16:51:49 +0100
Organization: A noiseless patient Spider
Lines: 233
Message-ID: <v3fg2m$2rkd2$1@dont-email.me>
References: <v2l828$18v7f$1@dont-email.me>
 <00297443-2fee-48d4-81a0-9ff6ae6481e4@gmail.com>
 <v2lji1$1bbcp$1@dont-email.me> <87msoh5uh6.fsf@nosuchdomain.example.com>
 <f08d2c9f-5c2e-495d-b0bd-3f71bd301432@gmail.com>
 <v2nbp4$1o9h6$1@dont-email.me> <v2ng4n$1p3o2$1@dont-email.me>
 <87y18047jk.fsf@nosuchdomain.example.com>
 <87msoe1xxo.fsf@nosuchdomain.example.com> <v2sh19$2rle2$2@dont-email.me>
 <87ikz11osy.fsf@nosuchdomain.example.com> <v2v59g$3cr0f$1@dont-email.me>
 <v30l15$3mcj6$1@dont-email.me> <v30lls$3mepf$1@dont-email.me>
 <v30sai$3rilf$1@dont-email.me> <v320am$1km5$1@dont-email.me>
 <v33ggr$e0ph$1@dont-email.me> <v34bne$i85p$1@dont-email.me>
 <v3758s$14hfp$1@raubtier-asyl.eternal-september.org>
 <v38of2$1gsj2$1@dont-email.me> <v39v87$1n7bk$1@dont-email.me>
 <20240530170836.00005fa0@yahoo.com> <v3a3k5$1ntrn$1@dont-email.me>
 <20240530180345.00003d9f@yahoo.com> <v3chc4$27uij$1@dont-email.me>
 <v3drdg$2f1pg$1@dont-email.me> <v3euis$2o6gv$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 01 Jun 2024 17:51:51 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="ddd0cd5bdd49f1c9af3bee865f57fdb0";
	logging-data="3002786"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+dUQrsAT6ZKxY95dkT5lNy5Nz/lCN4Z2E="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:Ej47pX5YpuJAdgQPHHom53WF/vo=
Content-Language: en-GB
In-Reply-To: <v3euis$2o6gv$1@dont-email.me>
Bytes: 10770

On 01/06/2024 11:53, bart wrote:
> On 01/06/2024 01:53, Malcolm McLean wrote:
>> On 31/05/2024 13:55, bart wrote:
>>> On 30/05/2024 16:03, Michael S wrote:
>>>> On Thu, 30 May 2024 15:48:39 +0100
>>>> bart <bc@freeuk.com> wrote:
>>>>
>>>>>
>>>>> Where do the _binary_logo_bmp_start and ...-size symbols come from?
>>>>> That is, how do they get into the object file.
>>>>>
>>>>
>>>> objcopy generates names of the symbols from the name of input binary
>>>> file. I would think that it is possible to change these symbols to
>>>> something else, but I am not sure that it is possible withing the same
>>>> invocation of objcopy. It certainly is possible with a second pass.
>>>> Lawrence probably can give more authoritative answer.
>>>> Or as a last resort you can RTFM.
>>>>
>>> I gave myself the simple task of incorporating the source text of 
>>> hello.c into a program, and printing it out.
>>>
>>> Here's how builtin embedding worked using a feature of my older C 
>>> compiler:
>>>
>>>    #include <stdio.h>
>>>    #include <string.h>
>>>
>>>    char hello[] = strinclude("hello.c");
>>>
>>>    int main(void) {
>>>        printf("hello =\n%s\n", hello);
>>>        printf("strlen(hello) = %zu\n", strlen(hello));
>>>        printf("sizeof(hello) = %zu\n", sizeof(hello));
>>>    }
>>>
>>>
>>> I build it and run it like this:
>>>
>>>    C:\c>bcc c
>>>    Compiling c.c to c.exe
>>>
>>>    C:\c>c
>>>    hello =
>>>    #include "stdio.h"
>>>
>>>    int main(void) {
>>>        printf("Hello, World!\n");
>>>    }
>>>
>>>    strlen(hello) = 70
>>>    sizeof(hello) = 71
>>>
>>>    C:\c>dir hello.c
>>>    31/05/2024  13:48                70 hello.c
>>>
>>>
>>> It just works; no messing about with objcopy parameters; no long 
>>> unwieldy names; no link errors due to unsupported file formats; no 
>>> problems with missing terminators for embedded text files imported as 
>>> strings; no funny ways of getting size info.
>>>
>> Here's my solution. It's a bit more complicated.
>>
>>
>> int bbx_write_source (const char *source_xml, char *path, const char 
>> *source_xml_file, const char *source_xml_name)
>> {
>>      XMLDOC *doc = 0;
>>      char error[1024];
>>      char buff[1024];
>>      XMLNODE *root;
>>      XMLNODE *node;
>>      const char *name;
>>      FILE *fpout;
>>      FILE *fpin;
>>      int ch;
>>
>>      doc = xmldocfromstring(source_xml, error, 1024);
>>      if (!doc)
>>      {
>>          fprintf(stderr, "%s\n", error);
>>          return -1;
>>      }
>>      root = xml_getroot(doc);
>>      if (strcmp(xml_gettag(root), "FileSystem"))
>>          return -1;
>>
>>      if (!root->child)
>>          return -1;
>>      if (strcmp(xml_gettag(root->child), "directory"))
>>          return -1;
>>
>>      for (node = root->child->child; node != NULL; node = node->next)
>>      {
>>          if (!strcmp(xml_gettag(node), "file"))
>>          {
>>              name = xml_getattribute(node, "name");
>>              snprintf(buff, 1024, "%s%s", path, name);
>>              fpout = fopen(buff, "w");
>>              if (!fpout)
>>                  break;
>>              fpin = file_fopen(node);
>>              if (!fpin)
>>                  break;
>>              if (!strcmp(name, source_xml_file))
>>              {
>>                  char *escaped = texttostring(source_xml);
>>                  if (!escaped)
>>                      break;
>>                  fprintf(fpout, "char %s[] = %s;\n", source_xml_name, 
>> escaped);
>>                  free(escaped);
>>              }
>>              else
>>              {
>>                 while ((ch = fgetc(fpin)) != EOF)
>>                     fputc(ch, fpout);
>>              }
>>              fclose(fpout);
>>              fclose(fpin);
>>              fpout = 0;
>>              fpin = 0;
>>          }
>>      }
>>      if (fpin || fpout)
>>      {
>>          fclose(fpin);
>>          fclose(fpout);
>>          return -1;
>>      }
>>
>>      return 0;
>>
>> }
>>
>> It's leveraging the Baby X resource compiler, the xmparser, and my 
>> filesystem programs. You can't include the source of a program in the 
>> program as a C string, because then the source changes to include that 
>> string. So what you do is this.
>>
>> You first place a placeholder C source file containing a short dummy 
>> string.
>> The you convert the source to an XML file, and turn it into a string 
>> with the Baby X Resource compiler. Then you drop the source into the
>> file, removing the placeholder.
>>
>> Then the program walks the file list, detects that file, and replaces 
>> it with the xml string it has been passed.
>>
>> And this system works, and it's an easy way of adding source output to
>> ptograms. Of course the function now needs to be modified to walk the 
>> entire tree recursively and I will need a makedirectory function. I've 
>> got it to work for flat source directories.
> 
> Sorry, I don't understand what that does; what is the input and what is 
> the output?
> 
> In the case of a very simple requirement of incorporating a text file 
> into a C program as data, usually string data (which I have to say is 
> much more common for me than doing anything with XML), how would a BBX 
> solution work?
> 
> This doesn't work:
========== REMAINDER OF ARTICLE TRUNCATED ==========