/* TODO: worry about the options argument */
@BIF
static EObject port_command(EProc proc, EObject port, EObject data, EObject options)
throws Pausable {
EInternalPort p = port.testInternalPort();
if (log.isLoggable(Level.FINE))
log.fine("port_command "+port+", "+data);
if (p == null) {
port = ERT.whereis(port);
if (port == ERT.am_undefined)
port = null;
else
p = port.testInternalPort();
}
List<ByteBuffer> ovec = new ArrayList<ByteBuffer>();
if (p == null || !data.collectIOList(ovec)) {
if (log.isLoggable(Level.FINE)) {
log.fine("collect failed! or p==null: "+p);
}
throw ERT.badarg(port, data);
}
ByteBuffer[] out = new ByteBuffer[ovec.size()];
ovec.toArray(out);
EDriverInstance.dump_buffer(log, "EVEC: ", out);
// log.fine("packing "+data+"::"+data.getClass().getName()+" -> "+ovec);
p.command(proc.self_handle(), out);
return ERT.TRUE;
}