#include <libmormegil/dice.h>
-int dice(int count, int sides);
+\fBint dice(int \fIcount\fP, int \fIsides\fP);\fR
-void dice_setstate(const uint32_t *key, const uint32_t *nonce, const uint64_t *counter, const int *subcounter);
+\fBvoid dice_setstate(const uint32_t *\fIkey\fP, const uint32_t *\fInonce\fP, const uint64_t *\fIcounter\fP, const int *\fIsubcounter\fP);\fR
-void dice_getstate(uint32_t *key, uint32_t *nonce, uint64_t *counter, int *subcounter);
+\fBvoid dice_getstate(uint32_t *\fIkey\fP, uint32_t *\fInonce\fP, uint64_t *\fIcounter\fP, int *\fIsubcounter\fP);\fR
.SH DESCRIPTION
.I dice
-is a C-compatible wrapper around an instance of the libmormegil::S20prng
+is a C-compatible wrapper around an instance of the \fIlibmormegil::S20prng\fP
pseudorandom number generator.
The \fIdice\fP function simulates rolling \fIcount\fP dice of \fIsides\fP
The \fIdice_setstate\fP function uses the contents of the memory pointed
to by \fIkey\fP, \fInonce\fP, \fIcounter\fP, and \fIsubcounter\fP to
initialize the internal state of the libmormegil::S20prng object used by
-the \fIdice\fP function. The data pointed to by these pointers should be
-as follows:
-
+the \fIdice\fP function. The data pointed to by these pointers should be as follows:
.IP "key" 16
An array of eight unsigned 32-bit integers to be used as a Salsa20/12 key.
.IP \(bu 4
The product of \fIsides\fP and \fIcount\fP would overflow a signed int.
+.PP
Extremely large values of \fIsides\fP may cause delays due to the mechanism
used for converting the libmormegil::S20prng output into a number between
0 and (\fIsides\fP - 1).
.SH NAME
libmormegil \- miscellaneous support routines for game development
.SH SYNOPSIS
-gcc foo.c -lmormegil
+gcc \fIARGS\fP \fB-lmormegil\fP -o \fIPROGRAM-NAME\fP
.SH DESCRIPTION
.I libmormegil
.SH SYNOPSIS
#include <libmormegil/Points.hh>
-int32_t libmormegil::Points::gain(int32_t amount, libmormegil::Points::Gain_mode mode);
+\fBint32_t libmormegil::Points::gain(int32_t \fIamount\fP, libmormegil::Points::Gain_mode \fImode\fP);
-int32_t libmormegil::Points::lose(int32_t amount);
+\fBint32_t libmormegil::Points::lose(int32_t \fIamount\fP);
-int32_t libmormegil::Points::boost(int32_t amount);
+\fBint32_t libmormegil::Points::boost(int32_t \fIamount\fP);
-int32_t libmormegil::Points::restore(int32_t amount);
+\fBint32_t libmormegil::Points::restore(int32_t \fIamount\fP);
-int32_t libmormegil::Points::current() const;
+\fBint32_t libmormegil::Points::current() const;
-int32_t libmormegil::Points::maximum() const;
+\fBint32_t libmormegil::Points::maximum() const;
-void libmormegil::Points::force_current(int32_t c);
+\fBvoid libmormegil::Points::force_current(int32_t \fIc\fP);
-void libmormegil::Points::force_maximum(int32_t m);
+\fBvoid libmormegil::Points::force_maximum(int32_t \fIm\fP);
-void libmormegil::Points::Points(int32_t mv = 0, int32_t c = 0);
+\fBvoid libmormegil::Points::Points(int32_t \fImv\fP = 0, int32_t \fIc\fP = 0);
.SH DESCRIPTION
.I libmormegil::Points
#include <libmormegil/S20prng.hh>
-uint32_t libmormegil::S20prng::generate();
+\fBuint32_t libmormegil::S20prng::generate();\fR
-void libmormegil::S20prng::initialize(const uint32_t *k, const uint32_t *n, const uint64_t *c, const int *s);
+\fBvoid libmormegil::S20prng::initialize(const uint32_t *\fIk\fP, const uint32_t *\fIn\fP, const uint64_t *\fIc\fP, const int *\fIs\fP);\fR
-void libmormegil::S20prng::extract_state(uint32_t *k, uint32_t *n, uint64_t *c, int *s);
+\fBvoid libmormegil::S20prng::extract_state(uint32_t *\fIk\fP, uint32_t *\fIn\fP, uint64_t *\fIc\fP, int *\fIs\fP);\fR
.SH DESCRIPTION
.I libmormegil::S20prng
.PP
Applications which need to take a snapshot of the generator's internal state
-for whatever reason should use the
+for whatever reason should use the \fIextract_state\fP member function.
Obtaining suitable initialization data for the generator is the application
author's responsibility. See the file \fBexamples/S20prng-test.cc\fR in the
.SH SYNOPSIS
#include <libmormegil/mathops.hh>
-template<typename T> T libmormegil::abs(const T& i);
+\fBtemplate<typename T> T libmormegil::abs(const T& \fIi\fP);\fR
.SH DESCRIPTION
.I libmormegil::abs
.SH SYNOPSIS
#include <libmormegil/divup.hh>
-template <typename T> T libmormegil::divup(const T& i, const T& j);
+\fBtemplate <typename T> T libmormegil::divup(const T& \fIi\fP, const T& \fIj\fP);\fR
.SH DESCRIPTION
The \fIlibmormegil::divup\fP function returns the value of \fIi\fP divided
.SH SYNOPSIS
#include <libmormegil/srcgen-parts.hh>
-void libmormegil::emit_chebyshev_spiral(FILE *srcfile, FILE *hdrfile, unsigned int radius, const char *macrotag, const char *nmsp);
+\fBvoid libmormegil::emit_chebyshev_spiral(FILE *\fIsrcfile\fP, FILE *\fIhdrfile\fP, unsigned int \fIradius\fP, const char *\fImacrotag\fP, const char *\fInmsp\fP);\fR
.SH DESCRIPTION
.SH SYNOPSIS
#include <libmormegil/isotime.h>
-extern "C" time_t get_iso_8601_time(char *buf, int bufsz);
+\fBextern "C" time_t get_iso_8601_time(char *\fIbuf\fP, int \fIbufsz\fP);\fR
-void libmormegil::get_iso_8601_time(std::string& dest);
+\fBvoid libmormegil::get_iso_8601_time(std::string& \fIdest\fP);\fR
.SH DESCRIPTION
The functions \fIget_iso_8601_time\fR and \fIlibmormegil::get_iso_8601_time\fR
.TH "LIBMORMEGIL::SERIAL" 3 "October 10, 2010" "libmormegil Version 1.0" "libmormegil User Manual"
.SH NAME
-libmormegil::serialize, libmormegil::deserialize \- offsets and points on a plane
+libmormegil::serialize, libmormegil::serialize_uc, libmormegil::deserialize, libmormegil::deserialize_uc \- offsets and points on a plane
.SH SYNOPSIS
#include <stdio.h>
#include <libmormegil/serial.hh>
-int libmormegil::serialize(FILE *fp, const int64_t *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, int64_t \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, const int32_t *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, int32_t \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, const int16_t *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, int16_t \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, const uint64_t *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, uint64_t \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, const uint32_t *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, uint32_t \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, const uint16_t *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, uint16_t \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, Coord const *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, Coord const& \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, Coord64 const *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, Coord64 const& \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, Offset const *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, Offset const& \fIdata\fP);\fR
-int libmormegil::serialize(FILE *fp, Offset64 const *data);
+\fBvoid libmormegil::serialize(FILE *\fIfp\fP, Offset64 const& \fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, int64_t *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, int64_t *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, int32_t *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, int32_t *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, int16_t *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, int16_t *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, uint64_t *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, uint64_t *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, uint32_t *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, uint32_t *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, uint16_t *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, uint16_t *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, Coord *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, Coord *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, Coord64 *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, Coord64 *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, Offset *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, Offset *\fIdata\fP);\fR
-int libmormegil::deserialize(FILE *fp, Offset64 *data);
+\fBvoid libmormegil::deserialize(FILE *\fIfp\fP, Offset64 *\fIdata\fP);\fR
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, int64_t \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, int32_t \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, int16_t \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, uint64_t \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, uint32_t \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, uint16_t \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, Coord const& \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, Coord64 const& \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, Offset const& \fIdata\fP);\fR
+
+\fBint libmormegil::serialize_uc(FILE *\fIfp\fP, Offset64 const& \fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, int64_t *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, int32_t *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, int16_t *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, uint64_t *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, uint32_t *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, uint16_t *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, Coord *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, Coord64 *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, Offset *\fIdata\fP);\fR
+
+\fBint libmormegil::deserialize_uc(FILE *\fIfp\fP, Offset64 *\fIdata\fP);\fR
.SH DESCRIPTION
.I libmormegil::serialize
is a family of overloaded functions providing host-endianness-independent
serialization for basic integer types and the coordinate/offset types provided
-in \fIlibmormegil/Coord.hh\fP
+in <\fIlibmormegil/Coord.hh\fP>. The serialized form of the data is in
+big-endian form.
+
+.SH RETURN VALUE
+The \fI_uc\fP forms provide the return value of the \fIfread()\fP or \fIfwrite()\fP
+call used to write the data to the stream pointed to by \fIfp\fP.
+
+.SH EXCEPTIONS
+In the event of an I/O error, the unsuffixed forms will throw an \fIint\fP. This \fIint\fP will contain the value of \fIerrno\fP after the failed \fIchecked_fread()\fP or \fIchecked_fwrite()\fP call.
.SH CAVEATS
.SH SEE ALSO
-libmormegil(3), dice(3), libmormegil::Coord(3)
+libmormegil(3), dice(3), libmormegil::Coord(3), libmormegil::checked_fread(3), libmormegil::checked_fwrite(3), stdio(1)
.SH SYNOPSIS
#include <libmormegil/mathops.hh>
-template<typename T> T libmormegil::sign(const T& orig);
+\fBtemplate<typename T> T libmormegil::sign(const T& \fIorig\fP);\fR
.SH DESCRIPTION
.I libmormegil::sign
.SH RETURNS
1 if \fIorig\fP is positive, 0 if \fIorig\fP is 0, -1 if orig is negative.
+.SH NOTES
+
+The <\fIlibmormegil/Coord.hh\fP> header file includes template specializations of this function for the \fIlibmormegil::Coord\fP, \fIlibmormegil::Offset\fP, \fIlibmormegil::Coord64\fP, and \fIlibmormegil::Offset64\fP types.
+
.SH CAVEATS
Implemented as naively as possible. Exists because <algorithm> does not
.SH SYNOPSIS
#include <libmormegil/stlfgets.hh>
-int libmormegil::stlfgets(std::string& str, size_t size_suggest,
- FILE *fp, size_t hard_size);
+\fBint libmormegil::stlfgets(std::string& \fIstr\fP, size_t \fIsize_suggest\fP, FILE *fp, size_t hard_size);
#include <libmormegil/stlwfgets.hh>
-int libmormegil::stlwfgets(std::wstring& str, size_t size_suggest,
- FILE *fp, size_t hard_size);
+int libmormegil::stlwfgets(std::wstring& \fIstr\fP, size_t \fIsize_suggest\fP = 128, FILE *\fIfp\fP, size_t \fIhard_size = 0x7fffffff\fP);\fR
.SH DESCRIPTION
The \fIlibmormegil::stlfgets\fP function clears the contents of \fIstr\fP,
.SH NAME
libmormegil::stlprintf, libmormegil::vstlprintf, libmormegil::stlwprintf, libmormegil::vstlwprintf \- (v)s(w)printf-alikes for std::string
.SH SYNOPSIS
+#include <string>
+
+#include <stdarg.h>
+
#include <libmormegil/stlprintf.hh>
-std::string libmormegil::vstlprintf(const char *fmt, va_list args);
+\fBstd::string libmormegil::vstlprintf(const char *\fIfmt\fP, va_list \fIargs\fP);\fR
-std::string libmormegil::stlprintf(const char *fmt, ...);
+\fBstd::string libmormegil::stlprintf(const char *\fIfmt\fP, ...);\fR
#include <libmormegil/stlwprintf.hh>
-std::string libmormegil::vstlwprintf(const char *fmt, va_list args);
+\fBstd::wstring libmormegil::vstlwprintf(const char *\fIfmt\fP, va_list \fIargs\fP);\fR
-std::string libmormegil::stlwprintf(const char *fmt, ...);
+\fBstd::wstring libmormegil::stlwprintf(const char *\fIfmt\fP, ...);\fR
.SH DESCRIPTION
The \fIlibmormegil::stlprintf\fP and \fIlibmormegil::vstlprintf\fP functions
.SH SYNOPSIS
#include <libmormegil/srcgen-parts.hh>
-std::string * libmormegil::tagify(const char *name, const char *prefix);
+\fBstd::string * libmormegil::tagify(const char *\fIname\fP, const char *\fIprefix\fP);\fR
.SH DESCRIPTION
MAJOR_VER=1
-MINOR_VER=0
-COMPAT_DEPTH=0
+MINOR_VER=1
+PATCH_VER=0