From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HTML_MESSAGE,MAILING_LIST_MULTI,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 4835 invoked from network); 19 Mar 2023 15:41:21 -0000 Received: from minnie.tuhs.org (50.116.15.146) by inbox.vuxu.org with ESMTPUTF8; 19 Mar 2023 15:41:21 -0000 Received: from minnie.tuhs.org (localhost [IPv6:::1]) by minnie.tuhs.org (Postfix) with ESMTP id D78B041312; Mon, 20 Mar 2023 01:41:15 +1000 (AEST) Received: from smtprelay.b.hostedemail.com (smtprelay0103.b.hostedemail.com [64.98.42.103]) by minnie.tuhs.org (Postfix) with ESMTPS id 5E1DE4130D for ; Mon, 20 Mar 2023 01:41:12 +1000 (AEST) Received: from omf04.b.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay03.b.hostedemail.com (Postfix) with ESMTP id 3A4888DF01D2 for ; Sun, 19 Mar 2023 15:41:11 +0000 (UTC) Received: from [HIDDEN] (Authenticated sender: srb@unixsh.com) by omf04.b.hostedemail.com (Postfix) with ESMTPA id E3B121004306C for ; Sun, 19 Mar 2023 15:41:10 +0000 (UTC) Content-Type: multipart/alternative; boundary="------------hcVugz0j2VN6or6VUq1zmhsU" Message-ID: Date: Sun, 19 Mar 2023 11:41:10 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 To: tuhs@tuhs.org Content-Language: en-US From: Steve X-Stat-Signature: cujoepn86rqao69e88z679h6yndy1wrm X-Rspamd-Server: rspamout02 X-Rspamd-Queue-Id: E3B121004306C X-Session-Marker: 73726240756E697873682E636F6D X-Session-ID: U2FsdGVkX1+Ur+x96qlqNB9K8MaE6KSlad/m4ar5BEw= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unixsh.com; h=content-type:message-id:date:mime-version:to:reply-to:from:subject; s=key1; bh=PtTbTJw2ohX5YRhbMBjW6FwfDhh5/oRMv8DC9ZCDQMQ=; b=JvV3zIJTBtxFOrrQIVT1GU0u2N9pTXMRmpIgeY1oA34wVD5mkJ5OFfhJX8slbtNvpbmignHbcM5V7iJE/GiVt+p7Xrxr1QY9bh3OEdIEo4KArk5uf2i39ck/yeXD5JIsAqwUX8EoJu4xUD8etA3E3r6gYCB9hU9zn6SYyW+fo6k= X-HE-Tag: 1679240470-605324 X-HE-Meta: U2FsdGVkX18szw/UBi0Ii3qxm9yXeEFo1PGDXqUxkMV5z9GOUBZC40qFW+Jq8MS2K8Q1eYtDUKzvvtDfjVVqRg== Message-ID-Hash: TFKRVGNZJ4CYWMA366IGENIFPQHCMLMD X-Message-ID-Hash: TFKRVGNZJ4CYWMA366IGENIFPQHCMLMD X-MailFrom: srb@unixsh.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.6b1 Precedence: list Reply-To: srb@acm.org Subject: [TUHS] GOTO etc. List-Id: The Unix Heritage Society mailing list Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: This is a multi-part message in MIME format. --------------hcVugz0j2VN6or6VUq1zmhsU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 QWZ0ZXIgc29tZSBkaWdnaW5nIC0gaW4gdGhlIEFsZ29sNjhDIGNvbXBpbGVyIHdlIHVzZWQg dGhlIG5hbWVzIHNldG1wIGFuZCBsb25nam1wIGZvciB0aGUgY29kZSANCmdlbmVyYXRpb24g cm91dGluZXMgdG8gaW1wbGVtZW50IG5vbiBsb2NhbCBnb3RvLsKgIFNvIGFzIHlvdSBzYXkg dGhleSB3ZXJlIG5vdCBwYXJ0IG9mIHRoZSBBbGdvbDY4IA0KbGFuZ3VhZ2UuIFN0ZXZlDQpG cm9tOiBCYWt1bCBTaGFoPGJha3VsQGlpdGJvbWJheS5vcmc+DQpTdWJqZWN0OiBbVFVIU10g UmU6IEdPVE8gZXRjDQpUbzpzcmJAYWNtLm9yZw0KDQpQZXJoYXBzIHlvdeKAmXJlIHRhbGtp bmcgYWJvdXQgbm9uLWxvY2FsIEdPVE9zIGluIEFsZ29sNjgsIHdoZXJlIHlvdSBjYW4ganVt cCBmcm9tIGEgbmVzdGVkIHByb2NlZHVyZSB0byBhIGxhYmVsIGluIGEgbGV4aWNhbGx5IGVu Y2xvc2luZyBwcm9jZWR1cmUuIFBhc2NhbCBoYXMgdGhpcyB0b28uIEMgaGFzIG5vIG5lc3Rl ZCBwcm9jZWR1cmVzIGJ1dCBpdHMgc2V0am1wL2xvbmdqbXAgaXMgbXVjaCBtb3JlIHBvd2Vy ZnVsICgmIGRhbmdlcm91cykuIFRob3VnaCBib3RoIGNhbiBiZSB1c2VkIHRvIHRoZSB0b3Ag bGV2ZWwgb2YgYSBSRVBMIG9yIHRvIGp1bXAgdG8gYSBrbm93biBwbGFjZSBhZnRlciBhbiBl cnJvci4NCg0KPiBPbiBNYXIgMTIsIDIwMjMsIGF0IDExOjI0IEFNLCBTdGV2ZTxzcmJAdW5p eHNoLmNvbT4gIHdyb3RlOg0KPg0KPiDvu78gRGVubmlzIGFkZGVkIHNldGptcCgpIGFuZCBs b25nam1wKCkgc28gdGhlIHNoZWxsIGNvdWxkIGhhbmRsZSBlcnJvcnMgaW4gYSByZWFzb25h YmxlIHdheS4NCj4gVGhlcmUgYXJlIHR3byBwbGFjZXMgd2hlcmUgc2V0am1wIHdhcyB1c2Vk IGluIHRoZSBvcmlnaW5hbCBzaGVsbCAoN3RoIGVkaXRpb24pIGNvZGUgYXMgSSByZWNhbGwu ICBCb3RoIGF0IHRoZSB0b3AgbGV2ZWwNCj4gaW4gbWFpbi5jLg0KPg0KPiBUaGUgaWRlYSBj YW1lIGZyb20gQWxnb2w2OCBidXQgSSBkbyBub3Qga25vdyB3aGVyZSBpdCB3YXMgb3JpZ2lu YWxseSBpbnZlbnRlZC4gIGxvbmdqbXAoKSB3YXMgdXNlZCBpbiB0aGUgImV4aXRzaCINCj4g ZnVuY3Rpb24gdGhhdCBnb3QgY2FsbGVkIG9uIHRoZSBleGl0IGNvbW1hbmQsIGRlZmF1bHQg dHJhcCByb3V0aW5lIGFuZCBhIGZhdWx0IHdpdGggbm8gdHJhcCBzZXQuDQo+DQo+IEl0IHdh cyBhbHNvIHVzZWQgd2hlbiBleGVjdXRpbmcgYSBzdWJzaGVsbCB0byBhdm9pZCBhIGZvcmsg YW5kIGV4ZWMuICBJbiB0aGlzIGNhc2UgdGhlIHNldGptcCgpIHdhcyBhdCB0b3AgbGV2ZWwN Cj4gaW4gdGhlIGluaXRpYWwgc2ggc2V0dXAuDQo+DQo+IEhvcGUgdGhpcyBtYWtlcyBzZW5z ZS4gIEJ1dCB0aGVzZSB3ZXJlIHR3byBkaWZmZXJlbnQgdXNlcy4gIE9uZSBmb3IgZXJyb3Ig cmVjb3ZlcnkgYW5kIG9uZSB0byByZXNldCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50DQo+ IGJhY2sgdG8gaW5pdGlhbCBzdGF0ZS4NCj4NCj4gU3RldmUNCg== --------------hcVugz0j2VN6or6VUq1zmhsU Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
After some digging - in the Algol68C compiler we used the n=
ames setmp and longjmp for the code generation routines to implement non =
local goto.=C2=A0 So
as you say they were not part of the Algol68 language. =20

Steve

From: Bakul Shah <bakul@iitbombay.org>
Subject: [TUHS] Re: GOTO etc
To: srb@acm.org

Perhaps you=E2=80=99re talking about non-local GOTOs in Algol68, where yo=
u can jump from a nested procedure to a label in a lexically enclosing pr=
ocedure. Pascal has this too. C has no nested procedures but its setjmp/l=
ongjmp is much more powerful (& dangerous). Though both can be used t=
o 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@unixsh.com> wrote:

=EF=BB=BF Dennis added setjmp() and longjmp() so the shell could handle e=
rrors in a reasonable way.
There are two places where setjmp was used in the original shell (7th edi=
tion) 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 inve=
nted.  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
--------------hcVugz0j2VN6or6VUq1zmhsU--