Hello all, here I am advertising my own personal project. (Technically it's a complete rewrite, the old version was announced here once before.)
Home page: http://repo.hu/projects/plumb/ Plumb is a program that runs multiple processes and lets you define arbitrary pipes between them (it uses libevent to manage the data transfer). The major new feature in the rewrite is that it has a fairly comfy "control language" that it can also read from pipes in runtime; this means that a program running under Plumb can start new processes, shut down old ones, create or kill pipes. The simplest, most common application would be to start two processes and connect them in a "69" configuration - STDIN to STDOUT of the other. This is how you can use Animator (http://repo.hu/projects/animator/) to write simple interactive apps. A slightly more complex application: I wrote an interactive, graphical Gopher client in AWK. It uses Animator for the display, and spawns nc for downloads as needed. Multiple downloads can be ongoing at the same time. It manages all this from a simple AWK script that does nothing else but read from STDIN and write to STDOUT. There's another tool that is part of the "Plumb package", called plumbnet. It's a TCP server that listens on a port and accepts multiple connections at once (again, using libevent). It writes lines received from connections to STDOUT, and reads lines to send on its STDIN. Connections are distinguished by integer connection ID prefixes in either direction. You'd tipically use plumbnet by wiring it together with your program using Plumb. It may be a good alternative to inetd, when you want to accept multiple TCP connections but there is common state (so you'd have to do some sort of IPC, or write a complete network daemon from scratch). Plumb basically lets you use STDIN/STDOUT in new and flexible ways. Most of this was possible to do before by hand (e.g. by using mkfifo), but with Plumb, it should be much more comfortable. I don't know, it might even serve to connect a controlling script with a window manager, so the wm logic is moved outside the core wm :) The core use case is probably the "hack up something fast" "i really like AWK" "i'm at a programming compo" scenario. Suggestions/complaints/bug reports/flame is very welcome as usual (except regarding the license or VCS ;) Thanks for reading, Mate