primPCREExec(void) { sqInt extraObj; sqInt length; int *matchSpacePtr; sqInt matchSpaceSize; sqInt result; char *searchBuffer; sqInt searchObject; /* Load Parameters */ searchObject = stackObjectValue(0); searchBuffer = arrayValueOf(searchObject); length = byteSizeOf(searchObject); /* begin loadRcvrFromStackAt: */ rcvr = stackObjectValue(1); pcrePtr = ((sqInt) (fetchArrayofObject(2, rcvr))); /* begin rcvrExtraPtr */ extraObj = fetchPointerofObject(3, rcvr); extraPtr = ((sqInt) ((!(extraObj == (nilObject())) ? arrayValueOf(extraObj) : 0))); matchFlags = fetchIntegerofObject(6, rcvr); matchSpacePtr = ((int *) (fetchArrayofObject(7, rcvr))); matchSpaceSize = (byteSizeOf(fetchPointerofObject(7, rcvr))) / 4; if (failed()) { return null; } result = pcre_exec((pcre *)pcrePtr, (pcre_extra *)extraPtr, searchBuffer, length, 0, matchFlags, matchSpacePtr, matchSpaceSize); pop(2); pushInteger(result); return 0; }
/* FFTPlugin>>#loadFFTFrom: */ static sqInt loadFFTFrom(sqInt fftOop) { sqInt oop; success((slotSizeOf(fftOop)) >= 6); if (failed()) { return 0; } nu = fetchIntegerofObject(0, fftOop); fftSize = fetchIntegerofObject(1, fftOop); oop = fetchPointerofObject(2, fftOop); sinTableSize = stSizeOf(oop); /* begin checkedFloatPtrOf: */ success(isWords(oop)); if (failed()) { sinTable = 0; goto l1; } sinTable = ((float *) (firstIndexableField(oop))); l1: /* end checkedFloatPtrOf: */; oop = fetchPointerofObject(3, fftOop); permTableSize = stSizeOf(oop); /* begin checkedWordPtrOf: */ success(isWords(oop)); permTable = ((unsigned int *) (firstIndexableField(oop))); oop = fetchPointerofObject(4, fftOop); realDataSize = stSizeOf(oop); /* begin checkedFloatPtrOf: */ success(isWords(oop)); if (failed()) { realData = 0; goto l3; } realData = ((float *) (firstIndexableField(oop))); l3: /* end checkedFloatPtrOf: */; oop = fetchPointerofObject(5, fftOop); imagDataSize = stSizeOf(oop); /* begin checkedFloatPtrOf: */ success(isWords(oop)); if (failed()) { imagData = 0; goto l4; } imagData = ((float *) (firstIndexableField(oop))); l4: /* end checkedFloatPtrOf: */; success((((((1L << nu) == fftSize) && (((fftSize / 4) + 1) == sinTableSize)) && (fftSize == realDataSize)) && (fftSize == imagDataSize)) && (realDataSize == imagDataSize)); return (failed()) == 0; }
primPCREExecfromto(void) { sqInt extraObj; sqInt fromInteger; sqInt length; int *matchSpacePtr; sqInt matchSpaceSize; sqInt result; char *searchBuffer; sqInt searchObject; sqInt toInteger; /* Load Parameters */ toInteger = stackIntegerValue(0); fromInteger = stackIntegerValue(1); searchObject = stackObjectValue(2); searchBuffer = arrayValueOf(searchObject); length = byteSizeOf(searchObject); /* begin loadRcvrFromStackAt: */ rcvr = stackObjectValue(3); success(1 <= fromInteger); success(toInteger <= length); /* Smalltalk offsets are 1-based */ fromInteger -= 1; success(fromInteger <= toInteger); length = toInteger - fromInteger; /* Load Instance Variables */ searchBuffer += fromInteger; pcrePtr = ((sqInt) (fetchArrayofObject(2, rcvr))); /* begin rcvrExtraPtr */ extraObj = fetchPointerofObject(3, rcvr); extraPtr = ((sqInt) ((!(extraObj == (nilObject())) ? arrayValueOf(extraObj) : 0))); matchFlags = fetchIntegerofObject(6, rcvr); matchSpacePtr = ((int *) (fetchArrayofObject(7, rcvr))); matchSpaceSize = (byteSizeOf(fetchPointerofObject(7, rcvr))) / 4; if (failed()) { return null; } result = pcre_exec((pcre *)pcrePtr, (pcre_extra *)extraPtr, searchBuffer, length, 0, matchFlags, matchSpacePtr, matchSpaceSize); pop(4); pushInteger(result); return 0; }
static sqInt stackLightArrayValue(sqInt stackIndex) { // B3DAcceleratorPlugin>>#stackLightArrayValue: sqInt array; sqInt arraySize; sqInt i; sqInt oop; array = stackObjectValue(stackIndex); if (array == null) { return null; } if (array == (nilObject())) { return null; } if (!((fetchClassOf(array)) == (classArray()))) { return primitiveFail(); } arraySize = slotSizeOf(array); for (i = 0; i <= (arraySize - 1); i += 1) { oop = fetchPointerofObject(i, array); if (isIntegerObject(oop)) { return primitiveFail(); } if (!((isWords(oop)) && ((slotSizeOf(oop)) == 32))) { return primitiveFail(); } } return array; }
static void* fetchLightSourceofObject(sqInt index, sqInt anArray) { // B3DAcceleratorPlugin>>#fetchLightSource:ofObject: sqInt lightOop; lightOop = fetchPointerofObject(index, anArray); return firstIndexableField(lightOop); }
/* RePlugin>>#rcvrExtraPtr */ static sqInt rcvrExtraPtr(void) { sqInt extraObj; extraObj = fetchPointerofObject(3, rcvr); return ((sqInt) ((!(extraObj == (nilObject())) ? arrayValueOf(extraObj) : 0))); }
/* Matrix2x3Plugin>>#loadArgumentPoint: */ static sqInt loadArgumentPoint(sqInt point) { int isInt; sqInt oop; if (failed()) { return null; } if (!((fetchClassOf(point)) == (classPoint()))) { return primitiveFail(); } oop = fetchPointerofObject(0, point); isInt = isIntegerObject(oop); if (!(isInt || (isFloatObject(oop)))) { return primitiveFail(); } if (isInt) { m23ArgX = integerValueOf(oop); } else { m23ArgX = floatValueOf(oop); } oop = fetchPointerofObject(1, point); isInt = isIntegerObject(oop); if (!(isInt || (isFloatObject(oop)))) { return primitiveFail(); } if (isInt) { m23ArgY = integerValueOf(oop); } else { m23ArgY = floatValueOf(oop); } return 0; }
primitiveTextureUpload(void) { // B3DAcceleratorPlugin>>#primitiveTextureUpload sqInt bits; void*bitsPtr; sqInt d; sqInt form; sqInt h; sqInt handle; sqInt ppw; sqInt renderer; sqInt result; sqInt w; if (!((methodArgumentCount()) == 3)) { return primitiveFail(); } form = stackValue(0); if (!((isPointers(form)) && ((slotSizeOf(form)) >= 4))) { return primitiveFail(); } bits = fetchPointerofObject(0, form); w = fetchIntegerofObject(1, form); h = fetchIntegerofObject(2, form); d = fetchIntegerofObject(3, form); ppw = 32 / d; if (!(isWords(bits))) { return primitiveFail(); } if (!((slotSizeOf(bits)) == ((((w + ppw) - 1) / ppw) * h))) { return primitiveFail(); } bitsPtr = firstIndexableField(bits); handle = stackIntegerValue(1); renderer = stackIntegerValue(2); if (failed()) { return null; } result = b3dxUploadTexture(renderer, handle, w, h, d, bitsPtr); if (!result) { return primitiveFail(); } return pop(3); }
primitiveDirectoryDelimitor(void) { // FilePlugin>>#primitiveDirectoryDelimitor sqInt ascii; ascii = asciiDirectoryDelimiter(); if ((interpreterProxy->minorVersion()) >= 13) { popthenPush(1, characterObjectOf(ascii)); } else { if ((ascii >= 0) && (ascii <= 0xFF)) { popthenPush(1, fetchPointerofObject(ascii, characterTable())); } else { primitiveFail(); } } }
primitiveSetLights(void) { // B3DAcceleratorPlugin>>#primitiveSetLights sqInt handle; sqInt i; void*light; sqInt lightArray; sqInt lightCount; sqInt lightOop; if (!((methodArgumentCount()) == 2)) { return primitiveFail(); } lightArray = stackLightArrayValue(0); handle = stackIntegerValue(1); if (failed()) { return null; } if (!(b3dxDisableLights(handle))) { return primitiveFail(); } if (lightArray == null) { return null; } /* For each enabled light source */ lightCount = slotSizeOf(lightArray); for (i = 0; i <= (lightCount - 1); i += 1) { /* begin fetchLightSource:ofObject: */ lightOop = fetchPointerofObject(i, lightArray); light = firstIndexableField(lightOop); if (!(b3dxLoadLight(handle, i, light))) { return primitiveFail(); } } return pop(2); }
/* RePlugin>>#rcvrMatchSpaceSize */ static sqInt rcvrMatchSpaceSize(void) { return (byteSizeOf(fetchPointerofObject(7, rcvr))) / 4; }
primitiveTransformRectInto(void) { double cornerX; double cornerY; sqInt dstOop; float *matrix; sqInt matrix1; double maxX; double maxY; double minX; double minY; double originX; double originY; sqInt srcOop; dstOop = stackObjectValue(0); srcOop = stackObjectValue(1); /* begin loadArgumentMatrix: */ matrix1 = stackObjectValue(2); if (failed()) { matrix = null; goto l1; } if (!((isWords(matrix1)) && ((slotSizeOf(matrix1)) == 6))) { primitiveFail(); matrix = null; goto l1; } matrix = ((float *) (firstIndexableField(matrix1))); l1: /* end loadArgumentMatrix: */; if (failed()) { return null; } if (!((fetchClassOf(srcOop)) == (fetchClassOf(dstOop)))) { return primitiveFail(); } if (!(isPointers(srcOop))) { return primitiveFail(); } if (!((slotSizeOf(srcOop)) == 2)) { return primitiveFail(); } loadArgumentPoint(fetchPointerofObject(0, srcOop)); if (failed()) { return null; } originX = m23ArgX; originY = m23ArgY; /* begin matrix2x3TransformPoint: */ m23ResultX = ((m23ArgX * (matrix[0])) + (m23ArgY * (matrix[1]))) + (matrix[2]); m23ResultY = ((m23ArgX * (matrix[3])) + (m23ArgY * (matrix[4]))) + (matrix[5]); minX = (maxX = m23ResultX); /* Load bottom-right point */ minY = (maxY = m23ResultY); loadArgumentPoint(fetchPointerofObject(1, srcOop)); if (failed()) { return null; } cornerX = m23ArgX; cornerY = m23ArgY; /* begin matrix2x3TransformPoint: */ m23ResultX = ((m23ArgX * (matrix[0])) + (m23ArgY * (matrix[1]))) + (matrix[2]); m23ResultY = ((m23ArgX * (matrix[3])) + (m23ArgY * (matrix[4]))) + (matrix[5]); minX = ((minX < m23ResultX) ? minX : m23ResultX); maxX = ((maxX < m23ResultX) ? m23ResultX : maxX); minY = ((minY < m23ResultY) ? minY : m23ResultY); /* Load top-right point */ maxY = ((maxY < m23ResultY) ? m23ResultY : maxY); m23ArgX = cornerX; m23ArgY = originY; /* begin matrix2x3TransformPoint: */ m23ResultX = ((m23ArgX * (matrix[0])) + (m23ArgY * (matrix[1]))) + (matrix[2]); m23ResultY = ((m23ArgX * (matrix[3])) + (m23ArgY * (matrix[4]))) + (matrix[5]); minX = ((minX < m23ResultX) ? minX : m23ResultX); maxX = ((maxX < m23ResultX) ? m23ResultX : maxX); minY = ((minY < m23ResultY) ? minY : m23ResultY); /* Load bottom-left point */ maxY = ((maxY < m23ResultY) ? m23ResultY : maxY); m23ArgX = originX; m23ArgY = cornerY; /* begin matrix2x3TransformPoint: */ m23ResultX = ((m23ArgX * (matrix[0])) + (m23ArgY * (matrix[1]))) + (matrix[2]); m23ResultY = ((m23ArgX * (matrix[3])) + (m23ArgY * (matrix[4]))) + (matrix[5]); minX = ((minX < m23ResultX) ? minX : m23ResultX); maxX = ((maxX < m23ResultX) ? m23ResultX : maxX); minY = ((minY < m23ResultY) ? minY : m23ResultY); maxY = ((maxY < m23ResultY) ? m23ResultY : maxY); dstOop = roundAndStoreResultRectx0y0x1y1(dstOop, minX, minY, maxX, maxY); if (!(failed())) { popthenPush(3, dstOop); } return 0; }