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 Newsgroups: comp.lang.c Subject: Re: Running an editor from ANSI C Date: Thu, 6 Jun 2024 09:27:34 +0100 Organization: A noiseless patient Spider Lines: 64 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Thu, 06 Jun 2024 10:27:34 +0200 (CEST) Injection-Info: dont-email.me; posting-host="e0edff7614c2fb0d5b8cdac9c846a7dd"; logging-data="1513992"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19hr8ZALEiZZNK6GykO1zi+lbY01Qq7gik=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:KnejYmETj38SgchIBFeEhoc8QP8= In-Reply-To: Content-Language: en-GB Bytes: 3254 On 06/06/2024 05:40, Janis Papanagnou wrote: > On 06.06.2024 04:47, Malcolm McLean wrote: >>> >> The concept is an ANSI C only shell. >> >> I can write my own text editor on top of Posix easily enough. >> But I want to implent an "edit" command so that users can edit files. >> >> And you just can't edit files without non-ASCII keys. > > What do you mean here? You certainly can edit files with Vi-like > ASCII-key commands (as, for example, some shells do to allow edit > their history file). > >> So at the moment I call system with nano, and it wotks. But it's a >> clunky solution. > > Nano at least relies on some control-keys. (Is that no issue?) > > There's a couple of professional systems that allow to spawn any > editor (that fits basic calling conventions) that suits you, which > is a Good Thing. It's IMO generally a good approach to not force > folks to use some specific (or even proprietary) editor in context > of an application. (Not that this design practice would be widely > observable in practice.) > > Janis > This is the current code for the "edit" command. else if (!strcmp(command, "edit")) { char *exportargs[4]; char *importargs[4]; char buff[1024]; if (argc == 2) { char *tempfile = 0; tempfile = tmpnam(0); if (tempfile) { exportargs[0] = "export"; exportargs[1] = argv[1]; exportargs[2] = tempfile; exportargs[3] = 0; export(shell, 3, exportargs); snprintf(buff, 1024, "%s %s\n", shell->editor, tempfile); system(buff); importargs[0] = "import"; importargs[1] = tempfile; importargs[2] = argv[1]; importargs[3] = 0; import(shell, 3, importargs); } } } It does work. But my compiler warns about rmpnam() being deprecated. -- Check out Basic Algorithms and my other books: https://www.lulu.com/spotlight/bgy1mm