in with the new
diff --git a/src/cmd/dial.c b/src/cmd/dial.c
new file mode 100644
index 0000000..c2b18f5
--- /dev/null
+++ b/src/cmd/dial.c
@@ -0,0 +1,62 @@
+#include <u.h>
+#include <libc.h>
+
+void
+usage(void)
+{
+	fprint(2, "usage: dial [-e] addr\n");
+	exits("usage");
+}
+
+void
+killer(void *x, char *msg)
+{
+	USED(x);
+	if(strcmp(msg, "kill") == 0)
+		exits(0);
+	noted(NDFLT);
+}
+
+void
+main(int argc, char **argv)
+{
+	int fd, pid;
+	char buf[8192];
+	int n, waitforeof;
+
+	notify(killer);
+	waitforeof = 0;
+	ARGBEGIN{
+	case 'e':
+		waitforeof = 1;
+		break;
+	default:
+		usage();
+	}ARGEND
+
+	if(argc != 1)
+		usage();
+
+	if((fd = dial(argv[0], nil, nil, nil)) < 0)
+		sysfatal("dial: %r");
+
+	switch(pid = fork()){
+	case -1:
+		sysfatal("fork: %r");
+	case 0:
+		while((n = read(0, buf, sizeof buf)) > 0)
+			if(write(0, buf, n) < 0)
+				break;
+		if(!waitforeof)
+			postnote(PNPROC, getppid(), "kill");
+		exits(nil);
+	}
+
+	while((n = read(fd, buf, sizeof buf)) > 0)
+		if(write(1, buf, n) < 0)
+			break;
+
+	postnote(PNPROC, pid, "kill");
+	waitpid();
+	exits(0);
+}