%module r_legacy %inline %{ typedef char *String; typedef struct { int i; double d; char *str; String s; } Obj; Obj *getObject(int i, double d); #include Obj * getObject(int i, double d) { const char *test_string = "a test string"; Obj *obj; obj = (Obj *) calloc(1, sizeof(Obj)); obj->i = i; obj->d = d; /* allocate one extra byte for the null */ obj->str = (char *)malloc(strlen(test_string) + 1); strcpy(obj->str, test_string); return(obj); } %} char *getString(); int getInt(); double getDouble(); float getFloat(); long getLong(); unsigned long getUnsignedLong(); char getChar(); extern unsigned long MyULong; extern const double PiSquared; #if 0 extern float *MyFloatRef; #endif %inline %{ #define PI 3.14159265358979 unsigned long MyULong = 20; static float MyFloat = 1.05f; float *MyFloatRef = &MyFloat; const double PiSquared = PI * PI; char *getString() { return "This is a literal string"; } int getInt() { return 42; } double getDouble() { return PI; } float getFloat() { return (float)PI/2; } long getLong() { return -321313L; } unsigned long getUnsignedLong() { return 23123L; } char getChar() { return('A'); } %}