Exemplo n.º 1
0
  /**
   * 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;
    }
  }
Exemplo n.º 2
0
  /**
   * 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();
  }