If you're considering porting tf to a non-UNIX-like operating system, here are some assumptions in the code you should be aware of that are true on UNIX-like systems but not necessarily others. BSD-style sockets, and a select() that works on both sockets and keyboard input. If your system doesn't have these, you should probably forget about porting tf. gethostbyname(). The value returned by time() increases by 1 each second (I think ANSI guarantees only that it increases monotonically). Used to time /quote, /repeat, mail checks, etc. variable.c: environment variables are accessible through char **environ, and stored in the form "name=value". signals.c: a superset of ANSI signals. several UNIX errno constants (EINVAL, ENOENT, etc.). tty.c: one of termios, termio, or sgtty terminal driver. output.c: termcap library and/or vt100/vt220/ansi compatible display. system() executes its argument in a subshell; its return value can be interpreted like that of POSIX or UNIX wait(). tfio.c: popen() and shell syntax. Used by "/quote !" and file decompression. ASCII character set. bsearch(); or, all pointers are compatible with each other. Optional: select() on a pipe (for nonblocking hostname resolution) Useful, but not essential: getwd() or getcwd(); strftime(). Probably a few other things I can't think of at the moment.