This involves a little stunt roff, but we'll manage somehow.
.B "#include <mLib/url.h>"
.BI "void url_initenc(url_ectx *" ctx );
-.BI "void url_enc(url_ectx *" ctx ", dstr *" d ,
-.BI " const char *" name ", const char *" value );
+.ds mT \fBvoid url_enc(
+.BI "\*(mTurl_ectx *" ctx ", dstr *" d ,
+.BI "\h'\w'\*(mT'u'const char *" name ", const char *" value );
.BI "void url_initdec(url_dctx *" ctx ", const char *" p );
.BI "int url_dec(url_dctx *" ctx ", dstr *" n ", dstr *" v );
.nf
.B "#include <mLib/bres.h>"
-.BI "void bres_byname(bres_client *" rc ", const char *" name ,
-.BI " void (*" func ")(struct hostent *" h ", void *" p ),
-.BI " void *" p );
-.BI "void bres_byaddr(bres_client *" rc ", struct inaddr " addr ,
-.BI " void (*" func ")(struct hostent *" h ", void *" p ),
-.BI " void *" p );
+.ds mT \fBvoid bres_byname(
+.BI "\*(mTbres_client *" rc ", const char *" name ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(struct hostent *" h ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
+.ds mT \fBvoid bres_byaddr(
+.BI "\*(mTbres_client *" rc ", struct inaddr " addr ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(struct hostent *" h ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
.BI "void bres_abort(bres_client *" rc );
.BI "void bres_exec(const char *" file );
.BI "void bres_init(sel_state *" sel );
.nf
.B "#include <mLib/conn.h>"
-.BI "int conn_fd(conn *" c ", sel_state *" s ", int " fd ,
-.BI " void (*" func ")(int " fd ", void *" p ),
-.BI " void *" p );
+.ds mT \fBint conn_fd(
+.BI "\*(mTconn *" c ", sel_state *" s ", int " fd ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(int " fd ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
-.BI "int conn_init(conn *" c ", sel_state *" s ", int " fd ,
-.BI " struct sockaddr *" dst ", int " dsz ,
-.BI " void (*" func ")(int " fd ", void *" p ),
-.BI " void *" p );
+.ds mT \fBint conn_init(
+.BI "\*(mTconn *" c ", sel_state *" s ", int " fd ,
+.BI "\h'\w'\*(mT'u'struct sockaddr *" dst ", int " dsz ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(int " fd ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
.BI "void conn_kill(conn *" c );
.fi
.B "#include <mLib/ident>"
.BI "void ident_abort(ident_request *" rq );
-.BI "void ident(ident_request *" rq ", sel_state *" s ,
-.BI " const struct sockaddr_in *" local ,
-.BI " const struct sockaddr_in *" remote ,
-.BI " void (*" func ")(ident_reply *" i ", void *" p ),
-.BI " void *" p );
-.BI "void ident_socket(ident_request *" rq ", sel_state *" s ", int " sk ,
-.BI " void (*" func ")(ident_reply *" i ", void *" p ),
-.BI " void *" p );
+.ds mT \fBvoid ident(
+.BI "\*(mTident_request *" rq ", sel_state *" s ,
+.BI "\h'\w'\*(mT'u'const struct sockaddr_in *" local ,
+.BI "\h'\w'\*(mT'u'const struct sockaddr_in *" remote ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(ident_reply *" i ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
+.ds mT \fBvoid ident_socket(
+.BI "\*(mTident_request *" rq ", sel_state *" s ", int " sk ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(ident_reply *" i ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
.fi
.SH "DESCRIPTION"
The
.BI "void sel_init(sel_state *" s );
-.BI "void sel_initfile(sel_state *" s ", sel_file *" f ,
-.BI " int " fd ", unsigned " mode ,
-.BI " void (*" func ")(int " fd ", unsigned " mode ", void *" p ),
-.BI " void *" p );
+.ds mT \fBvoid sel_initfile(
+.BI "\*(mTsel_state *" s ", sel_file *" f ,
+.BI "\h'\w'\*(mT'u'int " fd ", unsigned " mode ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(int " fd ", unsigned " mode ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
.BI "void sel_addfile(sel_file *" f );
.BI "void sel_force(sel_file *" f );
.BI "void sel_rmfile(sel_file *" f );
-.BI "void sel_addtimer(sel_state *" s ", sel_timer *" t ,
-.BI " struct timeval *" tv ,
-.BI " void (*" func ")(struct timeval *" tv ", void *" p ),
-.BI " void *" p );
+.ds mT \fBvoid sel_addtimer(
+.BI "\*(mTsel_state *" s ", sel_timer *" t ,
+.BI "\h'\w'\*(mT'u'struct timeval *" tv ,
+.BI "\h'\w'\*(mT'u'void (*" func ")(struct timeval *" tv ", void *" p ),
+.BI "\h'\w'\*(mT'u'void *" p );
.BI "void sel_rmtimer(sel_timer *" t );
-.BI "void sel_addhook(sel_state *" s ", sel_hook *" h ,
-.BI " sel_hookfn " before ", sel_hookfn " after ,
-.BI " void *" p );
+.ds mT \fBvoid sel_addhook(
+.BI "\*(mTsel_state *" s ", sel_hook *" h ,
+.BI "\h'\w'\*(mT'u'sel_hookfn " before ", sel_hookfn " after ,
+.BI "\h'\w'\*(mT'u'void *" p );
.BI "void sel_rmhook(sel_hook *" h );
.BI "int sel_fdmerge(fd_set *" dest ", fd_set *" fd ", int " maxfd );
.BI "void selbuf_enable(selbuf *" b );
.BI "void selbuf_disable(selbuf *" b );
.BI "void selbuf_setsize(selbuf *" b ", size_t " sz );
-.BI "void selbuf_init(selbuf *" b ", sel_state *" s ", int " fd ,
-.BI " lbuf_func *" func ", void *" p );
+.ds mT \fBvoid selbuf_init(
+.BI "\*(mTselbuf *" b ", sel_state *" s ", int " fd ,
+.BI "\h'\w'\*(mT'u'lbuf_func *" func ", void *" p );
.BI "void selbuf_destroy(selbuf *" b );
.fi
.SH DESCRIPTION
.BI "void selpk_enable(selpk *" pk );
.BI "void selpk_disable(selpk *" pk );
.BI "void selpk_want(selpk *" pk ", size_t " sz );
-.BI "void selpk_init(selpk *" pk ", sel_state *" s ", int " fd ,
-.BI " pkbuf_func *" func ", void *" p );
+.ds mT \fBvoid selpk_init(
+.BI "\*(mTselpk *" pk ", sel_state *" s ", int " fd ,
+.BI "\h'\w'\*(mT'u'pkbuf_func *" func ", void *" p );
.BI "void selpk_destroy(selpk *" b );
.fi
.SH DESCRIPTION
.nf
.B "#include <mLib/sig.h>"
-.BI "void sig_add(sig *" s ", int " n ,
-.BI " void (*" proc ")(int " n ", void *" p "), void *" p );
+.ds mT \fBvoid sig_add(
+.BI "\*(mTsig *" s ", int " n ,
+.BI "\h'\w'\*(mT'u'void (*" proc ")(int " n ", void *" p "), void *" p );
.BI "void sig_remove(sig *" s );
.BI "void sig_init(sel_state *" s );
.fi
.BI "void sym_create(sym_table *" t );
.BI "void sym_destroy(sym_table *" t );
-.BI "void *sym_find(sym_table *" t ,
-.BI " const char *" n ", long " l ,
-.BI " size_t " sz ", unsigned *" f );
+.ds mT \fBvoid *sym_find(
+.BI "\*(mTsym_table *" t ,
+.BI "\h'\w'\*(mT'u'const char *" n ", long " l ,
+.BI "\h'\w'\*(mT'u'size_t " sz ", unsigned *" f );
.BI "void sym_remove(sym_table *" t ", void *" b );
.BI "const char *SYM_NAME(const void *" p );
.nf
.B "#include <mLib/fdflags.h>"
-.BI "int fdflags(int " fd ,
-.BI " unsigned " fbic ", unsigned " fxor ,
-.BI " unsigned " fdbic ", unsigned " fdxor );
+.ds mT \fBint fdflags(
+.BI "\*(mTint " fd ,
+.BI "\h'\w'\*(mT'u'unsigned " fbic ", unsigned " fxor ,
+.BI "\h'\w'\*(mT'u'unsigned " fdbic ", unsigned " fdxor );
.fi
.SH "DESCRIPTION"
.B fdflags
.nf
.B "#include <mLib/testrig.h>"
-.BI "int test_do(const test_suite " suite [],
-.BI " FILE *" fp ,
-.BI " test_results *" results );
-.BI "void test_run(int " argc ", char *" argv [],
-.BI " const test_chunk " chunk [],
-.BI " const char *" def );
+.ds mT \fBint test_do(
+.BI "\*(mTconst test_suite " suite [],
+.BI "\h'\w'\*(mT'u'FILE *" fp ,
+.BI "\h'\w'\*(mT'u'test_results *" results );
+.ds mT \fBvoid test_run(
+.BI "\*(mTint " argc ", char *" argv [],
+.BI "\h'\w'\*(mT'u'const test_chunk " chunk [],
+.BI "\h'\w'\*(mT'u'const char *" def );
.fi
.SH DESCRIPTION
.SS Structure
.B "#include <mLib/trace.h>"
.BI "void trace(unsigned " l ", const char *" f ", ...);"
-.BI "void trace_block(unsigned " l ", const char *" s ,
-.BI " const void *" b ", size_t " sz );
+.ds mT \fBvoid trace_block(
+.BI "\*(mTunsigned " l ", const char *" s ,
+.BI "\h'\w'\*(mT'u'const void *" b ", size_t " sz );
.BI "void trace_on(FILE *" fp ", unsigned " l );
-.BI "void trace_custom(void (*" func ")(const char *" buf ,
-.BI " size_t " sz ", void *" v ),
-.BI " void *" v );
+.ds mT \fBvoid trace_custom(
+.ds mU \*(mTvoid (*\fIfunc\fB)(
+.BI "\*(mUconst char *" buf ,
+.BI "\h'\w'\*(mU'u'size_t " sz ", void *" v ),
+.BI "\h'\w'\*(mT'u'void *" v );
.BI "void trace_level(unsigned " l );
.BI "unsigned tracing(void);"
-.BI "unsigned traceopt(const trace_opt *" t ", const char *" p ,
-.BI " unsigned " f ", unsigned " bad );
+.ds mT \fBunsigned traceopt(
+.BI "\*(mTconst trace_opt *" t ", const char *" p ,
+.BI "\h'\w'\*(mT'u'unsigned " f ", unsigned " bad );
.BI T( statements\fR... )
.BI "IF_TRACING(unsigned " l ", " statements\fR... )
.nf
.B "#include <mLib/mdwopt.h>"
-.BI "int mdwopt(int " argc ", char *const *" argv ,
-.BI " const char *" shortopt ,
-.BI " const struct option *" longopt ", int *" longind ,
-.BI " mdwopt_data *" data ", int " flags );
+.ds mT \fBint mdwopt(
+.BI "\*(mTint " argc ", char *const *" argv ,
+.BI "\h'\w'\*(mT'u'const char *" shortopt ,
+.BI "\h'\w'\*(mT'u'const struct option *" longopt ", int *" longind ,
+.BI "\h'\w'\*(mT'u'mdwopt_data *" data ", int " flags );
.BI "int getopt(int " argc ", char *const *" argv ", const char *" o );
-.BI "int getopt_long(int " argc ", char *const *" argv ,
-.BI " const char * "shortopt ,
-.BI " const struct option *" longopt ", int *" longind );
+.ds mT \fBint getopt_long(
+.BI "\*(mTint " argc ", char *const *" argv ,
+.BI "\h'\w'\*(mT'u'const char * "shortopt ,
+.BI "\h'\w'\*(mT'u'const struct option *" longopt ", int *" longind );
-.BI "int getopt_long_only(int " argc ", char *const *" argv ,
-.BI " const char * "shortopt ,
-.BI " const struct option *" longopt ", int *" longind );
+.ds mT \fBint getopt_long_only(
+.BI "\*(mTint " argc ", char *const *" argv ,
+.BI "\h'\w'\*(mT'u'const char * "shortopt ,
+.BI "\h'\w'\*(mT'u'const struct option *" longopt ", int *" longind );
.fi
.SH "OVERVIEW"
The