Hi Sven, I primarily wanted it to communicate to Pharo Kernel without network support. But the telnet REPL will be very useful in many cases. It would be cool to publish it somewhere (even in the incomplete state). Cheers, -- Pavel On Tue, Nov 13, 2012 at 11:07 AM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Hi Pavel,
Last week I was playing with a REPL exported over a local socket, I am reading input until an empty line, like this:
NeoREPLServer new start.
$ telnet localhost 13731
Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Welcome to Pharo2.0a of '18 April 2012' update 20372 Type a multi-line Smalltalk expression and an empty line to evaluate it Type !quit to exit, !help for information about other special commands
42 factorial
1405006117752879898543142606244511569936384000000000
'Pavel' reverse
'levaP'
3 timesRepeat: [ Smalltalk garbageCollect ]
3
ZTimestampFormat verbose german; format: ZTimestamp now
'Dienstag, 13-November-2012 10:06:13 AM (+00:00)'
!quit
Bye! Connection closed by foreign host.
If you want I can share the code, it is very small (but incomplete).
Sven
-- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill
On 13 Nov 2012, at 10:01, Pavel Krivanek <pavel.krivanek@gmail.com> wrote:
Hi,
is there a way how to use nonblocking input from stdin? I have a simple REPL but the stdin is blocking the VM.
| stdin input lineEnd |
stdin := FileStream stdin ifNil: [ ^ self ]. stdin atEnd ifTrue: [ ^ self ].
[ lineEnd := false. FileStream stdout nextPutAll: '> '. input := String streamContents: [:s| [ stdin atEnd or: [lineEnd] ] whileFalse: [ stdin next ifNotNilDo: [:char| char = Character lf ifTrue: [lineEnd := true]. s nextPut: char ]]].
[ FileStream stdout print: (Compiler evaluate: input); lf ] ifError: [:error | FileStream stdout nextPutAll: 'ERROR: ', error asString; lf].
Processor yield. ] repeat
Cheers, -- Pavel