int dropRequestFileHandle(int dropIndex) { int fileHandle, wasBrowserMode; char *dropName = dropRequestFileName(dropIndex); if(!dropName) return interpreterProxy->nilObject(); fileHandle = instantiateClassindexableSize(classByteArray(), fileRecordSize()); wasBrowserMode = fBrowserMode; fBrowserMode = false; sqFileOpen(fileValueOf(fileHandle),(int)dropName, strlen(dropName), 0); fBrowserMode = wasBrowserMode; return fileHandle; }
int dropRequestFileHandle(int dropIndex) { char *path= dropRequestFileName(dropIndex); if (path) { // you cannot be serious? int handle= instantiateClassindexableSize(classByteArray(), fileRecordSize()); sqFileOpen((SQFile *)fileValueOf(handle), path, strlen(path), 0); return handle; } return interpreterProxy->nilObject(); }
EXPORT(sqInt) primitiveFileWrite(void) { sqInt bytesWritten; size_t count; sqInt array; size_t byteSize; char * arrayIndex; size_t startIndex; SQFile * file; sqInt objectPointer; count = interpreterProxy->positive32BitValueOf(interpreterProxy->stackValue(0)); startIndex = interpreterProxy->positive32BitValueOf(interpreterProxy->stackValue(1)); array = interpreterProxy->stackValue(2); /* begin fileValueOf: */ objectPointer = interpreterProxy->stackValue(3); if (!((interpreterProxy->isBytes(objectPointer)) && ((interpreterProxy->byteSizeOf(objectPointer)) == (fileRecordSize())))) { interpreterProxy->primitiveFail(); file = null; goto l1; } file = interpreterProxy->firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(interpreterProxy->isWordsOrBytes(array))) { return interpreterProxy->primitiveFail(); } if (interpreterProxy->isWords(array)) { byteSize = 4; } else { byteSize = 1; } if (!((startIndex >= 1) && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))) { return interpreterProxy->primitiveFail(); } if (!(interpreterProxy->failed())) { /* Note: adjust startIndex for zero-origin indexing */ arrayIndex = interpreterProxy->firstIndexableField(array); bytesWritten = sqFileWriteFromAt(file, count * byteSize, arrayIndex, (startIndex - 1) * byteSize); } if (!(interpreterProxy->failed())) { interpreterProxy->popthenPush(5, (((bytesWritten / byteSize) << 1) | 1)); } }
EXPORT(sqInt) primitiveFileTruncate(void) { SQFile * file; sqInt sz; squeakFileOffsetType truncatePosition; sqInt objectPointer; if (!(((interpreterProxy->stackValue(0)) & 1))) { sz = sizeof(squeakFileOffsetType); if ((interpreterProxy->byteSizeOf(interpreterProxy->stackValue(0))) > sz) { return interpreterProxy->primitiveFail(); } } truncatePosition = interpreterProxy->positive64BitValueOf(interpreterProxy->stackValue(0)); /* begin fileValueOf: */ objectPointer = interpreterProxy->stackValue(1); if (!((interpreterProxy->isBytes(objectPointer)) && ((interpreterProxy->byteSizeOf(objectPointer)) == (fileRecordSize())))) { interpreterProxy->primitiveFail(); file = null; goto l1; } file = interpreterProxy->firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(interpreterProxy->failed())) { sqFileTruncate(file, truncatePosition); } if (!(interpreterProxy->failed())) { interpreterProxy->pop(2); } }
EXPORT(sqInt) primitiveFileSize(void) { squeakFileOffsetType size; SQFile * file; sqInt objectPointer; /* begin fileValueOf: */ objectPointer = interpreterProxy->stackValue(0); if (!((interpreterProxy->isBytes(objectPointer)) && ((interpreterProxy->byteSizeOf(objectPointer)) == (fileRecordSize())))) { interpreterProxy->primitiveFail(); file = null; goto l1; } file = interpreterProxy->firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(interpreterProxy->failed())) { size = sqFileSize(file); } if (!(interpreterProxy->failed())) { interpreterProxy->popthenPush(2, interpreterProxy->positive64BitIntegerFor(size)); } }
EXPORT(sqInt) primitiveFileFlush(void) { SQFile * file; sqInt objectPointer; /* begin fileValueOf: */ objectPointer = interpreterProxy->stackValue(0); if (!((interpreterProxy->isBytes(objectPointer)) && ((interpreterProxy->byteSizeOf(objectPointer)) == (fileRecordSize())))) { interpreterProxy->primitiveFail(); file = null; goto l1; } file = interpreterProxy->firstIndexableField(objectPointer); l1: /* end fileValueOf: */; if (!(interpreterProxy->failed())) { sqFileFlush(file); } if (!(interpreterProxy->failed())) { interpreterProxy->pop(1); } }
SQFile * fileValueOf(sqInt objectPointer) { if (!((interpreterProxy->isBytes(objectPointer)) && ((interpreterProxy->byteSizeOf(objectPointer)) == (fileRecordSize())))) { interpreterProxy->primitiveFail(); return null; } return interpreterProxy->firstIndexableField(objectPointer); }
EXPORT(sqInt) fileOpenNamesizewritesecure(char * nameIndex, sqInt nameSize, sqInt writeFlag, sqInt secureFlag) { sqInt fileOop; sqInt okToOpen; SQFile * file; fileOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), fileRecordSize()); /* begin fileValueOf: */ if (!((interpreterProxy->isBytes(fileOop)) && ((interpreterProxy->byteSizeOf(fileOop)) == (fileRecordSize())))) { interpreterProxy->primitiveFail(); file = null; goto l1; } file = interpreterProxy->firstIndexableField(fileOop); l1: /* end fileValueOf: */; if (!(interpreterProxy->failed())) { if (secureFlag) { if (sCOFfn != 0) { okToOpen = ((sqInt (*) (char *, sqInt, sqInt)) sCOFfn)(nameIndex, nameSize, writeFlag); if (!(okToOpen)) { interpreterProxy->primitiveFail(); } } } } if (!(interpreterProxy->failed())) { sqFileOpen(file, nameIndex, nameSize, writeFlag); } return fileOop; }