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 ==========