primitiveSubFloatArray(void) { // FloatArrayPlugin>>#primitiveSubFloatArray sqInt arg; float *argPtr; sqInt i; sqInt length; sqInt rcvr; float *rcvrPtr; arg = stackObjectValue(0); rcvr = stackObjectValue(1); if (failed()) { return null; } success(isWords(arg)); success(isWords(rcvr)); if (failed()) { return null; } length = stSizeOf(arg); success(length == (stSizeOf(rcvr))); if (failed()) { return null; } rcvrPtr = ((float *) (firstIndexableField(rcvr))); argPtr = ((float *) (firstIndexableField(arg))); for (i = 0; i <= (length - 1); i += 1) { rcvrPtr[i] = ((((double) (rcvrPtr[i]))) - (((double) (argPtr[i])))); } pop(1); }
primitiveDivFloatArray(void) { sqInt arg; float *argPtr; sqInt i; sqInt length; sqInt rcvr; float *rcvrPtr; arg = stackValue(0); rcvr = stackValue(1); if (!((isWords(arg)) && ((isWords(rcvr)) && (((length = stSizeOf(arg))) == (stSizeOf(rcvr)))))) { return primitiveFail(); } rcvrPtr = ((float *) (firstIndexableField(rcvr))); /* Check if any of the argument's values is zero */ argPtr = ((float *) (firstIndexableField(arg))); for (i = 0; i < length; i += 1) { if ((intAtPointer(((char*) (argPtr + i)))) == 0) { return primitiveFail(); } } for (i = 0; i < length; i += 1) { rcvrPtr[i] = ((((double) (rcvrPtr[i]))) / (((double) (argPtr[i])))); } pop(1); return 0; }
primitiveDotProduct(void) { // FloatArrayPlugin>>#primitiveDotProduct sqInt arg; float *argPtr; sqInt i; sqInt length; sqInt rcvr; float *rcvrPtr; double result; arg = stackObjectValue(0); rcvr = stackObjectValue(1); if (failed()) { return null; } success(isWords(arg)); success(isWords(rcvr)); if (failed()) { return null; } length = stSizeOf(arg); success(length == (stSizeOf(rcvr))); if (failed()) { return null; } rcvrPtr = ((float *) (firstIndexableField(rcvr))); argPtr = ((float *) (firstIndexableField(arg))); result = 0.0; for (i = 0; i <= (length - 1); i += 1) { result += (((double) (rcvrPtr[i]))) * (((double) (argPtr[i]))); } pop(2); pushFloat(result); }
primitiveDotProduct(void) { sqInt arg; float *argPtr; sqInt i; sqInt length; sqInt rcvr; float *rcvrPtr; double result; arg = stackValue(0); rcvr = stackValue(1); if (!((isWords(arg)) && ((isWords(rcvr)) && (((length = stSizeOf(arg))) == (stSizeOf(rcvr)))))) { return primitiveFail(); } rcvrPtr = ((float *) (firstIndexableField(rcvr))); argPtr = ((float *) (firstIndexableField(arg))); result = 0.0; for (i = 0; i < length; i += 1) { result += (((double) (rcvrPtr[i]))) * (((double) (argPtr[i]))); } pop(2); pushFloat(result); return 0; }
primitiveFileCopyNamedTo(void) { // FileCopyPlugin>>#primitiveFileCopyNamedTo char *dstName; sqInt dstSz; sqInt ok; char *srcName; sqInt srcSz; success(isBytes(stackValue(1))); srcName = ((char *) (firstIndexableField(stackValue(1)))); success(isBytes(stackValue(0))); dstName = ((char *) (firstIndexableField(stackValue(0)))); if (failed()) { return null; } srcSz = slotSizeOf(((sqInt)(long)(srcName) - 4)); dstSz = slotSizeOf(((sqInt)(long)(dstName) - 4)); ok = sqCopyFilesizetosize(srcName, srcSz, dstName, dstSz); if (!ok) { primitiveFail(); } if (failed()) { return null; } pop(2); return null; }
primitiveEqual(void) { sqInt arg; float *argPtr; sqInt i; sqInt length; sqInt rcvr; float *rcvrPtr; arg = stackValue(0); rcvr = stackValue(1); if (!((isWords(arg)) && (isWords(rcvr)))) { return primitiveFail(); } pop(2); if (!(((length = stSizeOf(arg))) == (stSizeOf(rcvr)))) { return pushBool(0); } rcvrPtr = ((float *) (firstIndexableField(rcvr))); argPtr = ((float *) (firstIndexableField(arg))); for (i = 0; i < length; i += 1) { if (!((rcvrPtr[i]) == (argPtr[i]))) { return pushBool(0); } } return pushBool(1); }
primitiveGetMacintoshFileTypeAndCreatorFrom(void) { char *aFileName; char creator[8]; sqInt i; sqInt keyLength; sqInt oop; char *ptr; success(isBytes(stackValue(0))); aFileName = ((char *) (firstIndexableField(stackValue(0)))); if (failed()) { return null; } keyLength = byteSizeOf(((sqInt)(sqIntptr_t)(aFileName) - BaseHeaderSize)); sqInternetGetMacintoshFileTypeAndCreatorFromkeySizeinto(aFileName, keyLength, creator); oop = instantiateClassindexableSize(classString(), 8); ptr = firstIndexableField(oop); for (i = 0; i <= 7; i += 1) { ptr[i] = (creator[i]); } if (failed()) { return null; } popthenPush(2, oop); return null; }
primitiveGetStringKeyedBy(void) { char *aKey; char aString[1025]; sqInt i; sqInt keyLength; sqInt oop; char *ptr; sqInt size; success(isBytes(stackValue(0))); aKey = ((char *) (firstIndexableField(stackValue(0)))); if (failed()) { return null; } keyLength = byteSizeOf(((sqInt)(sqIntptr_t)(aKey) - BaseHeaderSize)); size = sqInternetConfigurationGetStringKeyedBykeySizeinto(aKey, keyLength, aString); oop = instantiateClassindexableSize(classString(), size); ptr = firstIndexableField(oop); for (i = 0; i < size; i += 1) { ptr[i] = (aString[i]); } if (failed()) { return null; } popthenPush(2, oop); return null; }
primitiveEqual(void) { // FloatArrayPlugin>>#primitiveEqual sqInt arg; float *argPtr; sqInt i; sqInt length; sqInt rcvr; float *rcvrPtr; arg = stackObjectValue(0); rcvr = stackObjectValue(1); if (failed()) { return null; } success(isWords(arg)); success(isWords(rcvr)); if (failed()) { return null; } pop(2); length = stSizeOf(arg); if (!(length == (stSizeOf(rcvr)))) { return pushBool(0); } rcvrPtr = ((float *) (firstIndexableField(rcvr))); argPtr = ((float *) (firstIndexableField(arg))); for (i = 0; i <= (length - 1); i += 1) { if (!((rcvrPtr[i]) == (argPtr[i]))) { return pushBool(0); } } return pushBool(1); }
static sqInt loadClientStateverticescolorsnormalstexCoords(sqInt handle, sqInt vertices, sqInt colors, sqInt normals, sqInt texCoords) { // B3DAcceleratorPlugin>>#loadClientState:vertices:colors:normals:texCoords: void *colorPtr; void *normalPtr; sqInt ok; sqInt sz; void *txPtr; void *vertexPtr; sqInt vtxSize; /* Verify vertex data */ colorPtr = (normalPtr = (txPtr = (vertexPtr = null))); if (!(isWords(vertices))) { return primitiveFail(); } /* Verify assumptions of color, normal, texCoords data */ vtxSize = (slotSizeOf(vertices)) / 3; if (!((colors == (nilObject())) || ((isWords(colors)) && ((slotSizeOf(colors)) == (vtxSize * 4))))) { return primitiveFail(); } if (!((normals == (nilObject())) || ((isWords(normals)) && ((slotSizeOf(normals)) == (vtxSize * 3))))) { return primitiveFail(); } if (!((texCoords == (nilObject())) || (isWords(texCoords)))) { return primitiveFail(); } if (!(colors == (nilObject()))) { colorPtr = firstIndexableField(colors); } if (!(normals == (nilObject()))) { normalPtr = firstIndexableField(normals); } if (!(texCoords == (nilObject()))) { sz = (slotSizeOf(texCoords)) / vtxSize; txPtr = firstIndexableField(texCoords); } vertexPtr = firstIndexableField(vertices); if (failed()) { return null; } ok = b3dLoadClientState(handle, vertexPtr, 3, colorPtr, 4, normalPtr, 3, txPtr, sz); if (!ok) { return primitiveFail(); } }
/* 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; }
primitiveFileRead(void) { // FilePlugin>>#primitiveFileRead sqInt array; sqInt bytesRead; size_t count; size_t elementSize; SQFile *file; sqInt objectPointer; sqInt retryCount; size_t startIndex; retryCount = 0; count = positive32BitValueOf(stackValue(0)); startIndex = positive32BitValueOf(stackValue(1)); while (1) { array = stackValue(2); /* begin fileValueOf: */ objectPointer = stackValue(3); if (!((isBytes(objectPointer)) && ((byteSizeOf(objectPointer)) == (sizeof(SQFile))))) { primitiveFail(); file = null; goto l1; } file = firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if ((failed()) || (!(isWordsOrBytes(array)))) { return primitiveFailFor(PrimErrBadArgument); } elementSize = (isWords(array) ? 4 : 1); if (!((startIndex >= 1) && (((startIndex + count) - 1) <= (slotSizeOf(array))))) { return primitiveFailFor(PrimErrBadIndex); } bytesRead = sqFileReadIntoAt(file, count * elementSize, ((char *) (firstIndexableField(array))), (startIndex - 1) * elementSize); if (!(((primitiveFailureCode()) == PrimErrObjectMayMove) && (((retryCount += 1)) <= 2))) break; tenuringIncrementalGC(); primitiveFailFor(PrimNoErr); } if (!(failed())) { popthenPush(5, integerObjectOf(bytesRead / elementSize)); } }
primitiveDivScalar(void) { sqInt i; double inverse; sqInt length; sqInt rcvr; float *rcvrPtr; double value; value = stackFloatValue(0); if (failed()) { return null; } rcvr = stackValue(1); if (!(isWords(rcvr))) { return primitiveFail(); } length = stSizeOf(rcvr); rcvrPtr = ((float *) (firstIndexableField(rcvr))); inverse = 1.0 / value; for (i = 0; i < length; i += 1) { rcvrPtr[i] = ((((double) (rcvrPtr[i]))) * inverse); } pop(1); return 0; }
primitiveFileAtEnd(void) { // FilePlugin>>#primitiveFileAtEnd sqInt atEnd; SQFile *file; sqInt objectPointer; /* begin fileValueOf: */ objectPointer = stackValue(0); if (!((isBytes(objectPointer)) && ((byteSizeOf(objectPointer)) == (sizeof(SQFile))))) { primitiveFail(); file = null; goto l1; } file = firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(failed())) { atEnd = sqFileAtEnd(file); } if (!(failed())) { pop(2); pushBool(atEnd); } }
primitiveFileDelete(void) { // FilePlugin>>#primitiveFileDelete char *nameIndex; sqInt namePointer; sqInt nameSize; sqInt okToDelete; namePointer = stackValue(0); if (!(isBytes(namePointer))) { return primitiveFail(); } nameIndex = firstIndexableField(namePointer); /* If the security plugin can be loaded, use it to check for permission. If not, assume it's ok */ nameSize = byteSizeOf(namePointer); if (sCDFfn != 0) { okToDelete = ((sqInt (*)(char *, sqInt))sCDFfn)(nameIndex, nameSize); if (!okToDelete) { return primitiveFail(); } } sqFileDeleteNameSize(nameIndex, nameSize); if (!(failed())) { pop(1); } }
primitiveFileTruncate(void) { // FilePlugin>>#primitiveFileTruncate SQFile *file; sqInt objectPointer; sqInt sz; squeakFileOffsetType truncatePosition; if (!(isIntegerObject(stackValue(0)))) { sz = sizeof(squeakFileOffsetType); if ((byteSizeOf(stackValue(0))) > sz) { return primitiveFail(); } } truncatePosition = positive64BitValueOf(stackValue(0)); /* begin fileValueOf: */ objectPointer = stackValue(1); if (!((isBytes(objectPointer)) && ((byteSizeOf(objectPointer)) == (sizeof(SQFile))))) { primitiveFail(); file = null; goto l1; } file = firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(failed())) { sqFileTruncate(file, truncatePosition); } if (!(failed())) { pop(2); } }
primitiveDirectoryDelete(void) { // FilePlugin>>#primitiveDirectoryDelete sqInt dirName; char *dirNameIndex; sqInt dirNameSize; sqInt okToDelete; dirName = stackValue(0); if (!(isBytes(dirName))) { return primitiveFail(); } dirNameIndex = firstIndexableField(dirName); /* If the security plugin can be loaded, use it to check for permission. If not, assume it's ok */ dirNameSize = byteSizeOf(dirName); if (sCDPfn != 0) { okToDelete = ((sqInt (*)(char *, sqInt))sCDPfn)(dirNameIndex, dirNameSize); if (!okToDelete) { return primitiveFail(); } } if (!(dir_Delete(dirNameIndex, dirNameSize))) { return primitiveFail(); } pop(1); }
primitiveSoundInsertSamples(void) { // SoundPlugin>>#primitiveSoundInsertSamples unsigned *buf; sqInt frameCount; sqInt framesPlayed; sqInt leadTime; sqInt _return_value; frameCount = stackIntegerValue(2); success(isWords(stackValue(1))); buf = ((unsigned *) (firstIndexableField(stackValue(1)))); leadTime = stackIntegerValue(0); if (failed()) { return null; } success(frameCount <= (slotSizeOf(((sqInt)(long)(buf) - BaseHeaderSize)))); if (!(failed())) { framesPlayed = snd_InsertSamplesFromLeadTime(frameCount, (void *)buf, leadTime); success(framesPlayed >= 0); } _return_value = positive32BitIntegerFor(framesPlayed); if (failed()) { return null; } popthenPush(4, _return_value); return null; }
static void* stackPrimitiveIndexArrayofSizevalidateforVertexSize(sqInt stackIndex, sqInt nItems, sqInt aBool, sqInt maxIndex) { // B3DAcceleratorPlugin>>#stackPrimitiveIndexArray:ofSize:validate:forVertexSize: sqInt i; int *idxPtr; sqInt index; sqInt oop; sqInt oopSize; oop = stackObjectValue(stackIndex); if (oop == null) { return null; } if (!(isWords(oop))) { return null; } oopSize = slotSizeOf(oop); if (oopSize < nItems) { return null; } idxPtr = ((int *) (firstIndexableField(oop))); if (aBool) { for (i = 0; i <= (nItems - 1); i += 1) { index = idxPtr[i]; if ((index < 0) || (index > maxIndex)) { return null; } } } return idxPtr; }
primitiveNormalize(void) { sqInt i; double len; sqInt length; sqInt rcvr; float *rcvrPtr; rcvr = stackValue(0); if (!(isWords(rcvr))) { primitiveFailFor(PrimErrBadReceiver); } length = stSizeOf(rcvr); rcvrPtr = ((float *) (firstIndexableField(rcvr))); len = 0.0; for (i = 0; i < length; i += 1) { len += (((double) (rcvrPtr[i]))) * (((double) (rcvrPtr[i]))); } if (!(len > 0.0)) { primitiveFailFor(PrimErrBadReceiver); } len = sqrt(len); for (i = 0; i < length; i += 1) { rcvrPtr[i] = ((((double) (rcvrPtr[i]))) / len); } return 0; }
primitiveSoundPlaySamples(void) { // SoundPlugin>>#primitiveSoundPlaySamples unsigned *buf; sqInt frameCount; sqInt framesPlayed; sqInt startIndex; sqInt _return_value; frameCount = stackIntegerValue(2); success(isWords(stackValue(1))); buf = ((unsigned *) (firstIndexableField(stackValue(1)))); startIndex = stackIntegerValue(0); if (failed()) { return null; } success((startIndex >= 1) && (((startIndex + frameCount) - 1) <= (slotSizeOf(((sqInt)(long)(buf) - BaseHeaderSize))))); if (!(failed())) { framesPlayed = snd_PlaySamplesFromAtLength(frameCount, (void *)buf, startIndex - 1); success(framesPlayed >= 0); } _return_value = positive32BitIntegerFor(framesPlayed); if (failed()) { return null; } popthenPush(4, _return_value); return null; }
primitiveDLSym(void) { void *addr; sqInt i; char *name; sqInt nameObj; char *namePtr; sqInt sz; nameObj = stackValue(0); if (!(isBytes(nameObj))) { return primitiveFailFor(PrimErrBadArgument); } sz = byteSizeOf(nameObj); name = malloc(sz + 1); namePtr = firstIndexableField(nameObj); for (i = 0; i < sz; i += 1) { name[i] = (namePtr[i]); } name[sz] = 0; addr = dlsym(RTLD_SELF,name); free(name); return methodReturnValue((addr == 0 ? nilObject() : (/* begin positiveMachineIntegerFor: */ (BytesPerWord == 8 ? positive64BitIntegerFor(((usqIntptr_t)addr)) : positive32BitIntegerFor(((usqIntptr_t)addr)))))); }
primitiveSerialPortRead(void) { // SerialPlugin>>#primitiveSerialPortRead char *array; sqInt arrayPtr; sqInt bytesRead; sqInt count; sqInt portNum; sqInt startIndex; sqInt _return_value; portNum = stackIntegerValue(3); success(isBytes(stackValue(2))); array = ((char *) (firstIndexableField(stackValue(2)))); startIndex = stackIntegerValue(1); count = stackIntegerValue(0); if (failed()) { return null; } success((startIndex >= 1) && (((startIndex + count) - 1) <= (byteSizeOf(((sqInt)(long)(array) - 4))))); arrayPtr = ((((sqInt)array)) + startIndex) - 1; bytesRead = serialPortReadInto( portNum, count, arrayPtr); _return_value = integerObjectOf(bytesRead); if (failed()) { return null; } popthenPush(5, _return_value); return null; }
primitiveIsPureTranslation(void) { float *matrix; sqInt matrix1; /* begin loadArgumentMatrix: */ matrix1 = stackObjectValue(0); 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; } pop(1); pushBool(((((matrix[0]) == (((float) 1.0))) && ((matrix[1]) == (((float) 0.0)))) && ((matrix[3]) == (((float) 0.0)))) && ((matrix[4]) == (((float) 1.0)))); return 0; }
primitiveGetUntrustedUserDirectory(void) { sqInt dirLen; char *dirName; sqInt dirOop; char *dirPtr; sqInt i; dirName = ioGetUntrustedUserDirectory(); if ((dirName == null) || (failed())) { return primitiveFail(); } dirLen = strlen(dirName); dirOop = instantiateClassindexableSize(classString(), dirLen); if (failed()) { return null; } dirPtr = firstIndexableField(dirOop); for (i = 0; i < dirLen; i += 1) { dirPtr[i] = (dirName[i]); } popthenPush(1, dirOop); return 0; }
primitiveAtPut(void) { float *floatPtr; double floatValue; sqInt index; sqInt rcvr; sqInt value; value = stackValue(0); if (isIntegerObject(value)) { floatValue = ((double) (integerValueOf(value)) ); } else { floatValue = floatValueOf(value); } index = stackIntegerValue(1); rcvr = stackValue(2); if (!((!(failed())) && ((isWords(rcvr)) && ((index > 0) && (index <= (slotSizeOf(rcvr))))))) { return primitiveFail(); } floatPtr = firstIndexableField(rcvr); floatPtr[index - 1] = (((float) floatValue)); popthenPush(3, value); return 0; }
primitiveDropRequestFileName(void) { sqInt dropIndex; char *dropName; sqInt i; sqInt nameLength; sqInt nameOop; char *namePtr; if (!((methodArgumentCount()) == 1)) { return primitiveFail(); } dropIndex = stackIntegerValue(0); /* dropRequestFileName returns name or NULL on error */ dropName = dropRequestFileName(dropIndex); if (dropName == null) { return primitiveFail(); } nameLength = strlen(dropName); nameOop = instantiateClassindexableSize(classString(), nameLength); namePtr = firstIndexableField(nameOop); for (i = 0; i < nameLength; i += 1) { namePtr[i] = (dropName[i]); } pop(2); push(nameOop); return 0; }
primitiveSerialPortWrite(void) { char *array; char * arrayPtr; sqInt bytesWritten; sqInt count; sqInt portNum; sqInt startIndex; sqInt _return_value; bytesWritten = 0; portNum = stackIntegerValue(3); success(isBytes(stackValue(2))); array = ((char *) (firstIndexableField(stackValue(2)))); startIndex = stackIntegerValue(1); count = stackIntegerValue(0); if (failed()) { return null; } success((startIndex >= 1) && (((startIndex + count) - 1) <= (byteSizeOf(((sqInt)(sqIntptr_t)(array) - BaseHeaderSize))))); if (!(failed())) { arrayPtr = (array + startIndex) - 1; bytesWritten = serialPortWriteFrom(portNum, count, arrayPtr); } if (failed()) { return null; } _return_value = integerObjectOf(bytesWritten); popthenPush(5, _return_value); return null; }
primitiveSetStringProperty(void) { sqInt handle; sqInt propID; sqInt result; sqInt srcLen; sqInt srcOop; char *srcPtr; if (!((methodArgumentCount()) == 3)) { return primitiveFail(); } srcOop = stackObjectValue(0); propID = stackIntegerValue(1); handle = stackIntegerValue(2); if (failed()) { return null; } if (!(isBytes(srcOop))) { return primitiveFail(); } srcPtr = firstIndexableField(srcOop); srcLen = byteSizeOf(srcOop); result = sqSetStringPropertySSL(handle, propID, srcPtr, srcLen); if (!result) { return primitiveFail(); } if (failed()) { return null; } pop(methodArgumentCount()); return 0; }
/* primitivePluginRequestUrlStream: url with: semaIndex Request a URL from the browser. Signal semaIndex when the result of the request can be queried. Returns a handle used in subsequent calls to plugin stream functions. Note: A request id is the index into requests[]. */ int display_primitivePluginRequestURLStream() { sqStreamRequest *req; int id, url, length, semaIndex; if (!inBrowser) return primitiveFail(); DPRINT("VM: primitivePluginRequestURLStream()\n"); for (id=0; id<MAX_REQUESTS; id++) { if (!requests[id]) break; } if (id >= MAX_REQUESTS) return primitiveFail(); semaIndex= stackIntegerValue(0); url= stackObjectValue(1); if (failed()) return 0; if (!isBytes(url)) return primitiveFail(); req= calloc(1, sizeof(sqStreamRequest)); if (!req) return primitiveFail(); req->localName= NULL; req->semaIndex= semaIndex; req->state= -1; requests[id]= req; length= byteSizeOf(url); browserGetURLRequest(id, firstIndexableField(url), length, NULL, 0); pop(3); push(positive32BitIntegerFor(id)); DPRINT("VM: request id: %i\n", id); return 1; }