.\" @BBAD
.\" @BOK
.\" @BENSURE
-
+.
.\" @DBBASE
.\" @DBLIM
.\" @DBCUR
.SH SYNOPSIS
.nf
.B "#include <mLib/dstr.h>"
-
+.PP
.B "typedef struct { ...\& } buf;"
.B "typedef struct { ...\& } dbuf;"
-
+.PP
.BI "void buf_init(buf *" b ", void *" p ", size_t " sz );
.BI "void dbuf_create(dbuf *" db );
.BI "void dbuf_reset(dbuf *" db );
.BI "void DBRESET(dbuf *" db );
.BI "void DBDESTROY(dbuf *" db );
.B "#define DBUF_INIT ..."
-
+.PP
.fi
All of the following functions and macros exist in two variants:
one with a name beginning
and taking a first argument of type
.BR "dbuf *" .
.nf
-
+.PP
.BI "void buf_flip(buf *" b );
.BI "octet *BBASE(buf *" b );
.BI "octet *BLIM(buf *" b );
.BI "ptrdiff_t BLEN(buf *" b );
.BI "ptrdiff_t BLEFT(buf *" b );
.BI "void BFLIP(buf *" b );
-
+.PP
.BI "int buf_break(buf *" b );
.BI "int BBREAK(buf *" b );
.BI "int BBAD(buf *" b );
.BI "int BOK(buf *" b );
-
+.PP
.BI "int buf_ensure(buf *" b ", size_t " sz );
.BI "int buf_tryextend(buf *" b ", size_t " sz );
.BI "int BENSURE(buf *" b ", size_t " sz );
.BI "octet *BSTEP(buf *" b ", size_t " sz );
-
+.PP
.BI "void *buf_get(buf *" b ", size_t " sz );
.BI "void *buf_put(buf *" b ", const void *" p ", size_t " sz );
-
+.PP
.BI "int buf_getbyte(buf *" b );
.BI "int buf_putbyte(buf *" b ", int " ch );
-
+.PP
.BI "int buf_putstr(buf *" b ", const char *" p ", ...);"
.BI "int buf_vputstr(buf *" b ", const char *" p ", va_list *" ap );
-
+.PP
.fi
For
.I suff
.nf
.BI "int buf_putu" suff "(buf *" b ", uint" suff " " w );
.BI "int buf_getu" suff "(buf *" b ", uint" suff " *" w );
-
+.PP
.fi
For
.I suff
.nf
.BI "int buf_putk" suff "(buf *" b ", kludge64 " w );
.BI "int buf_getk" suff "(buf *" b ", kludge64 *" w );
-
+.PP
.ta 2n
.BI "BUF_ENCLOSETAG(" tag ", buf *" b ", size_t " mk ", " check ", " poke ", size_t " lensz )
.I " body"
.I " body"
.BI "BUF_ENCLOSEZTAG(" tag ", buf *" b )
.I " body"
-
+.PP
.fi
For
.I suff
.ta 2n
.BI "BUF_ENCLOSE" suff "(buf *" b ", size_t " mk )
.I " body"
-
+.PP
.BI "BUF_ENCLOSEZ(buf *" b )
.I " body"
-
+.PP
.fi
For
.I suff
.BI "int dbuf_putmem" suff "(dbuf *" db ", const void *" p ", size_t " sz );
.BI "void *buf_getmem" suff "(buf *" b ", size_t *" sz );
.BI "void d*buf_getmem" suff "(dbuf *" db ", size_t *" sz );
-
+.PP
.fi
For
.I suff