SLOWBAUD(1) Urchlay's Useless Stuff SLOWBAUD(1) NAME slowbaud - simulate a low bitrate serial connection SYNOPSIS slowbaud [<bits-per-sec>] [<file> ...] slowbaud [<bits-per-sec>] -c [<command> [<arg> ...]] slowbaud [<bits-per-sec>] -e <string> [<string> ...] slowbaud [<bits-per-sec>] -b [<bytes>] DESCRIPTION slowbaud by default acts as a filter, or like the cat(1) command. It reads files or its standard input, and writes the contents unmodified to standard output... but slowly, at the given bits-per-second rate. Input and output are unbuffered. slowbaud can also act like echo(1) (the -e option), or run an interactive com‐ mand in a pseudo-tty (the -c option). The <bits-per-sec> argument is optional. If it's not given, the bit rate will be set from SLOWBAUD_BPS in the environment, or a built-in default of 2400 if that's not set. OPTIONS bits-per-sec The bit ("baud") rate to simulate. Range is 1 to 500000. This must be the first argument. slowbaud assumes that if the first argument is a number, it's the bit rate. If you're trying to pass a filename that consists only of digits, give -- as the first argument, or use e.g. ./filename. -e Echo mode. Prints all further arguments as strings to stdout, separated by a single space, at the given bit rate. Does not support back‐ slash-escapes, or any of the options of the regular echo command. At least one argument is required after -e. -c Command mode. Next argument (if present) is the command to run, any remaining arguments become arguments to the command. With no arguments after -c, a shell is spawned. This creates a pseudo-tty, so the com‐ mand can be interactive. -b Benchmark mode. Prints <bytes> (or 4096, if no <bytes> given) bytes of zeroes to /dev/null. Mostly useful for development and troubleshooting. -h, -? Show built-in help message and exit. ENVIRONMENT SLOWBAUD_BPS Can be used to set the bit rate, when no <bits-per-sec> argument is used. SLOWBAUD_DEBUG Set this (to any value) in the environment to see verbose debug output on stderr, including timing accuracy stats. SHELL Standard *nix environment variable, used to determine what shell to run when -c is given with no <command>. If unset, /bin/sh is used. EXIT STATUS Without -c or -e, 0 for success, non-zero on any error such as nonexis‐ tent/unreadable files. slowbaud exits immediately on such errors (this is unlike cat(1)). With -e, exit status is 0, unless there were no arguments to echo. With -c, exit status is that of the child process, or 127 if the child process couldn't be spawned (e.g. command not found). Of course, the child process could also exit with status 127... With -b, exit status is 0, unless something catastrophic happened (e.g. unable to open /dev/null for writing). NOTES The timing inaccuracy will almost always result in the bitrate being slightly too slow. We can't really insert a delay between the bits of a byte, since I/O is done with byte granularity. For calculation purposes, <bits-per-sec> is divided by 10 to get bytes per second. This simulates "8-N-1": one start bit, 8 data bits, no parity, and 1 stop bit (total of 10 bits per byte). BUGS With -c, signals aren't handled gracefully. Window size changes (SIGWINCH) don't get propagated to the child process, and pressing ^C doesn't interrupt the process until all pending output is processed. COPYRIGHT slowbaud is copyright 2021, B. Watson <yalhcru@gmail.com>. Released under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. 0.0.1 2021-07-24 SLOWBAUD(1)