• Re: Command Languages Versus Programming Languages

    From Janis Papanagnou@21:1/5 to Muttley@DastartdlyHQ.org on Sun Oct 13 14:29:00 2024
    [ X-post list reduced ]

    On 13.10.2024 10:18, Muttley@DastartdlyHQ.org wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in
    the day. Not something that can be said for MacOS with its role-our-own
    Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be
    different from other Unixes; as far as the subtopic "interpreter vs.
    compiler" goes. (Ignoring other technical implementation details of
    Unix.)

    Myself I programmed on UTS, SunOS, AIX, HP-UX, and Linux, each with
    its quirks, specialities and commonalities, some based on SysV, some
    on BSD, and some used concepts from both. Linux reminds me more on
    systems borrowing from both worlds (plus some more newer concepts).

    Concerning the subtopic "interpreter vs. compiler" I don't think it
    makes sense to continue the battle. With intermediate code and VM
    languages, firmware and arbitrary specific variants how interpreter
    can work, there's plenty of room to digress, nit-pick, and create
    red herrings and straw men. The terms are (despite all the variants)
    quite clear and can be looked up even in common (non-CS) sources;
    there's no necessity to arm oneself with Tannenbaum or others. Hope
    we can get over that. A practically useful way to discuss things
    might be to speak about concrete concepts, not about (potentially
    misleading) labels.

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Muttley@DastartdlyHQ.org@21:1/5 to All on Sun Oct 13 14:03:23 2024
    On Sun, 13 Oct 2024 14:29:00 +0200
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> boring babbled:
    [ X-post list reduced ]

    On 13.10.2024 10:18, Muttley@DastartdlyHQ.org wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in
    the day. Not something that can be said for MacOS with its role-our-own
    Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be

    It isn't. Its a Mach kernel with a BSD compat layer on top. Off the top of
    my head MacOS oddities include:

    - A lot of the API (particularly graphics) only accessable via objective-C
    including stuff that should be available in plain C such as low level wifi
    APIs.
    - Doesn't use X windows though you can install it
    - XML based config
    - Case insensitive command line regardless of shell unless you use wildcards or
    regex then suddenly its case sensitive.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Muttley@DastartdlyHQ.org@21:1/5 to All on Sun Oct 13 14:56:54 2024
    On Sun, 13 Oct 2024 16:21:20 +0200
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> boring babbled:
    On 13.10.2024 16:03, Muttley@DastartdlyHQ.org wrote:
    On Sun, 13 Oct 2024 14:29:00 +0200
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> boring babbled:
    [ X-post list reduced ]

    On 13.10.2024 10:18, Muttley@DastartdlyHQ.org wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in >>>> the day. Not something that can be said for MacOS with its role-our-own >>>> Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be

    It isn't. Its a Mach kernel with a BSD compat layer on top. [...]

    I've ever only heared that it's based on FreeBSD. From Wikipedia I'm
    getting told that the contemporary Darwin (Apple's Unix) was derived
    from FreeBSD, supplemented by OpenBSD, NetBSD, and own parts. Anyway,
    not worth a dispute (as far as I am concerned).

    Its a common misconception. MacOS has nothing to do with FreeBSD other than Apple nicked a lot of user layer and posix code from them back in the day.

    https://en.wikipedia.org/wiki/Mach_(kernel)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to Muttley@DastartdlyHQ.org on Sun Oct 13 16:21:20 2024
    On 13.10.2024 16:03, Muttley@DastartdlyHQ.org wrote:
    On Sun, 13 Oct 2024 14:29:00 +0200
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> boring babbled:
    [ X-post list reduced ]

    On 13.10.2024 10:18, Muttley@DastartdlyHQ.org wrote:
    [...]

    I disagree. Modern linux reminds me a lot of SunOS and HP-UX from back in >>> the day. Not something that can be said for MacOS with its role-our-own
    Apple specific way of doing pretty much everything.

    I've never programmed on Mac OS X (if the discussion is about that)
    but since its kernel is based on a BSD system it doesn't seem to be

    It isn't. Its a Mach kernel with a BSD compat layer on top. [...]

    I've ever only heared that it's based on FreeBSD. From Wikipedia I'm
    getting told that the contemporary Darwin (Apple's Unix) was derived
    from FreeBSD, supplemented by OpenBSD, NetBSD, and own parts. Anyway,
    not worth a dispute (as far as I am concerned).

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Mon Oct 14 07:47:40 2024
    Janis Papanagnou , dans le message <vehkbt$s85f$1@dont-email.me>, a
    Θcritá:
    I was speaking about [formal] languages as introduced by Chomsky

    Are we not progressively realizing that most of what Chomsky said was unsubstantiated bullshit?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to Nicolas George on Mon Oct 14 14:27:10 2024
    On 14.10.2024 09:47, Nicolas George wrote:
    Janis Papanagnou , dans le message <vehkbt$s85f$1@dont-email.me>, a
    Θcrit :
    I was speaking about [formal] languages as introduced by Chomsky

    Are we not progressively realizing that most of what Chomsky said was unsubstantiated bullshit?

    Given the generalization and lack of any substance in your post, and
    the (enduring) relevance of Chomsky's work for computer science your
    comment appears to reveal nothing but ignorance (and of course your
    offending habits).

    Janis

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Lawrence D'Oliveiro@21:1/5 to Nicolas George on Mon Oct 14 21:03:47 2024
    On 14 Oct 2024 07:47:40 GMT, Nicolas George wrote:

    Janis Papanagnou , dans le message <vehkbt$s85f$1@dont-email.me>, a
    écrit :
    I was speaking about [formal] languages as introduced by Chomsky

    Are we not progressively realizing that most of what Chomsky said was unsubstantiated bullshit?

    And we have found yet another shibboleth for exposing those of a, shall we
    say, certain backwards-looking political persuasion ...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Mon Oct 14 23:25:36 2024
    Janis Papanagnou , dans le message <vej2n0$16ljv$1@dont-email.me>, a
    Θcritá:
    Given the generalization and lack of any substance in your post, and
    the (enduring) relevance of Chomsky's work for computer science your
    comment appears to reveal nothing but ignorance (and of course your
    offending habits).

    After checking, his works in linguistics are indeed mostly unsubstantiated
    and nowadays mostly discredited, but he did indeed some valid math and
    computer science a long time ago.

    Funny he's mostly known for what he's bad at.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Mon Oct 14 23:26:11 2024
    Lawrence D'Oliveiro , dans le message <vek0vj$1bek1$3@dont-email.me>, a
    Θcritá:
    And we have found yet another shibboleth for exposing those of a, shall we say, certain backwards-looking political persuasion ...

    Care to elaborate, or will you leave the vacuum of your message hidden
    behind the obscurity of its wording?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to jameskuyper@alumni.caltech.edu on Sat Nov 23 13:53:09 2024
    In article <vhrjcr$1ijr4$1@dont-email.me>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    On 11/22/24 18:06, Dan Cross wrote:
    ...
    a) Please stop emailing me this stuff _and_ posting it here. I
    have asked you this in the past, and previously you'd said that
    it was because you switched news readers. That's fine, but that
    was a year ago or more.

    Actually, Thunderbird made the change to how the "Reply" button works >sometime around April 2021, and I'm still making the mistake of hitting
    it when I should hit "Followup". At my age it's hard to change a habit >acquired over a couple of decades of posting to usenet; I'm doing my
    best to change it, and still failing frequently.

    Three and a half years is a long time to learn how to use a tool
    competently.

    I'm unlikely to deliberately send you e-mail, so you can easily avoid
    the aggravation of dealing with my accidental e-mails by simply
    kill-filing me.

    Please don't put the onus to deal with your mistakes on me.

    b) What you are referring to, from the section on Additive
    Operators (6.5.7 in n3220; 6.5.6 in C99) is in reference to
    pointer arithmetic; the statement that I was replying to was a
    general statement about pointers, independent of issues of
    pointer arithmetic. That is, it is not the case that, "each
    pointer in C points to an array". The above example, to which
    you replied, is a counterpoint to the general statement.

    I disagree. It is not independent, because there's nothing you can do
    with pointer itself that has either it's value or it's validity
    dependent upon whether that pointer points at a single object or the
    first element of an array of length one.

    You can indirect it without doing arithmetic on it. This isn't
    a particularly interesting topic, however. The point was that
    the OP's statement was factually incorrect.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to jameskuyper@alumni.caltech.edu on Sat Nov 23 14:05:35 2024
    In article <vhrmk1$1ivhr$1@dont-email.me>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    On 11/22/24 17:34, Dan Cross wrote:
    In article <e47664d3-7f9b-4e67-aa73-b72c6cc0687a@alumni.caltech.edu>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.

    Yes, but in this context, that's obviously not the case as he
    posted the behavior he saw. I was merely explaining _why_ he
    saw that behavior, vis the standard.

    Your wording could easily give the false impression, to anyone who
    didn't already know better, that promotion of unsigned char to signed
    int is required by the standard, rather than it being dependent upon
    whether UCHAR_MAX > INT_MAX.

    Actually I'm not sure that it did. Note the part that you
    quoted above that says, "the entire range values is expressible
    in a signed int." This implies UCHAR_MAX <= INT_MAX. (By
    "values" I meant, "values of that type", not specific values in
    any given program).

    Regardless, if you wanted to provide more detail, it would be
    done more usefully by doing so within the context, "here's why
    this is true in this context, but note that other contexts
    exist in which this doesn't hold, and here's why..." etc.

    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer
    promotions to each operand, but then a few other things happen as well.

    This is correct, but IMHO too far down into the weeds. Consider
    section 6.3.1.1 para 3, which notes that, "the integer
    promotions are applied only: ... 1. as part of the usual
    arithmetic conversions".

    The latest draft of the standard that I have is n3096.pdf, dated
    2023-04-01.

    As I mentioned, I'm looking at n3220. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf

    You may want to looka t n3301, which seems to be the latest. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3301.pdf

    In that draft, that wording is not present in paragraph 3,
    but only footnote 63, which is referenced by paragraph 2. That footnote
    does not contain the "1." that is present in your citation. That
    footnote goes on to list the other contexts in which integer promotions
    can occur: ", to certain argument expressions, to the operands of the
    unary +, -, and ~ operators, and to both operands of the shift
    operators, as specified by their respective subclauses."
    Which version are you quoting? I have copies of most of the draft
    standards that are available for free, but none of the final versions of
    the standards, since those cost money.

    See above.

    ... Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    Calling them the usual arithmetic conversions rather than the integer >promotions is being unnecessarily vague. Your description only covers
    the integer promotions, it doesn't cover any of the other usual
    arithmetic conversions.

    The integer promotions were the only relevant part in context.
    Perhaps it would have allayed your concerns to say, "part of"?

    I'm going to try to come up with an analogy; the best one I could come
    up on the spur of the moment involves the US federal income tax form
    1040. It has a section called "Payments". The first four payments are
    all amounts that have been withheld from various income sources before
    you ever get a chance to spend the money. Most the other payments are
    things that you spent money on that you are entitled to take as a credit >against your tax liability.
    What you've done is analogous to describing how withholding works, and
    even using the term "withheld", and then referring to what you've just >described as "payments" rather than "amounts withheld", even though your >description doesn't fit the tax credits, which are the other kinds of >payments.

    Sorry, I think this analogy is poor and unhelpful. See the
    above references.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Sat Nov 23 10:22:19 2024
    On 11/23/24 09:05, Dan Cross wrote:
    In article <vhrmk1$1ivhr$1@dont-email.me>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    ...
    Your wording could easily give the false impression, to anyone who
    didn't already know better, that promotion of unsigned char to signed
    int is required by the standard, rather than it being dependent upon
    whether UCHAR_MAX > INT_MAX.

    Actually I'm not sure that it did. Note the part that you
    quoted above that says, "the entire range values is expressible
    in a signed int." This implies UCHAR_MAX <= INT_MAX. (By
    "values" I meant, "values of that type", not specific values in
    any given program).

    You paired that assertion with "`unsigned char` has _rank_
    lower than _int_", which is a fact guaranteed by the standard, which
    could easily give the impression that the comment about the range of
    values was either explicitly stated in the standard, or correctly
    inferrable from the statement about the ranks.


    ...
    ... Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    Calling them the usual arithmetic conversions rather than the integer
    promotions is being unnecessarily vague. Your description only covers
    the integer promotions, it doesn't cover any of the other usual
    arithmetic conversions.

    The integer promotions were the only relevant part in context.
    Perhaps it would have allayed your concerns to say, "part of"?

    Partially. However since you described the integer promotions, and the description you provided didn't fit any other part of the usual
    arithmetic conversions, and the part you described has it's own special
    name, and the integer promotions can occur without the usual arithmetic conversions, it still seems to me more appropriate to say that what you described were the integer promotions.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to jameskuyper@alumni.caltech.edu on Sat Nov 23 16:38:37 2024
    This is amazing. Yet another response that was both emailed to
    me _and_ posted to USENET.

    In article <vhsrvb$1oct2$4@dont-email.me>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    [snip]

    I'm not particularly interested in the technical conent of your
    article, which seems like it's trying to force a pedantic point
    of interpretation without regard to the current standard (which
    you admitted you didn't have a copy of) so I'm not going to
    respond to that. Now you've admitted that your issue is that
    someone _could_ misinterpret my statement. Ok, but this is comp.unix.programmer, not comp.lang.c.

    But I am interested in this repeated mistake of emailing and
    then posting.

    In another email sent to me, but curiously NOT posted to USENET,
    you said that you were "trying your best" and that if your best
    was not good enough, I should take steps on my end to discard
    your emails. No. It's not my responsibility to deal with your
    mistakes.

    I find this troubling. I really don't care how long you've been
    programming, whether or not APL was your third language 50 years
    ago (appeal to length of experience is, of course, a logical
    fallacy) or how long you used the prior version of your tool.
    Three and a half years is a long time to learn your way around a
    new user interface; excuses related to age and prior experience
    just don't cut it. As a former Drill Instructor once told me on
    Parris Island, "excuses are like assholes: everybody has one."

    It's the height of arrogance to assume that your words are so
    important that it's someone else's responsibility to account for
    the fact that you care to post them correctly. How about,
    instead of excuses and asking others to deal with your mistakes,
    you take some personal responsibility for using your tools
    competently? Sure, mistakes _do_ happen, but with you it seems
    to happen more often than not. If you're the one continually
    making the mistake, you ought to be owning that, not asking
    others to take steps to deal with your failures in this regard.

    Here are some ideas for you to consider:

    1. If you email someone something you intended to post, why not
    follow up? You could, for example, send a follow-up email
    ("oops, I accidentally sent that via email; sorry about that,
    I'll post it instead").
    2. Alternatively, you could acknowledge that in your USENET post
    with a disclaimer ("this was accidentally mailed to the
    respondee").
    3. If you email someone when you intended to post, you could
    exercise some discipline and simply not post, acknowledging
    the mistake while assuming responsibility for it. Perhaps
    that would encourage you to learn to use your tools
    correctly.
    4. If you cannot use your existing newsreader without making
    this mistake so frequently, perhaps consider switching to
    different software for your USENET consumption; maybe a
    program that more accurately tracks your desired user
    interface?
    5. Perhaps make yourself a checklist of things to check before
    responding; #1 on that might be, "am I sending this by email
    or posting? Is that really what I want to do?"

    I'm sure you can think of others.

    And while you clearly have the ability to post whatever you like
    to USENET, it is a choice to do so, and it sure seems you lack
    the discipline and discretion to do so competently. Perhaps
    consider stopping until you develop or refine the necessary
    skills to do so without such frequent error.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to mas@a4.home on Thu Nov 21 16:08:16 2024
    mas@a4.home writes:
    On 2024-11-20, Rainer Weikusat <rweikusat@talktalk.net> wrote:
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

    Assuming that p is a pointer to the current position in a string, e is a
    pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky'
    C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    size_t xlen = p-mystr;
    printf("digits: '%.*s'\n", (int) xlen, mystr);
    printf("mystr %p p %p e %p\n", mystr, p, e);
    printf("xlen %zd\n", xlen);

    return 0;
    }

    ./a.out
    digits: '12#45'
    mystr 0x7ffc92ac55ff p 0x7ffc92ac5604 e 0x7ffc92ac5608
    xlen 5


    Indeed. Rainer's while loop should be using isdigit(*p).

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From mas@a4.home@21:1/5 to Rainer Weikusat on Thu Nov 21 15:46:42 2024
    On 2024-11-20, Rainer Weikusat <rweikusat@talktalk.net> wrote:
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

    Assuming that p is a pointer to the current position in a string, e is a pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky'
    C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    size_t xlen = p-mystr;
    printf("digits: '%.*s'\n", (int) xlen, mystr);
    printf("mystr %p p %p e %p\n", mystr, p, e);
    printf("xlen %zd\n", xlen);

    return 0;
    }

    ./a.out
    digits: '12#45'
    mystr 0x7ffc92ac55ff p 0x7ffc92ac5604 e 0x7ffc92ac5608
    xlen 5

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to mas@a4.home on Thu Nov 21 17:19:51 2024
    mas@a4.home writes:
    On 2024-11-20, Rainer Weikusat <rweikusat@talktalk.net> wrote:
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

    Assuming that p is a pointer to the current position in a string, e is a
    pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky'
    C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead
    of trying to dress it up as some sort of mystery problem¹. Especially as
    I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    I should really have replied with

    [rw@doppelsaurus]/tmp#gcc a.c
    a.c: In function 'main':
    a.c:12:5: error: unknown type name 'size_t'
    12 | size_t xlen = p-mystr;
    | ^~~~~~
    a.c:1:1: note: 'size_t' is defined in header '<stddef.h>'; did you forget to '#include <stddef.h>'?
    +++ |+#include <stddef.h>
    1 | int
    a.c:13:5: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
    13 | printf("digits: '%.*s'\n", (int) xlen, mystr);
    | ^~~~~~
    a.c:13:5: warning: incompatible implicit declaration of built-in function 'printf'
    a.c:1:1: note: include '<stdio.h>' or provide a declaration of 'printf'
    +++ |+#include <stdio.h>
    1 | int

    as code which cannot even be compiled as no runtime behaviour.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to Scott Lurndal on Thu Nov 21 17:31:16 2024
    scott@slp53.sl.home (Scott Lurndal) writes:
    mas@a4.home writes:
    On 2024-11-20, Rainer Weikusat <rweikusat@talktalk.net> wrote:
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    size_t xlen = p-mystr;
    printf("digits: '%.*s'\n", (int) xlen, mystr);
    printf("mystr %p p %p e %p\n", mystr, p, e);
    printf("xlen %zd\n", xlen);

    return 0;
    }

    ./a.out
    digits: '12#45'
    mystr 0x7ffc92ac55ff p 0x7ffc92ac5604 e 0x7ffc92ac5608
    xlen 5


    Indeed. Rainer's while loop should be using isdigit(*p).

    I'm even using

    c &= ~0x20;
    if (c - 'A' < 6) return c - 'A' + 10;

    for detecting hex digits (type of c is unsigned). JSON demands UTF8
    which implies demanding ASCII (which means that the code point of a
    lowercase letter is that of the corresponding uppercase letter but with
    the sixth bit additionally set).

    Constructs like this are great insurance policy against people inventing spurious character encodings.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nicolas George@21:1/5 to All on Thu Nov 21 17:53:02 2024
    Scott Lurndal, dans le message <QVI%O.179460$Oi5e.162642@fx15.iad>, a
    Θcritá:
    Indeed. Rainer's while loop should be using isdigit(*p).

    No it should, that would be a mistake.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to rweikusat@talktalk.net on Fri Nov 22 14:14:00 2024
    In article <87o728qzbc.fsf@doppelsaurus.mobileactivedefense.com>,
    Rainer Weikusat <rweikusat@talktalk.net> wrote:
    mas@a4.home writes:
    On 2024-11-20, Rainer Weikusat <rweikusat@talktalk.net> wrote:
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead
    of trying to dress it up as some sort of mystery problem¹. Especially as
    I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    Well, no, not exactly. You said that it was important that the
    pointers point to unsigned quantities, but that wasn't the
    issue. The issue is that both operands of the `-` are promoted
    to _signed_ int before the subtraction (sec 6.3.1.8 of n220),
    and so the comparison is done against signed quantities. Your
    cast fixes this by forcing promotion of '0' and 10 to unsigned
    int before either operation.

    I do agree that the presentation was overly terse and came off
    poorly.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to Dan Cross on Fri Nov 22 15:27:43 2024
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <87o728qzbc.fsf@doppelsaurus.mobileactivedefense.com>,
    Rainer Weikusat <rweikusat@talktalk.net> wrote:
    mas@a4.home writes:
    On 2024-11-20, Rainer Weikusat <rweikusat@talktalk.net> wrote:
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead
    of trying to dress it up as some sort of mystery problem¹. Especially as >>I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    Well, no, not exactly. You said that it was important that the
    pointers point to unsigned quantities, but that wasn't the
    issue.

    The issue here is that I mistakenly assumed the (unsigned) in the code
    was a left-over from before the time when I had changed to pointers to
    unsigned char to fix a different issue. As C tries really hard to force
    signed arithmetic onto people despite this basically never makes any
    sense, the type of '0' is int *p gets promoted to int and hence, the
    result of the subtraction will also be an int and the '< 10' condition
    will be true for every codepoint numerically less than '9' which
    obviously won't work as intended.

    That's a mistake I made which would have warranted being pointed out and possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being
    broken.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to rweikusat@talktalk.net on Fri Nov 22 21:14:28 2024
    In article <87cyinthjk.fsf@doppelsaurus.mobileactivedefense.com>,
    Rainer Weikusat <rweikusat@talktalk.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:
    In article <87o728qzbc.fsf@doppelsaurus.mobileactivedefense.com>,
    Rainer Weikusat <rweikusat@talktalk.net> wrote:
    mas@a4.home writes:
    On 2024-11-20, Rainer Weikusat <rweikusat@talktalk.net> wrote:
    Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

    Assuming that p is a pointer to the current position in a string, e is a >>>>> pointer to the end of it (ie, point just past the last byte) and -
    that's important - both are pointers to unsigned quantities, the 'bulky' >>>>> C equivalent of [0-9]+ is

    while (p < e && *p - '0' < 10) ++p;

    That's not too bad. And it's really a hell lot faster than a
    general-purpose automaton programmed to recognize the same pattern
    (which might not matter most of the time, but sometimes, it does).

    int
    main(int argc, char **argv) {
    unsigned char *p, *e;
    unsigned char mystr[] = "12#45XY ";

    p = mystr;
    e = mystr + sizeof(mystr);
    while (p < e && *p - '0' < 10) ++p;

    The code I'm actually using is

    while (p < e && (unsigned)*p - '0' < 10)
    ++p;

    I just omitted that when posting this beause I mistakenly assumed that
    it probably wasn't needed, ;-). You could have pointed this out instead >>>of trying to dress it up as some sort of mystery problem¹. Especially as >>>I did mention that using unsigned arithmetic was necessary (should
    really be self-evident).

    Well, no, not exactly. You said that it was important that the
    pointers point to unsigned quantities, but that wasn't the
    issue.

    The issue here is that I mistakenly assumed the (unsigned) in the code
    was a left-over from before the time when I had changed to pointers to >unsigned char to fix a different issue.

    That you "changed to pointers to unsigned char" is completely
    irrelevant. That's not how C works: C will promote those
    `unsigned char` values to `signed int` before it does the
    subtraction. It does this because `unsigned char` has _rank_
    lower than _int_ and the entire range of values is expressible
    in a signed int. These are called, "the usual arithmetic
    conversions."

    I pointed you to the section of the standard that explains this.

    As C tries really hard to force
    signed arithmetic onto people despite this basically never makes any
    sense,

    It actually makes a lot of sense in a lot of contexts, and is
    usually what people actually want.

    You've shown that you, personally, don't have a great command of
    the language, so perhaps you shouldn't opine quite so
    forcefully.

    the type of '0' is int *p gets promoted to int and hence, the
    result of the subtraction will also be an int and the '< 10' condition
    will be true for every codepoint numerically less than '9' which
    obviously won't work as intended.

    Yes, that's how it works.

    That's a mistake I made which would have warranted being pointed out and >possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being
    broken.

    Perhaps if you stopped being so unbearably smug and pretentious
    in your judgements people would give you that grace. As it is,
    you come across as thin-skinned and terribly insecure, and your
    code shows a lack of competence.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rainer Weikusat@21:1/5 to Dan Cross on Fri Nov 22 22:09:44 2024
    cross@spitfire.i.gajendra.net (Dan Cross) writes:

    [...]

    That's a mistake I made which would have warranted being pointed out and >>possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being
    broken.

    Perhaps if you stopped being so unbearably smug and pretentious
    in your judgements people would give you that grace. As it is,
    you come across as thin-skinned and terribly insecure, and your
    code shows a lack of competence.

    I suggest you print this and pin to to a place you frequently look
    at. This may eventually lead you to a much more realistic assessment of yourself than you presently seem to have.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 17:26:59 2024
    On 11/22/24 14:05, Dan Cross wrote:
    In article <87h67zrtns.fsf@doppelsaurus.mobileactivedefense.com>,
    Rainer Weikusat <rweikusat@talktalk.net> wrote:...
    char **argv

    declares an array of pointers

    No, it declares a pointer to a pointer to char.

    Agreed.

    (as each pointer in C points to an array)

    That's absolutely not true. A pointer in C may refer to
    an array, or a scalar. Consider,

    char c;
    char *p = &c;
    char **pp = &p;

    Not actually relevant. For purposes of pointer arithmetic, a pointer to
    a single object is treated as if it pointed at the first element of a
    1-element array of that object's type.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 17:16:05 2024
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    irrelevant. That's not how C works: C will promote those
    `unsigned char` values to `signed int` before it does the
    subtraction. It does this because `unsigned char` has _rank_
    lower than _int_ ...

    True.

    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.


    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer promotions to each operand, but then a few other things happen as well.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to jameskuyper@alumni.caltech.edu on Fri Nov 22 22:34:52 2024
    In article <e47664d3-7f9b-4e67-aa73-b72c6cc0687a@alumni.caltech.edu>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    irrelevant. That's not how C works: C will promote those
    `unsigned char` values to `signed int` before it does the
    subtraction. It does this because `unsigned char` has _rank_
    lower than _int_ ...

    True.

    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.

    Yes, but in this context, that's obviously not the case as he
    posted the behavior he saw. I was merely explaining _why_ he
    saw that behavior, vis the standard.

    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer >promotions to each operand, but then a few other things happen as well.

    This is correct, but IMHO too far down into the weeds. Consider
    section 6.3.1.1 para 3, which notes that, "the integer
    promotions are applied only: ... 1. as part of the usual
    arithmetic conversions". Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to jameskuyper@alumni.caltech.edu on Fri Nov 22 23:06:18 2024
    In article <vhr0fj$1bq0o$1@dont-email.me>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    On 11/22/24 14:05, Dan Cross wrote:
    In article <87h67zrtns.fsf@doppelsaurus.mobileactivedefense.com>,
    Rainer Weikusat <rweikusat@talktalk.net> wrote:...
    char **argv

    declares an array of pointers

    No, it declares a pointer to a pointer to char.

    Agreed.

    (as each pointer in C points to an array)

    That's absolutely not true. A pointer in C may refer to
    an array, or a scalar. Consider,

    char c;
    char *p = &c;
    char **pp = &p;

    Not actually relevant. For purposes of pointer arithmetic, a pointer to
    a single object is treated as if it pointed at the first element of a >1-element array of that object's type.

    a) Please stop emailing me this stuff _and_ posting it here. I
    have asked you this in the past, and previously you'd said that
    it was because you switched news readers. That's fine, but that
    was a year ago or more.

    b) What you are referring to, from the section on Additive
    Operators (6.5.7 in n3220; 6.5.6 in C99) is in reference to
    pointer arithmetic; the statement that I was replying to was a
    general statement about pointers, independent of issues of
    pointer arithmetic. That is, it is not the case that, "each
    pointer in C points to an array". The above example, to which
    you replied, is a counterpoint to the general statement.

    So while what you are saying is true, it doesn't change the
    general point.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dan Cross@21:1/5 to rweikusat@talktalk.net on Fri Nov 22 23:10:09 2024
    In article <87cyimapjr.fsf@doppelsaurus.mobileactivedefense.com>,
    Rainer Weikusat <rweikusat@talktalk.net> wrote:
    cross@spitfire.i.gajendra.net (Dan Cross) writes:

    [...]

    That's a mistake I made which would have warranted being pointed out and >>>possibly explained instead of posting some broken code together with
    some output the broken code certainly never generated due it being >>>broken.

    Perhaps if you stopped being so unbearably smug and pretentious
    in your judgements people would give you that grace. As it is,
    you come across as thin-skinned and terribly insecure, and your
    code shows a lack of competence.

    I suggest you print this and pin to to a place you frequently look
    at. This may eventually lead you to a much more realistic assessment of >yourself than you presently seem to have.

    *shrug* If you don't want to be criticized, don't be wrong so
    often. Not my problem if you don't program well.

    - Dan C.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 22:49:46 2024
    On 11/22/24 18:06, Dan Cross wrote:
    ...
    a) Please stop emailing me this stuff _and_ posting it here. I
    have asked you this in the past, and previously you'd said that
    it was because you switched news readers. That's fine, but that
    was a year ago or more.

    Actually, Thunderbird made the change to how the "Reply" button works
    sometime around April 2021, and I'm still making the mistake of hitting
    it when I should hit "Followup". At my age it's hard to change a habit
    acquired over a couple of decades of posting to usenet; I'm doing my
    best to change it, and still failing frequently.

    I'm unlikely to deliberately send you e-mail, so you can easily avoid
    the aggravation of dealing with my accidental e-mails by simply
    kill-filing me.

    b) What you are referring to, from the section on Additive
    Operators (6.5.7 in n3220; 6.5.6 in C99) is in reference to
    pointer arithmetic; the statement that I was replying to was a
    general statement about pointers, independent of issues of
    pointer arithmetic. That is, it is not the case that, "each
    pointer in C points to an array". The above example, to which
    you replied, is a counterpoint to the general statement.

    I disagree. It is not independent, because there's nothing you can do
    with pointer itself that has either it's value or it's validity
    dependent upon whether that pointer points at a single object or the
    first element of an array of length one.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From James Kuyper@21:1/5 to Dan Cross on Fri Nov 22 23:44:49 2024
    On 11/22/24 17:34, Dan Cross wrote:
    In article <e47664d3-7f9b-4e67-aa73-b72c6cc0687a@alumni.caltech.edu>,
    James Kuyper <jameskuyper@alumni.caltech.edu> wrote:
    On 11/22/24 16:14, Dan Cross wrote:
    ...
    ... and the entire range of values is expressible
    in a signed int.

    Not necessarily. An implementation is allowed to have UCHAR_MAX >
    INT_MAX, in which case unsigned char promotes to unsigned int rather
    than int. I'm aware of systems where UCHAR_MAX > LONG_MAX was true:
    char, short, int, and long were all 32 bits.

    Yes, but in this context, that's obviously not the case as he
    posted the behavior he saw. I was merely explaining _why_ he
    saw that behavior, vis the standard.

    Your wording could easily give the false impression, to anyone who
    didn't already know better, that promotion of unsigned char to signed
    int is required by the standard, rather than it being dependent upon
    whether UCHAR_MAX > INT_MAX.

    ... These are called, "the usual arithmetic
    conversions."

    Actually, what you're talking about are the integer promotions. The
    first step of the usual arithmetic conversions is to apply the integer
    promotions to each operand, but then a few other things happen as well.

    This is correct, but IMHO too far down into the weeds. Consider
    section 6.3.1.1 para 3, which notes that, "the integer
    promotions are applied only: ... 1. as part of the usual
    arithmetic conversions".

    The latest draft of the standard that I have is n3096.pdf, dated
    2023-04-01. In that draft, that wording is not present in paragraph 3,
    but only footnote 63, which is referenced by paragraph 2. That footnote
    does not contain the "1." that is present in your citation. That
    footnote goes on to list the other contexts in which integer promotions
    can occur: ", to certain argument expressions, to the operands of the
    unary +, -, and ~ operators, and to both operands of the shift
    operators, as specified by their respective subclauses."
    Which version are you quoting? I have copies of most of the draft
    standards that are available for free, but none of the final versions of
    the standards, since those cost money.

    ... Since we're talking about operands to
    a binary operator, 6.3.1.8 applies. 6.3.1.8 is why converting
    one side to unsigned is sufficient to get an unsigned result.

    Calling them the usual arithmetic conversions rather than the integer promotions is being unnecessarily vague. Your description only covers
    the integer promotions, it doesn't cover any of the other usual
    arithmetic conversions.

    I'm going to try to come up with an analogy; the best one I could come
    up on the spur of the moment involves the US federal income tax form
    1040. It has a section called "Payments". The first four payments are
    all amounts that have been withheld from various income sources before
    you ever get a chance to spend the money. Most the other payments are
    things that you spent money on that you are entitled to take as a credit against your tax liability.
    What you've done is analogous to describing how withholding works, and
    even using the term "withheld", and then referring to what you've just described as "payments" rather than "amounts withheld", even though your description doesn't fit the tax credits, which are the other kinds of
    payments.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kalevi Kolttonen@21:1/5 to Dan Cross on Fri Dec 27 13:59:47 2024
    Dan Cross <cross@spitfire.i.gajendra.net> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Problem solved.

    br,
    KK

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Richard Kettlewell@21:1/5 to Kalevi Kolttonen on Fri Dec 27 14:56:52 2024
    kalevi@kolttonen.fi (Kalevi Kolttonen) writes:
    Dan Cross <cross@spitfire.i.gajendra.net> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Go on then?

    --
    https://www.greenend.org.uk/rjk/

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Lurndal@21:1/5 to John Ames on Fri Dec 27 17:39:30 2024
    John Ames <commodorejohn@gmail.com> writes:
    On Fri, 27 Dec 2024 13:59:47 -0000 (UTC)
    kalevi@kolttonen.fi (Kalevi Kolttonen) wrote:

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Have you, like, actually *checked* this assertion?


    Unlikely, to be sure.

    I personally still use xrn, which _is_ completely customizable
    via X11 resources.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Paul@21:1/5 to John Ames on Fri Dec 27 13:15:47 2024
    On Fri, 12/27/2024 10:43 AM, John Ames wrote:
    On Fri, 27 Dec 2024 13:59:47 -0000 (UTC)
    kalevi@kolttonen.fi (Kalevi Kolttonen) wrote:

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Have you, like, actually *checked* this assertion?


    The Followup button on the copy of Thunderbird I'm typing on,
    is actually a menu. It's not just a button. This is why
    this nonsense happens. It's a graphical trap, a hole in the
    back yard for you to fall into while walking past.

    Followup V <=== Normally, you are hitting this as if it is a button
    Followup
    Reply All
    Reply <=== If you "smear" or "wipe" the Followup V at
    the top, and you're not paying attention, THAT
    is when you hit the Reply.

    Paul

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kaz Kylheku@21:1/5 to Kalevi Kolttonen on Fri Dec 27 19:14:42 2024
    On 2024-12-27, Kalevi Kolttonen <kalevi@kolttonen.fi> wrote:
    Dan Cross <cross@spitfire.i.gajendra.net> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    Thunderbird is yet another mail program whose developers think that
    Usenet is just like e-mail, and can be bolted onto a mail client.

    Just use a fscking newsreader.

    I've never sent an e-mail by accident in slrn.

    --
    TXR Programming Language: http://nongnu.org/txr
    Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
    Mastodon: @Kazinator@mstdn.ca

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kalevi Kolttonen@21:1/5 to Richard Kettlewell on Fri Dec 27 23:22:53 2024
    Richard Kettlewell <invalid@invalid.invalid> wrote:
    kalevi@kolttonen.fi (Kalevi Kolttonen) writes:
    Dan Cross <cross@spitfire.i.gajendra.net> wrote:
    Here are some ideas for you to consider:

    Sorry for replying to an old post. I do not even
    remember who it is that keeps sending emails when
    he intends to send follow-ups to Usenet. However,
    I have a good solution.

    Thunderbird is open source, maybe even free software.

    I am sure it is extremely easy to either remove the
    "reply" button or to bind it to the "followup" function.

    Go on then?

    Working on it.

    br,
    KK

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to Kaz Kylheku on Sat Dec 28 00:38:23 2024
    On 27.12.2024 20:14, Kaz Kylheku wrote:
    [ Thunderbird issues ]

    Thunderbird is yet another mail program whose developers think that
    Usenet is just like e-mail, and can be bolted onto a mail client.

    I may be using Thunderbird now for two decades or more, don't recall.

    That it's a combined client (for email, news, chat, and some more)
    with a common [basic] GUI is not the problem. Thunderbird has a lot
    of (real, unnecessary) problems that the product managers obviously
    failed to understand or see. (I won't even start here to enumerate
    them.) And it makes things not easier if versions differ completely
    in what can be done to try to fix some of these severe shortcomings.

    The state of that product is IMO beyond all hope; it would require a
    complete redesign to make its interface follow some basic ergonomic
    principles (including all the possible configuration capabilities).
    (Mileages may vary.)

    I've fixed the Reply-button issue in the two (completely different)
    versions I'm mostly using - but don't ask me how I did that! - and
    I'm meanwhile thus fine with Thunderbird's newsreader component in
    a single mail/news application - as long as I don't follow my urge
    to fix anything else in this product.

    Janis

    [...]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)