I started to mess with Ypsilon, which is a C++ implementation of Scheme.
It conforms R6RS, features fast garbage collector, supports multi-core CPUs and Unicode but has a LACK of documentation, C++ code examples and comments in the code!
Authors provide it as a standalone console application. My goal is to use it as a scripting engine in an image processing application.
The source code is well structured, but the structure is unfamiliar. I spent two weeks penetrating it, and here's what I've found out:
As far as I understand, I need to implement 3 custom ports (IN, OUT and ERROR). But for now I can't figure out, what are the input parameters of each function (onRead, onWrite, onSetPos, onGetPos, onClose) in handlers.
Unfortunately, there is neither example of implementing a custom port no example of following stuff:
Summarizing, if anyone provides a C++ example of any scenario mentioned above, it would significantly save my time. Thanks in advance!
Okay, from what I can read of the source code, here's how the various handlers get called (this is all unofficial, based purely on source code inspection):
(lambda (bv off len))
: takes a bytevector (which your handler will put the read data into), an offset (fixnum), and a length (fixnum). You should read in up to len
bytes, placing those bytes into bv
starting at off
. Return the number of bytes actually read in (as a fixnum).(lambda (bv off len))
: takes a bytevector (which contains the data to write), an offset (fixnum), and a length (fixnum). Grab up to len
bytes from bv
, starting at off
, and write them out. Return the number of bytes actually written (as a fixnum).(lambda (pos))
(called in text mode only): Allows you to store some data for pos
so that a future call to the set position handler with the same pos
value will reset the position back to the current position. Return value ignored.(lambda (pos))
: Move the current position to the value of pos
. Return value ignored.(lambda ())
: Close the port. Return value ignored.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With