OSSP CVS Repository

ossp - Difference in ossp-pkg/mm/mm.3 versions 1.34 and 1.35
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [History

ossp-pkg/mm/mm.3 1.34 -> 1.35

--- mm.3 2000/06/20 07:02:06     1.34
+++ mm.3 2001/01/29 20:27:22     1.35
@@ -1,9 +1,9 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man version 1.02
+.\" Mon Jan 29 21:26:46 2001
+.\"
+.\" Standard preamble:
+.\" ======================================================================
+.de Sh \" Subsection heading
 .br
 .if t .Sp
 .ne 5
@@ -11,150 +11,106 @@
 \fB\\$1\fR
 .PP
 ..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
 .if t .sp .5v
 .if n .sp
 ..
-.de Ip
+.de Ip \" List item
 .br
 .ie \\n(.$>=3 .ne \\$3
 .el .ne 3
 .IP "\\$1" \\$2
 ..
-.de Vb
+.de Vb \" Begin verbatim text
 .ft CW
 .nf
 .ne \\$1
 ..
-.de Ve
+.de Ve \" End verbatim text
 .ft R
 
 .fi
 ..
-'''
-'''
-'''     Set up \*(-- to give an unbreakable dash;
-'''     string Tr holds user defined translation string.
-'''     Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  | will give a
+.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
+.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
+.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
 .tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
 .ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-'''   \*(L" and \*(R", except that they are used on ".xx" lines,
-'''   such as .IP and .SH, which do another additional levels of
-'''   double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` `
+.    ds C' '
 'br\}
 .el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
 'br\}
-.\"     If the F register is turned on, we'll generate
-.\"     index entries out stderr for the following things:
-.\"             TH      Title 
-.\"             SH      Header
-.\"             Sh      Subsection 
-.\"             Ip      Item
-.\"             X<>     Xref  (embedded
-.\"     Of course, you have to process the output yourself
-.\"     in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
-..
-.nr % 0
-.rr F
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr
+.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
+.\" index entries marked with X<> in POD.  Of course, you'll have to process
+.\" the output yourself in some meaningful fashion.
+.if \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+.    .
+.    nr % 0
+.    rr F
 .\}
-.TH mm 3 "20-Jun-2000" "MM 1.1.3" "Shared Memory Library"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it
+.\" makes way too many mistakes in technical documents.
+.hy 0
 .if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ          \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-.       \" AM - accent mark definitions
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
 .bd B 3
-.       \" fudge factors for nroff and troff
+.    \" fudge factors for nroff and troff
 .if n \{\
-.       ds #H 0
-.       ds #V .8m
-.       ds #F .3m
-.       ds #[ \f1
-.       ds #] \fP
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
 .\}
 .if t \{\
-.       ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-.       ds #V .6m
-.       ds #F 0
-.       ds #[ \&
-.       ds #] \&
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
 .\}
-.       \" simple accents for nroff and troff
+.    \" simple accents for nroff and troff
 .if n \{\
-.       ds ' \&
-.       ds ` \&
-.       ds ^ \&
-.       ds , \&
-.       ds ~ ~
-.       ds ? ?
-.       ds ! !
-.       ds /
-.       ds q
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
 .\}
 .if t \{\
-.       ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-.       ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-.       ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-.       ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-.       ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-.       ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-.       ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-.       ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.       ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
 .\}
-.       \" troff and (daisy-wheel) nroff accents
+.    \" troff and (daisy-wheel) nroff accents
 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,41 +118,39 @@
 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
 .ds ae a\h'-(\w'a'u*4/10)'e
 .ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-.       \" corrections for vroff
+.    \" corrections for vroff
 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-.       \" for low resolution devices (crt and lpr)
+.    \" for low resolution devices (crt and lpr)
 .if \n(.H>23 .if \n(.V>19 \
 \{\
-.       ds : e
-.       ds 8 ss
-.       ds v \h'-1'\o'\(aa\(ga'
-.       ds _ \h'-1'^
-.       ds . \h'-1'.
-.       ds 3 3
-.       ds o a
-.       ds d- d\h'-1'\(ga
-.       ds D- D\h'-1'\(hy
-.       ds th \o'bp'
-.       ds Th \o'LP'
-.       ds ae ae
-.       ds Ae AE
-.       ds oe oe
-.       ds Oe OE
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
 .\}
 .rm #[ #] #H #V #F C
+.\" ======================================================================
+.\"
+.IX Title "mm 3"
+.TH mm 3 "01-Jul-2000" "MM 1.1.3" "Shared Memory Library"
+.UC
 .SH "NAME"
-\fBMM \- Shared Memory Library\fR
+\&\fB\s-1MM\s0 \- Shared Memory Library\fR
 .SH "VERSION"
-MM 1.1.3 (20-Jun-2000)
+.IX Header "VERSION"
+\&\s-1MM\s0 \s-11.1.3 (01-Jul-2000)\s0
 .SH "SYNOPSIS"
-.PP
+.IX Header "SYNOPSIS"
 .Vb 1
 \& #include "mm.h"
 .Ve
-\fB Global Malloc-Replacement API\fR
+\&\fB Global Malloc-Replacement \s-1API\s0\fR
 .PP
 .Vb 14
 \& int     \fBMM_create\fR(size_t size, const char *file);
@@ -214,7 +168,7 @@
 \& size_t  \fBMM_available\fR(void);
 \& char   *\fBMM_error\fR(void);
 .Ve
-\fB Standard Malloc-Style API\fR
+\&\fB Standard Malloc-Style \s-1API\s0\fR
 .PP
 .Vb 15
 \& MM     *\fBmm_create\fR(size_t size, char *file);
@@ -233,7 +187,7 @@
 \& char   *\fBmm_error\fR(void);
 \& void    \fBmm_display_info\fR(MM *mm);
 .Ve
-\fB Low-level Shared Memory API\fR
+\&\fB Low-level Shared Memory \s-1API\s0\fR
 .PP
 .Vb 9
 \& void   *\fBmm_core_create\fR(size_t size, char *file);
@@ -246,7 +200,7 @@
 \& size_t  \fBmm_core_align2page\fR(size_t size);
 \& size_t  \fBmm_core_align2click\fR(size_t size);
 .Ve
-\fB Internal Library API\fR
+\&\fB Internal Library \s-1API\s0\fR
 .PP
 .Vb 3
 \& void    \fBmm_lib_error_set\fR(unsigned int, const char *str);
@@ -254,47 +208,53 @@
 \& int     \fBmm_lib_version\fR(void);
 .Ve
 .SH "DESCRIPTION"
-The \fBMM\fR library is a 2-layer abstraction library which simplifies the usage
+.IX Header "DESCRIPTION"
+The \fB\s-1MM\s0\fR library is a 2\-layer abstraction library which simplifies the usage
 of shared memory between forked (and this way strongly related) processes
 under Unix platforms. On the first (lower) layer it hides all platform
 dependent implementation details (allocation and locking) when dealing with
 shared memory segments and on the second (higher) layer it provides a
-high-level \fImalloc\fR\|(3)\-style API for a convenient and well known way to work
+high-level \fImalloc\fR\|(3)\-style \s-1API\s0 for a convenient and well known way to work
 with data-structures inside those shared memory segments. 
 .PP
-The abbreviation \fBMM\fR is historically and originally comes from the phrase
-``\fImemory mapped\fR'\*(R' as used by the POSIX.1 \fImmap\fR\|(2) function. Because this
+The abbreviation \fB\s-1MM\s0\fR is historically and originally comes from the phrase
+``\fImemory mapped\fR'' as used by the \s-1POSIX\s0.1 \fImmap\fR\|(2) function. Because this
 facility is internally used by this library on most platforms to establish the
 shared memory segments. 
 .Sh "\s-1LIBRARY\s0 \s-1STRUCTURE\s0"
+.IX Subsection "LIBRARY STRUCTURE"
 This library is structured into three main APIs which are internally based on
 each other:
 .Ip "\fBGlobal Malloc-Replacement \s-1API\s0\fR" 4
+.IX Item "Global Malloc-Replacement API"
 This is the most high-level \s-1API\s0 which directly can be used as replacement \s-1API\s0
 for the \s-1POSIX\s0.1 memory allocation \s-1API\s0 (\fImalloc\fR\|(2) and friends). This is
 useful when converting \fIheap\fR based data structures to \fIshared memory\fR
 based data structures without the need to change the code dramatically.  All
 which is needed is to prefix the \s-1POSIX\s0.1 memory allocation functions with
-`\f(CWMM_\fR\*(R', i.e. `\f(CWmalloc\fR\*(R' becomes `\f(CWMM_malloc\fR\*(R', `\f(CWstrdup\fR\*(R' becomes
-`\f(CWMM_strdup\fR\*(R', etc. This \s-1API\s0 internally uses just a global `\f(CWMM *\fR\*(R' pool for
-calling the corresponding functions (those with prefix `\f(CWmm_\fR') of the
-\fIStandard Malloc-Style \s-1API\s0\fR.
+`\f(CW\*(C`MM_\*(C'\fR', i.e. `\f(CW\*(C`malloc\*(C'\fR' becomes `\f(CW\*(C`MM_malloc\*(C'\fR', `\f(CW\*(C`strdup\*(C'\fR' becomes
+`\f(CW\*(C`MM_strdup\*(C'\fR', etc. This \s-1API\s0 internally uses just a global `\f(CW\*(C`MM *\*(C'\fR' pool for
+calling the corresponding functions (those with prefix `\f(CW\*(C`mm_\*(C'\fR') of the
+\&\fIStandard Malloc-Style \s-1API\s0\fR.
 .Ip "\fBStandard Malloc-Style \s-1API\s0\fR" 4
+.IX Item "Standard Malloc-Style API"
 This is the standard high-level memory allocation \s-1API\s0. Its interface is
-similar to the \fIGlobal Malloc-Replacement \s-1API\s0\fR but it uses an explicit `\f(CWMM *\fR\*(R'
+similar to the \fIGlobal Malloc-Replacement \s-1API\s0\fR but it uses an explicit `\f(CW\*(C`MM *\*(C'\fR'
 pool to operate on. That is why every function of this \s-1API\s0 has an argument of
-type `\f(CWMM *\fR\*(R' as its first argument. This \s-1API\s0 provides a comfortable way to
+type `\f(CW\*(C`MM *\*(C'\fR' as its first argument. This \s-1API\s0 provides a comfortable way to
 work with small dynamically allocated shared memory chunks inside large
 statically allocated shared memory segments. It is internally based on the
-\fILow-Level Shared Memory \s-1API\s0\fR for creating the underlaying shared memory
+\&\fILow-Level Shared Memory \s-1API\s0\fR for creating the underlaying shared memory
 segment.
 .Ip "\fBLow-Level Shared Memory \s-1API\s0\fR" 4
+.IX Item "Low-Level Shared Memory API"
 This is the basis of the whole \fB\s-1MM\s0\fR library. It provides low-level functions
 for creating shared memory segments with mutual exclusion (in short \fImutex\fR)
 capabilities in a portable way. Internally the shared memory and mutex
 facility is implemented in various platform-dependent ways. A list of
 implementation variants follows under the next topic.
 .Sh "\s-1SHARED\s0 \s-1MEMORY\s0 \s-1IMPLEMENTATION\s0"
+.IX Subsection "SHARED MEMORY IMPLEMENTATION"
 Internally the shared memory facility is implemented in various
 platform-dependent ways. Each way has its own advantages and disadvantages
 (in addition to the fact that some variants aren't available at all on some
@@ -303,48 +263,59 @@
 background reasons with their advantages and disadvantages and in an ascending
 order, i.e. the \fB\s-1MM\s0\fR configuration mechanism chooses the last available one
 in the list as the preferred variant.
-.Ip "Classical mmap(2) on temporary file (\s-1MMFILE\s0)" 4
-\fIAdvantage:\fR maximum portable.
-\fIDisadvantage:\fR needs a temporary file on the filesystem.
-.Ip "mmap(2) via \s-1POSIX\s0.1 shm_open(3) on temporary file (\s-1MMPOSX\s0)" 4
-\fIAdvantage:\fR standardized by \s-1POSIX\s0.1 and theoretically portable.
-\fIDisadvantage:\fR needs a temporary file on the filesystem and is
+.Ip "Classical \fImmap\fR\|(2) on temporary file (\s-1MMFILE\s0)" 4
+.IX Item "Classical mmap on temporary file (MMFILE)"
+\&\fIAdvantage:\fR maximum portable.
+\&\fIDisadvantage:\fR needs a temporary file on the filesystem.
+.Ip "\fImmap\fR\|(2) via \s-1POSIX\s0.1 \fIshm_open\fR\|(3) on temporary file (\s-1MMPOSX\s0)" 4
+.IX Item "mmap via POSIX.1 shm_open on temporary file (MMPOSX)"
+\&\fIAdvantage:\fR standardized by \s-1POSIX\s0.1 and theoretically portable.
+\&\fIDisadvantage:\fR needs a temporary file on the filesystem and is
 is usually not available on existing Unix platform.
-.Ip "\s-1SVR4-\s0style mmap(2) on \f(CW/dev/zero\fR device (\s-1MMZERO\s0)" 4
-\fIAdvantage:\fR widely available and mostly portable on \s-1SVR4\s0 platforms.
-\fIDisadvantage:\fR needs the \f(CW/dev/zero\fR device and a \fImmap\fR\|(2)
+.Ip "SVR4\-style \fImmap\fR\|(2) on \f(CW\*(C`/dev/zero\*(C'\fR device (\s-1MMZERO\s0)" 4
+.IX Item "SVR4-style mmap on /dev/zero device (MMZERO)"
+\&\fIAdvantage:\fR widely available and mostly portable on \s-1SVR4\s0 platforms.
+\&\fIDisadvantage:\fR needs the \f(CW\*(C`/dev/zero\*(C'\fR device and a \fImmap\fR\|(2)
 which supports memory mapping through this device.
-.Ip "SysV \s-1IPC\s0 shmget(2) (\s-1IPCSHM\s0)" 4
-\fIAdvantage:\fR does not need a temporary file or external device.
-\fIDisadvantage:\fR although available on mostly all modern Unix platforms, it has
+.Ip "SysV \s-1IPC\s0 \fIshmget\fR\|(2) (\s-1IPCSHM\s0)" 4
+.IX Item "SysV IPC shmget (IPCSHM)"
+\&\fIAdvantage:\fR does not need a temporary file or external device.
+\&\fIDisadvantage:\fR although available on mostly all modern Unix platforms, it has
 strong restrictions like the maximum size of a single shared memory segment (can
 be as small as 100KB, but depends on the platform).
-.Ip "4.4BSD\-style mmap(2) via \f(CWMAP_ANON\fR facility (\s-1MMANON\s0)" 4
-\fIAdvantage:\fR does not need a temporary file or external device.
-\fIDisadvantage:\fR usually only available on \s-1BSD\s0 platforms and derivatives.
+.Ip "4.4BSD-style \fImmap\fR\|(2) via \f(CW\*(C`MAP_ANON\*(C'\fR facility (\s-1MMANON\s0)" 4
+.IX Item "4.4BSD-style mmap via MAP_ANON facility (MMANON)"
+\&\fIAdvantage:\fR does not need a temporary file or external device.
+\&\fIDisadvantage:\fR usually only available on \s-1BSD\s0 platforms and derivatives.
 .Sh "\s-1LOCKING\s0 \s-1IMPLEMENTATION\s0"
+.IX Subsection "LOCKING IMPLEMENTATION"
 As for the shared memory facility, internally the locking facility is
 implemented in various platform-dependent ways. They are again listed
 in ascending order, i.e. the \fB\s-1MM\s0\fR configuration mechanism chooses the
 last available one in the list as the preferred variant. The list of
 implemented variants is:
-.Ip "4.2BSD\-style flock(2) on temporary file (\s-1FLOCK\s0)" 4
-\fIAdvantage:\fR exists on a lot of platforms, especially on older Unix
+.Ip "4.2BSD-style \fIflock\fR\|(2) on temporary file (\s-1FLOCK\s0)" 4
+.IX Item "4.2BSD-style flock on temporary file (FLOCK)"
+\&\fIAdvantage:\fR exists on a lot of platforms, especially on older Unix
 derivates.  \fIDisadvantage:\fR needs a temporary file on the filesystem and has
 to re-open file-descriptors to it in \fIeach\fR\|(!) \fIfork\fR\|(2)'ed child process.
-.Ip "SysV \s-1IPC\s0 semget(2) (\s-1IPCSEM\s0)" 4
-\fIAdvantage:\fR exists on a lot of platforms and does not need a temporary file.
-\fIDisadvantage:\fR an unmeant termination of the application leads to a
-semaphore leak because the facility does not allow a ``remove in advance'\*(R'
+.Ip "SysV \s-1IPC\s0 \fIsemget\fR\|(2) (\s-1IPCSEM\s0)" 4
+.IX Item "SysV IPC semget (IPCSEM)"
+\&\fIAdvantage:\fR exists on a lot of platforms and does not need a temporary file.
+\&\fIDisadvantage:\fR an unmeant termination of the application leads to a
+semaphore leak because the facility does not allow a ``remove in advance''
 trick (as the \s-1IPC\s0 shared memory facility does) for safe cleanups.
-.Ip "\s-1SVR4-\s0style fcntl(2) on temporary file (\s-1FCNTL\s0)" 4
-\fIAdvantage:\fR exists on a lot of platforms and is also the most powerful
+.Ip "SVR4\-style \fIfcntl\fR\|(2) on temporary file (\s-1FCNTL\s0)" 4
+.IX Item "SVR4-style fcntl on temporary file (FCNTL)"
+\&\fIAdvantage:\fR exists on a lot of platforms and is also the most powerful
 variant (although not always the fastest one). \fIDisadvantage:\fR needs a
 temporary file.
 .Sh "\s-1MEMORY\s0 \s-1ALLOCATION\s0 \s-1STRATEGY\s0"
+.IX Subsection "MEMORY ALLOCATION STRATEGY"
 The memory allocation strategy the \fIStandard Malloc-Style \s-1API\s0\fR functions use
 internally is the following:
 .Ip "\fBAllocation\fR" 4
+.IX Item "Allocation"
 If a chunk of memory has to be allocated, the internal list of free chunks
 is searched for a minimal-size chunk which is larger or equal than the size of
 the to be allocated chunk (a \fIbest fit\fR strategy). 
@@ -359,6 +330,7 @@
 created from the spare area of the shared memory segment until the segment is
 full (in which case an \fIout of memory\fR error occurs).
 .Ip "\fBDeallocation\fR" 4
+.IX Item "Deallocation"
 If a chunk of memory has to be deallocated, it is inserted in sorted manner
 into the internal list of free chunks. The insertion operation automatically
 merges the chunk with a previous and/or a next free chunk if possible, i.e.
@@ -378,175 +350,217 @@
 segments are usually a lot smaller than heaps and the fact that we always
 defragment by merging the free chunks if possible).
 .SH "API FUNCTIONS"
-In the following, all API functions are described in detail The order   .
-directly follows the one in the \fBSYNOPSIS\fR section above              .
+.IX Header "API FUNCTIONS"
+In the following, all \s-1API\s0 functions are described in detail The order   .
+directly follows the one in the \fB\s-1SYNOPSIS\s0\fR section above              .
 .Sh "Global Malloc-Replacement \s-1API\s0"
+.IX Subsection "Global Malloc-Replacement API"
 .Ip "int \fBMM_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);" 4
+.IX Item "int MM_create(size_t size, const char *file);"
 This initializes the global shared memory pool with \fIsize\fR and \fIfile\fR and
 has to be called \fIbefore\fR any \fIfork\fR\|(2) operations are performed by the
 application.
 .Ip "int \fBMM_permission\fR(mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);" 4
+.IX Item "int MM_permission(mode_t mode, uid_t owner, gid_t group);"
 This sets the filesystem \fImode\fR, \fIowner\fR and \fIgroup\fR for the global shared
 memory pool (has effects only if the underlaying shared memory segment
 implementation is actually based on external auxiliary files).  The arguments
 are directly passed through to \fIchmod\fR\|(2) and \fIchown\fR\|(2).
 .Ip "void \fBMM_destroy\fR(void);" 4
+.IX Item "void MM_destroy(void);"
 This destroys the global shared memory pool and should be called \fIafter\fR all
 child processes were killed.
 .Ip "int \fBMM_lock\fR(mm_lock_mode \fImode\fR);" 4
+.IX Item "int MM_lock(mm_lock_mode mode);"
 This locks the global shared memory pool for the current process in order to
-perform either shared/read-only (\fImode\fR is \f(CWMM_LOCK_RD\fR) or
-exclusive/read-write (\fImode\fR is \f(CWMM_LOCK_RW\fR) critical operations inside the
+perform either shared/read-only (\fImode\fR is \f(CW\*(C`MM_LOCK_RD\*(C'\fR) or
+exclusive/read-write (\fImode\fR is \f(CW\*(C`MM_LOCK_RW\*(C'\fR) critical operations inside the
 global shared memory pool.
 .Ip "int \fBMM_unlock\fR(void);" 4
+.IX Item "int MM_unlock(void);"
 This unlocks the global shared memory pool for the current process after the
 critical operations were performed inside the global shared memory pool.
 .Ip "void *\fBMM_malloc\fR(size_t \fIsize\fR);" 4
+.IX Item "void *MM_malloc(size_t size);"
 Identical to the \s-1POSIX\s0.1 \fImalloc\fR\|(3) function but instead of allocating
 memory from the \fIheap\fR it allocates it from the global shared memory pool.
 .Ip "void \fBMM_free\fR(void *\fIptr\fR);" 4
+.IX Item "void MM_free(void *ptr);"
 Identical to the \s-1POSIX\s0.1 \fIfree\fR\|(3) function but instead of deallocating
 memory in the \fIheap\fR it deallocates it in the global shared memory pool.
 .Ip "void *\fBMM_realloc\fR(void *\fIptr\fR, size_t \fIsize\fR);" 4
+.IX Item "void *MM_realloc(void *ptr, size_t size);"
 Identical to the \s-1POSIX\s0.1 \fIrealloc\fR\|(3) function but instead of reallocating
 memory in the \fIheap\fR it reallocates it inside the global shared memory pool.
 .Ip "void *\fBMM_calloc\fR(size_t \fInumber\fR, size_t \fIsize\fR);" 4
+.IX Item "void *MM_calloc(size_t number, size_t size);"
 Identical to the \s-1POSIX\s0.1 \fIcalloc\fR\|(3) function but instead of allocating and
 initializing memory from the \fIheap\fR it allocates and initializes it from the
 global shared memory pool.
 .Ip "char *\fBMM_strdup\fR(const char *\fIstr\fR);" 4
+.IX Item "char *MM_strdup(const char *str);"
 Identical to the \s-1POSIX\s0.1 \fIstrdup\fR\|(3) function but instead of creating the
 string copy in the \fIheap\fR it creates it in the global shared memory pool.
 .Ip "size_t \fBMM_sizeof\fR(const void *\fIptr\fR);" 4
+.IX Item "size_t MM_sizeof(const void *ptr);"
 This function returns the size in bytes of the chunk starting at \fIptr\fR when
-\fIptr\fR was previously allocated with \fIMM_malloc\fR\|(3). The result is undefined
+\&\fIptr\fR was previously allocated with \fIMM_malloc\fR\|(3). The result is undefined
 if \fIptr\fR was not previously allocated with \fIMM_malloc\fR\|(3).
 .Ip "size_t \fBMM_maxsize\fR(void);" 4
+.IX Item "size_t MM_maxsize(void);"
 This function returns the maximum size which is allowed
 as the first argument to the \fIMM_create\fR\|(3) function.
 .Ip "size_t \fBMM_available\fR(void);" 4
+.IX Item "size_t MM_available(void);"
 Returns the amount in bytes of still available (free) memory in the global
 shared memory pool.
 .Ip "char *\fBMM_error\fR(void);" 4
+.IX Item "char *MM_error(void);"
 Returns the last error message which occurred inside the \fB\s-1MM\s0\fR library.
 .Sh "Standard Malloc-Style \s-1API\s0"
+.IX Subsection "Standard Malloc-Style API"
 .Ip "\s-1MM\s0 *\fBmm_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);" 4
+.IX Item "MM *mm_create(size_t size, const char *file);"
 This creates a shared memory pool which has space for approximately a total of
-\fIsize\fR bytes with the help of \fIfile\fR. Here \fIfile\fR is a filesystem path to a
+\&\fIsize\fR bytes with the help of \fIfile\fR. Here \fIfile\fR is a filesystem path to a
 file which need not to exist (and perhaps is never created because this
 depends on the platform and chosen shared memory and mutex implementation).
-The return value is a pointer to a \f(CWMM\fR structure which should be treated as
+The return value is a pointer to a \f(CW\*(C`MM\*(C'\fR structure which should be treated as
 opaque by the application. It describes the internals of the created shared
-memory pool. In case of an error \f(CWNULL\fR is returned.  A \fIsize\fR of 0 means to
+memory pool. In case of an error \f(CW\*(C`NULL\*(C'\fR is returned.  A \fIsize\fR of 0 means to
 allocate the maximum allowed size which is platform dependent and is between a
 few \s-1KB\s0 and the soft limit of 64MB.
 .Ip "int \fBmm_permission\fR(\s-1MM\s0 *\fImm\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);" 4
+.IX Item "int mm_permission(MM *mm, mode_t mode, uid_t owner, gid_t group);"
 This sets the filesystem \fImode\fR, \fIowner\fR and \fIgroup\fR for the shared memory
 pool \fImm\fR (has effects only when the underlaying shared memory segment
 implementation is actually based on external auxiliary files).  The arguments
 are directly passed through to \fIchmod\fR\|(2) and \fIchown\fR\|(2).
 .Ip "void \fBmm_destroy\fR(\s-1MM\s0 *\fImm\fR);" 4
+.IX Item "void mm_destroy(MM *mm);"
 This destroys the complete shared memory pool \fImm\fR and with it all chunks
 which were allocated in this pool. Additionally any created files on the
 filesystem corresponding the to shared memory pool are unlinked.
 .Ip "int \fBmm_lock\fR(\s-1MM\s0 *\fImm\fR, mm_lock_mode \fImode\fR);" 4
+.IX Item "int mm_lock(MM *mm, mm_lock_mode mode);"
 This locks the shared memory pool \fImm\fR for the current process in order to
-perform either shared/read-only (\fImode\fR is \f(CWMM_LOCK_RD\fR) or
-exclusive/read-write (\fImode\fR is \f(CWMM_LOCK_RW\fR) critical operations inside the
+perform either shared/read-only (\fImode\fR is \f(CW\*(C`MM_LOCK_RD\*(C'\fR) or
+exclusive/read-write (\fImode\fR is \f(CW\*(C`MM_LOCK_RW\*(C'\fR) critical operations inside the
 global shared memory pool.
 .Ip "int \fBmm_unlock\fR(\s-1MM\s0 *\fImm\fR);" 4
+.IX Item "int mm_unlock(MM *mm);"
 This unlocks the shared memory pool \fImm\fR for the current process after
 critical operations were performed inside the global shared memory pool.
 .Ip "void *\fBmm_malloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fIsize\fR);" 4
+.IX Item "void *mm_malloc(MM *mm, size_t size);"
 This function allocates \fIsize\fR bytes from the shared memory pool \fImm\fR and
-returns either a (virtual memory word aligned) pointer to it or \f(CWNULL\fR in
+returns either a (virtual memory word aligned) pointer to it or \f(CW\*(C`NULL\*(C'\fR in
 case of an error (out of memory). It behaves like the \s-1POSIX\s0.1 \fImalloc\fR\|(3)
 function but instead of allocating memory from the \fIheap\fR it allocates it
 from the shared memory segment underlaying \fImm\fR.
 .Ip "void \fBmm_free\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR);" 4
+.IX Item "void mm_free(MM *mm, void *ptr);"
 This deallocates the chunk starting at \fIptr\fR in the shared memory pool \fImm\fR.
 It behaves like the \s-1POSIX\s0.1 \fIfree\fR\|(3) function but instead of deallocating
 memory from the \fIheap\fR it deallocates it from the shared memory segment
 underlaying \fImm\fR.
 .Ip "void *\fBmm_realloc\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR, size_t \fIsize\fR);" 4
+.IX Item "void *mm_realloc(MM *mm, void *ptr, size_t size);"
 This function reallocates the chunk starting at \fIptr\fR inside the shared
 memory pool \fImm\fR with the new size of \fIsize\fR bytes.  It behaves like the
-\s-1POSIX\s0.1 \fIrealloc\fR\|(3) function but instead of reallocating memory in the
-\fIheap\fR it reallocates it in the shared memory segment underlaying \fImm\fR.
+\&\s-1POSIX\s0.1 \fIrealloc\fR\|(3) function but instead of reallocating memory in the
+\&\fIheap\fR it reallocates it in the shared memory segment underlaying \fImm\fR.
 .Ip "void *\fBmm_calloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fInumber\fR, size_t \fIsize\fR);" 4
+.IX Item "void *mm_calloc(MM *mm, size_t number, size_t size);"
 This is similar to \fImm_malloc\fR\|(3), but additionally clears the chunk. It behaves
 like the \s-1POSIX\s0.1 \fIcalloc\fR\|(3) function.  It allocates space for \fInumber\fR
 objects, each \fIsize\fR bytes in length from the shared memory pool \fImm\fR.  The
 result is identical to calling \fImm_malloc\fR\|(3) with an argument of ``\fInumber\fR *
-\fIsize\fR'\*(R', with the exception that the allocated memory is initialized to nul
+\&\fIsize\fR'', with the exception that the allocated memory is initialized to nul
 bytes.
 .Ip "char *\fBmm_strdup\fR(\s-1MM\s0 *\fImm\fR, const char *\fIstr\fR);" 4
+.IX Item "char *mm_strdup(MM *mm, const char *str);"
 This function behaves like the \s-1POSIX\s0.1 \fIstrdup\fR\|(3) function.  It allocates
 sufficient memory inside the shared memory pool \fImm\fR for a copy of the string
-\fIstr\fR, does the copy, and returns a pointer to it.  The pointer may
+\&\fIstr\fR, does the copy, and returns a pointer to it.  The pointer may
 subsequently be used as an argument to the function \fImm_free\fR\|(3). If
-insufficient shared memory is available, \f(CWNULL\fR is returned.
+insufficient shared memory is available, \f(CW\*(C`NULL\*(C'\fR is returned.
 .Ip "size_t \fBmm_sizeof\fR(const void *\fIptr\fR);" 4
+.IX Item "size_t mm_sizeof(const void *ptr);"
 This function returns the size in bytes of the chunk starting at \fIptr\fR when
-\fIptr\fR was previously allocated with \fImm_malloc\fR\|(3). The result is undefined
+\&\fIptr\fR was previously allocated with \fImm_malloc\fR\|(3). The result is undefined
 when \fIptr\fR was not previously allocated with \fImm_malloc\fR\|(3).
 .Ip "size_t \fBmm_maxsize\fR(void);" 4
+.IX Item "size_t mm_maxsize(void);"
 This function returns the maximum size which is allowed as the first argument
 to the \fImm_create\fR\|(3) function.
 .Ip "size_t \fBmm_available\fR(\s-1MM\s0 *\fImm\fR);" 4
+.IX Item "size_t mm_available(MM *mm);"
 Returns the amount in bytes of still available (free) memory in the 
 shared memory pool \fImm\fR.
 .Ip "char *\fBmm_error\fR(void);" 4
+.IX Item "char *mm_error(void);"
 Returns the last error message which occurred inside the \fB\s-1MM\s0\fR library.
 .Ip "void \fBmm_display_info\fR(\s-1MM\s0 *\fImm\fR);" 4
+.IX Item "void mm_display_info(MM *mm);"
 This is debugging function which displays a summary page for the shared memory
 pool \fImm\fR describing various internal sizes and counters.
 .Sh "Low-Level Shared Memory \s-1API\s0"
+.IX Subsection "Low-Level Shared Memory API"
 .Ip "void *\fBmm_core_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);" 4
+.IX Item "void *mm_core_create(size_t size, const char *file);"
 This creates a shared memory area which is at least \fIsize\fR bytes in size with
 the help of \fIfile\fR. The value \fIsize\fR has to be greater than 0 and less or
 equal the value returned by \fImm_core_maxsegsize\fR\|(3). Here \fIfile\fR is a
 filesystem path to a file which need not to exist (and perhaps is never
 created because this depends on the platform and chosen shared memory and
 mutex implementation).  The return value is either a (virtual memory word
-aligned) pointer to the shared memory segment or \f(CWNULL\fR in case of an error.
+aligned) pointer to the shared memory segment or \f(CW\*(C`NULL\*(C'\fR in case of an error.
 The application is guaranteed to be able to access the shared memory segment
 from byte 0 to byte \fIsize\fR\-1 starting at the returned address.
 .Ip "int \fBmm_core_permission\fR(void *\fIcore\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);" 4
+.IX Item "int mm_core_permission(void *core, mode_t mode, uid_t owner, gid_t group);"
 This sets the filesystem \fImode\fR, \fIowner\fR and \fIgroup\fR for the shared memory
 segment \fIcode\fR (has effects only when the underlaying shared memory segment
 implementation is actually based on external auxiliary files).  The arguments
 are directly passed through to \fIchmod\fR\|(2) and \fIchown\fR\|(2).
 .Ip "void \fBmm_core_delete\fR(void *\fIcore\fR);" 4
+.IX Item "void mm_core_delete(void *core);"
 This deletes a shared memory segment \fIcore\fR (as previously returned by a
-\fImm_core_create\fR\|(3) call). After this operation, accessing the segment starting
+\&\fImm_core_create\fR\|(3) call). After this operation, accessing the segment starting
 at \fIcore\fR is no longer allowed and will usually lead to a segmentation fault.
 .Ip "int \fBmm_core_lock\fR(const void *\fIcore\fR, mm_lock_mode \fImode\fR);" 4
+.IX Item "int mm_core_lock(const void *core, mm_lock_mode mode);"
 This function acquires an advisory lock for the current process on the shared
-memory segment \fIcore\fR for either shared/read-only (\fImode\fR is \f(CWMM_LOCK_RD\fR)
-or exclusive/read-write (\fImode\fR is \f(CWMM_LOCK_RW\fR) critical operations between
-\fIfork\fR\|(2)'ed child processes.
+memory segment \fIcore\fR for either shared/read-only (\fImode\fR is \f(CW\*(C`MM_LOCK_RD\*(C'\fR)
+or exclusive/read-write (\fImode\fR is \f(CW\*(C`MM_LOCK_RW\*(C'\fR) critical operations between
+\&\fIfork\fR\|(2)'ed child processes.
 .Ip "int \fBmm_core_unlock\fR(const void *\fIcore\fR);" 4
+.IX Item "int mm_core_unlock(const void *core);"
 This function releases a previously acquired advisory lock for the current
 process on the shared memory segment \fIcore\fR.
 .Ip "size_t \fBmm_core_size\fR(const void *\fIcore\fR);" 4
+.IX Item "size_t mm_core_size(const void *core);"
 This returns the size in bytes of \fIcore\fR. This size is exactly the size which
 was used for creating the shared memory area via \fImm_core_create\fR\|(3). The
 function is provided just for convenience reasons to not require the
 application to remember the memory size behind \fIcore\fR itself. 
 .Ip "size_t \fBmm_core_maxsegsize\fR(void);" 4
+.IX Item "size_t mm_core_maxsegsize(void);"
 This returns the number of bytes of a maximum-size shared memory segment which
 is allowed to allocate via the \s-1MM\s0 library. It is between a few \s-1KB\s0 and the soft
 limit of 64MB.
 .Ip "size_t \fBmm_core_align2page\fR(size_t \fIsize\fR);" 4
+.IX Item "size_t mm_core_align2page(size_t size);"
 This is just a utility function which can be used to align the number \fIsize\fR
 to the next virtual memory \fIpage\fR boundary used by the underlaying platform.
 The memory page boundary under Unix platforms is usually somewhere between
 2048 and 16384 bytes. You do not have to align the \fIsize\fR arguments of other
-\fB\s-1MM\s0\fR library functions yourself, because this is already done internally.
+\&\fB\s-1MM\s0\fR library functions yourself, because this is already done internally.
 This function is exported by the \fB\s-1MM\s0\fR library just for convenience reasons in
 case an application wants to perform similar calculations for other purposes.
 .Ip "size_t \fBmm_core_align2word\fR(size_t \fIsize\fR);" 4
+.IX Item "size_t mm_core_align2word(size_t size);"
 This is another utility function which can be used to align the number \fIsize\fR
 to the next virtual memory \fIword\fR boundary used by the underlaying platform.
 The memory word boundary under Unix platforms is usually somewhere between 4
@@ -555,204 +569,63 @@
 function is exported by the \fB\s-1MM\s0\fR library just for convenience reasons in case
 an application wants to perform simular calculations for other purposes.
 .Sh "Low-Level Shared Memory \s-1API\s0"
+.IX Subsection "Low-Level Shared Memory API"
 .Ip "void \fBmm_lib_error_set\fR(unsigned int, const char *str);" 4
+.IX Item "void mm_lib_error_set(unsigned int, const char *str);"
 This is a function which is used internally by the various \s-1MM\s0 function to set
 an error string. It's usually not called directly from applications.
 .Ip "char *\fBmm_lib_error_get\fR(void);" 4
+.IX Item "char *mm_lib_error_get(void);"
 This is a function which is used internally by \fIMM_error\fR\|(3) and \fImm_error\fR\|(3)
 functions to get the current error string. It is usually not called directly
 from applications.
 .Ip "int \fBmm_lib_version\fR(void);" 4
-This function returns a hex-value ``0x\fIV\fR\fI\s-1RR\s0\fR\fIT\fR\fI\s-1LL\s0\fR'\*(R' which describes the
+.IX Item "int mm_lib_version(void);"
+This function returns a hex-value ``0x\fIV\fR\fI\s-1RR\s0\fR\fIT\fR\fI\s-1LL\s0\fR'' which describes the
 current \fB\s-1MM\s0\fR library version. \fIV\fR is the version, \fI\s-1RR\s0\fR the revisions, \fI\s-1LL\s0\fR
 the level and \fIT\fR the type of the level (alphalevel=0, betalevel=1,
 patchlevel=2, etc). For instance \fB\s-1MM\s0\fR version 1.0.4 is encoded as 0x100204.
 The reason for this unusual mapping is that this way the version number is
 steadily \fIincreasing\fR.
 .SH "RESTRICTIONS"
+.IX Header "RESTRICTIONS"
 The maximum size of a continuous shared memory segment one can allocate
 depends on the underlaying platform. This cannot be changed, of course.  But
-currently the high-level \fImalloc\fR\|(3)\-style API just uses a single shared memory
-segment as the underlaying data structure for an \f(CWMM\fR object which means that
-the maximum amount of memory an \f(CWMM\fR object represents also depends on the
+currently the high-level \fImalloc\fR\|(3)\-style \s-1API\s0 just uses a single shared memory
+segment as the underlaying data structure for an \f(CW\*(C`MM\*(C'\fR object which means that
+the maximum amount of memory an \f(CW\*(C`MM\*(C'\fR object represents also depends on the
 platform. 
 .PP
 This could be changed in later versions by allowing at least the
-high-level \fImalloc\fR\|(3)\-style API to internally use multiple shared memory
-segments to form the \f(CWMM\fR object. This way \f(CWMM\fR objects could have
+high-level \fImalloc\fR\|(3)\-style \s-1API\s0 to internally use multiple shared memory
+segments to form the \f(CW\*(C`MM\*(C'\fR object. This way \f(CW\*(C`MM\*(C'\fR objects could have
 arbitrary sizes, although the maximum size of an allocatable continous
 chunk still is bounded by the maximum size of a shared memory segment.
 .SH "SEE ALSO"
-mm-\fIconfig\fR\|(1).
+.IX Header "SEE ALSO"
+\&\fImm-config\fR\|(1).
 .PP
-\fImalloc\fR\|(3), \fIcalloc\fR\|(3), \fIrealloc\fR\|(3), \fIstrdup\fR\|(3), \fIfree\fR\|(3), \fImmap\fR\|(2), \fIshmget\fR\|(2),
-\fIshmctl\fR\|(2), \fIflock\fR\|(2), \fIfcntl\fR\|(2), \fIsemget\fR\|(2), \fIsemctl\fR\|(2), \fIsemop\fR\|(2).
+\&\fImalloc\fR\|(3), \fIcalloc\fR\|(3), \fIrealloc\fR\|(3), \fIstrdup\fR\|(3), \fIfree\fR\|(3), \fImmap\fR\|(2), \fIshmget\fR\|(2),
+\&\fIshmctl\fR\|(2), \fIflock\fR\|(2), \fIfcntl\fR\|(2), \fIsemget\fR\|(2), \fIsemctl\fR\|(2), \fIsemop\fR\|(2).
 .SH "HOME"
+.IX Header "HOME"
 http://www.engelschall.com/sw/mm/
 
 .SH "HISTORY"
+.IX Header "HISTORY"
 This library was originally written in January 1999 by \fIRalf S.
-Engelschall\fR <rse@engelschall.com> for use in the \fBExtended API\fR (EAPI)
-of the \fBApache\fR HTTP server project (see http://www.apache.org/), which
+Engelschall\fR <rse@engelschall.com> for use in the \fBExtended \s-1API\s0\fR (\s-1EAPI\s0)
+of the \fBApache\fR \s-1HTTP\s0 server project (see http://www.apache.org/), which
 was originally invented for \fBmod_ssl\fR (see http://www.modssl.org/).
 .PP
-Its base idea (a malloc-style API for handling shared memory) was originally
+Its base idea (a malloc-style \s-1API\s0 for handling shared memory) was originally
 derived from the non-publically available \fImm_malloc\fR library written in
 October 1997 by \fICharles Randall\fR <crandall@matchlogic.com> for MatchLogic,
 Inc.
 .SH "AUTHOR"
-.PP
+.IX Header "AUTHOR"
 .Vb 3
 \& Ralf S. Engelschall
 \& rse@engelschall.com
 \& www.engelschall.com
 .Ve
-
-.rn }` ''
-.IX Title "mm 3"
-.IX Name "B<MM - Shared Memory Library>"
-
-.IX Header "NAME"
-
-.IX Header "VERSION"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Subsection "\s-1LIBRARY\s0 \s-1STRUCTURE\s0"
-
-.IX Item "\fBGlobal Malloc-Replacement \s-1API\s0\fR"
-
-.IX Item "\fBStandard Malloc-Style \s-1API\s0\fR"
-
-.IX Item "\fBLow-Level Shared Memory \s-1API\s0\fR"
-
-.IX Subsection "\s-1SHARED\s0 \s-1MEMORY\s0 \s-1IMPLEMENTATION\s0"
-
-.IX Item "Classical mmap(2) on temporary file (\s-1MMFILE\s0)"
-
-.IX Item "mmap(2) via \s-1POSIX\s0.1 shm_open(3) on temporary file (\s-1MMPOSX\s0)"
-
-.IX Item "\s-1SVR4-\s0style mmap(2) on \f(CW/dev/zero\fR device (\s-1MMZERO\s0)"
-
-.IX Item "SysV \s-1IPC\s0 shmget(2) (\s-1IPCSHM\s0)"
-
-.IX Item "4.4BSD\-style mmap(2) via \f(CWMAP_ANON\fR facility (\s-1MMANON\s0)"
-
-.IX Subsection "\s-1LOCKING\s0 \s-1IMPLEMENTATION\s0"
-
-.IX Item "4.2BSD\-style flock(2) on temporary file (\s-1FLOCK\s0)"
-
-.IX Item "SysV \s-1IPC\s0 semget(2) (\s-1IPCSEM\s0)"
-
-.IX Item "\s-1SVR4-\s0style fcntl(2) on temporary file (\s-1FCNTL\s0)"
-
-.IX Subsection "\s-1MEMORY\s0 \s-1ALLOCATION\s0 \s-1STRATEGY\s0"
-
-.IX Item "\fBAllocation\fR"
-
-.IX Item "\fBDeallocation\fR"
-
-.IX Header "API FUNCTIONS"
-
-.IX Subsection "Global Malloc-Replacement \s-1API\s0"
-
-.IX Item "int \fBMM_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);"
-
-.IX Item "int \fBMM_permission\fR(mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);"
-
-.IX Item "void \fBMM_destroy\fR(void);"
-
-.IX Item "int \fBMM_lock\fR(mm_lock_mode \fImode\fR);"
-
-.IX Item "int \fBMM_unlock\fR(void);"
-
-.IX Item "void *\fBMM_malloc\fR(size_t \fIsize\fR);"
-
-.IX Item "void \fBMM_free\fR(void *\fIptr\fR);"
-
-.IX Item "void *\fBMM_realloc\fR(void *\fIptr\fR, size_t \fIsize\fR);"
-
-.IX Item "void *\fBMM_calloc\fR(size_t \fInumber\fR, size_t \fIsize\fR);"
-
-.IX Item "char *\fBMM_strdup\fR(const char *\fIstr\fR);"
-
-.IX Item "size_t \fBMM_sizeof\fR(const void *\fIptr\fR);"
-
-.IX Item "size_t \fBMM_maxsize\fR(void);"
-
-.IX Item "size_t \fBMM_available\fR(void);"
-
-.IX Item "char *\fBMM_error\fR(void);"
-
-.IX Subsection "Standard Malloc-Style \s-1API\s0"
-
-.IX Item "\s-1MM\s0 *\fBmm_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);"
-
-.IX Item "int \fBmm_permission\fR(\s-1MM\s0 *\fImm\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);"
-
-.IX Item "void \fBmm_destroy\fR(\s-1MM\s0 *\fImm\fR);"
-
-.IX Item "int \fBmm_lock\fR(\s-1MM\s0 *\fImm\fR, mm_lock_mode \fImode\fR);"
-
-.IX Item "int \fBmm_unlock\fR(\s-1MM\s0 *\fImm\fR);"
-
-.IX Item "void *\fBmm_malloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fIsize\fR);"
-
-.IX Item "void \fBmm_free\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR);"
-
-.IX Item "void *\fBmm_realloc\fR(\s-1MM\s0 *\fImm\fR, void *\fIptr\fR, size_t \fIsize\fR);"
-
-.IX Item "void *\fBmm_calloc\fR(\s-1MM\s0 *\fImm\fR, size_t \fInumber\fR, size_t \fIsize\fR);"
-
-.IX Item "char *\fBmm_strdup\fR(\s-1MM\s0 *\fImm\fR, const char *\fIstr\fR);"
-
-.IX Item "size_t \fBmm_sizeof\fR(const void *\fIptr\fR);"
-
-.IX Item "size_t \fBmm_maxsize\fR(void);"
-
-.IX Item "size_t \fBmm_available\fR(\s-1MM\s0 *\fImm\fR);"
-
-.IX Item "char *\fBmm_error\fR(void);"
-
-.IX Item "void \fBmm_display_info\fR(\s-1MM\s0 *\fImm\fR);"
-
-.IX Subsection "Low-Level Shared Memory \s-1API\s0"
-
-.IX Item "void *\fBmm_core_create\fR(size_t \fIsize\fR, const char *\fIfile\fR);"
-
-.IX Item "int \fBmm_core_permission\fR(void *\fIcore\fR, mode_t \fImode\fR, uid_t \fIowner\fR, gid_t \fIgroup\fR);"
-
-.IX Item "void \fBmm_core_delete\fR(void *\fIcore\fR);"
-
-.IX Item "int \fBmm_core_lock\fR(const void *\fIcore\fR, mm_lock_mode \fImode\fR);"
-
-.IX Item "int \fBmm_core_unlock\fR(const void *\fIcore\fR);"
-
-.IX Item "size_t \fBmm_core_size\fR(const void *\fIcore\fR);"
-
-.IX Item "size_t \fBmm_core_maxsegsize\fR(void);"
-
-.IX Item "size_t \fBmm_core_align2page\fR(size_t \fIsize\fR);"
-
-.IX Item "size_t \fBmm_core_align2word\fR(size_t \fIsize\fR);"
-
-.IX Subsection "Low-Level Shared Memory \s-1API\s0"
-
-.IX Item "void \fBmm_lib_error_set\fR(unsigned int, const char *str);"
-
-.IX Item "char *\fBmm_lib_error_get\fR(void);"
-
-.IX Item "int \fBmm_lib_version\fR(void);"
-
-.IX Header "RESTRICTIONS"
-
-.IX Header "SEE ALSO"
-
-.IX Header "HOME"
-
-.IX Header "HISTORY"
-
-.IX Header "AUTHOR"
-

CVSTrac 2.0.1