Brad Fuller wrote:
Hello all,
I'm trying to generate a 'ulong' in Slang using the "self primitive: parameters:" method.
self primitive: 'primitivePutOutputParms' parameters: #(#SmallInteger #SmallInteger #Unsigned #Float #String).
But, I don't know how. #Float generates a double and SmallInteger generates "int". What are the other ones? Is this a dictionary? When I use #Unsigned it generates:
int parm2;
interpreterProxy->success(interpreterProxy->isKindOf(interpreterProxy->stackValue(2), "Unsigned")); parm2 = interpreterProxy->stackValue(2);
which I don't think I want, do I?
Also, does anyone know how to generate void pointer?: (void *)?
Further to add to this thread:
I need to return a char pointer from a primitive back to Squeak, but I can't find out how to do it in Slang. Can anyone give me pointers?
Using: self returnTypeC: 'char *' works great for the return of a routine, but I need the return value to be pushed on the stack for return back to Squeak.
what I have is this which doesn't work quite right.. (primarily because I can't quite get the whole idea of this):
primitiveGetText | text |
self var: #text declareC: 'char *text'. self primitive: 'primitiveGetText'. text := self cCode: 'GetText()'. ^text asValue: String.
Which results in:
EXPORT(int) primitiveGetText(void) { char *text; int _return_value;
text = GetText(); _return_value = ((char *) interpreterProxy->firstIndexableField(text)); if (interpreterProxy->failed()) { return null; } interpreterProxy->popthenPush(1, _return_value); return null; }
I've been fooling with this all day.. getting frustrating!
thanks, brad