#include #include #include int s; void keyproc(void*) { while(1) { char buf[512]; int n = read(0, buf, 511); if(n < 0) sysfatal("read: %r"); buf[n] = 0; if(strchr(buf, 127)) threadexitsall(0); if(write(s, buf, n) < 0) sysfatal("write: %r"); } } void threadmain(int argc, char** argv) { if(argc != 2 && argc != 3) { print("usage: %s target-ip [port]\n", argv[0]); exits("usage"); } char *target = argv[1]; char *port = argv[2] ? argv[2] : "6666"; char devdir[128]; s = dial(netmkaddr(target, "udp", port), port, devdir, 0); if(s < 0) sysfatal("dial: %r"); strcat(devdir, "/ctl"); int udpctl = open(devdir, OWRITE); if(udpctl >= 0) write(udpctl, "ignoreadvice", 13); int consctl = open("/dev/consctl", OWRITE); if(consctl < 0) sysfatal("open consctl: %r"); if(write(consctl, "rawon", 5) < 0) sysfatal("write to consctl: %r"); proccreate(keyproc, 0, 8000); while(1) { char buf[512]; int n = read(s, buf, 511); if(n < 0) sysfatal("read: %r"); if(write(1, buf, n) < 0) sysfatal("write: %r"); } }