From f2810880271f5d40b37bac137a5fd08dc3c0139c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Nov 2004 00:45:15 +0000 Subject: [PATCH] missing jedit-wire.factor in CVS --- library/platform/jvm/boot-sumo.factor | 1 - library/platform/native/boot-stage2.factor | 1 - library/tools/inferior.factor | 154 --------------------- library/tools/jedit-wire.factor | 103 ++++++++++++++ 4 files changed, 103 insertions(+), 156 deletions(-) delete mode 100644 library/tools/inferior.factor create mode 100644 library/tools/jedit-wire.factor diff --git a/library/platform/jvm/boot-sumo.factor b/library/platform/jvm/boot-sumo.factor index cff250600f..1c9616ab4a 100644 --- a/library/platform/jvm/boot-sumo.factor +++ b/library/platform/jvm/boot-sumo.factor @@ -98,7 +98,6 @@ USE: parser "/library/test/test.factor" run-resource ! test "/library/ansi.factor" run-resource ! ansi "/library/tools/telnetd.factor" run-resource ! telnetd -"/library/tools/inferior.factor" run-resource ! inferior !!! Java -> native VM image cross-compiler. "/library/tools/image.factor" run-resource ! cross-compiler diff --git a/library/platform/native/boot-stage2.factor b/library/platform/native/boot-stage2.factor index 2d94379323..1bc3637835 100644 --- a/library/platform/native/boot-stage2.factor +++ b/library/platform/native/boot-stage2.factor @@ -109,7 +109,6 @@ USE: stdio "/library/test/test.factor" "/library/ansi.factor" "/library/tools/telnetd.factor" - "/library/tools/inferior.factor" "/library/tools/jedit-wire.factor" "/library/platform/native/profiler.factor" "/library/platform/native/heap-stats.factor" diff --git a/library/tools/inferior.factor b/library/tools/inferior.factor deleted file mode 100644 index b95c5e12d7..0000000000 --- a/library/tools/inferior.factor +++ /dev/null @@ -1,154 +0,0 @@ -! :folding=indent:collapseFolds=1: - -! $Id$ -! -! Copyright (C) 2004 Slava Pestov. -! -! Redistribution and use in source and binary forms, with or without -! modification, are permitted provided that the following conditions are met: -! -! 1. Redistributions of source code must retain the above copyright notice, -! this list of conditions and the following disclaimer. -! -! 2. Redistributions in binary form must reproduce the above copyright notice, -! this list of conditions and the following disclaimer in the documentation -! and/or other materials provided with the distribution. -! -! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, -! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -IN: inferior -USE: combinators -USE: errors -USE: listener -USE: kernel -USE: lists -USE: logic -USE: namespaces -USE: parser -USE: prettyprint -USE: stack -USE: stdio -USE: streams -USE: strings -USE: presentation - -! The purpose of this library is to allow CFactor to be embedded -! inside the Java Factor listener in jEdit. -! -! Eg, in Java Factor, you could evaluate this after fixing the -! paths accordingly: -! -! : (inf -! [ -! "/home/slava/Factor/f" -! "/home/slava/Factor/factor.image" -! "-no-ansi" -! ] pipe inferior-client ; -! -! Details: -! -! Packets have the following form: -! 1 byte -- type. CHAR: w: write, CHAR: r: read -! 4 bytes -- for write only -- length of write request -! remaining -- unparsed write request -- string then style - -! After a read line request, the server reads a response from -! the client: -! 4 bytes -- length. -1 means EOF -! remaining -- input - -! All multi-byte integers are big endian signed. - -: inferior-server-read ( -- str ) - CHAR: r write flush read-big-endian-32 read# ; - -: inferior-server-write-attr ( str style -- ) - CHAR: w write - [ swap . . ] with-string - dup str-length write-big-endian-32 - write ; - -: inferior-server-flush ( -- ) - CHAR: f write flush ; - -: ( stream -- stream ) - [ - ( -- str ) - [ inferior-server-read ] "freadln" set - ( str -- ) - [ - default-style inferior-server-write-attr - ] "fwrite" set - ( str style -- ) - [ inferior-server-write-attr ] "fwrite-attr" set - ( string -- ) - [ - "\n" cat2 default-style inferior-server-write-attr - ] "fprint" set - ( -- ) - [ inferior-server-flush ] "fflush" set - ] extend ; - -: inferior-client-read ( stream -- ? ) - freadln dup [ - dup str-length write-big-endian-32 write flush t - ] [ - drop 0 write-big-endian-32 flush f - ] ifte ; - -: inferior-client-write ( stream -- ? ) - read-big-endian-32 read# dup [ - parse dup [ - uncons car rot fwrite-attr t - ] [ - 2drop f - ] ifte - ] when ; - -: inferior-client-packet ( stream -- ? ) - #! Read from an inferior client socket and print attributed - #! strings that were read to standard output. - read1 [ - [ not ] [ 2drop f ( EOF ) ] - [ CHAR: r = ] [ drop inferior-client-read ] - [ CHAR: w = ] [ drop inferior-client-write ] - [ CHAR: f = ] [ drop fflush t ] - [ drop t ] [ "Invalid packet type: " swap cat2 throw ] - ] cond ; - -: inferior-client-loop ( stream -- ) - #! The stream is the stream to write to. - dup inferior-client-packet [ - inferior-client-loop - ] [ - drop - ] ifte ; - -: inferior-server ( -- ) - #! Execute this in the inferior Factor. - terpri - "inferior-ack" print flush - "stdio" get "stdio" set ; - -: inferior-read-ack ( -- ) - read [ - "inferior-ack" = [ inferior-read-ack ] unless - ] when* ; - -: inferior-client ( from -- ) - #! Execute this in the superior Factor, with a socket to - #! the inferior Factor as a parameter. - "stdio" get swap [ - "USE: inferior inferior-server" print flush - inferior-read-ack - inferior-client-loop - ] with-stream ; diff --git a/library/tools/jedit-wire.factor b/library/tools/jedit-wire.factor new file mode 100644 index 0000000000..7c2cd7af9e --- /dev/null +++ b/library/tools/jedit-wire.factor @@ -0,0 +1,103 @@ +! :folding=indent:collapseFolds=1: + +! $Id$ +! +! Copyright (C) 2004 Slava Pestov. +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions are met: +! +! 1. Redistributions of source code must retain the above copyright notice, +! this list of conditions and the following disclaimer. +! +! 2. Redistributions in binary form must reproduce the above copyright notice, +! this list of conditions and the following disclaimer in the documentation +! and/or other materials provided with the distribution. +! +! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +IN: jedit +USE: stdio +USE: stack +USE: strings +USE: combinators +USE: parser +USE: namespaces +USE: presentation +USE: streams +USE: prettyprint + +! Wire protocol for jEdit to evaluate Factor code. +! Packets are of the form: +! +! 4 bytes length +! bytes data +! +! jEdit sends a packet with code to eval, it receives the output +! captured with with-string. +: write-packet ( string -- ) + dup str-length write-big-endian-32 write flush ; + +: read-packet ( -- string ) + read-big-endian-32 read# ; + +: wire-server ( -- ) + #! Repeatedly read jEdit requests and execute them. Return + #! on EOF. + read-packet [ eval>string write-packet wire-server ] when* ; + +! Stream protocol for jEdit allows user to interact with a +! Factor listener. +! +! Packets have the following form: +! +! 1 byte -- type. CHAR: w: write, CHAR: r: read CHAR: f flush +! 4 bytes -- for write only -- length of write request +! remaining -- unparsed write request -- string then style + +! After a read line request, the server reads a response from +! the client: +! 4 bytes -- length. -1 means EOF +! remaining -- input +: jedit-read ( -- str ) + CHAR: r write flush read-big-endian-32 read# ; + +: jedit-write-attr ( str style -- ) + CHAR: w write + [ swap . . ] with-string + dup str-length write-big-endian-32 + write ; + +: jedit-flush ( -- ) + CHAR: f write flush ; + +: ( stream -- stream ) + [ + ( -- str ) + [ jedit-read ] "freadln" set + ( str -- ) + [ + default-style jedit-write-attr + ] "fwrite" set + ( str style -- ) + [ jedit-write-attr ] "fwrite-attr" set + ( string -- ) + [ + "\n" cat2 default-style jedit-write-attr + ] "fprint" set + ( -- ) + [ jedit-flush ] "fflush" set + ] extend ; + +: stream-server ( -- ) + #! Execute this in the inferior Factor. + "stdio" get "stdio" set ;