.\" -*-nroff-*-
.de VS
.sp 1
-.RS 5
+.RS
.nf
.ft B
..
.RE
.sp 1
..
-.de HP
+.de hP
.IP
.ft B
\h'-\w'\\$1\ 'u'\\$1\ \c
..
.ie t .ds o \(bu
.el .ds o o
-.TH dstr 3mLib "8 May 1999" "mLib"
+.TH dstr 3 "8 May 1999" "mLib"
dstr \- a simple dynamic string type
+.\" @dstr_create
+.\" @dstr_destroy
+.\" @dstr_reset
+.\" @dstr_ensure
+.\" @dstr_tidy
+.\"
+.\" @dstr_putc
+.\" @dstr_putz
+.\" @dstr_puts
+.\" @dstr_putf
+.\" @dstr_putd
+.\" @dstr_putm
+.\" @dstr_putline
+.\" @dstr_write
+.\"
+.\" @DCREATE
+.\" @DDESTROY
+.\" @DRESET
+.\" @DENSURE
+.\" @DPUTC
+.\" @DPUTZ
+.\" @DPUTS
+.\" @DPUTD
+.\" @DPUTM
+.\" @DWRITE
+.\"
.SH SYNOPSIS
.nf
.B "#include <mLib/dstr.h>"
.BI "void DDESTROY(dstr *" d );
.BI "void DRESET(dstr *" d );
.BI "void DENSURE(dstr *" d ", size_t " sz );
+.BI "void DPUTC(dstr *" c ", char " ch );
.BI "void DPUTZ(dstr *" d );
.BI "void DPUTS(dstr *" d ", const char *" s );
.BI "void DPUTD(dstr *" d ", const dstr *" p );
The following invariants are maintained by
.B dstr
and must hold when any function is called:
-.HP \*o
+.hP \*o
If
.B sz
is nonzero, then
is zero, then
.B buf
is a null pointer.
-.HP \*o
+.hP \*o
At all times,
.BI sz " >= " len\fR.
.PP
The caller is responsible for allocating the
.B dstr
structure. It can be initialized in any of the following ways:
-.HP \*o
+.hP \*o
Using the macro
.B DSTR_INIT
as an initializer in the declaration of the object.
-.HP \*o
+.hP \*o
Passing its address to the
.B dstr_create
function.
-.HP \*o
+.hP \*o
Passing its address to the (equivalent)
.B DCREATE
macro.
isn't enough memory for a longer string, the exception
.B EXC_NOMEM
is raised. See
-.BR exc (3mLib)
+.BR exc (3)
for more information about
.BR mLib 's
exception handling system.
.B dstr_putf
functions is quite complicated, and could do with some checking by
independent people who know what they're doing.
+.SH "SEE ALSO"
+.BR exc (3),
+.BR mLib (3).
.SH AUTHOR
Mark Wooding, <mdw@nsict.org>