.nf
.B "#include <mLib/ident>"
+.B "typedef struct { ...\& } ident_request;"
+
+.B "enum ["
+.B "\h'4n'IDENT_USERID = ...,"
+.B "\h'4n'IDENT_ERROR = ...,"
+.B "\h'4n'IDENT_BAD = ..."
+.B "};"
+
+.B "typedef struct {"
+.B "\h'4n'unsigned short sport, dport;"
+.B "\h'4n'unsigned type;"
+.B "\h'4n'union {"
+.B "\h'8n'struct { char *os, *user; } userid;"
+.B "\h'8n'char *error;"
+.B "\h'4n'} u;"
+.B "} ident_reply;"
+
.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