1 ! Copyright (C) 2008, 2011 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien arrays byte-arrays init io io.encodings
4 io.encodings.utf16n io.encodings.utf8 io.streams.byte-array
5 io.streams.memory kernel kernel.private namespaces sequences
6 strings system system.private ;
9 GENERIC# alien>string 1 ( c-ptr encoding -- string/f )
12 [ <memory-stream> ] [ <decoder> ] bi*
13 "\0" swap stream-read-until drop ;
15 M: object alien>string
16 [ underlying>> ] dip alien>string ;
21 ERROR: invalid-c-string string ;
23 : check-string ( string -- )
24 0 over member-eq? [ invalid-c-string ] [ drop ] if ;
26 GENERIC# string>alien 1 ( string encoding -- byte-array )
28 M: c-ptr string>alien drop ;
30 M: string string>alien
34 [ 0 swap stream-write1 ]
35 [ stream>> >byte-array ]
38 M: tuple string>alien drop underlying>> ;
40 HOOK: native-string-encoding os ( -- encoding ) foldable
42 M: unix native-string-encoding utf8 ;
43 M: windows native-string-encoding utf16n ;
45 : alien>native-string ( alien -- string )
46 native-string-encoding alien>string ; inline
48 : native-string>alien ( string -- alien )
49 native-string-encoding string>alien ; inline
51 : dll-path ( dll -- string )
52 path>> alien>native-string ;
54 GENERIC: string>symbol ( str/seq -- alien )
56 M: string string>symbol utf8 string>alien ;
58 M: sequence string>symbol [ utf8 string>alien ] map ;
60 : (symbol>string) ( alien -- str )
63 GENERIC: symbol>string ( symbol(s) -- string(s) )
64 M: byte-array symbol>string (symbol>string) ;
65 M: array symbol>string [ (symbol>string) ] map ;
68 OBJ-CPU special-object utf8 alien>string string>cpu \ cpu set-global
69 OBJ-OS special-object utf8 alien>string string>os \ os set-global
70 OBJ-VM-COMPILER special-object utf8 alien>string \ vm-compiler set-global
71 ] "alien.strings" add-startup-hook