/** * Array with * * <p><name> <creationTime> <modificationTime> <dirFlag> <fileSize> * * <p>See {@link #lookupEntryInIndex(int)} */ private SqueakObject makeDirectoryEntryArray(File file) { // bah, Java doesn't provide the creation time. If it is // really necessary, it may be possible to use java-posix or // jtux. String name = file.getName(); long creationTime = file.lastModified(); long modificationTime = file.lastModified(); boolean dirFlag = file.isDirectory(); long fileSize = file.length(); try { Object[] array = { fHandler.makeStString(name), fHandler.squeakSeconds(creationTime), fHandler.squeakSeconds(modificationTime), fHandler.squeakBool(dirFlag), fHandler.pos32BitIntFor(fileSize) }; return fHandler.squeakArray(array); } catch (ArrayIndexOutOfBoundsException e) { System.out.println( "Error in FileSystemPrimitives.makeDirectoryEntryArray: name = '" + name + "'"); throw e; } }
/** * primOpen: fileName writable: writableFlag "Open a file of the given name, and return the file * ID obtained. If writableFlag is true, then if there is none with this name, then create one * else prepare to overwrite the existing from the beginning otherwise if the file exists, open it * read-only else return nil" * * <p><primitive: 153> ^ nil */ Object openWritable(int argCount) { if (argCount != 2) throw fHandler.primitiveFailed(); SqueakObject fileName = fHandler.stackNonInteger(1); SqueakObject writableFlag = fHandler.stackNonInteger(0); String mode = fHandler.javaBool(writableFlag) ? "rw" : "r"; try { RandomAccessFile file = new RandomAccessFile(fileName.asString(), mode); SqueakObject fileId = fHandler.makeStString("fileId: " + fileName.asString()); setFile(fileId, file); return fileId; } catch (FileNotFoundException e) { System.err.println(e.getMessage()); } throw fHandler.primitiveFailed(); }