Ejemplo n.º 1
0
 /**
  * Returns a port identifier as the result of opening a new Erlang port. A port can be seen as an
  * external Erlang process.
  *
  * <p>http://erlang.org/doc/man/erlang.html#open_port-2
  */
 public static PortID open_port_2(Tuple portName, List portSettings) {
   Atom name = portName.element(1).toAtom();
   if (spawn.equals(name)) {
     Term command = portName.element(2);
     return VirtualMachine.instance().spawn_port(command, portSettings);
   } else if (spawn_driver.equals(name)) {
     Term command = portName.element(2);
     return VirtualMachine.instance().spawn_driver_port(command, portSettings);
   } else if (spawn_executable.equals(name)) {
     Term fileName = portName.element(2);
     return VirtualMachine.instance().spawn_executable_port(fileName, portSettings);
   } else {
     throw Error.badarg;
   }
 }
Ejemplo n.º 2
0
public class ErlangOpenPort {

  private static final Atom spawn = Atom.of("spawn");
  private static final Atom spawn_driver = Atom.of("spawn_driver");
  private static final Atom spawn_executable = Atom.of("spawn_executable");

  private ErlangOpenPort() {}

  public static Term dispatch(List params) {
    switch (params.length()) {
      case 3:
        Tuple portName = params.head().toTuple();
        params = params.tail();
        List portSettings = params.head().toList();
        return open_port_2(portName, portSettings);
      default:
        throw Error.badarg;
    }
  }

  /**
   * Returns a port identifier as the result of opening a new Erlang port. A port can be seen as an
   * external Erlang process.
   *
   * <p>http://erlang.org/doc/man/erlang.html#open_port-2
   */
  public static PortID open_port_2(Tuple portName, List portSettings) {
    Atom name = portName.element(1).toAtom();
    if (spawn.equals(name)) {
      Term command = portName.element(2);
      return VirtualMachine.instance().spawn_port(command, portSettings);
    } else if (spawn_driver.equals(name)) {
      Term command = portName.element(2);
      return VirtualMachine.instance().spawn_driver_port(command, portSettings);
    } else if (spawn_executable.equals(name)) {
      Term fileName = portName.element(2);
      return VirtualMachine.instance().spawn_executable_port(fileName, portSettings);
    } else {
      throw Error.badarg;
    }
  }
}