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
|
IN: alien.arrays
|
||||||
USING: help.syntax help.markup byte-arrays alien.c-types ;
|
|
||||||
|
|
||||||
ARTICLE: "c-arrays" "C arrays"
|
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" } "."
|
"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.
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien alien.strings alien.c-types alien.accessors
|
USING: alien alien.strings alien.c-types alien.data alien.accessors
|
||||||
arrays words sequences math kernel namespaces fry libc cpu.architecture
|
arrays words sequences math kernel namespaces fry cpu.architecture
|
||||||
io.encodings.utf8 accessors ;
|
io.encodings.utf8 accessors ;
|
||||||
IN: alien.arrays
|
IN: alien.arrays
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,25 @@
|
||||||
IN: alien.c-types
|
|
||||||
USING: alien help.syntax help.markup libc kernel.private
|
USING: alien help.syntax help.markup libc kernel.private
|
||||||
byte-arrays math strings hashtables alien.syntax alien.strings sequences
|
byte-arrays math strings hashtables alien.syntax alien.strings sequences
|
||||||
io.encodings.string debugger destructors vocabs.loader ;
|
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>
|
HELP: <c-type>
|
||||||
{ $values { "type" hashtable } }
|
{ $values { "type" hashtable } }
|
||||||
|
@ -20,24 +38,6 @@ HELP: c-type
|
||||||
{ $description "Looks up a C type by name." }
|
{ $description "Looks up a C type by name." }
|
||||||
{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ;
|
{ $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
|
HELP: c-getter
|
||||||
{ $values { "name" string } { "quot" { $quotation "( c-ptr n -- obj )" } } }
|
{ $values { "name" string } { "quot" { $quotation "( c-ptr n -- obj )" } } }
|
||||||
{ $description "Outputs a quotation which reads values of this C type from a C structure." }
|
{ $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." }
|
{ $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." } ;
|
{ $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
|
HELP: box-parameter
|
||||||
{ $values { "n" integer } { "ctype" string } }
|
{ $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." }
|
{ $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." }
|
{ $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." } ;
|
{ $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"
|
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."
|
"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
|
$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."
|
"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
|
$nl
|
||||||
"Structure and union types are specified by the name of the structure or union." ;
|
"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.
|
! Copyright (C) 2004, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
namespaces make parser sequences strings words splitting math.parser
|
||||||
cpu.architecture alien alien.accessors alien.strings quotations
|
cpu.architecture alien alien.accessors alien.strings quotations
|
||||||
layouts system compiler.units io io.files io.encodings.binary
|
layouts system compiler.units io io.files io.encodings.binary
|
||||||
|
@ -22,8 +22,6 @@ SYMBOLS:
|
||||||
DEFER: <int>
|
DEFER: <int>
|
||||||
DEFER: *char
|
DEFER: *char
|
||||||
|
|
||||||
: little-endian? ( -- ? ) 1 <int> *char 1 = ; foldable
|
|
||||||
|
|
||||||
TUPLE: abstract-c-type
|
TUPLE: abstract-c-type
|
||||||
{ class class initial: object }
|
{ class class initial: object }
|
||||||
{ boxed-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
|
! These words being foldable means that words need to be
|
||||||
! recompiled if a C type is redefined. Even so, folding the
|
! recompiled if a C type is redefined. Even so, folding the
|
||||||
! size facilitates some optimizations.
|
! 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 )
|
GENERIC: c-type-class ( name -- class )
|
||||||
|
|
||||||
M: abstract-c-type c-type-class 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 ;
|
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
|
GENERIC: stack-size ( type -- size ) foldable
|
||||||
|
|
||||||
M: c-type-name stack-size c-type stack-size ;
|
M: c-type-name stack-size c-type stack-size ;
|
||||||
|
|
||||||
M: c-type stack-size size>> cell align ;
|
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
|
GENERIC: byte-length ( seq -- n ) flushable
|
||||||
|
|
||||||
M: byte-array byte-length length ; inline
|
M: byte-array byte-length length ; inline
|
||||||
|
|
||||||
M: f byte-length drop 0 ; inline
|
M: f byte-length drop 0 ; inline
|
||||||
|
|
||||||
|
MIXIN: value-type
|
||||||
|
|
||||||
: c-getter ( name -- quot )
|
: c-getter ( name -- quot )
|
||||||
c-type-getter [
|
c-type-getter [
|
||||||
[ "Cannot read struct fields with this type" throw ]
|
[ "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 ]
|
[ "Cannot write struct fields with this type" throw ]
|
||||||
] unless* ;
|
] 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 )
|
: array-accessor ( type quot -- def )
|
||||||
[
|
[
|
||||||
\ swap , [ heap-size , [ * >fixnum ] % ] [ % ] bi*
|
\ swap , [ heap-size , [ * >fixnum ] % ] [ % ] bi*
|
||||||
|
@ -352,22 +282,15 @@ M: long-long-type box-return ( type -- )
|
||||||
|
|
||||||
: define-out ( name -- )
|
: define-out ( name -- )
|
||||||
[ "alien.c-types" constructor-word ]
|
[ "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 ;
|
(( value -- c-ptr )) define-inline ;
|
||||||
|
|
||||||
: >c-bool ( ? -- int ) 1 0 ? ; inline
|
|
||||||
|
|
||||||
: c-bool> ( int -- ? ) 0 = not ; inline
|
|
||||||
|
|
||||||
: define-primitive-type ( type name -- )
|
: define-primitive-type ( type name -- )
|
||||||
[ typedef ]
|
[ typedef ]
|
||||||
[ name>> define-deref ]
|
[ name>> define-deref ]
|
||||||
[ name>> define-out ]
|
[ name>> define-out ]
|
||||||
tri ;
|
tri ;
|
||||||
|
|
||||||
: malloc-file-contents ( path -- alien len )
|
|
||||||
binary file-contents [ malloc-byte-array ] [ length ] bi ;
|
|
||||||
|
|
||||||
: if-void ( type true false -- )
|
: if-void ( type true false -- )
|
||||||
pick void? [ drop nip call ] [ nip call ] if ; inline
|
pick void? [ drop nip call ] [ nip call ] if ; inline
|
||||||
|
|
||||||
|
@ -510,8 +433,8 @@ SYMBOLS:
|
||||||
\ uchar define-primitive-type
|
\ uchar define-primitive-type
|
||||||
|
|
||||||
<c-type>
|
<c-type>
|
||||||
[ alien-unsigned-1 c-bool> ] >>getter
|
[ alien-unsigned-1 0 = not ] >>getter
|
||||||
[ [ >c-bool ] 2dip set-alien-unsigned-1 ] >>setter
|
[ [ 1 0 ? ] 2dip set-alien-unsigned-1 ] >>setter
|
||||||
1 >>size
|
1 >>size
|
||||||
1 >>align
|
1 >>align
|
||||||
"box_boolean" >>boxer
|
"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
|
! (c) 2009 Joe Groff, see BSD license
|
||||||
USING: accessors alien alien.c-types alien.complex
|
USING: accessors alien alien.c-types alien.complex
|
||||||
alien.fortran alien.fortran.private alien.strings classes.struct
|
alien.data alien.fortran alien.fortran.private alien.strings
|
||||||
arrays assocs byte-arrays combinators fry
|
classes.struct arrays assocs byte-arrays combinators fry
|
||||||
generalizations io.encodings.ascii kernel macros
|
generalizations io.encodings.ascii kernel macros
|
||||||
macros.expander namespaces sequences shuffle tools.test ;
|
macros.expander namespaces sequences shuffle tools.test ;
|
||||||
IN: alien.fortran.tests
|
IN: alien.fortran.tests
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! (c) 2009 Joe Groff, see BSD license
|
! (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
|
alien.strings alien.syntax arrays ascii assocs
|
||||||
byte-arrays combinators combinators.short-circuit fry generalizations
|
byte-arrays combinators combinators.short-circuit fry generalizations
|
||||||
kernel lexer macros math math.parser namespaces parser sequences
|
kernel lexer macros math math.parser namespaces parser sequences
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2007, 2008 Slava Pestov.
|
! Copyright (C) 2007, 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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 ;
|
threads words kernel.private kernel io.encodings.utf8 eval ;
|
||||||
IN: alien.remote-control
|
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 ;
|
sequences io arrays kernel words assocs namespaces ;
|
||||||
IN: alien.structs
|
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 ;
|
sequences system libc words vocabs namespaces layouts ;
|
||||||
IN: alien.structs.tests
|
IN: alien.structs.tests
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2007, 2008 Slava Pestov.
|
! Copyright (C) 2007, 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
kernel.private sequences sequences.private byte-arrays
|
||||||
parser prettyprint.custom fry ;
|
parser prettyprint.custom fry ;
|
||||||
IN: bit-arrays
|
IN: bit-arrays
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2008 Slava Pestov
|
! Copyright (C) 2008 Slava Pestov
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors byte-arrays alien.c-types kernel continuations
|
USING: accessors byte-arrays alien.c-types alien.data kernel
|
||||||
destructors sequences io openssl openssl.libcrypto checksums
|
continuations destructors sequences io openssl openssl.libcrypto
|
||||||
checksums.stream ;
|
checksums checksums.stream ;
|
||||||
IN: checksums.openssl
|
IN: checksums.openssl
|
||||||
|
|
||||||
ERROR: unknown-digest name ;
|
ERROR: unknown-digest name ;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! (c)Joe Groff bsd license
|
! (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
|
assocs classes classes.struct combinators combinators.short-circuit
|
||||||
continuations fry kernel libc make math math.parser mirrors
|
continuations fry kernel libc make math math.parser mirrors
|
||||||
prettyprint.backend prettyprint.custom prettyprint.sections
|
prettyprint.backend prettyprint.custom prettyprint.sections
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! (c)Joe Groff bsd license
|
! (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
|
assocs byte-arrays classes.struct classes.tuple.private
|
||||||
combinators compiler.tree.debugger compiler.units destructors
|
combinators compiler.tree.debugger compiler.units destructors
|
||||||
io.encodings.utf8 io.pathnames io.streams.string kernel libc
|
io.encodings.utf8 io.pathnames io.streams.string kernel libc
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! (c)Joe Groff bsd license
|
! (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
|
byte-arrays classes classes.parser classes.tuple classes.tuple.parser
|
||||||
classes.tuple.private combinators combinators.short-circuit
|
classes.tuple.private combinators combinators.short-circuit
|
||||||
combinators.smart cpu.architecture definitions functors.backend
|
combinators.smart cpu.architecture definitions functors.backend
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
! Copyright (C) 2008 Joe Groff.
|
! Copyright (C) 2008 Joe Groff.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel classes.struct cocoa cocoa.types alien.c-types
|
USING: accessors kernel classes.struct cocoa cocoa.runtime cocoa.types alien.data
|
||||||
locals math sequences vectors fry libc destructors ;
|
locals math sequences vectors fry libc destructors specialized-arrays ;
|
||||||
|
SPECIALIZED-ARRAY: id
|
||||||
IN: cocoa.enumeration
|
IN: cocoa.enumeration
|
||||||
|
|
||||||
<< "id" require-c-array >>
|
|
||||||
|
|
||||||
CONSTANT: NS-EACH-BUFFER-SIZE 16
|
CONSTANT: NS-EACH-BUFFER-SIZE 16
|
||||||
|
|
||||||
: with-enumeration-buffers ( quot -- )
|
: with-enumeration-buffers ( quot -- )
|
||||||
'[
|
'[
|
||||||
NSFastEnumerationState malloc-struct &free
|
NSFastEnumerationState malloc-struct &free
|
||||||
NS-EACH-BUFFER-SIZE "id" malloc-array &free
|
NS-EACH-BUFFER-SIZE id malloc-array &free
|
||||||
NS-EACH-BUFFER-SIZE
|
NS-EACH-BUFFER-SIZE
|
||||||
@
|
@
|
||||||
] with-destructors ; inline
|
] with-destructors ; inline
|
||||||
|
@ -19,7 +18,7 @@ CONSTANT: NS-EACH-BUFFER-SIZE 16
|
||||||
:: (NSFastEnumeration-each) ( object quot: ( elt -- ) state stackbuf count -- )
|
:: (NSFastEnumeration-each) ( object quot: ( elt -- ) state stackbuf count -- )
|
||||||
object state stackbuf count -> countByEnumeratingWithState:objects:count: :> items-count
|
object state stackbuf count -> countByEnumeratingWithState:objects:count: :> items-count
|
||||||
items-count 0 = [
|
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
|
items-count iota [ items nth quot call ] each
|
||||||
object quot state stackbuf count (NSFastEnumeration-each)
|
object quot state stackbuf count (NSFastEnumeration-each)
|
||||||
] unless ; inline recursive
|
] unless ; inline recursive
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
USING: strings arrays hashtables assocs sequences fry macros
|
USING: strings arrays hashtables assocs sequences fry macros
|
||||||
cocoa.messages cocoa.classes cocoa.application cocoa kernel
|
cocoa.messages cocoa.classes cocoa.application cocoa kernel
|
||||||
namespaces io.backend math cocoa.enumeration byte-arrays
|
namespaces io.backend math cocoa.enumeration byte-arrays
|
||||||
combinators alien.c-types words core-foundation quotations
|
combinators alien.c-types alien.data words core-foundation
|
||||||
core-foundation.data core-foundation.utilities ;
|
quotations core-foundation.data core-foundation.utilities ;
|
||||||
IN: cocoa.plists
|
IN: cocoa.plists
|
||||||
|
|
||||||
: >plist ( value -- plist ) >cf -> autorelease ;
|
: >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
|
strings tools.test words continuations sequences.private
|
||||||
hashtables.private byte-arrays system random layouts vectors
|
hashtables.private byte-arrays system random layouts vectors
|
||||||
sbufs strings.private slots.private alien math.order
|
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 ;
|
namespaces libc io.encodings.ascii classes compiler ;
|
||||||
FROM: math => float ;
|
FROM: math => float ;
|
||||||
IN: compiler.tests.intrinsics
|
IN: compiler.tests.intrinsics
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors assocs sequences kernel combinators make math
|
USING: accessors assocs sequences kernel combinators make math
|
||||||
math.order math.ranges system namespaces locals layouts words
|
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
|
cpu.ppc.assembler cpu.ppc.assembler.backend compiler.cfg.registers
|
||||||
compiler.cfg.instructions compiler.cfg.comparisons
|
compiler.cfg.instructions compiler.cfg.comparisons
|
||||||
compiler.codegen.fixup compiler.cfg.intrinsics
|
compiler.codegen.fixup compiler.cfg.intrinsics
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: arrays continuations db io kernel math namespaces
|
USING: arrays continuations db io kernel math namespaces
|
||||||
quotations sequences db.postgresql.ffi alien alien.c-types
|
quotations sequences db.postgresql.ffi alien alien.c-types
|
||||||
db.types tools.walker ascii splitting math.parser combinators
|
alien.data db.types tools.walker ascii splitting math.parser
|
||||||
libc calendar.format byte-arrays destructors prettyprint
|
combinators libc calendar.format byte-arrays destructors
|
||||||
accessors strings serialize io.encodings.binary io.encodings.utf8
|
prettyprint accessors strings serialize io.encodings.binary
|
||||||
alien.strings io.streams.byte-array summary present urls
|
io.encodings.utf8 alien.strings io.streams.byte-array summary
|
||||||
specialized-arrays db.private ;
|
present urls specialized-arrays db.private ;
|
||||||
SPECIALIZED-ARRAY: uint
|
SPECIALIZED-ARRAY: uint
|
||||||
SPECIALIZED-ARRAY: void*
|
SPECIALIZED-ARRAY: void*
|
||||||
IN: db.postgresql.lib
|
IN: db.postgresql.lib
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008 Chris Double, Doug Coleman.
|
! Copyright (C) 2008 Chris Double, Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
namespaces sequences db.sqlite.ffi db combinators
|
||||||
continuations db.types calendar.format serialize
|
continuations db.types calendar.format serialize
|
||||||
io.streams.byte-array byte-arrays io.encodings.binary
|
io.streams.byte-array byte-arrays io.encodings.binary
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien alien.c-types alien.strings alien.syntax kernel
|
USING: alien alien.c-types alien.data alien.strings
|
||||||
layouts sequences system unix environment io.encodings.utf8
|
alien.syntax kernel layouts sequences system unix
|
||||||
unix.utilities vocabs.loader combinators alien.accessors ;
|
environment io.encodings.utf8 unix.utilities vocabs.loader
|
||||||
|
combinators alien.accessors ;
|
||||||
IN: environment.unix
|
IN: environment.unix
|
||||||
|
|
||||||
HOOK: environ os ( -- void* )
|
HOOK: environ os ( -- void* )
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.strings fry io.encodings.utf16n kernel
|
USING: alien.strings fry io.encodings.utf16n kernel
|
||||||
splitting windows windows.kernel32 system environment
|
splitting windows windows.kernel32 windows.types system
|
||||||
alien.c-types sequences windows.errors io.streams.memory
|
environment alien.data sequences windows.errors
|
||||||
io.encodings io ;
|
io.streams.memory io.encodings io ;
|
||||||
|
SPECIALIZED-ARRAY: TCHAR
|
||||||
IN: environment.winnt
|
IN: environment.winnt
|
||||||
|
|
||||||
<< "TCHAR" require-c-array >>
|
|
||||||
|
|
||||||
M: winnt os-env ( key -- value )
|
M: winnt os-env ( key -- value )
|
||||||
MAX_UNICODE_PATH "TCHAR" <c-array>
|
MAX_UNICODE_PATH TCHAR <c-array>
|
||||||
[ dup length GetEnvironmentVariable ] keep over 0 = [
|
[ dup length GetEnvironmentVariable ] keep over 0 = [
|
||||||
2drop f
|
2drop f
|
||||||
] [
|
] [
|
||||||
|
|
|
@ -6,7 +6,7 @@ math.rectangles namespaces parser sequences shuffle
|
||||||
specialized-arrays ui.backend.windows vectors windows.com
|
specialized-arrays ui.backend.windows vectors windows.com
|
||||||
windows.dinput windows.dinput.constants windows.errors
|
windows.dinput windows.dinput.constants windows.errors
|
||||||
windows.kernel32 windows.messages windows.ole32
|
windows.kernel32 windows.messages windows.ole32
|
||||||
windows.user32 classes.struct ;
|
windows.user32 classes.struct alien.data ;
|
||||||
SPECIALIZED-ARRAY: DIDEVICEOBJECTDATA
|
SPECIALIZED-ARRAY: DIDEVICEOBJECTDATA
|
||||||
IN: game-input.dinput
|
IN: game-input.dinput
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: sequences sequences.private math alien.c-types
|
USING: sequences sequences.private math
|
||||||
accessors ;
|
accessors alien.data ;
|
||||||
IN: game-input.dinput.keys-array
|
IN: game-input.dinput.keys-array
|
||||||
|
|
||||||
TUPLE: keys-array
|
TUPLE: keys-array
|
||||||
|
|
|
@ -3,7 +3,8 @@ kernel cocoa.enumeration destructors math.parser cocoa.application
|
||||||
sequences locals combinators.short-circuit threads
|
sequences locals combinators.short-circuit threads
|
||||||
namespaces assocs arrays combinators hints alien
|
namespaces assocs arrays combinators hints alien
|
||||||
core-foundation.run-loop accessors sequences.private
|
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
|
IN: game-input.iokit
|
||||||
|
|
||||||
SINGLETON: iokit-game-input-backend
|
SINGLETON: iokit-game-input-backend
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.c-types destructors fry images kernel
|
USING: accessors alien.c-types alien.data destructors fry images
|
||||||
libc math sequences ;
|
kernel libc math sequences ;
|
||||||
IN: images.memory
|
IN: images.memory
|
||||||
|
|
||||||
! Some code shared by core-graphics and cairo for constructing
|
! Some code shared by core-graphics and cairo for constructing
|
||||||
|
@ -27,4 +27,4 @@ PRIVATE>
|
||||||
: make-memory-bitmap ( dim quot -- image )
|
: make-memory-bitmap ( dim quot -- image )
|
||||||
'[
|
'[
|
||||||
[ malloc-bitmap-data ] keep _ [ <bitmap-image> ] 2bi
|
[ 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
|
destructors generic io.mmap io.ports io.backend.windows io.files.windows
|
||||||
kernel libc math math.bitwise namespaces quotations sequences windows
|
kernel libc math math.bitwise namespaces quotations sequences windows
|
||||||
windows.advapi32 windows.kernel32 io.backend system accessors
|
windows.advapi32 windows.kernel32 io.backend system accessors
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
IN: io.buffers.tests
|
IN: io.buffers.tests
|
||||||
USING: alien alien.c-types io.buffers kernel kernel.private libc
|
USING: alien alien.c-types alien.data io.buffers kernel
|
||||||
sequences tools.test namespaces byte-arrays strings accessors
|
kernel.private libc sequences tools.test namespaces byte-arrays
|
||||||
destructors ;
|
strings accessors destructors ;
|
||||||
|
|
||||||
: buffer-set ( string buffer -- )
|
: buffer-set ( string buffer -- )
|
||||||
over >byte-array over ptr>> byte-array>memory
|
over >byte-array over ptr>> byte-array>memory
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
! Copyright (C) 2006, 2008 Slava Pestov.
|
! Copyright (C) 2006, 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien alien.accessors alien.c-types
|
USING: accessors alien alien.accessors alien.c-types
|
||||||
alien.syntax kernel libc math sequences byte-arrays strings
|
alien.data alien.syntax kernel libc math sequences byte-arrays
|
||||||
hints math.order destructors combinators ;
|
strings hints math.order destructors combinators ;
|
||||||
IN: io.buffers
|
IN: io.buffers
|
||||||
|
|
||||||
TUPLE: buffer
|
TUPLE: buffer
|
||||||
|
|
|
@ -6,7 +6,7 @@ windows.time windows accessors alien.c-types combinators
|
||||||
generalizations system alien.strings io.encodings.utf16n
|
generalizations system alien.strings io.encodings.utf16n
|
||||||
sequences splitting windows.errors fry continuations destructors
|
sequences splitting windows.errors fry continuations destructors
|
||||||
calendar ascii combinators.short-circuit locals classes.struct
|
calendar ascii combinators.short-circuit locals classes.struct
|
||||||
specialized-arrays ;
|
specialized-arrays alien.data ;
|
||||||
SPECIALIZED-ARRAY: ushort
|
SPECIALIZED-ARRAY: ushort
|
||||||
IN: io.files.info.windows
|
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
|
windows windows.kernel32 windows.time calendar combinators
|
||||||
math.functions sequences namespaces make words system
|
math.functions sequences namespaces make words system
|
||||||
destructors accessors math.bitwise continuations windows.errors
|
destructors accessors math.bitwise continuations windows.errors
|
||||||
arrays byte-arrays generalizations ;
|
arrays byte-arrays generalizations alien.data ;
|
||||||
IN: io.files.windows
|
IN: io.files.windows
|
||||||
|
|
||||||
: open-file ( path access-mode create-mode flags -- handle )
|
: open-file ( path access-mode create-mode flags -- handle )
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: continuations destructors io.files io.files.info
|
USING: continuations destructors io.files io.files.info
|
||||||
io.backend kernel quotations system alien alien.accessors
|
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 ;
|
math ;
|
||||||
IN: io.mmap
|
IN: io.mmap
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008 Doug Coleman, Slava Pestov.
|
! Copyright (C) 2008 Doug Coleman, Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien alien.c-types alien.strings libc destructors locals
|
USING: alien alien.c-types alien.data alien.strings libc destructors
|
||||||
kernel math assocs namespaces make continuations sequences
|
locals kernel math assocs namespaces make continuations sequences
|
||||||
hashtables sorting arrays combinators math.bitwise strings
|
hashtables sorting arrays combinators math.bitwise strings
|
||||||
system accessors threads splitting io.backend io.backend.windows
|
system accessors threads splitting io.backend io.backend.windows
|
||||||
io.backend.windows.nt io.files.windows.nt io.monitors io.ports
|
io.backend.windows.nt io.files.windows.nt io.monitors io.ports
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
|
! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors byte-arrays kernel sequences namespaces math
|
USING: accessors byte-arrays kernel sequences namespaces math
|
||||||
math.order combinators init alien alien.c-types alien.strings
|
math.order combinators init alien alien.c-types alien.data
|
||||||
libc continuations destructors summary splitting assocs random
|
alien.strings libc continuations destructors summary splitting
|
||||||
math.parser locals unicode.case openssl openssl.libcrypto
|
assocs random math.parser locals unicode.case openssl
|
||||||
openssl.libssl io.backend io.ports io.pathnames
|
openssl.libcrypto openssl.libssl io.backend io.ports io.pathnames
|
||||||
io.encodings.8-bit io.timeouts io.sockets.secure ;
|
io.encodings.8-bit io.timeouts io.sockets.secure ;
|
||||||
IN: io.sockets.secure.openssl
|
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
|
alien.strings io.binary accessors destructors classes byte-arrays
|
||||||
parser alien.c-types math.parser splitting grouping math assocs
|
parser alien.c-types math.parser splitting grouping math assocs
|
||||||
summary system vocabs.loader combinators present fry vocabs.parser
|
summary system vocabs.loader combinators present fry vocabs.parser
|
||||||
classes.struct ;
|
classes.struct alien.data ;
|
||||||
IN: io.sockets
|
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.streams.duplex io.backend io.pathnames io.sockets.private
|
||||||
io.files.private io.encodings.utf8 math.parser continuations
|
io.files.private io.encodings.utf8 math.parser continuations
|
||||||
libc combinators system accessors destructors unix locals init
|
libc combinators system accessors destructors unix locals init
|
||||||
classes.struct ;
|
classes.struct alien.data ;
|
||||||
|
|
||||||
EXCLUDE: namespaces => bind ;
|
EXCLUDE: namespaces => bind ;
|
||||||
EXCLUDE: io => read write ;
|
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
|
continuations destructors io.ports io.timeouts io.sockets
|
||||||
io.sockets.private io namespaces io.streams.duplex
|
io.sockets.private io namespaces io.streams.duplex
|
||||||
io.backend.windows io.sockets.windows io.backend.windows.nt
|
io.backend.windows io.sockets.windows io.backend.windows.nt
|
||||||
|
|
|
@ -2,29 +2,29 @@
|
||||||
! Copyright (C) 2007, 2009 Slava Pestov
|
! Copyright (C) 2007, 2009 Slava Pestov
|
||||||
! Copyright (C) 2007, 2008 Doug Coleman
|
! Copyright (C) 2007, 2008 Doug Coleman
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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 ;
|
namespaces accessors sets summary destructors destructors.private ;
|
||||||
IN: libc
|
IN: libc
|
||||||
|
|
||||||
: errno ( -- int )
|
: errno ( -- int )
|
||||||
"int" "factor" "err_no" { } alien-invoke ;
|
int "factor" "err_no" { } alien-invoke ;
|
||||||
|
|
||||||
: clear-errno ( -- )
|
: clear-errno ( -- )
|
||||||
"void" "factor" "clear_err_no" { } alien-invoke ;
|
void "factor" "clear_err_no" { } alien-invoke ;
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: (malloc) ( size -- alien )
|
: (malloc) ( size -- alien )
|
||||||
"void*" "libc" "malloc" { "ulong" } alien-invoke ;
|
void* "libc" "malloc" { ulong } alien-invoke ;
|
||||||
|
|
||||||
: (calloc) ( count size -- alien )
|
: (calloc) ( count size -- alien )
|
||||||
"void*" "libc" "calloc" { "ulong" "ulong" } alien-invoke ;
|
void* "libc" "calloc" { ulong ulong } alien-invoke ;
|
||||||
|
|
||||||
: (free) ( alien -- )
|
: (free) ( alien -- )
|
||||||
"void" "libc" "free" { "void*" } alien-invoke ;
|
void "libc" "free" { void* } alien-invoke ;
|
||||||
|
|
||||||
: (realloc) ( alien size -- newalien )
|
: (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
|
! We stick malloc-ptr instances in the global disposables set
|
||||||
TUPLE: malloc-ptr value continuation ;
|
TUPLE: malloc-ptr value continuation ;
|
||||||
|
@ -81,15 +81,15 @@ PRIVATE>
|
||||||
>c-ptr [ delete-malloc ] [ (free) ] bi ;
|
>c-ptr [ delete-malloc ] [ (free) ] bi ;
|
||||||
|
|
||||||
: memcpy ( dst src size -- )
|
: 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 )
|
: 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 -- ? )
|
: memory= ( a b size -- ? )
|
||||||
memcmp 0 = ;
|
memcmp 0 = ;
|
||||||
|
|
||||||
: strlen ( alien -- len )
|
: strlen ( alien -- len )
|
||||||
"size_t" "libc" "strlen" { "char*" } alien-invoke ;
|
size_t "libc" "strlen" { char* } alien-invoke ;
|
||||||
|
|
||||||
DESTRUCTOR: free
|
DESTRUCTOR: free
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
USING: accessors alien alien.c-types arrays byte-arrays combinators
|
USING: accessors alien alien.c-types alien.data arrays
|
||||||
combinators.short-circuit fry kernel locals macros
|
byte-arrays combinators combinators.short-circuit fry
|
||||||
math math.blas.ffi math.blas.vectors math.blas.vectors.private
|
kernel locals macros math math.blas.ffi math.blas.vectors
|
||||||
math.complex math.functions math.order functors words
|
math.blas.vectors.private math.complex math.functions
|
||||||
sequences sequences.merged sequences.private shuffle
|
math.order functors words sequences sequences.merged
|
||||||
parser prettyprint.backend prettyprint.custom ascii
|
sequences.private shuffle parser prettyprint.backend
|
||||||
specialized-arrays ;
|
prettyprint.custom ascii specialized-arrays ;
|
||||||
FROM: alien.c-types => float ;
|
FROM: alien.c-types => float ;
|
||||||
SPECIALIZED-ARRAY: float
|
SPECIALIZED-ARRAY: float
|
||||||
SPECIALIZED-ARRAY: double
|
SPECIALIZED-ARRAY: double
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! Copyright (C) 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
IN: math.vectors.simd.intrinsics
|
||||||
|
|
||||||
ERROR: bad-simd-call ;
|
ERROR: bad-simd-call ;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008 Joe Groff.
|
! Copyright (C) 2008 Joe Groff.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel opengl.gl alien.c-types continuations namespaces
|
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
|
macros arrays io.encodings.ascii fry specialized-arrays
|
||||||
destructors accessors ;
|
destructors accessors ;
|
||||||
SPECIALIZED-ARRAY: uint
|
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
|
combinators.short-circuit continuations destructors init kernel
|
||||||
locals namespaces random windows.advapi32 windows.errors
|
locals namespaces random windows.advapi32 windows.errors
|
||||||
windows.kernel32 math.bitwise ;
|
windows.kernel32 math.bitwise ;
|
||||||
|
|
|
@ -4,7 +4,7 @@ specialized-arrays.private sequences alien.c-types accessors
|
||||||
kernel arrays combinators compiler compiler.units classes.struct
|
kernel arrays combinators compiler compiler.units classes.struct
|
||||||
combinators.smart compiler.tree.debugger math libc destructors
|
combinators.smart compiler.tree.debugger math libc destructors
|
||||||
sequences.private multiline eval words vocabs namespaces
|
sequences.private multiline eval words vocabs namespaces
|
||||||
assocs prettyprint ;
|
assocs prettyprint alien.data ;
|
||||||
FROM: alien.c-types => float ;
|
FROM: alien.c-types => float ;
|
||||||
|
|
||||||
SPECIALIZED-ARRAY: int
|
SPECIALIZED-ARRAY: int
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008, 2009 Slava Pestov.
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
byte-arrays classes compiler.units functors kernel lexer libc math
|
||||||
math.vectors.specialization namespaces parser prettyprint.custom
|
math.vectors.specialization namespaces parser prettyprint.custom
|
||||||
sequences sequences.private strings summary vocabs vocabs.loader
|
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 ;
|
kernel math ;
|
||||||
IN: tools.deploy.config
|
IN: tools.deploy.config
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien alien.c-types arrays byte-arrays combinators
|
USING: alien alien.c-types arrays byte-arrays combinators
|
||||||
destructors generic io kernel libc math sequences system tr
|
destructors generic io kernel libc math sequences system tr
|
||||||
vocabs.loader words ;
|
vocabs.loader words alien.data ;
|
||||||
IN: tools.disassembler
|
IN: tools.disassembler
|
||||||
|
|
||||||
GENERIC: disassemble ( obj -- )
|
GENERIC: disassemble ( obj -- )
|
||||||
|
|
|
@ -4,7 +4,7 @@ USING: tools.disassembler namespaces combinators
|
||||||
alien alien.syntax alien.c-types lexer parser kernel
|
alien alien.syntax alien.c-types lexer parser kernel
|
||||||
sequences layouts math math.order alien.libraries
|
sequences layouts math math.order alien.libraries
|
||||||
math.parser system make fry arrays libc destructors
|
math.parser system make fry arrays libc destructors
|
||||||
tools.disassembler.utils splitting ;
|
tools.disassembler.utils splitting alien.data ;
|
||||||
IN: tools.disassembler.udis
|
IN: tools.disassembler.udis
|
||||||
|
|
||||||
<<
|
<<
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
! Copyright (C) 2006, 2008 Slava Pestov
|
! Copyright (C) 2006, 2008 Slava Pestov
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien alien.c-types alien.strings arrays assocs
|
USING: accessors alien alien.c-types alien.data alien.strings
|
||||||
cocoa kernel math cocoa.messages cocoa.subclassing cocoa.classes
|
arrays assocs cocoa kernel math cocoa.messages cocoa.subclassing
|
||||||
cocoa.views cocoa.application cocoa.pasteboard cocoa.types
|
cocoa.classes cocoa.views cocoa.application cocoa.pasteboard
|
||||||
cocoa.windows sequences io.encodings.utf8 ui ui.private ui.gadgets
|
cocoa.types cocoa.windows sequences io.encodings.utf8 ui ui.private
|
||||||
ui.gadgets.private ui.gadgets.worlds ui.gestures
|
ui.gadgets ui.gadgets.private ui.gadgets.worlds ui.gestures
|
||||||
core-foundation.strings core-graphics core-graphics.types threads
|
core-foundation.strings core-graphics core-graphics.types threads
|
||||||
combinators math.rectangles ;
|
combinators math.rectangles ;
|
||||||
IN: ui.backend.cocoa.views
|
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
|
math.order calendar ascii sets io.encodings.utf16n
|
||||||
windows.errors literals ui.pixel-formats
|
windows.errors literals ui.pixel-formats
|
||||||
ui.pixel-formats.private memoize classes
|
ui.pixel-formats.private memoize classes
|
||||||
specialized-arrays classes.struct ;
|
specialized-arrays classes.struct alien.data ;
|
||||||
SPECIALIZED-ARRAY: POINT
|
SPECIALIZED-ARRAY: POINT
|
||||||
IN: ui.backend.windows
|
IN: ui.backend.windows
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
USING: kernel alien.c-types alien.strings sequences math alien.syntax
|
USING: kernel alien.c-types alien.data alien.strings sequences
|
||||||
unix namespaces continuations threads assocs io.backend.unix
|
math alien.syntax unix namespaces continuations threads assocs
|
||||||
io.encodings.utf8 unix.utilities fry ;
|
io.backend.unix io.encodings.utf8 unix.utilities fry ;
|
||||||
IN: unix.process
|
IN: unix.process
|
||||||
|
|
||||||
! Low-level Unix process launching utilities. These are used
|
! Low-level Unix process launching utilities. These are used
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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
|
combinators.short-circuit fry kernel layouts sequences accessors
|
||||||
specialized-arrays ;
|
specialized-arrays ;
|
||||||
IN: unix.utilities
|
IN: unix.utilities
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.c-types alien.syntax combinators continuations
|
USING: alien.c-types alien.data alien.syntax combinators
|
||||||
io.encodings.string io.encodings.utf8 kernel sequences strings
|
continuations io.encodings.string io.encodings.utf8 kernel
|
||||||
unix calendar system accessors unix.time calendar.unix
|
sequences strings unix calendar system accessors unix.time
|
||||||
vocabs.loader ;
|
calendar.unix vocabs.loader ;
|
||||||
IN: unix.utmpx
|
IN: unix.utmpx
|
||||||
|
|
||||||
CONSTANT: EMPTY 0
|
CONSTANT: EMPTY 0
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
USING: alien alien.c-types alien.destructors windows.com.syntax
|
USING: alien alien.c-types alien.destructors windows.com.syntax
|
||||||
windows.ole32 windows.types continuations kernel alien.syntax
|
windows.ole32 windows.types continuations kernel alien.syntax
|
||||||
libc destructors accessors ;
|
libc destructors accessors alien.data ;
|
||||||
IN: windows.com
|
IN: windows.com
|
||||||
|
|
||||||
LIBRARY: ole32
|
LIBRARY: ole32
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
USING: alien alien.c-types alien.accessors windows.com.syntax
|
USING: alien alien.c-types alien.data alien.accessors
|
||||||
init windows.com.syntax.private windows.com continuations kernel
|
windows.com.syntax init windows.com.syntax.private windows.com
|
||||||
namespaces windows.ole32 libc vocabs assocs accessors arrays
|
continuations kernel namespaces windows.ole32 libc vocabs
|
||||||
sequences quotations combinators math words compiler.units
|
assocs accessors arrays sequences quotations combinators math
|
||||||
destructors fry math.parser generalizations sets
|
words compiler.units destructors fry math.parser generalizations
|
||||||
specialized-arrays windows.kernel32 classes.struct ;
|
sets specialized-arrays windows.kernel32 classes.struct ;
|
||||||
SPECIALIZED-ARRAY: void*
|
SPECIALIZED-ARRAY: void*
|
||||||
IN: windows.com.wrapper
|
IN: windows.com.wrapper
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
USING: windows.dinput windows.kernel32 windows.ole32 windows.com
|
USING: windows.dinput windows.kernel32 windows.ole32 windows.com
|
||||||
windows.com.syntax alien alien.c-types alien.syntax kernel system namespaces
|
windows.com.syntax alien alien.c-types alien.data alien.syntax
|
||||||
combinators sequences fry math accessors macros words quotations
|
kernel system namespaces combinators sequences fry math accessors
|
||||||
libc continuations generalizations splitting locals assocs init
|
macros words quotations libc continuations generalizations
|
||||||
specialized-arrays memoize classes.struct strings arrays ;
|
splitting locals assocs init specialized-arrays memoize
|
||||||
|
classes.struct strings arrays ;
|
||||||
SPECIALIZED-ARRAY: DIOBJECTDATAFORMAT
|
SPECIALIZED-ARRAY: DIOBJECTDATAFORMAT
|
||||||
IN: windows.dinput.constants
|
IN: windows.dinput.constants
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
USING: alien.strings io.encodings.utf16n windows.com
|
USING: alien.strings io.encodings.utf16n windows.com
|
||||||
windows.com.wrapper combinators windows.kernel32 windows.ole32
|
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
|
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
|
IN: windows.dragdrop-listener
|
||||||
|
|
||||||
<< "WCHAR" require-c-array >>
|
|
||||||
|
|
||||||
: filenames-from-hdrop ( hdrop -- filenames )
|
: filenames-from-hdrop ( hdrop -- filenames )
|
||||||
dup HEX: FFFFFFFF f 0 DragQueryFile ! get count of files
|
dup HEX: FFFFFFFF f 0 DragQueryFile ! get count of files
|
||||||
[
|
[
|
||||||
2dup f 0 DragQueryFile 1 + ! get size of filename buffer
|
2dup f 0 DragQueryFile 1 + ! get size of filename buffer
|
||||||
dup "WCHAR" <c-array>
|
dup WCHAR <c-array>
|
||||||
[ swap DragQueryFile drop ] keep
|
[ swap DragQueryFile drop ] keep
|
||||||
utf16n alien>string
|
utf16n alien>string
|
||||||
] with map ;
|
] 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
|
windows.kernel32 sequences byte-arrays unicode.categories
|
||||||
io.encodings.string io.encodings.utf16n alien.strings
|
io.encodings.string io.encodings.utf16n alien.strings
|
||||||
arrays literals ;
|
arrays literals windows.types ;
|
||||||
|
SPECIALIZED-ARRAY: TCHAR
|
||||||
IN: windows.errors
|
IN: windows.errors
|
||||||
|
|
||||||
<< "TCHAR" require-c-array >>
|
|
||||||
|
|
||||||
CONSTANT: ERROR_SUCCESS 0
|
CONSTANT: ERROR_SUCCESS 0
|
||||||
CONSTANT: ERROR_INVALID_FUNCTION 1
|
CONSTANT: ERROR_INVALID_FUNCTION 1
|
||||||
CONSTANT: ERROR_FILE_NOT_FOUND 2
|
CONSTANT: ERROR_FILE_NOT_FOUND 2
|
||||||
|
@ -698,8 +697,6 @@ CONSTANT: FORMAT_MESSAGE_MAX_WIDTH_MASK HEX: 000000FF
|
||||||
: make-lang-id ( lang1 lang2 -- n )
|
: make-lang-id ( lang1 lang2 -- n )
|
||||||
10 shift bitor ; inline
|
10 shift bitor ; inline
|
||||||
|
|
||||||
<< "TCHAR" require-c-array >>
|
|
||||||
|
|
||||||
ERROR: error-message-failed id ;
|
ERROR: error-message-failed id ;
|
||||||
:: n>win32-error-string ( id -- string )
|
:: n>win32-error-string ( id -- string )
|
||||||
{
|
{
|
||||||
|
@ -709,7 +706,7 @@ ERROR: error-message-failed id ;
|
||||||
f
|
f
|
||||||
id
|
id
|
||||||
LANG_NEUTRAL SUBLANG_DEFAULT make-lang-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
|
f pick [ FormatMessage 0 = [ id error-message-failed ] when ] dip
|
||||||
utf16n alien>string [ blank? ] trim ;
|
utf16n alien>string [ blank? ] trim ;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2009 Joe Groff, Slava Pestov.
|
! Copyright (C) 2009 Joe Groff, Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.c-types kernel combinators sequences
|
USING: alien.c-types alien.data kernel combinators
|
||||||
math windows.gdi32 windows.types images destructors
|
sequences math windows.gdi32 windows.types images
|
||||||
accessors fry locals classes.struct ;
|
destructors accessors fry locals classes.struct ;
|
||||||
IN: windows.offscreen
|
IN: windows.offscreen
|
||||||
|
|
||||||
: (bitmap-info) ( dim -- BITMAPINFO )
|
: (bitmap-info) ( dim -- BITMAPINFO )
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: alien alien.syntax alien.c-types alien.strings math
|
USING: alien alien.syntax alien.c-types alien.data alien.strings
|
||||||
kernel sequences windows.errors windows.types io accessors
|
math kernel sequences windows.errors windows.types io accessors
|
||||||
math.order namespaces make math.parser windows.kernel32
|
math.order namespaces make math.parser windows.kernel32
|
||||||
combinators locals specialized-arrays literals splitting
|
combinators locals specialized-arrays literals splitting
|
||||||
grouping classes.struct combinators.smart ;
|
grouping classes.struct combinators.smart ;
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
! add to this library and are wondering what part of the file to
|
! add to this library and are wondering what part of the file to
|
||||||
! modify, just find the function or data structure in the manual
|
! modify, just find the function or data structure in the manual
|
||||||
! and note the section.
|
! and note the section.
|
||||||
USING: accessors kernel arrays alien alien.c-types alien.strings
|
USING: accessors kernel arrays alien alien.c-types alien.data
|
||||||
alien.syntax classes.struct math math.bitwise words sequences
|
alien.strings alien.syntax classes.struct math math.bitwise words
|
||||||
namespaces continuations io io.encodings.ascii x11.syntax ;
|
sequences namespaces continuations io io.encodings.ascii x11.syntax ;
|
||||||
FROM: alien.c-types => short ;
|
FROM: alien.c-types => short ;
|
||||||
IN: x11.xlib
|
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.8-bit io.encodings.utf8 io.encodings.utf16
|
||||||
io.encodings.utf16n io.encodings.ascii alien io.encodings.string ;
|
io.encodings.utf16n io.encodings.ascii alien io.encodings.string ;
|
||||||
IN: alien.strings.tests
|
IN: alien.strings.tests
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2009 Jeremy Hughes.
|
! Copyright (C) 2009 Jeremy Hughes.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.inline alien.inline.syntax io.directories io.files
|
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
|
IN: alien.inline.syntax.tests
|
||||||
|
|
||||||
DELETE-C-LIBRARY: test
|
DELETE-C-LIBRARY: test
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2009 Jeremy Hughes.
|
! Copyright (C) 2009 Jeremy Hughes.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: help.markup help.syntax kernel quotations sequences
|
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
|
IN: alien.marshall
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
USING: accessors alien alien.c-types alien.inline.types
|
USING: accessors alien alien.c-types alien.inline.types
|
||||||
alien.marshall.private alien.strings byte-arrays classes
|
alien.marshall.private alien.strings byte-arrays classes
|
||||||
combinators combinators.short-circuit destructors fry
|
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
|
specialized-arrays strings unix.utilities vocabs.parser
|
||||||
words libc.private locals generalizations math ;
|
words libc.private locals generalizations math ;
|
||||||
FROM: alien.c-types => float short ;
|
FROM: alien.c-types => float short ;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
USING: accessors alien alien.c-types alien.inline arrays
|
USING: accessors alien alien.c-types alien.inline arrays
|
||||||
combinators fry functors kernel lexer libc macros math
|
combinators fry functors kernel lexer libc macros math
|
||||||
sequences specialized-arrays libc.private
|
sequences specialized-arrays libc.private
|
||||||
combinators.short-circuit ;
|
combinators.short-circuit alien.data ;
|
||||||
SPECIALIZED-ARRAY: void*
|
SPECIALIZED-ARRAY: void*
|
||||||
IN: alien.marshall.private
|
IN: alien.marshall.private
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
USING: accessors alien.c-types alien.marshall arrays assocs
|
USING: accessors alien.c-types alien.marshall arrays assocs
|
||||||
classes.tuple combinators destructors generalizations generic
|
classes.tuple combinators destructors generalizations generic
|
||||||
kernel libc locals parser quotations sequences slots words
|
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
|
IN: alien.marshall.structs
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
USING: alien.c-types alien.syntax audio combinators
|
USING: alien.c-types alien.syntax audio combinators
|
||||||
combinators.short-circuit io io.binary io.encodings.binary
|
combinators.short-circuit io io.binary io.encodings.binary
|
||||||
io.files io.streams.byte-array kernel locals math
|
io.files io.streams.byte-array kernel locals math
|
||||||
sequences ;
|
sequences alien.data ;
|
||||||
IN: audio.wav
|
IN: audio.wav
|
||||||
|
|
||||||
CONSTANT: RIFF-MAGIC "RIFF"
|
CONSTANT: RIFF-MAGIC "RIFF"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.accessors alien.c-types alien.syntax byte-arrays
|
USING: alien.accessors alien.c-types alien.syntax byte-arrays
|
||||||
destructors generalizations hints kernel libc locals math math.order
|
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
|
IN: benchmark.yuv-to-rgb
|
||||||
|
|
||||||
STRUCT: yuv_buffer
|
STRUCT: yuv_buffer
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
USING: kernel accessors sequences sequences.private destructors math namespaces
|
USING: kernel accessors sequences sequences.private destructors math namespaces
|
||||||
locals openssl openssl.libcrypto byte-arrays bit-arrays.private
|
locals openssl openssl.libcrypto byte-arrays bit-arrays.private
|
||||||
alien.c-types alien.destructors ;
|
alien.c-types alien.destructors alien.data ;
|
||||||
|
|
||||||
IN: ecdsa
|
IN: ecdsa
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! (c)2009 Joe Groff bsd license
|
! (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
|
assocs classes classes.mixin classes.parser classes.singleton
|
||||||
classes.tuple classes.tuple.private combinators combinators.tuple destructors fry
|
classes.tuple classes.tuple.private combinators combinators.tuple destructors fry
|
||||||
generic generic.parser gpu gpu.buffers gpu.framebuffers
|
generic generic.parser gpu gpu.buffers gpu.framebuffers
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
! (c)2009 Joe Groff bsd license
|
! (c)2009 Joe Groff bsd license
|
||||||
USING: accessors alien alien.c-types alien.strings arrays assocs
|
USING: accessors alien alien.c-types alien.data alien.strings
|
||||||
byte-arrays classes.mixin classes.parser classes.singleton
|
arrays assocs byte-arrays classes.mixin classes.parser
|
||||||
classes.struct combinators combinators.short-circuit definitions
|
classes.singleton classes.struct combinators combinators.short-circuit
|
||||||
destructors generic.parser gpu gpu.buffers hashtables images
|
definitions destructors generic.parser gpu gpu.buffers hashtables
|
||||||
io.encodings.ascii io.files io.pathnames kernel lexer literals
|
images io.encodings.ascii io.files io.pathnames kernel lexer
|
||||||
locals math math.parser memoize multiline namespaces opengl
|
literals locals math math.parser memoize multiline namespaces
|
||||||
opengl.gl opengl.shaders parser quotations sequences
|
opengl opengl.gl opengl.shaders parser quotations sequences
|
||||||
specialized-arrays splitting strings tr ui.gadgets.worlds
|
specialized-arrays splitting strings tr ui.gadgets.worlds
|
||||||
variants vectors vocabs vocabs.loader vocabs.parser words
|
variants vectors vocabs vocabs.loader vocabs.parser words
|
||||||
words.constant ;
|
words.constant ;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! (c)2009 Joe Groff bsd license
|
! (c)2009 Joe Groff bsd license
|
||||||
USING: accessors alien.c-types arrays byte-arrays combinators gpu
|
USING: accessors alien.c-types alien.data arrays byte-arrays
|
||||||
kernel literals math math.rectangles opengl opengl.gl sequences
|
combinators gpu kernel literals math math.rectangles opengl
|
||||||
variants specialized-arrays ;
|
opengl.gl sequences variants specialized-arrays ;
|
||||||
QUALIFIED-WITH: alien.c-types c
|
QUALIFIED-WITH: alien.c-types c
|
||||||
FROM: math => float ;
|
FROM: math => float ;
|
||||||
SPECIALIZED-ARRAY: int
|
SPECIALIZED-ARRAY: int
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: alien.c-types alien.syntax half-floats kernel math tools.test
|
USING: alien.c-types alien.syntax half-floats kernel math tools.test
|
||||||
specialized-arrays ;
|
specialized-arrays alien.data ;
|
||||||
SPECIALIZED-ARRAY: half
|
SPECIALIZED-ARRAY: half
|
||||||
IN: half-floats.tests
|
IN: half-floats.tests
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! (c)2009 Joe Groff bsd license
|
! (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
|
IN: half-floats
|
||||||
|
|
||||||
: half>bits ( float -- bits )
|
: half>bits ( float -- bits )
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.c-types alien.syntax combinators io.ports
|
USING: accessors alien.c-types alien.syntax alien.data
|
||||||
io.streams.duplex system kernel math math.bitwise
|
combinators io.ports io.streams.duplex system kernel
|
||||||
vocabs.loader unix io.serial io.serial.unix.termios io.backend.unix ;
|
math math.bitwise vocabs.loader unix io.serial
|
||||||
|
io.serial.unix.termios io.backend.unix ;
|
||||||
IN: io.serial.unix
|
IN: io.serial.unix
|
||||||
|
|
||||||
<< {
|
<< {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! (c)2009 Joe Groff bsd license
|
! (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
|
IN: memory.piles
|
||||||
|
|
||||||
TUPLE: pile
|
TUPLE: pile
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! 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 ;
|
windows windows.kernel32 system-info.backend system ;
|
||||||
IN: system-info.windows.ce
|
IN: system-info.windows.ce
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue