| Deutsch English Français Italiano |
|
<2025Jun8.100714@mips.complang.tuwien.ac.at> View for Bookmarking (what is this?) Look up another Usenet article |
Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: anton@mips.complang.tuwien.ac.at (Anton Ertl)
Newsgroups: comp.lang.forth
Subject: Re: THROW codes and ambiguous conditions
Date: Sun, 08 Jun 2025 08:07:14 GMT
Organization: Institut fuer Computersprachen, Technische Universitaet Wien
Lines: 39
Message-ID: <2025Jun8.100714@mips.complang.tuwien.ac.at>
References: <f827ba6fc80427f3ce0317835bd8ae47a4445e07@i2pn2.org> <2025Jun7.114356@mips.complang.tuwien.ac.at> <8a96d5a50e33757a15ba472d5fa3ae9a171fcff2@i2pn2.org> <87plff4938.fsf@nightsong.com> <nnd$1c16483a$123400ed@7c48093f279e409f> <87ldq33svl.fsf@nightsong.com>
Injection-Date: Sun, 08 Jun 2025 10:40:02 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3674094924e29eae558a42a1233a1d7a";
logging-data="3942784"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/7Nd9PmwuTDNG2CPyNLroB"
Cancel-Lock: sha1:mDKWnW3juHrmKkLbgk6o1AbcZy8=
X-newsreader: xrn 10.11
Paul Rubin <no.email@nospam.invalid> writes:
>I wonder if there's a standard or well known way to capture the output
>of . and related words, like redirecting the input stream.
In some systems TYPE and EMIT are a deferred words. So I can do
: no-output-execute ( ... xt -- ... )
action-of type action-of emit 2>r
['] 2drop is type ['] drop is emit catch
2r> is emit is type
throw ;
.." |" 5 ' . no-output-execute ." |"
This works in Gforth and in VFX64.
SwiftForth has a system (personalities) for vectoring a number of I/O
words, including TYPE. So the code above does not work in SwiftForth,
but you can define a personality to achieve the same thing. LOCATE
SIMPLE-BUFFERING in SwiftForth to see how a personality is defined.
Gforth actually gives you both worlds: TYPE is a defer-flavoured field
in a method table accessed through a user variable. So you can define
such a table (with OUTPUT:) and use it for changing the output, or you
can do the quick-and-dirty approach of revectoring the individual
words shown above.
However, if you actually want to have the result in a string, you also
need to manage a buffer such that consecutive calls to TYPE and EMIT
are concatenated. In Gforth, >STRING-EXECUTE does all that for you.
You only have to FREE the buffer once you are done with it.
- anton
--
M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
New standard: https://forth-standard.org/
EuroForth 2023 proceedings: http://www.euroforth.org/ef23/papers/
EuroForth 2024 proceedings: http://www.euroforth.org/ef24/papers/