[squeak-dev] Windows, stdin, stdout

Alistair Grant akgrant0710 at gmail.com
Sun Apr 8 12:23:47 UTC 2018


Hi Eliot,

On 8 April 2018 at 03:02, Eliot Miranda <eliot.miranda at gmail.com> wrote:
> Hi Alistair,
>
> On Sat, Apr 7, 2018 at 12:32 PM, Alistair Grant <akgrant0710 at gmail.com>
> wrote:
>>
>> On 7 April 2018 at 20:29, K K Subbu <kksubbu.ml at gmail.com> wrote:
>> > On Saturday 07 April 2018 08:14 PM, Eliot Miranda wrote:
>> >>
>> >> $ cd image
>> >> $ ./buildspurtrunkreaderimage.sh
>> >> $ myvm spurreader.image
>> >> squeak> 3 + 4!
>> >> 7
>> >> squeak> Smalltalk quit!
>> >
>> >
>> > Nice. This can become a good smoke test at the end of the build*.sh:
>> >
>> > /bin/echo -e '14*3!\nSmalltalk quit!' | $VM spurreader.image
>> >
>> > Now there's the answer to life, the universe and everything ;-)
>> >
>> > Regards .. Subbu
>>
>>
>> Interesting idea...  But even the old VM doesn't provide the answer.
>
>
> It will do, but that \n must be a ^M.  So if one types '3+4! followed by
> ctrl-v carriage return, followed by Smalltalk quit!' then echo will echo a
> carriage return.  But since the REPL is actually reading chunk format (hence
> the !'s) one doesn't need the carriage return at all and one should be able
> to say
>
> echo '3+4!Smalltalk quit!' | $VM spurreader.image
>
> and see "squeak> 7
> squeak> " printed to stdout
>
>> Piped input is working in general with my new test VM.  I'll have to
>> figure out why the reader image doesn't handle it.

In this case:

- PositionableStream>>nextChunkNoTag calls #peek
- #peek tries to save the state, which tries to read the stream position.
- And getting the stream position doesn't seem to be supported for piped input.
- So an Error is raised.
- But because the input processing is done outside the exception
handler, there's nothing to catch the error.
- And the system becomes unresponsive (when run headless).

I want to get #primitiveFileAtEnd working first - I've written the
code, I just need to run it through the usual test suites.

Adding a primitivePeek would be trivial and should also work with
piped input.  I might have a look at this after I'm sure
#primitiveFileAtEnd works properly.

Cheers,
Alistair





> I think the details are in the nextChunkNoTag method in the
> CogTools-Listener package.  I was trying to do the simplest thing that could
> possibly work here, not produce a usable listener.  The ! requirement is
> absurd for general use but acceptable for someone simply wanting to exercise
> (potentially non-blocking) reading from stdin.
>
>
> _,,,^..^,,,_
> best, Eliot
>
>
>


More information about the Squeak-dev mailing list