This is frequently asked question, so I decided to write a simple guide. It will take about 5 minutes to read it AND test it. Yes, it’s that easy.
First thing you need to know is that using Red/System code requires the Red code to be compiled. It is not possible to use R/S code in interpreter. At least yet. So, how to do it? There are more ways, let’s look at them.
#system directive lets you use Red/System code in Red directly. Here's an example:
Red print "This print is on Red level and therefore adds newline." #system [ print "This print is on R/S level, so no newline here." ] print "See? Now we are back in Red."
#system is nice, but you may want to reuse the code. Red provides you with
routine function that is similar to
func, but its body is written in Red/System instead of Red. See example:
Red rs-print: routine  [ print "Now we are printing in " print "Red/System. ] rs-print
You may also want to use existing R/S code or split your source to Red and Red/System part. For adding source file, we use
#include directive in Red, but for Red/System code we need to use
#include on R/S level. So instead of
#include %my-rs-file.reds we need to use
#system [#include %my-rs-file.reds]. Here is an example:
First we need some Red/System code. Copy this source and save it as
Red/System [ Title: "Red/System test" ] double: func [ value [integer!] return: [integer!] ] [ return value + value ]
This simple function multiplies input by two. Now we have our R/S code and we can use it in Red:
Here is the source for
Red  #system [ #include %test.reds ] rs-double: routine [ value [integer!] return: [integer!] ] [ double value ] print rs-double 10
As you can see, here we are using both
#system directive and
routine to use Red/System in Red.
Another thing that the last example introduced is passing arguments from Red to R/S code and vice versa. Please note that this is possible directly for scalar values like
float!, but for datatypes like
block!, some conversion must be done on Red/System level. IT IS NOT POSSIBLE TO USE THESE TYPES DIRECTLY IN RED/SYSTEM! The conversion is not that hard but that is something outside the scope of this article. So, maybe next time.
And now lets have fun with Red and Red/System, thanks!