1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays sequences kernel kernel.private accessors math
4 alien.accessors byte-arrays io io.encodings io.encodings.utf8
5 io.encodings.utf16n io.streams.byte-array io.streams.memory system
6 system.private alien strings combinators namespaces init ;
9 GENERIC# alien>string 1 ( c-ptr encoding -- string/f )
12 [ <memory-stream> ] [ <decoder> ] bi*
13 "\0" swap stream-read-until drop ;
18 ERROR: invalid-c-string string ;
20 : check-string ( string -- )
21 0 over memq? [ invalid-c-string ] [ drop ] if ;
23 GENERIC# string>alien 1 ( string encoding -- byte-array )
25 M: c-ptr string>alien drop ;
27 M: string string>alien
31 [ 0 swap stream-write1 ]
32 [ stream>> >byte-array ]
35 HOOK: alien>native-string os ( alien -- string )
37 HOOK: native-string>alien os ( string -- alien )
39 M: windows alien>native-string utf16n alien>string ;
41 M: wince native-string>alien utf16n string>alien ;
43 M: winnt native-string>alien utf8 string>alien ;
45 M: unix alien>native-string utf8 alien>string ;
47 M: unix native-string>alien utf8 string>alien ;
49 : dll-path ( dll -- string )
50 path>> alien>native-string ;
52 : string>symbol ( str -- alien )
54 [ native-string>alien ]
55 [ [ native-string>alien ] map ] if ;
58 8 getenv utf8 alien>string string>cpu \ cpu set-global
59 9 getenv utf8 alien>string string>os \ os set-global
60 ] "alien.strings" add-init-hook