foreign-c/site/search/search_index.json

1 line
14 KiB
JSON

{"config":{"lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Portable Foreign Function Interface for R7RS schemes Foreign function interface that is supported on multiple R7RS Sceheme implementations. Note that this software is in alpha stage. That said the interface should not be changing anymore. Any help in form of constructive advice and bug reports are appreciated. Documentation or run mkdocs serve or see docs/. Issue tracker Maling lists For documentation see retropikzel.neocities.org/r7rs-pffi or run mkdocs serve or see or docs/ directory. Goals Support only R7RS implementations Needs to have cond-expand and library support atleast (propably much more) Same interface on all implementations Some things that are procedures on one implementation are macros on other, but they must behave the same Non goals To support all R7RS implementations To have every possible FFI feature Compiling of C code at any point That is no stubs, no C code generated by the library and so on Support tiers Tier 1 Chicken Still needs work Guile Good support, recommended Kawa Needs at least java version 22 Needs jvm flags: --add-exports java.base/jdk.internal.foreign.abi=ALL-UNNAMED --add-exports java.base/jdk.internal.foreign.layout=ALL-UNNAMED --add-exports java.base/jdk.internal.foreign=ALL-UNNAMED --enable-native-access=ALL-UNNAMED Good support (otherwise), recommended Sagittarius Good support, recommended Racket Good support, recommended Gambit Still needs work Tier 2 These implementations do not have callback support on their FFI. If I'm wrong please let me know! STKlos Still needs work Cyclone Still needs work Tier 3 Support waiting for the implementation. LIPS Waiting for implementation to have cond-expand and library support Will only work on nodejs Biwascheme Waiting for implementation to have cond-expand and library support Will only work on nodejs Tier 4 Support needs to be investigated. Gerbil Ypsilon Larceny Mosh Skint Tier 5 Support maybe possible/dreaming about. Airship Other gambit targets Gambit compiles to different targets other than C too, for example Javascript. It would be cool and interesting to see if this FFI could also support some of those Tier 6 Not supported currently, and may never be. Chibi FFI requires C code MIT-Scheme FFI requires C code tr7 FFI requires C code Gauche FFI requires C code s7 No library support Might have other things missing too Loko Desires no C interop, I can respect that","title":"Portable Foreign Function Interface for R7RS schemes"},{"location":"#portable-foreign-function-interface-for-r7rs-schemes","text":"Foreign function interface that is supported on multiple R7RS Sceheme implementations. Note that this software is in alpha stage. That said the interface should not be changing anymore. Any help in form of constructive advice and bug reports are appreciated. Documentation or run mkdocs serve or see docs/. Issue tracker Maling lists For documentation see retropikzel.neocities.org/r7rs-pffi or run mkdocs serve or see or docs/ directory.","title":"Portable Foreign Function Interface for R7RS schemes"},{"location":"#goals","text":"Support only R7RS implementations Needs to have cond-expand and library support atleast (propably much more) Same interface on all implementations Some things that are procedures on one implementation are macros on other, but they must behave the same","title":"Goals"},{"location":"#non-goals","text":"To support all R7RS implementations To have every possible FFI feature Compiling of C code at any point That is no stubs, no C code generated by the library and so on","title":"Non goals"},{"location":"#support-tiers","text":"","title":"Support tiers"},{"location":"#tier-1","text":"Chicken Still needs work Guile Good support, recommended Kawa Needs at least java version 22 Needs jvm flags: --add-exports java.base/jdk.internal.foreign.abi=ALL-UNNAMED --add-exports java.base/jdk.internal.foreign.layout=ALL-UNNAMED --add-exports java.base/jdk.internal.foreign=ALL-UNNAMED --enable-native-access=ALL-UNNAMED Good support (otherwise), recommended Sagittarius Good support, recommended Racket Good support, recommended Gambit Still needs work","title":"Tier 1"},{"location":"#tier-2","text":"These implementations do not have callback support on their FFI. If I'm wrong please let me know! STKlos Still needs work Cyclone Still needs work","title":"Tier 2"},{"location":"#tier-3","text":"Support waiting for the implementation. LIPS Waiting for implementation to have cond-expand and library support Will only work on nodejs Biwascheme Waiting for implementation to have cond-expand and library support Will only work on nodejs","title":"Tier 3"},{"location":"#tier-4","text":"Support needs to be investigated. Gerbil Ypsilon Larceny Mosh Skint","title":"Tier 4"},{"location":"#tier-5","text":"Support maybe possible/dreaming about. Airship Other gambit targets Gambit compiles to different targets other than C too, for example Javascript. It would be cool and interesting to see if this FFI could also support some of those","title":"Tier 5"},{"location":"#tier-6","text":"Not supported currently, and may never be. Chibi FFI requires C code MIT-Scheme FFI requires C code tr7 FFI requires C code Gauche FFI requires C code s7 No library support Might have other things missing too Loko Desires no C interop, I can respect that","title":"Tier 6"},{"location":"reference/","text":"Reference Types Types are given as symbols, for example 'int8 or 'pointer. int8 uint8 int16 uint16 int32 uint32 int64 uint64 char unsigned-char short unsigned-short int unsigned-int long unsigned-long float double string pointer Procedures or macros On some implementations these are procedures, on some macros. The arguments are in form NAME - TYPE The return value is in form TYPE pffi-shared-object-auto-load Arguments: headers - (list string ...) C headers of the library For example (list \"curl/curl.h\") object-name - symbol The name of the dynamic library file you want to load Without the \"lib\" in front of it Without the \".so\" or \".dll\" at the end additional-versions - (list string...) For example (list \".0\" \".1\") additional-paths - (list string...) Any additional paths you want to search for the library For example (list \"./mylibs\") Returns: object Shared object, the type depends on the implementation pffi-shared-object-load It is recommended to use the pffi-shared-object-auto-load instead of this directly. Arguments: headers - (list string ...) Headers that need to be included Example (list \"curl/curl.h\") path - string The full path to the shared object you want to load, including any \"lib\" infront and .so/.dll at the end Example \"libcurl.so\" Returns: object Shared object, the type depends on the implementation pffi-define Defines new foreign procedure. Arguments: scheme-name - symbol The name of the procedure used on scheme side shared-object - object The shared object Use pffi-shared-object-auto-load or pffi-shared-object-load to get this c-name - symbol The name of the C function return-type - symbol The return type of the C function arguments-types - (list symbol ...) The C function argument types Need to be given in form (list 'type 'type) pffi-define-callback Defines new callback function. Arguments: scheme-name The name of the function used on scheme side return-type - symbol The return type of the callback arguments-types - (list symbol ...) The callback function argument types procedure - procedure Procedure used as callback function Argument count must match the argument-types count pffi-size-of Get the size of type. Arguments: type - symbol The type you want the size of Returns: number The size of the given type pffi-pointer-allocate Allocates a pointer of given size. Arguments: size - number The size of the pointer you want to allocate Returns: object A pointer of given size pffi-pointer-null Create a null pointer. Returns: - object - Null pointer pffi-string->pointer Arguments: string-content - string The string you want to transform into pointer Returns: object Pointer of the given string pffi-pointer->string Arguments: pointer - object The pointer you want to transform to string Returns: string String from the given pointer pffi-pointer-free Arguments: pointer - object The pointer you want to free pffi-pointer? Arguments: object - object The object you want to check wether it is a pointer or not Returns: boolean Returns true if given object is pointer, otherwise false pffi-pointer-set! Arguments: pointer - object The pointer you want to modify type - symbol The type of value that will be put into the pointer offset -number The location of the value inside the pointer For example: (+ (pffi-size-of 'int) (pffi-size-of 'pointer)) or 0 value - object The value to be placed into the object pffi-pointer-get Arguments: pointer - object The pointer you want to get the value from type - symbol The type of value you want to get For example: 'int offset - number The location of the value inside the pointer For example: (+ (pffi-size-of 'int) (pffi-size-of 'pointer)) or 0 Returns: object The value in the poiner in the given offset as given type pffi-pointer-deref Arguments: pointer The pointer to dereference Returns: object Whatever the pointer holds","title":"Reference"},{"location":"reference/#reference","text":"","title":"Reference"},{"location":"reference/#types","text":"Types are given as symbols, for example 'int8 or 'pointer. int8 uint8 int16 uint16 int32 uint32 int64 uint64 char unsigned-char short unsigned-short int unsigned-int long unsigned-long float double string pointer","title":"Types"},{"location":"reference/#procedures-or-macros","text":"On some implementations these are procedures, on some macros. The arguments are in form NAME - TYPE The return value is in form TYPE","title":"Procedures or macros"},{"location":"reference/#pffi-shared-object-auto-load","text":"Arguments: headers - (list string ...) C headers of the library For example (list \"curl/curl.h\") object-name - symbol The name of the dynamic library file you want to load Without the \"lib\" in front of it Without the \".so\" or \".dll\" at the end additional-versions - (list string...) For example (list \".0\" \".1\") additional-paths - (list string...) Any additional paths you want to search for the library For example (list \"./mylibs\") Returns: object Shared object, the type depends on the implementation","title":"pffi-shared-object-auto-load"},{"location":"reference/#pffi-shared-object-load","text":"It is recommended to use the pffi-shared-object-auto-load instead of this directly. Arguments: headers - (list string ...) Headers that need to be included Example (list \"curl/curl.h\") path - string The full path to the shared object you want to load, including any \"lib\" infront and .so/.dll at the end Example \"libcurl.so\" Returns: object Shared object, the type depends on the implementation","title":"pffi-shared-object-load"},{"location":"reference/#pffi-define","text":"Defines new foreign procedure. Arguments: scheme-name - symbol The name of the procedure used on scheme side shared-object - object The shared object Use pffi-shared-object-auto-load or pffi-shared-object-load to get this c-name - symbol The name of the C function return-type - symbol The return type of the C function arguments-types - (list symbol ...) The C function argument types Need to be given in form (list 'type 'type)","title":"pffi-define"},{"location":"reference/#pffi-define-callback","text":"Defines new callback function. Arguments: scheme-name The name of the function used on scheme side return-type - symbol The return type of the callback arguments-types - (list symbol ...) The callback function argument types procedure - procedure Procedure used as callback function Argument count must match the argument-types count","title":"pffi-define-callback"},{"location":"reference/#pffi-size-of","text":"Get the size of type. Arguments: type - symbol The type you want the size of Returns: number The size of the given type","title":"pffi-size-of"},{"location":"reference/#pffi-pointer-allocate","text":"Allocates a pointer of given size. Arguments: size - number The size of the pointer you want to allocate Returns: object A pointer of given size","title":"pffi-pointer-allocate"},{"location":"reference/#pffi-pointer-null","text":"Create a null pointer. Returns: - object - Null pointer","title":"pffi-pointer-null"},{"location":"reference/#pffi-string-pointer","text":"Arguments: string-content - string The string you want to transform into pointer Returns: object Pointer of the given string","title":"pffi-string->pointer"},{"location":"reference/#pffi-pointer-string","text":"Arguments: pointer - object The pointer you want to transform to string Returns: string String from the given pointer","title":"pffi-pointer->string"},{"location":"reference/#pffi-pointer-free","text":"Arguments: pointer - object The pointer you want to free","title":"pffi-pointer-free"},{"location":"reference/#pffi-pointer","text":"Arguments: object - object The object you want to check wether it is a pointer or not Returns: boolean Returns true if given object is pointer, otherwise false","title":"pffi-pointer?"},{"location":"reference/#pffi-pointer-set","text":"Arguments: pointer - object The pointer you want to modify type - symbol The type of value that will be put into the pointer offset -number The location of the value inside the pointer For example: (+ (pffi-size-of 'int) (pffi-size-of 'pointer)) or 0 value - object The value to be placed into the object","title":"pffi-pointer-set!"},{"location":"reference/#pffi-pointer-get","text":"Arguments: pointer - object The pointer you want to get the value from type - symbol The type of value you want to get For example: 'int offset - number The location of the value inside the pointer For example: (+ (pffi-size-of 'int) (pffi-size-of 'pointer)) or 0 Returns: object The value in the poiner in the given offset as given type","title":"pffi-pointer-get"},{"location":"reference/#pffi-pointer-deref","text":"Arguments: pointer The pointer to dereference Returns: object Whatever the pointer holds","title":"pffi-pointer-deref"}]}