move some allocation words that don't really have much to do with c types out of alien.c-types into a new alien.data vocab
parent
aa1edad078
commit
076ab42dc3
|
@ -1,5 +1,5 @@
|
|||
USING: help.syntax help.markup byte-arrays alien.c-types alien.data ;
|
||||
IN: alien.arrays
|
||||
USING: help.syntax help.markup byte-arrays alien.c-types ;
|
||||
|
||||
ARTICLE: "c-arrays" "C arrays"
|
||||
"C arrays are allocated in the same manner as other C data; see " { $link "c-byte-arrays" } " and " { $link "malloc" } "."
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien alien.strings alien.c-types alien.accessors
|
||||
arrays words sequences math kernel namespaces fry libc cpu.architecture
|
||||
USING: alien alien.strings alien.c-types alien.data alien.accessors
|
||||
arrays words sequences math kernel namespaces fry cpu.architecture
|
||||
io.encodings.utf8 accessors ;
|
||||
IN: alien.arrays
|
||||
|
||||
|
|
|
@ -1,7 +1,25 @@
|
|||
IN: alien.c-types
|
||||
USING: alien help.syntax help.markup libc kernel.private
|
||||
byte-arrays math strings hashtables alien.syntax alien.strings sequences
|
||||
io.encodings.string debugger destructors vocabs.loader ;
|
||||
IN: alien.c-types
|
||||
|
||||
HELP: byte-length
|
||||
{ $values { "seq" "A byte array or float array" } { "n" "a non-negative integer" } }
|
||||
{ $contract "Outputs the size of the byte array, struct, or specialized array data in bytes." } ;
|
||||
|
||||
HELP: heap-size
|
||||
{ $values { "type" string } { "size" integer } }
|
||||
{ $description "Outputs the number of bytes needed for a heap-allocated value of this C type." }
|
||||
{ $examples
|
||||
"On a 32-bit system, you will get the following output:"
|
||||
{ $unchecked-example "USE: alien\n\"void*\" heap-size ." "4" }
|
||||
}
|
||||
{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ;
|
||||
|
||||
HELP: stack-size
|
||||
{ $values { "type" string } { "size" integer } }
|
||||
{ $description "Outputs the number of bytes to reserve on the C stack by a value of this C type. In most cases this is equal to " { $link heap-size } ", except on some platforms where C structs are passed by invisible reference, in which case a C struct type only uses as much space as a pointer on the C stack." }
|
||||
{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ;
|
||||
|
||||
HELP: <c-type>
|
||||
{ $values { "type" hashtable } }
|
||||
|
@ -20,24 +38,6 @@ HELP: c-type
|
|||
{ $description "Looks up a C type by name." }
|
||||
{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ;
|
||||
|
||||
HELP: heap-size
|
||||
{ $values { "type" string } { "size" integer } }
|
||||
{ $description "Outputs the number of bytes needed for a heap-allocated value of this C type." }
|
||||
{ $examples
|
||||
"On a 32-bit system, you will get the following output:"
|
||||
{ $unchecked-example "USE: alien\n\"void*\" heap-size ." "4" }
|
||||
}
|
||||
{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ;
|
||||
|
||||
HELP: stack-size
|
||||
{ $values { "type" string } { "size" integer } }
|
||||
{ $description "Outputs the number of bytes to reserve on the C stack by a value of this C type. In most cases this is equal to " { $link heap-size } ", except on some platforms where C structs are passed by invisible reference, in which case a C struct type only uses as much space as a pointer on the C stack." }
|
||||
{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ;
|
||||
|
||||
HELP: byte-length
|
||||
{ $values { "seq" "A byte array or float array" } { "n" "a non-negative integer" } }
|
||||
{ $contract "Outputs the size of the byte array or float array data in bytes as presented to the C library interface." } ;
|
||||
|
||||
HELP: c-getter
|
||||
{ $values { "name" string } { "quot" { $quotation "( c-ptr n -- obj )" } } }
|
||||
{ $description "Outputs a quotation which reads values of this C type from a C structure." }
|
||||
|
@ -48,49 +48,6 @@ HELP: c-setter
|
|||
{ $description "Outputs a quotation which writes values of this C type to a C structure." }
|
||||
{ $errors "Throws an error if the type does not exist." } ;
|
||||
|
||||
HELP: <c-array>
|
||||
{ $values { "len" "a non-negative integer" } { "c-type" "a C type" } { "array" byte-array } }
|
||||
{ $description "Creates a byte array large enough to hold " { $snippet "n" } " values of a C type." }
|
||||
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." }
|
||||
{ $errors "Throws an error if the type does not exist, the necessary specialized array vocabulary is not loaded, or the requested size is negative." } ;
|
||||
|
||||
HELP: <c-object>
|
||||
{ $values { "type" "a C type" } { "array" byte-array } }
|
||||
{ $description "Creates a byte array suitable for holding a value with the given C type." }
|
||||
{ $errors "Throws an " { $link no-c-type } " error if the type does not exist." } ;
|
||||
|
||||
{ <c-object> malloc-object } related-words
|
||||
|
||||
HELP: memory>byte-array
|
||||
{ $values { "alien" c-ptr } { "len" "a non-negative integer" } { "byte-array" byte-array } }
|
||||
{ $description "Reads " { $snippet "len" } " bytes starting from " { $snippet "base" } " and stores them in a new byte array." } ;
|
||||
|
||||
HELP: byte-array>memory
|
||||
{ $values { "byte-array" byte-array } { "base" c-ptr } }
|
||||
{ $description "Writes a byte array to memory starting from the " { $snippet "base" } " address." }
|
||||
{ $warning "This word is unsafe. Improper use can corrupt memory." } ;
|
||||
|
||||
HELP: malloc-array
|
||||
{ $values { "n" "a non-negative integer" } { "type" "a C type" } { "alien" alien } }
|
||||
{ $description "Allocates an unmanaged memory block large enough to hold " { $snippet "n" } " values of a C type, then wraps the memory in a sequence object using " { $link <c-direct-array> } "." }
|
||||
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if the type does not exist, if the requested size is negative, if a direct specialized array class appropriate to the type is not loaded, or if memory allocation fails." } ;
|
||||
|
||||
HELP: malloc-object
|
||||
{ $values { "type" "a C type" } { "alien" alien } }
|
||||
{ $description "Allocates an unmanaged memory block large enough to hold a value of a C type." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if the type does not exist or if memory allocation fails." } ;
|
||||
|
||||
HELP: malloc-byte-array
|
||||
{ $values { "byte-array" byte-array } { "alien" alien } }
|
||||
{ $description "Allocates an unmanaged memory block of the same size as the byte array, and copies the contents of the byte array there." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if memory allocation fails." } ;
|
||||
|
||||
{ <c-array> <c-direct-array> malloc-array } related-words
|
||||
|
||||
HELP: box-parameter
|
||||
{ $values { "n" integer } { "ctype" string } }
|
||||
{ $description "Generates code for converting a C value stored at offset " { $snippet "n" } " from the top of the stack into a Factor object to be pushed on the data stack." }
|
||||
|
@ -116,48 +73,6 @@ HELP: define-out
|
|||
{ $description "Defines a word " { $snippet "<" { $emphasis "name" } ">" } " with stack effect " { $snippet "( value -- array )" } ". This word allocates a byte array large enough to hold a value with C type " { $snippet "name" } ", and writes the value at the top of the stack to the array." }
|
||||
{ $notes "This is an internal word called when defining C types, there is no need to call it on your own." } ;
|
||||
|
||||
{ string>alien alien>string malloc-string } related-words
|
||||
|
||||
HELP: malloc-string
|
||||
{ $values { "string" string } { "encoding" "an encoding descriptor" } { "alien" c-ptr } }
|
||||
{ $description "Encodes a string together with a trailing null code point using the given encoding, and stores the resulting bytes in a freshly-allocated unmanaged memory block." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if one of the following conditions occurs:"
|
||||
{ $list
|
||||
"the string contains null code points"
|
||||
"the string contains characters not representable using the encoding specified"
|
||||
"memory allocation fails"
|
||||
}
|
||||
} ;
|
||||
|
||||
HELP: require-c-array
|
||||
{ $values { "c-type" "a C type" } }
|
||||
{ $description "Generates a specialized array of " { $snippet "c-type" } " using the " { $link <c-array> } " or " { $link <c-direct-array> } " vocabularies." }
|
||||
{ $notes "This word must be called inside a compilation unit. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence types loaded." } ;
|
||||
|
||||
HELP: <c-direct-array>
|
||||
{ $values { "alien" c-ptr } { "len" integer } { "c-type" "a C type" } { "array" "a specialized direct array" } }
|
||||
{ $description "Constructs a new specialized array of length " { $snippet "len" } " and element type " { $snippet "c-type" } " over the range of memory referenced by " { $snippet "alien" } "." }
|
||||
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } ;
|
||||
|
||||
ARTICLE: "c-strings" "C strings"
|
||||
"C string types are arrays with shape " { $snippet "{ \"char*\" encoding }" } ", where " { $snippet "encoding" } " is an encoding descriptor. The type " { $snippet "\"char*\"" } " is an alias for " { $snippet "{ \"char*\" utf8 }" } ". See " { $link "encodings-descriptors" } " for information about encoding descriptors."
|
||||
$nl
|
||||
"Passing a Factor string to a C function expecting a C string allocates a " { $link byte-array } " in the Factor heap; the string is then converted to the requested format and a raw pointer is passed to the function."
|
||||
$nl
|
||||
"If the conversion fails, for example if the string contains null bytes or characters with values higher than 255, a " { $link c-string-error. } " is thrown."
|
||||
$nl
|
||||
"Care must be taken if the C function expects a " { $snippet "char*" } " with a length in bytes, rather than a null-terminated " { $snippet "char*" } "; passing the result of calling " { $link length } " on the string object will not suffice. This is because a Factor string of " { $emphasis "n" } " characters will not necessarily encode to " { $emphasis "n" } " bytes. The correct idiom for C functions which take a string with a length is to first encode the string using " { $link encode } ", and then pass the resulting byte array together with the length of this byte array."
|
||||
$nl
|
||||
"Sometimes a C function has a parameter type of " { $snippet "void*" } ", and various data types, among them strings, can be passed in. In this case, strings are not automatically converted to aliens, and instead you must call one of these words:"
|
||||
{ $subsection string>alien }
|
||||
{ $subsection malloc-string }
|
||||
"The first allocates " { $link byte-array } "s, and the latter allocates manually-managed memory which is not moved by the garbage collector and has to be explicitly freed by calling " { $link free } ". See " { $link "byte-arrays-gc" } " for a discussion of the two approaches."
|
||||
$nl
|
||||
"A word to read strings from arbitrary addresses:"
|
||||
{ $subsection alien>string }
|
||||
"For example, if a C function returns a " { $snippet "char*" } " but stipulates that the caller must deallocate the memory afterward, you must define the function as returning " { $snippet "void*" } ", and call one of the above words before passing the pointer to " { $link free } "." ;
|
||||
|
||||
ARTICLE: "byte-arrays-gc" "Byte arrays and the garbage collector"
|
||||
"The Factor garbage collector can move byte arrays around, and it is only safe to pass byte arrays to C functions if the garbage collector will not run while C code still has a reference to the data."
|
||||
$nl
|
||||
|
@ -234,61 +149,3 @@ $nl
|
|||
"Fixed-size arrays differ from pointers in that they are allocated inside structures and unions; however when used as function parameters they behave exactly like pointers and thus the dimensions only serve as documentation."
|
||||
$nl
|
||||
"Structure and union types are specified by the name of the structure or union." ;
|
||||
|
||||
ARTICLE: "c-byte-arrays" "Passing data in byte arrays"
|
||||
"Instances of the " { $link byte-array } " class can be passed to C functions; the C function receives a pointer to the first element of the array."
|
||||
$nl
|
||||
"Byte arrays can be allocated directly with a byte count using the " { $link <byte-array> } " word. However in most cases, instead of computing a size in bytes directly, it is easier to use a higher-level word which expects C type and outputs a byte array large enough to hold that type:"
|
||||
{ $subsection <c-object> }
|
||||
{ $subsection <c-array> }
|
||||
{ $warning
|
||||
"The Factor garbage collector can move byte arrays around, and code passing byte arrays to C must obey important guidelines. See " { $link "byte-arrays-gc" } "." }
|
||||
{ $see-also "c-arrays" } ;
|
||||
|
||||
ARTICLE: "malloc" "Manual memory management"
|
||||
"Sometimes data passed to C functions must be allocated at a fixed address. See " { $link "byte-arrays-gc" } " for an explanation of when this is the case."
|
||||
$nl
|
||||
"Allocating a C datum with a fixed address:"
|
||||
{ $subsection malloc-object }
|
||||
{ $subsection malloc-array }
|
||||
{ $subsection malloc-byte-array }
|
||||
"There is a set of words in the " { $vocab-link "libc" } " vocabulary which directly call C standard library memory management functions:"
|
||||
{ $subsection malloc }
|
||||
{ $subsection calloc }
|
||||
{ $subsection realloc }
|
||||
"You must always free pointers returned by any of the above words when the block of memory is no longer in use:"
|
||||
{ $subsection free }
|
||||
"Utilities for automatically freeing memory in conjunction with " { $link with-destructors } ":"
|
||||
{ $subsection &free }
|
||||
{ $subsection |free }
|
||||
"The " { $link &free } " and " { $link |free } " words are generated using " { $link "alien.destructors" } "."
|
||||
$nl
|
||||
"You can unsafely copy a range of bytes from one memory location to another:"
|
||||
{ $subsection memcpy }
|
||||
"You can copy a range of bytes from memory into a byte array:"
|
||||
{ $subsection memory>byte-array }
|
||||
"You can copy a byte array to memory unsafely:"
|
||||
{ $subsection byte-array>memory } ;
|
||||
|
||||
ARTICLE: "c-data" "Passing data between Factor and C"
|
||||
"Two defining characteristics of Factor are dynamic typing and automatic memory management, which are somewhat incompatible with the machine-level data model exposed by C. Factor's C library interface defines its own set of C data types, distinct from Factor language types, together with automatic conversion between Factor values and C types. For example, C integer types must be declared and are fixed-width, whereas Factor supports arbitrary-precision integers."
|
||||
$nl
|
||||
"Furthermore, Factor's garbage collector can move objects in memory; for a discussion of the consequences, see " { $link "byte-arrays-gc" } "."
|
||||
{ $subsection "c-types-specs" }
|
||||
{ $subsection "c-byte-arrays" }
|
||||
{ $subsection "malloc" }
|
||||
{ $subsection "c-strings" }
|
||||
{ $subsection "c-arrays" }
|
||||
{ $subsection "c-out-params" }
|
||||
"Important guidelines for passing data in byte arrays:"
|
||||
{ $subsection "byte-arrays-gc" }
|
||||
"C-style enumerated types are supported:"
|
||||
{ $subsection POSTPONE: C-ENUM: }
|
||||
"C types can be aliased for convenience and consitency with native library documentation:"
|
||||
{ $subsection POSTPONE: TYPEDEF: }
|
||||
"New C types can be defined:"
|
||||
{ $subsection "c-structs" }
|
||||
{ $subsection "c-unions" }
|
||||
"A utility for defining " { $link "destructors" } " for deallocating memory:"
|
||||
{ $subsection "alien.destructors" }
|
||||
{ $see-also "aliens" } ;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2004, 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: byte-arrays arrays assocs kernel kernel.private libc math
|
||||
USING: byte-arrays arrays assocs kernel kernel.private math
|
||||
namespaces make parser sequences strings words splitting math.parser
|
||||
cpu.architecture alien alien.accessors alien.strings quotations
|
||||
layouts system compiler.units io io.files io.encodings.binary
|
||||
|
@ -22,8 +22,6 @@ SYMBOLS:
|
|||
DEFER: <int>
|
||||
DEFER: *char
|
||||
|
||||
: little-endian? ( -- ? ) 1 <int> *char 1 = ; foldable
|
||||
|
||||
TUPLE: abstract-c-type
|
||||
{ class class initial: object }
|
||||
{ boxed-class class initial: object }
|
||||
|
@ -104,43 +102,6 @@ M: c-type-name c-struct?
|
|||
! These words being foldable means that words need to be
|
||||
! recompiled if a C type is redefined. Even so, folding the
|
||||
! size facilitates some optimizations.
|
||||
GENERIC: heap-size ( type -- size ) foldable
|
||||
|
||||
M: c-type-name heap-size c-type heap-size ;
|
||||
|
||||
M: abstract-c-type heap-size size>> ;
|
||||
|
||||
GENERIC: require-c-array ( c-type -- )
|
||||
|
||||
M: array require-c-array first require-c-array ;
|
||||
|
||||
GENERIC: c-array-constructor ( c-type -- word )
|
||||
|
||||
GENERIC: c-(array)-constructor ( c-type -- word )
|
||||
|
||||
GENERIC: c-direct-array-constructor ( c-type -- word )
|
||||
|
||||
GENERIC: <c-array> ( len c-type -- array )
|
||||
|
||||
M: c-type-name <c-array>
|
||||
c-array-constructor execute( len -- array ) ; inline
|
||||
|
||||
GENERIC: (c-array) ( len c-type -- array )
|
||||
|
||||
M: c-type-name (c-array)
|
||||
c-(array)-constructor execute( len -- array ) ; inline
|
||||
|
||||
GENERIC: <c-direct-array> ( alien len c-type -- array )
|
||||
|
||||
M: c-type-name <c-direct-array>
|
||||
c-direct-array-constructor execute( alien len -- array ) ; inline
|
||||
|
||||
: malloc-array ( n type -- alien )
|
||||
[ heap-size calloc ] [ <c-direct-array> ] 2bi ; inline
|
||||
|
||||
: (malloc-array) ( n type -- alien )
|
||||
[ heap-size * malloc ] [ <c-direct-array> ] 2bi ; inline
|
||||
|
||||
GENERIC: c-type-class ( name -- class )
|
||||
|
||||
M: abstract-c-type c-type-class class>> ;
|
||||
|
@ -239,29 +200,28 @@ M: c-type unbox-return f swap c-type-unbox ;
|
|||
|
||||
M: c-type-name unbox-return c-type unbox-return ;
|
||||
|
||||
: little-endian? ( -- ? ) 1 <int> *char 1 = ; foldable
|
||||
|
||||
GENERIC: heap-size ( type -- size ) foldable
|
||||
|
||||
M: c-type-name heap-size c-type heap-size ;
|
||||
|
||||
M: abstract-c-type heap-size size>> ;
|
||||
|
||||
GENERIC: stack-size ( type -- size ) foldable
|
||||
|
||||
M: c-type-name stack-size c-type stack-size ;
|
||||
|
||||
M: c-type stack-size size>> cell align ;
|
||||
|
||||
MIXIN: value-type
|
||||
|
||||
M: value-type c-type-rep drop int-rep ;
|
||||
|
||||
M: value-type c-type-getter
|
||||
drop [ swap <displaced-alien> ] ;
|
||||
|
||||
M: value-type c-type-setter ( type -- quot )
|
||||
[ c-type-getter ] [ c-type-unboxer-quot ] [ heap-size ] tri
|
||||
'[ @ swap @ _ memcpy ] ;
|
||||
|
||||
GENERIC: byte-length ( seq -- n ) flushable
|
||||
|
||||
M: byte-array byte-length length ; inline
|
||||
|
||||
M: f byte-length drop 0 ; inline
|
||||
|
||||
MIXIN: value-type
|
||||
|
||||
: c-getter ( name -- quot )
|
||||
c-type-getter [
|
||||
[ "Cannot read struct fields with this type" throw ]
|
||||
|
@ -275,36 +235,6 @@ M: f byte-length drop 0 ; inline
|
|||
[ "Cannot write struct fields with this type" throw ]
|
||||
] unless* ;
|
||||
|
||||
: <c-object> ( type -- array )
|
||||
heap-size <byte-array> ; inline
|
||||
|
||||
: (c-object) ( type -- array )
|
||||
heap-size (byte-array) ; inline
|
||||
|
||||
: malloc-object ( type -- alien )
|
||||
1 swap heap-size calloc ; inline
|
||||
|
||||
: (malloc-object) ( type -- alien )
|
||||
heap-size malloc ; inline
|
||||
|
||||
: malloc-byte-array ( byte-array -- alien )
|
||||
dup byte-length [ nip malloc dup ] 2keep memcpy ;
|
||||
|
||||
: memory>byte-array ( alien len -- byte-array )
|
||||
[ nip (byte-array) dup ] 2keep memcpy ;
|
||||
|
||||
: malloc-string ( string encoding -- alien )
|
||||
string>alien malloc-byte-array ;
|
||||
|
||||
M: memory-stream stream-read
|
||||
[
|
||||
[ index>> ] [ alien>> ] bi <displaced-alien>
|
||||
swap memory>byte-array
|
||||
] [ [ + ] change-index drop ] 2bi ;
|
||||
|
||||
: byte-array>memory ( byte-array base -- )
|
||||
swap dup byte-length memcpy ; inline
|
||||
|
||||
: array-accessor ( type quot -- def )
|
||||
[
|
||||
\ swap , [ heap-size , [ * >fixnum ] % ] [ % ] bi*
|
||||
|
@ -352,22 +282,15 @@ M: long-long-type box-return ( type -- )
|
|||
|
||||
: define-out ( name -- )
|
||||
[ "alien.c-types" constructor-word ]
|
||||
[ dup c-setter '[ _ <c-object> [ 0 @ ] keep ] ] bi
|
||||
[ dup c-setter '[ _ heap-size <byte-array> [ 0 @ ] keep ] ] bi
|
||||
(( value -- c-ptr )) define-inline ;
|
||||
|
||||
: >c-bool ( ? -- int ) 1 0 ? ; inline
|
||||
|
||||
: c-bool> ( int -- ? ) 0 = not ; inline
|
||||
|
||||
: define-primitive-type ( type name -- )
|
||||
[ typedef ]
|
||||
[ name>> define-deref ]
|
||||
[ name>> define-out ]
|
||||
tri ;
|
||||
|
||||
: malloc-file-contents ( path -- alien len )
|
||||
binary file-contents [ malloc-byte-array ] [ length ] bi ;
|
||||
|
||||
: if-void ( type true false -- )
|
||||
pick void? [ drop nip call ] [ nip call ] if ; inline
|
||||
|
||||
|
@ -510,8 +433,8 @@ SYMBOLS:
|
|||
\ uchar define-primitive-type
|
||||
|
||||
<c-type>
|
||||
[ alien-unsigned-1 c-bool> ] >>getter
|
||||
[ [ >c-bool ] 2dip set-alien-unsigned-1 ] >>setter
|
||||
[ alien-unsigned-1 0 = not ] >>getter
|
||||
[ [ 1 0 ? ] 2dip set-alien-unsigned-1 ] >>setter
|
||||
1 >>size
|
||||
1 >>align
|
||||
"box_boolean" >>boxer
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Slava Pestov
|
|
@ -0,0 +1,148 @@
|
|||
USING: alien alien.c-types help.syntax help.markup libc kernel.private
|
||||
byte-arrays math strings hashtables alien.syntax alien.strings sequences
|
||||
io.encodings.string debugger destructors vocabs.loader ;
|
||||
IN: alien.data
|
||||
|
||||
HELP: <c-array>
|
||||
{ $values { "len" "a non-negative integer" } { "c-type" "a C type" } { "array" byte-array } }
|
||||
{ $description "Creates a byte array large enough to hold " { $snippet "n" } " values of a C type." }
|
||||
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." }
|
||||
{ $errors "Throws an error if the type does not exist, the necessary specialized array vocabulary is not loaded, or the requested size is negative." } ;
|
||||
|
||||
HELP: <c-object>
|
||||
{ $values { "type" "a C type" } { "array" byte-array } }
|
||||
{ $description "Creates a byte array suitable for holding a value with the given C type." }
|
||||
{ $errors "Throws an " { $link no-c-type } " error if the type does not exist." } ;
|
||||
|
||||
{ <c-object> malloc-object } related-words
|
||||
|
||||
HELP: memory>byte-array
|
||||
{ $values { "alien" c-ptr } { "len" "a non-negative integer" } { "byte-array" byte-array } }
|
||||
{ $description "Reads " { $snippet "len" } " bytes starting from " { $snippet "base" } " and stores them in a new byte array." } ;
|
||||
|
||||
HELP: byte-array>memory
|
||||
{ $values { "byte-array" byte-array } { "base" c-ptr } }
|
||||
{ $description "Writes a byte array to memory starting from the " { $snippet "base" } " address." }
|
||||
{ $warning "This word is unsafe. Improper use can corrupt memory." } ;
|
||||
|
||||
HELP: malloc-array
|
||||
{ $values { "n" "a non-negative integer" } { "type" "a C type" } { "alien" alien } }
|
||||
{ $description "Allocates an unmanaged memory block large enough to hold " { $snippet "n" } " values of a C type, then wraps the memory in a sequence object using " { $link <c-direct-array> } "." }
|
||||
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if the type does not exist, if the requested size is negative, if a direct specialized array class appropriate to the type is not loaded, or if memory allocation fails." } ;
|
||||
|
||||
HELP: malloc-object
|
||||
{ $values { "type" "a C type" } { "alien" alien } }
|
||||
{ $description "Allocates an unmanaged memory block large enough to hold a value of a C type." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if the type does not exist or if memory allocation fails." } ;
|
||||
|
||||
HELP: malloc-byte-array
|
||||
{ $values { "byte-array" byte-array } { "alien" alien } }
|
||||
{ $description "Allocates an unmanaged memory block of the same size as the byte array, and copies the contents of the byte array there." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if memory allocation fails." } ;
|
||||
|
||||
{ <c-array> <c-direct-array> malloc-array } related-words
|
||||
|
||||
{ string>alien alien>string malloc-string } related-words
|
||||
|
||||
ARTICLE: "malloc" "Manual memory management"
|
||||
"Sometimes data passed to C functions must be allocated at a fixed address. See " { $link "byte-arrays-gc" } " for an explanation of when this is the case."
|
||||
$nl
|
||||
"Allocating a C datum with a fixed address:"
|
||||
{ $subsection malloc-object }
|
||||
{ $subsection malloc-array }
|
||||
{ $subsection malloc-byte-array }
|
||||
"There is a set of words in the " { $vocab-link "libc" } " vocabulary which directly call C standard library memory management functions:"
|
||||
{ $subsection malloc }
|
||||
{ $subsection calloc }
|
||||
{ $subsection realloc }
|
||||
"You must always free pointers returned by any of the above words when the block of memory is no longer in use:"
|
||||
{ $subsection free }
|
||||
"Utilities for automatically freeing memory in conjunction with " { $link with-destructors } ":"
|
||||
{ $subsection &free }
|
||||
{ $subsection |free }
|
||||
"The " { $link &free } " and " { $link |free } " words are generated using " { $link "alien.destructors" } "."
|
||||
$nl
|
||||
"You can unsafely copy a range of bytes from one memory location to another:"
|
||||
{ $subsection memcpy }
|
||||
"You can copy a range of bytes from memory into a byte array:"
|
||||
{ $subsection memory>byte-array }
|
||||
"You can copy a byte array to memory unsafely:"
|
||||
{ $subsection byte-array>memory } ;
|
||||
|
||||
|
||||
ARTICLE: "c-byte-arrays" "Passing data in byte arrays"
|
||||
"Instances of the " { $link byte-array } " class can be passed to C functions; the C function receives a pointer to the first element of the array."
|
||||
$nl
|
||||
"Byte arrays can be allocated directly with a byte count using the " { $link <byte-array> } " word. However in most cases, instead of computing a size in bytes directly, it is easier to use a higher-level word which expects C type and outputs a byte array large enough to hold that type:"
|
||||
{ $subsection <c-object> }
|
||||
{ $subsection <c-array> }
|
||||
{ $warning
|
||||
"The Factor garbage collector can move byte arrays around, and code passing byte arrays to C must obey important guidelines. See " { $link "byte-arrays-gc" } "." }
|
||||
{ $see-also "c-arrays" } ;
|
||||
|
||||
ARTICLE: "c-data" "Passing data between Factor and C"
|
||||
"Two defining characteristics of Factor are dynamic typing and automatic memory management, which are somewhat incompatible with the machine-level data model exposed by C. Factor's C library interface defines its own set of C data types, distinct from Factor language types, together with automatic conversion between Factor values and C types. For example, C integer types must be declared and are fixed-width, whereas Factor supports arbitrary-precision integers."
|
||||
$nl
|
||||
"Furthermore, Factor's garbage collector can move objects in memory; for a discussion of the consequences, see " { $link "byte-arrays-gc" } "."
|
||||
{ $subsection "c-types-specs" }
|
||||
{ $subsection "c-byte-arrays" }
|
||||
{ $subsection "malloc" }
|
||||
{ $subsection "c-strings" }
|
||||
{ $subsection "c-arrays" }
|
||||
{ $subsection "c-out-params" }
|
||||
"Important guidelines for passing data in byte arrays:"
|
||||
{ $subsection "byte-arrays-gc" }
|
||||
"C-style enumerated types are supported:"
|
||||
{ $subsection POSTPONE: C-ENUM: }
|
||||
"C types can be aliased for convenience and consitency with native library documentation:"
|
||||
{ $subsection POSTPONE: TYPEDEF: }
|
||||
"New C types can be defined:"
|
||||
{ $subsection "c-structs" }
|
||||
{ $subsection "c-unions" }
|
||||
"A utility for defining " { $link "destructors" } " for deallocating memory:"
|
||||
{ $subsection "alien.destructors" }
|
||||
{ $see-also "aliens" } ;
|
||||
HELP: malloc-string
|
||||
{ $values { "string" string } { "encoding" "an encoding descriptor" } { "alien" c-ptr } }
|
||||
{ $description "Encodes a string together with a trailing null code point using the given encoding, and stores the resulting bytes in a freshly-allocated unmanaged memory block." }
|
||||
{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." }
|
||||
{ $errors "Throws an error if one of the following conditions occurs:"
|
||||
{ $list
|
||||
"the string contains null code points"
|
||||
"the string contains characters not representable using the encoding specified"
|
||||
"memory allocation fails"
|
||||
}
|
||||
} ;
|
||||
|
||||
HELP: require-c-array
|
||||
{ $values { "c-type" "a C type" } }
|
||||
{ $description "Generates a specialized array of " { $snippet "c-type" } " using the " { $link <c-array> } " or " { $link <c-direct-array> } " vocabularies." }
|
||||
{ $notes "This word must be called inside a compilation unit. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence types loaded." } ;
|
||||
|
||||
HELP: <c-direct-array>
|
||||
{ $values { "alien" c-ptr } { "len" integer } { "c-type" "a C type" } { "array" "a specialized direct array" } }
|
||||
{ $description "Constructs a new specialized array of length " { $snippet "len" } " and element type " { $snippet "c-type" } " over the range of memory referenced by " { $snippet "alien" } "." }
|
||||
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } ;
|
||||
|
||||
ARTICLE: "c-strings" "C strings"
|
||||
"C string types are arrays with shape " { $snippet "{ \"char*\" encoding }" } ", where " { $snippet "encoding" } " is an encoding descriptor. The type " { $snippet "\"char*\"" } " is an alias for " { $snippet "{ \"char*\" utf8 }" } ". See " { $link "encodings-descriptors" } " for information about encoding descriptors."
|
||||
$nl
|
||||
"Passing a Factor string to a C function expecting a C string allocates a " { $link byte-array } " in the Factor heap; the string is then converted to the requested format and a raw pointer is passed to the function."
|
||||
$nl
|
||||
"If the conversion fails, for example if the string contains null bytes or characters with values higher than 255, a " { $link c-string-error. } " is thrown."
|
||||
$nl
|
||||
"Care must be taken if the C function expects a " { $snippet "char*" } " with a length in bytes, rather than a null-terminated " { $snippet "char*" } "; passing the result of calling " { $link length } " on the string object will not suffice. This is because a Factor string of " { $emphasis "n" } " characters will not necessarily encode to " { $emphasis "n" } " bytes. The correct idiom for C functions which take a string with a length is to first encode the string using " { $link encode } ", and then pass the resulting byte array together with the length of this byte array."
|
||||
$nl
|
||||
"Sometimes a C function has a parameter type of " { $snippet "void*" } ", and various data types, among them strings, can be passed in. In this case, strings are not automatically converted to aliens, and instead you must call one of these words:"
|
||||
{ $subsection string>alien }
|
||||
{ $subsection malloc-string }
|
||||
"The first allocates " { $link byte-array } "s, and the latter allocates manually-managed memory which is not moved by the garbage collector and has to be explicitly freed by calling " { $link free } ". See " { $link "byte-arrays-gc" } " for a discussion of the two approaches."
|
||||
$nl
|
||||
"A word to read strings from arbitrary addresses:"
|
||||
{ $subsection alien>string }
|
||||
"For example, if a C function returns a " { $snippet "char*" } " but stipulates that the caller must deallocate the memory afterward, you must define the function as returning " { $snippet "void*" } ", and call one of the above words before passing the pointer to " { $link free } "." ;
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
! (c)2009 Slava Pestov, Joe Groff bsd license
|
||||
USING: accessors alien alien.c-types alien.strings arrays
|
||||
byte-arrays cpu.architecture fry io io.encodings.binary
|
||||
io.files io.streams.memory kernel libc math sequences ;
|
||||
IN: alien.data
|
||||
|
||||
GENERIC: require-c-array ( c-type -- )
|
||||
|
||||
M: array require-c-array first require-c-array ;
|
||||
|
||||
GENERIC: c-array-constructor ( c-type -- word )
|
||||
|
||||
GENERIC: c-(array)-constructor ( c-type -- word )
|
||||
|
||||
GENERIC: c-direct-array-constructor ( c-type -- word )
|
||||
|
||||
GENERIC: <c-array> ( len c-type -- array )
|
||||
|
||||
M: c-type-name <c-array>
|
||||
c-array-constructor execute( len -- array ) ; inline
|
||||
|
||||
GENERIC: (c-array) ( len c-type -- array )
|
||||
|
||||
M: c-type-name (c-array)
|
||||
c-(array)-constructor execute( len -- array ) ; inline
|
||||
|
||||
GENERIC: <c-direct-array> ( alien len c-type -- array )
|
||||
|
||||
M: c-type-name <c-direct-array>
|
||||
c-direct-array-constructor execute( alien len -- array ) ; inline
|
||||
|
||||
: malloc-array ( n type -- alien )
|
||||
[ heap-size calloc ] [ <c-direct-array> ] 2bi ; inline
|
||||
|
||||
: (malloc-array) ( n type -- alien )
|
||||
[ heap-size * malloc ] [ <c-direct-array> ] 2bi ; inline
|
||||
|
||||
: <c-object> ( type -- array )
|
||||
heap-size <byte-array> ; inline
|
||||
|
||||
: (c-object) ( type -- array )
|
||||
heap-size (byte-array) ; inline
|
||||
|
||||
: malloc-object ( type -- alien )
|
||||
1 swap heap-size calloc ; inline
|
||||
|
||||
: (malloc-object) ( type -- alien )
|
||||
heap-size malloc ; inline
|
||||
|
||||
: malloc-byte-array ( byte-array -- alien )
|
||||
dup byte-length [ nip malloc dup ] 2keep memcpy ;
|
||||
|
||||
: memory>byte-array ( alien len -- byte-array )
|
||||
[ nip (byte-array) dup ] 2keep memcpy ;
|
||||
|
||||
: malloc-string ( string encoding -- alien )
|
||||
string>alien malloc-byte-array ;
|
||||
|
||||
: malloc-file-contents ( path -- alien len )
|
||||
binary file-contents [ malloc-byte-array ] [ length ] bi ;
|
||||
|
||||
M: memory-stream stream-read
|
||||
[
|
||||
[ index>> ] [ alien>> ] bi <displaced-alien>
|
||||
swap memory>byte-array
|
||||
] [ [ + ] change-index drop ] 2bi ;
|
||||
|
||||
: byte-array>memory ( byte-array base -- )
|
||||
swap dup byte-length memcpy ; inline
|
||||
|
||||
: >c-bool ( ? -- int ) 1 0 ? ; inline
|
||||
|
||||
: c-bool> ( int -- ? ) 0 = not ; inline
|
||||
|
||||
M: value-type c-type-rep drop int-rep ;
|
||||
|
||||
M: value-type c-type-getter
|
||||
drop [ swap <displaced-alien> ] ;
|
||||
|
||||
M: value-type c-type-setter ( type -- quot )
|
||||
[ c-type-getter ] [ c-type-unboxer-quot ] [ heap-size ] tri
|
||||
'[ @ swap @ _ memcpy ] ;
|
||||
|
|
@ -0,0 +1 @@
|
|||
Words for allocating objects and arrays of C types
|
|
@ -1,7 +1,7 @@
|
|||
! (c) 2009 Joe Groff, see BSD license
|
||||
USING: accessors alien alien.c-types alien.complex
|
||||
alien.fortran alien.fortran.private alien.strings classes.struct
|
||||
arrays assocs byte-arrays combinators fry
|
||||
alien.data alien.fortran alien.fortran.private alien.strings
|
||||
classes.struct arrays assocs byte-arrays combinators fry
|
||||
generalizations io.encodings.ascii kernel macros
|
||||
macros.expander namespaces sequences shuffle tools.test ;
|
||||
IN: alien.fortran.tests
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
! (c) 2009 Joe Groff, see BSD license
|
||||
USING: accessors alien alien.c-types alien.complex grouping
|
||||
USING: accessors alien alien.c-types alien.complex alien.data grouping
|
||||
alien.strings alien.syntax arrays ascii assocs
|
||||
byte-arrays combinators combinators.short-circuit fry generalizations
|
||||
kernel lexer macros math math.parser namespaces parser sequences
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2007, 2008 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien alien.c-types alien.strings parser
|
||||
USING: accessors alien alien.data alien.strings parser
|
||||
threads words kernel.private kernel io.encodings.utf8 eval ;
|
||||
IN: alien.remote-control
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
USING: alien.c-types strings help.markup help.syntax alien.syntax
|
||||
USING: alien.c-types alien.data strings help.markup help.syntax alien.syntax
|
||||
sequences io arrays kernel words assocs namespaces ;
|
||||
IN: alien.structs
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
USING: alien alien.syntax alien.c-types kernel tools.test
|
||||
USING: alien alien.syntax alien.c-types alien.data kernel tools.test
|
||||
sequences system libc words vocabs namespaces layouts ;
|
||||
IN: alien.structs.tests
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2007, 2008 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types accessors math alien.accessors kernel
|
||||
USING: alien.c-types alien.data accessors math alien.accessors kernel
|
||||
kernel.private sequences sequences.private byte-arrays
|
||||
parser prettyprint.custom fry ;
|
||||
IN: bit-arrays
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
! Copyright (C) 2008 Slava Pestov
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors byte-arrays alien.c-types kernel continuations
|
||||
destructors sequences io openssl openssl.libcrypto checksums
|
||||
checksums.stream ;
|
||||
USING: accessors byte-arrays alien.c-types alien.data kernel
|
||||
continuations destructors sequences io openssl openssl.libcrypto
|
||||
checksums checksums.stream ;
|
||||
IN: checksums.openssl
|
||||
|
||||
ERROR: unknown-digest name ;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
! (c)Joe Groff bsd license
|
||||
USING: accessors alien alien.c-types alien.prettyprint arrays
|
||||
USING: accessors alien alien.c-types alien.data alien.prettyprint arrays
|
||||
assocs classes classes.struct combinators combinators.short-circuit
|
||||
continuations fry kernel libc make math math.parser mirrors
|
||||
prettyprint.backend prettyprint.custom prettyprint.sections
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
! (c)Joe Groff bsd license
|
||||
USING: accessors alien alien.c-types ascii
|
||||
USING: accessors alien alien.c-types alien.data ascii
|
||||
assocs byte-arrays classes.struct classes.tuple.private
|
||||
combinators compiler.tree.debugger compiler.units destructors
|
||||
io.encodings.utf8 io.pathnames io.streams.string kernel libc
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
! (c)Joe Groff bsd license
|
||||
USING: accessors alien alien.c-types alien.parser arrays
|
||||
USING: accessors alien alien.c-types alien.data alien.parser arrays
|
||||
byte-arrays classes classes.parser classes.tuple classes.tuple.parser
|
||||
classes.tuple.private combinators combinators.short-circuit
|
||||
combinators.smart cpu.architecture definitions functors.backend
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
! Copyright (C) 2008 Joe Groff.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors kernel classes.struct cocoa cocoa.types alien.c-types
|
||||
locals math sequences vectors fry libc destructors ;
|
||||
USING: accessors kernel classes.struct cocoa cocoa.runtime cocoa.types alien.data
|
||||
locals math sequences vectors fry libc destructors specialized-arrays ;
|
||||
SPECIALIZED-ARRAY: id
|
||||
IN: cocoa.enumeration
|
||||
|
||||
<< "id" require-c-array >>
|
||||
|
||||
CONSTANT: NS-EACH-BUFFER-SIZE 16
|
||||
|
||||
: with-enumeration-buffers ( quot -- )
|
||||
'[
|
||||
NSFastEnumerationState malloc-struct &free
|
||||
NS-EACH-BUFFER-SIZE "id" malloc-array &free
|
||||
NS-EACH-BUFFER-SIZE id malloc-array &free
|
||||
NS-EACH-BUFFER-SIZE
|
||||
@
|
||||
] with-destructors ; inline
|
||||
|
@ -19,7 +18,7 @@ CONSTANT: NS-EACH-BUFFER-SIZE 16
|
|||
:: (NSFastEnumeration-each) ( object quot: ( elt -- ) state stackbuf count -- )
|
||||
object state stackbuf count -> countByEnumeratingWithState:objects:count: :> items-count
|
||||
items-count 0 = [
|
||||
state itemsPtr>> [ items-count "id" <c-direct-array> ] [ stackbuf ] if* :> items
|
||||
state itemsPtr>> [ items-count id <c-direct-array> ] [ stackbuf ] if* :> items
|
||||
items-count iota [ items nth quot call ] each
|
||||
object quot state stackbuf count (NSFastEnumeration-each)
|
||||
] unless ; inline recursive
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
USING: strings arrays hashtables assocs sequences fry macros
|
||||
cocoa.messages cocoa.classes cocoa.application cocoa kernel
|
||||
namespaces io.backend math cocoa.enumeration byte-arrays
|
||||
combinators alien.c-types words core-foundation quotations
|
||||
core-foundation.data core-foundation.utilities ;
|
||||
combinators alien.c-types alien.data words core-foundation
|
||||
quotations core-foundation.data core-foundation.utilities ;
|
||||
IN: cocoa.plists
|
||||
|
||||
: >plist ( value -- plist ) >cf -> autorelease ;
|
||||
|
|
|
@ -3,7 +3,7 @@ math math.constants math.private math.integers.private sequences
|
|||
strings tools.test words continuations sequences.private
|
||||
hashtables.private byte-arrays system random layouts vectors
|
||||
sbufs strings.private slots.private alien math.order
|
||||
alien.accessors alien.c-types alien.syntax alien.strings
|
||||
alien.accessors alien.c-types alien.data alien.syntax alien.strings
|
||||
namespaces libc io.encodings.ascii classes compiler ;
|
||||
FROM: math => float ;
|
||||
IN: compiler.tests.intrinsics
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors assocs sequences kernel combinators make math
|
||||
math.order math.ranges system namespaces locals layouts words
|
||||
alien alien.accessors alien.c-types literals cpu.architecture
|
||||
alien alien.accessors alien.c-types alien.data literals cpu.architecture
|
||||
cpu.ppc.assembler cpu.ppc.assembler.backend compiler.cfg.registers
|
||||
compiler.cfg.instructions compiler.cfg.comparisons
|
||||
compiler.codegen.fixup compiler.cfg.intrinsics
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays continuations db io kernel math namespaces
|
||||
quotations sequences db.postgresql.ffi alien alien.c-types
|
||||
db.types tools.walker ascii splitting math.parser combinators
|
||||
libc calendar.format byte-arrays destructors prettyprint
|
||||
accessors strings serialize io.encodings.binary io.encodings.utf8
|
||||
alien.strings io.streams.byte-array summary present urls
|
||||
specialized-arrays db.private ;
|
||||
alien.data db.types tools.walker ascii splitting math.parser
|
||||
combinators libc calendar.format byte-arrays destructors
|
||||
prettyprint accessors strings serialize io.encodings.binary
|
||||
io.encodings.utf8 alien.strings io.streams.byte-array summary
|
||||
present urls specialized-arrays db.private ;
|
||||
SPECIALIZED-ARRAY: uint
|
||||
SPECIALIZED-ARRAY: void*
|
||||
IN: db.postgresql.lib
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2008 Chris Double, Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types arrays assocs kernel math math.parser
|
||||
USING: alien.c-types alien.data arrays assocs kernel math math.parser
|
||||
namespaces sequences db.sqlite.ffi db combinators
|
||||
continuations db.types calendar.format serialize
|
||||
io.streams.byte-array byte-arrays io.encodings.binary
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien alien.c-types alien.strings alien.syntax kernel
|
||||
layouts sequences system unix environment io.encodings.utf8
|
||||
unix.utilities vocabs.loader combinators alien.accessors ;
|
||||
USING: alien alien.c-types alien.data alien.strings
|
||||
alien.syntax kernel layouts sequences system unix
|
||||
environment io.encodings.utf8 unix.utilities vocabs.loader
|
||||
combinators alien.accessors ;
|
||||
IN: environment.unix
|
||||
|
||||
HOOK: environ os ( -- void* )
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.strings fry io.encodings.utf16n kernel
|
||||
splitting windows windows.kernel32 system environment
|
||||
alien.c-types sequences windows.errors io.streams.memory
|
||||
io.encodings io ;
|
||||
splitting windows windows.kernel32 windows.types system
|
||||
environment alien.data sequences windows.errors
|
||||
io.streams.memory io.encodings io ;
|
||||
SPECIALIZED-ARRAY: TCHAR
|
||||
IN: environment.winnt
|
||||
|
||||
<< "TCHAR" require-c-array >>
|
||||
|
||||
M: winnt os-env ( key -- value )
|
||||
MAX_UNICODE_PATH "TCHAR" <c-array>
|
||||
MAX_UNICODE_PATH TCHAR <c-array>
|
||||
[ dup length GetEnvironmentVariable ] keep over 0 = [
|
||||
2drop f
|
||||
] [
|
||||
|
|
|
@ -6,7 +6,7 @@ math.rectangles namespaces parser sequences shuffle
|
|||
specialized-arrays ui.backend.windows vectors windows.com
|
||||
windows.dinput windows.dinput.constants windows.errors
|
||||
windows.kernel32 windows.messages windows.ole32
|
||||
windows.user32 classes.struct ;
|
||||
windows.user32 classes.struct alien.data ;
|
||||
SPECIALIZED-ARRAY: DIDEVICEOBJECTDATA
|
||||
IN: game-input.dinput
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
USING: sequences sequences.private math alien.c-types
|
||||
accessors ;
|
||||
USING: sequences sequences.private math
|
||||
accessors alien.data ;
|
||||
IN: game-input.dinput.keys-array
|
||||
|
||||
TUPLE: keys-array
|
||||
|
|
|
@ -3,7 +3,8 @@ kernel cocoa.enumeration destructors math.parser cocoa.application
|
|||
sequences locals combinators.short-circuit threads
|
||||
namespaces assocs arrays combinators hints alien
|
||||
core-foundation.run-loop accessors sequences.private
|
||||
alien.c-types math parser game-input vectors bit-arrays ;
|
||||
alien.c-types alien.data math parser game-input vectors
|
||||
bit-arrays ;
|
||||
IN: game-input.iokit
|
||||
|
||||
SINGLETON: iokit-game-input-backend
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien.c-types destructors fry images kernel
|
||||
libc math sequences ;
|
||||
USING: accessors alien.c-types alien.data destructors fry images
|
||||
kernel libc math sequences ;
|
||||
IN: images.memory
|
||||
|
||||
! Some code shared by core-graphics and cairo for constructing
|
||||
|
@ -27,4 +27,4 @@ PRIVATE>
|
|||
: make-memory-bitmap ( dim quot -- image )
|
||||
'[
|
||||
[ malloc-bitmap-data ] keep _ [ <bitmap-image> ] 2bi
|
||||
] with-destructors ; inline
|
||||
] with-destructors ; inline
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
USING: alien alien.c-types alien.syntax arrays continuations
|
||||
USING: alien alien.c-types alien.data alien.syntax arrays continuations
|
||||
destructors generic io.mmap io.ports io.backend.windows io.files.windows
|
||||
kernel libc math math.bitwise namespaces quotations sequences windows
|
||||
windows.advapi32 windows.kernel32 io.backend system accessors
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
IN: io.buffers.tests
|
||||
USING: alien alien.c-types io.buffers kernel kernel.private libc
|
||||
sequences tools.test namespaces byte-arrays strings accessors
|
||||
destructors ;
|
||||
USING: alien alien.c-types alien.data io.buffers kernel
|
||||
kernel.private libc sequences tools.test namespaces byte-arrays
|
||||
strings accessors destructors ;
|
||||
|
||||
: buffer-set ( string buffer -- )
|
||||
over >byte-array over ptr>> byte-array>memory
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
! Copyright (C) 2006, 2008 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien alien.accessors alien.c-types
|
||||
alien.syntax kernel libc math sequences byte-arrays strings
|
||||
hints math.order destructors combinators ;
|
||||
alien.data alien.syntax kernel libc math sequences byte-arrays
|
||||
strings hints math.order destructors combinators ;
|
||||
IN: io.buffers
|
||||
|
||||
TUPLE: buffer
|
||||
|
|
|
@ -6,7 +6,7 @@ windows.time windows accessors alien.c-types combinators
|
|||
generalizations system alien.strings io.encodings.utf16n
|
||||
sequences splitting windows.errors fry continuations destructors
|
||||
calendar ascii combinators.short-circuit locals classes.struct
|
||||
specialized-arrays ;
|
||||
specialized-arrays alien.data ;
|
||||
SPECIALIZED-ARRAY: ushort
|
||||
IN: io.files.info.windows
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ io.backend.windows kernel math splitting fry alien.strings
|
|||
windows windows.kernel32 windows.time calendar combinators
|
||||
math.functions sequences namespaces make words system
|
||||
destructors accessors math.bitwise continuations windows.errors
|
||||
arrays byte-arrays generalizations ;
|
||||
arrays byte-arrays generalizations alien.data ;
|
||||
IN: io.files.windows
|
||||
|
||||
: open-file ( path access-mode create-mode flags -- handle )
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: continuations destructors io.files io.files.info
|
||||
io.backend kernel quotations system alien alien.accessors
|
||||
accessors vocabs.loader combinators alien.c-types
|
||||
accessors vocabs.loader combinators alien.c-types alien.data
|
||||
math ;
|
||||
IN: io.mmap
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2008 Doug Coleman, Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien alien.c-types alien.strings libc destructors locals
|
||||
kernel math assocs namespaces make continuations sequences
|
||||
USING: alien alien.c-types alien.data alien.strings libc destructors
|
||||
locals kernel math assocs namespaces make continuations sequences
|
||||
hashtables sorting arrays combinators math.bitwise strings
|
||||
system accessors threads splitting io.backend io.backend.windows
|
||||
io.backend.windows.nt io.files.windows.nt io.monitors io.ports
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors byte-arrays kernel sequences namespaces math
|
||||
math.order combinators init alien alien.c-types alien.strings
|
||||
libc continuations destructors summary splitting assocs random
|
||||
math.parser locals unicode.case openssl openssl.libcrypto
|
||||
openssl.libssl io.backend io.ports io.pathnames
|
||||
math.order combinators init alien alien.c-types alien.data
|
||||
alien.strings libc continuations destructors summary splitting
|
||||
assocs random math.parser locals unicode.case openssl
|
||||
openssl.libcrypto openssl.libssl io.backend io.ports io.pathnames
|
||||
io.encodings.8-bit io.timeouts io.sockets.secure ;
|
||||
IN: io.sockets.secure.openssl
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ arrays io.encodings io.ports io.streams.duplex io.encodings.ascii
|
|||
alien.strings io.binary accessors destructors classes byte-arrays
|
||||
parser alien.c-types math.parser splitting grouping math assocs
|
||||
summary system vocabs.loader combinators present fry vocabs.parser
|
||||
classes.struct ;
|
||||
classes.struct alien.data ;
|
||||
IN: io.sockets
|
||||
|
||||
<< {
|
||||
|
|
|
@ -5,7 +5,7 @@ threads sequences byte-arrays io.binary io.backend.unix
|
|||
io.streams.duplex io.backend io.pathnames io.sockets.private
|
||||
io.files.private io.encodings.utf8 math.parser continuations
|
||||
libc combinators system accessors destructors unix locals init
|
||||
classes.struct ;
|
||||
classes.struct alien.data ;
|
||||
|
||||
EXCLUDE: namespaces => bind ;
|
||||
EXCLUDE: io => read write ;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
USING: alien alien.accessors alien.c-types byte-arrays
|
||||
USING: alien alien.accessors alien.c-types alien.data byte-arrays
|
||||
continuations destructors io.ports io.timeouts io.sockets
|
||||
io.sockets.private io namespaces io.streams.duplex
|
||||
io.backend.windows io.sockets.windows io.backend.windows.nt
|
||||
|
|
|
@ -2,29 +2,29 @@
|
|||
! Copyright (C) 2007, 2009 Slava Pestov
|
||||
! Copyright (C) 2007, 2008 Doug Coleman
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien assocs continuations alien.destructors kernel
|
||||
USING: alien alien.c-types assocs continuations alien.destructors kernel
|
||||
namespaces accessors sets summary destructors destructors.private ;
|
||||
IN: libc
|
||||
|
||||
: errno ( -- int )
|
||||
"int" "factor" "err_no" { } alien-invoke ;
|
||||
int "factor" "err_no" { } alien-invoke ;
|
||||
|
||||
: clear-errno ( -- )
|
||||
"void" "factor" "clear_err_no" { } alien-invoke ;
|
||||
void "factor" "clear_err_no" { } alien-invoke ;
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: (malloc) ( size -- alien )
|
||||
"void*" "libc" "malloc" { "ulong" } alien-invoke ;
|
||||
void* "libc" "malloc" { ulong } alien-invoke ;
|
||||
|
||||
: (calloc) ( count size -- alien )
|
||||
"void*" "libc" "calloc" { "ulong" "ulong" } alien-invoke ;
|
||||
void* "libc" "calloc" { ulong ulong } alien-invoke ;
|
||||
|
||||
: (free) ( alien -- )
|
||||
"void" "libc" "free" { "void*" } alien-invoke ;
|
||||
void "libc" "free" { void* } alien-invoke ;
|
||||
|
||||
: (realloc) ( alien size -- newalien )
|
||||
"void*" "libc" "realloc" { "void*" "ulong" } alien-invoke ;
|
||||
void* "libc" "realloc" { void* ulong } alien-invoke ;
|
||||
|
||||
! We stick malloc-ptr instances in the global disposables set
|
||||
TUPLE: malloc-ptr value continuation ;
|
||||
|
@ -81,15 +81,15 @@ PRIVATE>
|
|||
>c-ptr [ delete-malloc ] [ (free) ] bi ;
|
||||
|
||||
: memcpy ( dst src size -- )
|
||||
"void" "libc" "memcpy" { "void*" "void*" "ulong" } alien-invoke ;
|
||||
void "libc" "memcpy" { void* void* ulong } alien-invoke ;
|
||||
|
||||
: memcmp ( a b size -- cmp )
|
||||
"int" "libc" "memcmp" { "void*" "void*" "ulong" } alien-invoke ;
|
||||
int "libc" "memcmp" { void* void* ulong } alien-invoke ;
|
||||
|
||||
: memory= ( a b size -- ? )
|
||||
memcmp 0 = ;
|
||||
|
||||
: strlen ( alien -- len )
|
||||
"size_t" "libc" "strlen" { "char*" } alien-invoke ;
|
||||
size_t "libc" "strlen" { char* } alien-invoke ;
|
||||
|
||||
DESTRUCTOR: free
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
USING: accessors alien alien.c-types arrays byte-arrays combinators
|
||||
combinators.short-circuit fry kernel locals macros
|
||||
math math.blas.ffi math.blas.vectors math.blas.vectors.private
|
||||
math.complex math.functions math.order functors words
|
||||
sequences sequences.merged sequences.private shuffle
|
||||
parser prettyprint.backend prettyprint.custom ascii
|
||||
specialized-arrays ;
|
||||
USING: accessors alien alien.c-types alien.data arrays
|
||||
byte-arrays combinators combinators.short-circuit fry
|
||||
kernel locals macros math math.blas.ffi math.blas.vectors
|
||||
math.blas.vectors.private math.complex math.functions
|
||||
math.order functors words sequences sequences.merged
|
||||
sequences.private shuffle parser prettyprint.backend
|
||||
prettyprint.custom ascii specialized-arrays ;
|
||||
FROM: alien.c-types => float ;
|
||||
SPECIALIZED-ARRAY: float
|
||||
SPECIALIZED-ARRAY: double
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel alien alien.c-types cpu.architecture libc ;
|
||||
USING: kernel alien alien.data cpu.architecture libc ;
|
||||
IN: math.vectors.simd.intrinsics
|
||||
|
||||
ERROR: bad-simd-call ;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2008 Joe Groff.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel opengl.gl alien.c-types continuations namespaces
|
||||
assocs alien alien.strings libc opengl math sequences combinators
|
||||
assocs alien alien.data alien.strings libc opengl math sequences combinators
|
||||
macros arrays io.encodings.ascii fry specialized-arrays
|
||||
destructors accessors ;
|
||||
SPECIALIZED-ARRAY: uint
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
USING: accessors alien.c-types byte-arrays
|
||||
USING: accessors alien.c-types alien.data byte-arrays
|
||||
combinators.short-circuit continuations destructors init kernel
|
||||
locals namespaces random windows.advapi32 windows.errors
|
||||
windows.kernel32 math.bitwise ;
|
||||
|
|
|
@ -4,7 +4,7 @@ specialized-arrays.private sequences alien.c-types accessors
|
|||
kernel arrays combinators compiler compiler.units classes.struct
|
||||
combinators.smart compiler.tree.debugger math libc destructors
|
||||
sequences.private multiline eval words vocabs namespaces
|
||||
assocs prettyprint ;
|
||||
assocs prettyprint alien.data ;
|
||||
FROM: alien.c-types => float ;
|
||||
|
||||
SPECIALIZED-ARRAY: int
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien alien.c-types alien.parser assocs
|
||||
USING: accessors alien alien.c-types alien.data alien.parser assocs
|
||||
byte-arrays classes compiler.units functors kernel lexer libc math
|
||||
math.vectors.specialization namespaces parser prettyprint.custom
|
||||
sequences sequences.private strings summary vocabs vocabs.loader
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
USING: help.markup help.syntax words alien.c-types assocs
|
||||
USING: help.markup help.syntax words alien.c-types alien.data assocs
|
||||
kernel math ;
|
||||
IN: tools.deploy.config
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien alien.c-types arrays byte-arrays combinators
|
||||
destructors generic io kernel libc math sequences system tr
|
||||
vocabs.loader words ;
|
||||
vocabs.loader words alien.data ;
|
||||
IN: tools.disassembler
|
||||
|
||||
GENERIC: disassemble ( obj -- )
|
||||
|
|
|
@ -4,7 +4,7 @@ USING: tools.disassembler namespaces combinators
|
|||
alien alien.syntax alien.c-types lexer parser kernel
|
||||
sequences layouts math math.order alien.libraries
|
||||
math.parser system make fry arrays libc destructors
|
||||
tools.disassembler.utils splitting ;
|
||||
tools.disassembler.utils splitting alien.data ;
|
||||
IN: tools.disassembler.udis
|
||||
|
||||
<<
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
! Copyright (C) 2006, 2008 Slava Pestov
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien alien.c-types alien.strings arrays assocs
|
||||
cocoa kernel math cocoa.messages cocoa.subclassing cocoa.classes
|
||||
cocoa.views cocoa.application cocoa.pasteboard cocoa.types
|
||||
cocoa.windows sequences io.encodings.utf8 ui ui.private ui.gadgets
|
||||
ui.gadgets.private ui.gadgets.worlds ui.gestures
|
||||
USING: accessors alien alien.c-types alien.data alien.strings
|
||||
arrays assocs cocoa kernel math cocoa.messages cocoa.subclassing
|
||||
cocoa.classes cocoa.views cocoa.application cocoa.pasteboard
|
||||
cocoa.types cocoa.windows sequences io.encodings.utf8 ui ui.private
|
||||
ui.gadgets ui.gadgets.private ui.gadgets.worlds ui.gestures
|
||||
core-foundation.strings core-graphics core-graphics.types threads
|
||||
combinators math.rectangles ;
|
||||
IN: ui.backend.cocoa.views
|
||||
|
|
|
@ -13,7 +13,7 @@ opengl ui.render math.bitwise locals accessors math.rectangles
|
|||
math.order calendar ascii sets io.encodings.utf16n
|
||||
windows.errors literals ui.pixel-formats
|
||||
ui.pixel-formats.private memoize classes
|
||||
specialized-arrays classes.struct ;
|
||||
specialized-arrays classes.struct alien.data ;
|
||||
SPECIALIZED-ARRAY: POINT
|
||||
IN: ui.backend.windows
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
USING: kernel alien.c-types alien.strings sequences math alien.syntax
|
||||
unix namespaces continuations threads assocs io.backend.unix
|
||||
io.encodings.utf8 unix.utilities fry ;
|
||||
USING: kernel alien.c-types alien.data alien.strings sequences
|
||||
math alien.syntax unix namespaces continuations threads assocs
|
||||
io.backend.unix io.encodings.utf8 unix.utilities fry ;
|
||||
IN: unix.process
|
||||
|
||||
! Low-level Unix process launching utilities. These are used
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien alien.c-types alien.strings
|
||||
USING: alien alien.c-types alien.data alien.strings
|
||||
combinators.short-circuit fry kernel layouts sequences accessors
|
||||
specialized-arrays ;
|
||||
IN: unix.utilities
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types alien.syntax combinators continuations
|
||||
io.encodings.string io.encodings.utf8 kernel sequences strings
|
||||
unix calendar system accessors unix.time calendar.unix
|
||||
vocabs.loader ;
|
||||
USING: alien.c-types alien.data alien.syntax combinators
|
||||
continuations io.encodings.string io.encodings.utf8 kernel
|
||||
sequences strings unix calendar system accessors unix.time
|
||||
calendar.unix vocabs.loader ;
|
||||
IN: unix.utmpx
|
||||
|
||||
CONSTANT: EMPTY 0
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
USING: alien alien.c-types alien.destructors windows.com.syntax
|
||||
windows.ole32 windows.types continuations kernel alien.syntax
|
||||
libc destructors accessors ;
|
||||
libc destructors accessors alien.data ;
|
||||
IN: windows.com
|
||||
|
||||
LIBRARY: ole32
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
USING: alien alien.c-types alien.accessors windows.com.syntax
|
||||
init windows.com.syntax.private windows.com continuations kernel
|
||||
namespaces windows.ole32 libc vocabs assocs accessors arrays
|
||||
sequences quotations combinators math words compiler.units
|
||||
destructors fry math.parser generalizations sets
|
||||
specialized-arrays windows.kernel32 classes.struct ;
|
||||
USING: alien alien.c-types alien.data alien.accessors
|
||||
windows.com.syntax init windows.com.syntax.private windows.com
|
||||
continuations kernel namespaces windows.ole32 libc vocabs
|
||||
assocs accessors arrays sequences quotations combinators math
|
||||
words compiler.units destructors fry math.parser generalizations
|
||||
sets specialized-arrays windows.kernel32 classes.struct ;
|
||||
SPECIALIZED-ARRAY: void*
|
||||
IN: windows.com.wrapper
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
USING: windows.dinput windows.kernel32 windows.ole32 windows.com
|
||||
windows.com.syntax alien alien.c-types alien.syntax kernel system namespaces
|
||||
combinators sequences fry math accessors macros words quotations
|
||||
libc continuations generalizations splitting locals assocs init
|
||||
specialized-arrays memoize classes.struct strings arrays ;
|
||||
windows.com.syntax alien alien.c-types alien.data alien.syntax
|
||||
kernel system namespaces combinators sequences fry math accessors
|
||||
macros words quotations libc continuations generalizations
|
||||
splitting locals assocs init specialized-arrays memoize
|
||||
classes.struct strings arrays ;
|
||||
SPECIALIZED-ARRAY: DIOBJECTDATAFORMAT
|
||||
IN: windows.dinput.constants
|
||||
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
USING: alien.strings io.encodings.utf16n windows.com
|
||||
windows.com.wrapper combinators windows.kernel32 windows.ole32
|
||||
windows.shell32 kernel accessors
|
||||
windows.shell32 kernel accessors windows.types
|
||||
prettyprint namespaces ui.tools.listener ui.tools.workspace
|
||||
alien.c-types alien sequences math ;
|
||||
alien.data alien sequences math ;
|
||||
SPECIALIZED-ARRAY: WCHAR
|
||||
IN: windows.dragdrop-listener
|
||||
|
||||
<< "WCHAR" require-c-array >>
|
||||
|
||||
: filenames-from-hdrop ( hdrop -- filenames )
|
||||
dup HEX: FFFFFFFF f 0 DragQueryFile ! get count of files
|
||||
[
|
||||
2dup f 0 DragQueryFile 1 + ! get size of filename buffer
|
||||
dup "WCHAR" <c-array>
|
||||
dup WCHAR <c-array>
|
||||
[ swap DragQueryFile drop ] keep
|
||||
utf16n alien>string
|
||||
] with map ;
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
USING: alien.c-types kernel locals math math.bitwise
|
||||
USING: alien.data kernel locals math math.bitwise
|
||||
windows.kernel32 sequences byte-arrays unicode.categories
|
||||
io.encodings.string io.encodings.utf16n alien.strings
|
||||
arrays literals ;
|
||||
arrays literals windows.types ;
|
||||
SPECIALIZED-ARRAY: TCHAR
|
||||
IN: windows.errors
|
||||
|
||||
<< "TCHAR" require-c-array >>
|
||||
|
||||
CONSTANT: ERROR_SUCCESS 0
|
||||
CONSTANT: ERROR_INVALID_FUNCTION 1
|
||||
CONSTANT: ERROR_FILE_NOT_FOUND 2
|
||||
|
@ -698,8 +697,6 @@ CONSTANT: FORMAT_MESSAGE_MAX_WIDTH_MASK HEX: 000000FF
|
|||
: make-lang-id ( lang1 lang2 -- n )
|
||||
10 shift bitor ; inline
|
||||
|
||||
<< "TCHAR" require-c-array >>
|
||||
|
||||
ERROR: error-message-failed id ;
|
||||
:: n>win32-error-string ( id -- string )
|
||||
{
|
||||
|
@ -709,7 +706,7 @@ ERROR: error-message-failed id ;
|
|||
f
|
||||
id
|
||||
LANG_NEUTRAL SUBLANG_DEFAULT make-lang-id
|
||||
32768 [ "TCHAR" <c-array> ] [ ] bi
|
||||
32768 [ TCHAR <c-array> ] [ ] bi
|
||||
f pick [ FormatMessage 0 = [ id error-message-failed ] when ] dip
|
||||
utf16n alien>string [ blank? ] trim ;
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
! Copyright (C) 2009 Joe Groff, Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types kernel combinators sequences
|
||||
math windows.gdi32 windows.types images destructors
|
||||
accessors fry locals classes.struct ;
|
||||
USING: alien.c-types alien.data kernel combinators
|
||||
sequences math windows.gdi32 windows.types images
|
||||
destructors accessors fry locals classes.struct ;
|
||||
IN: windows.offscreen
|
||||
|
||||
: (bitmap-info) ( dim -- BITMAPINFO )
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
USING: alien alien.syntax alien.c-types alien.strings math
|
||||
kernel sequences windows.errors windows.types io accessors
|
||||
USING: alien alien.syntax alien.c-types alien.data alien.strings
|
||||
math kernel sequences windows.errors windows.types io accessors
|
||||
math.order namespaces make math.parser windows.kernel32
|
||||
combinators locals specialized-arrays literals splitting
|
||||
grouping classes.struct combinators.smart ;
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
! add to this library and are wondering what part of the file to
|
||||
! modify, just find the function or data structure in the manual
|
||||
! and note the section.
|
||||
USING: accessors kernel arrays alien alien.c-types alien.strings
|
||||
alien.syntax classes.struct math math.bitwise words sequences
|
||||
namespaces continuations io io.encodings.ascii x11.syntax ;
|
||||
USING: accessors kernel arrays alien alien.c-types alien.data
|
||||
alien.strings alien.syntax classes.struct math math.bitwise words
|
||||
sequences namespaces continuations io io.encodings.ascii x11.syntax ;
|
||||
FROM: alien.c-types => short ;
|
||||
IN: x11.xlib
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
USING: alien.strings alien.c-types tools.test kernel libc
|
||||
USING: alien.strings alien.c-types alien.data tools.test kernel libc
|
||||
io.encodings.8-bit io.encodings.utf8 io.encodings.utf16
|
||||
io.encodings.utf16n io.encodings.ascii alien io.encodings.string ;
|
||||
IN: alien.strings.tests
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2009 Jeremy Hughes.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.inline alien.inline.syntax io.directories io.files
|
||||
kernel namespaces tools.test alien.c-types alien.structs ;
|
||||
kernel namespaces tools.test alien.c-types alien.data alien.structs ;
|
||||
IN: alien.inline.syntax.tests
|
||||
|
||||
DELETE-C-LIBRARY: test
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2009 Jeremy Hughes.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: help.markup help.syntax kernel quotations sequences
|
||||
strings alien alien.c-types math byte-arrays ;
|
||||
strings alien alien.c-types alien.data math byte-arrays ;
|
||||
IN: alien.marshall
|
||||
|
||||
<PRIVATE
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
USING: accessors alien alien.c-types alien.inline.types
|
||||
alien.marshall.private alien.strings byte-arrays classes
|
||||
combinators combinators.short-circuit destructors fry
|
||||
io.encodings.utf8 kernel libc sequences
|
||||
io.encodings.utf8 kernel libc sequences alien.data
|
||||
specialized-arrays strings unix.utilities vocabs.parser
|
||||
words libc.private locals generalizations math ;
|
||||
FROM: alien.c-types => float short ;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
USING: accessors alien alien.c-types alien.inline arrays
|
||||
combinators fry functors kernel lexer libc macros math
|
||||
sequences specialized-arrays libc.private
|
||||
combinators.short-circuit ;
|
||||
combinators.short-circuit alien.data ;
|
||||
SPECIALIZED-ARRAY: void*
|
||||
IN: alien.marshall.private
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
USING: accessors alien.c-types alien.marshall arrays assocs
|
||||
classes.tuple combinators destructors generalizations generic
|
||||
kernel libc locals parser quotations sequences slots words
|
||||
alien.structs lexer vocabs.parser fry effects ;
|
||||
alien.structs lexer vocabs.parser fry effects alien.data ;
|
||||
IN: alien.marshall.structs
|
||||
|
||||
<PRIVATE
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
USING: alien.c-types alien.syntax audio combinators
|
||||
combinators.short-circuit io io.binary io.encodings.binary
|
||||
io.files io.streams.byte-array kernel locals math
|
||||
sequences ;
|
||||
sequences alien.data ;
|
||||
IN: audio.wav
|
||||
|
||||
CONSTANT: RIFF-MAGIC "RIFF"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.accessors alien.c-types alien.syntax byte-arrays
|
||||
destructors generalizations hints kernel libc locals math math.order
|
||||
sequences sequences.private classes.struct accessors ;
|
||||
sequences sequences.private classes.struct accessors alien.data ;
|
||||
IN: benchmark.yuv-to-rgb
|
||||
|
||||
STRUCT: yuv_buffer
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
USING: kernel accessors sequences sequences.private destructors math namespaces
|
||||
locals openssl openssl.libcrypto byte-arrays bit-arrays.private
|
||||
alien.c-types alien.destructors ;
|
||||
alien.c-types alien.destructors alien.data ;
|
||||
|
||||
IN: ecdsa
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
! (c)2009 Joe Groff bsd license
|
||||
USING: accessors alien alien.c-types arrays
|
||||
USING: accessors alien alien.c-types alien.data arrays
|
||||
assocs classes classes.mixin classes.parser classes.singleton
|
||||
classes.tuple classes.tuple.private combinators combinators.tuple destructors fry
|
||||
generic generic.parser gpu gpu.buffers gpu.framebuffers
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
! (c)2009 Joe Groff bsd license
|
||||
USING: accessors alien alien.c-types alien.strings arrays assocs
|
||||
byte-arrays classes.mixin classes.parser classes.singleton
|
||||
classes.struct combinators combinators.short-circuit definitions
|
||||
destructors generic.parser gpu gpu.buffers hashtables images
|
||||
io.encodings.ascii io.files io.pathnames kernel lexer literals
|
||||
locals math math.parser memoize multiline namespaces opengl
|
||||
opengl.gl opengl.shaders parser quotations sequences
|
||||
USING: accessors alien alien.c-types alien.data alien.strings
|
||||
arrays assocs byte-arrays classes.mixin classes.parser
|
||||
classes.singleton classes.struct combinators combinators.short-circuit
|
||||
definitions destructors generic.parser gpu gpu.buffers hashtables
|
||||
images io.encodings.ascii io.files io.pathnames kernel lexer
|
||||
literals locals math math.parser memoize multiline namespaces
|
||||
opengl opengl.gl opengl.shaders parser quotations sequences
|
||||
specialized-arrays splitting strings tr ui.gadgets.worlds
|
||||
variants vectors vocabs vocabs.loader vocabs.parser words
|
||||
words.constant ;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! (c)2009 Joe Groff bsd license
|
||||
USING: accessors alien.c-types arrays byte-arrays combinators gpu
|
||||
kernel literals math math.rectangles opengl opengl.gl sequences
|
||||
variants specialized-arrays ;
|
||||
USING: accessors alien.c-types alien.data arrays byte-arrays
|
||||
combinators gpu kernel literals math math.rectangles opengl
|
||||
opengl.gl sequences variants specialized-arrays ;
|
||||
QUALIFIED-WITH: alien.c-types c
|
||||
FROM: math => float ;
|
||||
SPECIALIZED-ARRAY: int
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
USING: alien.c-types alien.syntax half-floats kernel math tools.test
|
||||
specialized-arrays ;
|
||||
specialized-arrays alien.data ;
|
||||
SPECIALIZED-ARRAY: half
|
||||
IN: half-floats.tests
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
! (c)2009 Joe Groff bsd license
|
||||
USING: accessors alien.c-types alien.syntax kernel math math.order ;
|
||||
USING: accessors alien.c-types alien.data alien.syntax kernel math math.order ;
|
||||
IN: half-floats
|
||||
|
||||
: half>bits ( float -- bits )
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien.c-types alien.syntax combinators io.ports
|
||||
io.streams.duplex system kernel math math.bitwise
|
||||
vocabs.loader unix io.serial io.serial.unix.termios io.backend.unix ;
|
||||
USING: accessors alien.c-types alien.syntax alien.data
|
||||
combinators io.ports io.streams.duplex system kernel
|
||||
math math.bitwise vocabs.loader unix io.serial
|
||||
io.serial.unix.termios io.backend.unix ;
|
||||
IN: io.serial.unix
|
||||
|
||||
<< {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
! (c)2009 Joe Groff bsd license
|
||||
USING: accessors alien alien.c-types destructors kernel libc math ;
|
||||
USING: accessors alien alien.c-types alien.data destructors kernel libc math ;
|
||||
IN: memory.piles
|
||||
|
||||
TUPLE: pile
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types system-info kernel math namespaces
|
||||
USING: alien.c-types alien.data system-info kernel math namespaces
|
||||
windows windows.kernel32 system-info.backend system ;
|
||||
IN: system-info.windows.ce
|
||||
|
||||
|
|
Loading…
Reference in New Issue