5 namespaces sequences math math.parser threads quotations splitting
15 TUPLE: cabal-gadget input output ;
17 : <cabal-input> ( -- gadget )
18 gadget get cabal-gadget-output <pane-stream> <interactor> ;
20 : <cabal-gadget> ( -- gadget )
21 cabal-gadget construct-empty
23 [ <scrolling-pane> over dupd set-cabal-gadget-output <scroller> 5/6 track,
24 <cabal-input> over dupd set-cabal-gadget-input <scroller> 1/6 track,
30 M: cabal-gadget pref-dim* drop { 550 650 } ;
32 : cabal-stream ( cabal -- stream )
33 dup cabal-gadget-input swap cabal-gadget-output <pane-stream>
36 : incoming-loop ( stream -- ) dup stream-readln print incoming-loop ;
38 : outgoing-loop ( stream -- )
39 readln over stream-print dup stream-flush outgoing-loop ;
42 "cabal://" write readln
43 ":" split1 string>number <inet> <client>
44 [ outgoing-loop ] in-thread incoming-loop ;
47 <cabal-gadget> dup "Cabal Client" open-window
48 cabal-stream [ [ cabal-thread ] with-stream ] in-thread drop ;
50 : cabal-client* ( -- ) [ cabal-client ] with-ui ;