After some digging - in the Algol68C compiler we used the names setmp and longjmp for the code
generation routines to implement non local goto. So as you say they were not part of the Algol68
language. Steve
From: Bakul Shah<bakul(a)iitbombay.org>
Subject: [TUHS] Re: GOTO etc
To:srb@acm.org
Perhaps you’re talking about non-local GOTOs in Algol68, where you can jump from a nested procedure to a label in a lexically enclosing procedure. Pascal has this too. C has no nested procedures but its setjmp/longjmp is much more powerful (& dangerous). Though both can be used to the top level of a REPL or to jump to a known place after an error.
> On Mar 12, 2023, at 11:24 AM, Steve<srb(a)unixsh.com> wrote:
>
> Dennis added setjmp() and longjmp() so the shell could handle errors in a reasonable way.
> There are two places where setjmp was used in the original shell (7th edition) code as I recall. Both at the top level
> in main.c.
>
> The idea came from Algol68 but I do not know where it was originally invented. longjmp() was used in the "exitsh"
> function that got called on the exit command, default trap routine and a fault with no trap set.
>
> It was also used when executing a subshell to avoid a fork and exec. In this case the setjmp() was at top level
> in the initial sh setup.
>
> Hope this makes sense. But these were two different uses. One for error recovery and one to reset the execution environment
> back to initial state.
>
> Steve
I must admit I don't see much point in this conversation, even as
humour, since the humour is easily turned mean-spirited or self-
aggrandizing.
What difference does it make if Ken runs MacOS systems or Raspberry
Pis or just spends his time teaching flying instructors? When he
started out in computing, writing your own everything was pretty
much the only way to get things that worked. Now it's a huge amount
of work, because modern storage controllers and network devices and
even CPUs and memory subsystems are so much more complicated, and to
talk to anything else requires supporting complicated network protocols
and interpreting multiple encodings and languages and data formats
and even running stupid little flashy programs. (How much more
complicated is a web browser these days than an entire operating
system used to be? How much simpler could you make it and still
render most of what's on the web these days? And how much work
would all that be, and why bother?)
When I started out in computing, making a computer run reliably and
well still required understanding the hardware and OS software in
some detail, and I found that interesting and pursued that as a
vocation. I spent much of the 1980s doing that for pay, including
six wonderful years in (not-so-wonderful to me) New Jersey working
with smart people like Ken.
Nowadays I get paid for helping to keep a large computing environment
running. The point is not to show off my OS-design chops, but to
make things work for a particular user community that needs particular
things. Things that are far more complicated than I'm up to designing
and writing and supporting, and most of them involving areas of
computing in which I don't have a lot of interest. There are plenty
of problems that interest me in making it all work, and in designing
system setups and writing tools to help us make it all work better.
I don't see this as a step down from bare-metal OS work, much as I
used to enjoy that, and much as I might enjoy it now should I get back
into it (though it's also possible that modern hardware is such an
undisciplined mess that I'd just find it frustrating).
I used to keep hacking on the old New Jersey Unix system as a hobby.
After a while it wasn't interesting enough compared to other things
I could do with my time, but I kept it going for a while because I'd
made some of my home computing infrastructure depend on it. Eventually
I mended that. Maybe I'll get back to it some day, maybe I won't.
I still build my own tools from time to time, both for paid work and
for personal use. Sometimes I do that because I dislike the existing
tools I can find for the same job, sometimes just because it's a chance
to learn more about some network protocol or file format or whatnot.
But it's no more a sign of virtue to roll my own stuff than it is to
insist on using only stuff someone else wrote (or that was supplied
by a particular company or by someone who subscribes to a particular
political philosophy or whatnot). In the end it is, or ought to be,
just about getting the damn job done reasonably well within the
current constraints.
Getting the job done within current constraints was, after all,
pretty much what Unix was originally made for.
Norman Wilson
Toronto ON
Neither proud nor sad no longer to be using a
MicroVAX running 10/e Unix as a home firewall
Marc Donner:
Having taken my daily troll pill, I am forced to ask, where is
'Reply-to-the-right-folks'?
=====
Don't they all use VMS, to own the Eunuchs?
Norman Wilson
Toronto ON
> From: KenUnix
> This is what is in conf.c:
> ...
> Does this help in determining major/minor number for lp?
Do you see a line in 'cdevsw' for the lpt? (I can't see one.)
While we're talking about SysV, maybe it's time to add the VAX version (and
maybe the 3B2 one too) to the Unix Tree at TUHS, to make it easy to look at? I
know there was at one point a good reson to be hesitant aout so doing, but the
VAX version is now obsolete, and it is available through archive.org:
https://archive.org/details/ATTUNIXSystemVRelease4Version2
just not in an easy to peruse form.
Noel
>Date: Wed, 15 Mar 2023 16:56:45 -0700
>From:
>Subject: [TUHS] Re: OSF/1.0 Sources
>To: "Tautological Eunuch Horticultural Scythians" <tuhs(a)tuhs.org
>Message-ID: <b3aa03ba-6c51-4f81-9ff4-21f72a9fe94d(a)app.fastmail.com>
>Content-Type: text/plain;charset=utf-8
>
>On Wed, Mar 15, 2023, at 14:03, Warren Toomey via TUHS wrote:
>> I'm still worried about my legal butt :-(
>
>Speaking of, there’s also the OSF/1.0 source from the same uploader:
> https://archive.org/details/SapphireDensetsu_gmail_OSF1
>--
>~j
Being somewhat of a collector I also have a Osf1-2.0-Src Tar.zip :-)
take care,
uncle rubl
--
The more I learn the better I understand I know nothing.
Thinking a bit more about terminal multiplexing was a major use case for early X, I recalled using Linux virtual consoles in the late 90’s for this purpose.
According to Wikipedia, virtual consoles originated with Xenix and before that with concurrent CP/M.
Perusing the documentation of those on Bitsavers, I can see that virtual consoles have a prominent mention in the manual for concurrent CP/M (1983), but not those of its forerunners MP/M II and MP/M (1979). I cannot find a mention of virtual consoles in Xenix documentation as late as 1988.
No such thing as a virtual (as distinct from pseudo) tty on 16-bit Unix or early 32-bit, as far as I know; one could argue it does not make much sense with physical terminals. Wikipedia says no such thing existed on SunOS either.
I think virtual consoles where present in Linux from a very early point.
So, as far as I can tell virtual consoles were invented for concurrent CP/M around 1983, made their way to Xenix in the late 80’s and became part of Linux in the early 90’s.
Have I missed other prior art?
> From: Bakul Shah
> In hindsight Algol68 may have been the last committee designed language
> that was good.
I do not grant your basic assertion. Hoare had it right: "ALGOL 60 [was] a
language so far ahead of its time that it was not only an improvement on its
predecessors but also on nearly all its successors." That would definitely
include Algol68, which was a classic committee-designed nightmare.
Noel
Dennis added setjmp() and longjmp() so the shell could handle errors in a reasonable way.
There are two places where setjmp was used in the original shell (7th edition) code as I recall.
Both at the top level
in main.c.
The idea came from Algol68 but I do not know where it was originally invented. longjmp() was used
in the "exitsh"
function that got called on the exit command, default trap routine and a fault with no trap set.
It was also used when executing a subshell to avoid a fork and exec. In this case the setjmp() was
at top level
in the initial sh setup.
Hope this makes sense. But these were two different uses. One for error recovery and one to reset
the execution environment
back to initial state.
Steve
> From: Larry McVoy
> If there are no commercial users of that source base, you have a chance
When was the last VAX sold? Maybe the VAX version people would be willing to
let go of.
Noel
> From: Ken Unix
> I have mknod but need the (c,b) major/minor numbers for /dev/lp
It looks like SysV still has conf.c; you're looking for 'cdevsw'.
Noel