1 ! Copyright (C) 2007, 2008 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.data eval io.encodings.utf8
4 kernel kernel.private threads words ;
5 IN: alien.remote-control
7 : eval-callback ( -- callback )
8 void* { c-string } cdecl
9 [ eval>string utf8 malloc-string ] alien-callback ;
11 : yield-callback ( -- callback )
12 void { } cdecl [ yield ] alien-callback ;
14 : sleep-callback ( -- callback )
15 void { long } cdecl [ sleep ] alien-callback ;
17 : ?callback ( word -- alien )
18 dup word-optimized? [ execute ] [ drop f ] if ; inline
20 : init-remote-control ( -- )
21 \ eval-callback ?callback OBJ-EVAL-CALLBACK set-special-object
22 \ yield-callback ?callback OBJ-YIELD-CALLBACK set-special-object
23 \ sleep-callback ?callback OBJ-SLEEP-CALLBACK set-special-object ;
25 MAIN: init-remote-control