Module Name:    src
Committed By:   christos
Date:           Wed Nov 27 16:23:00 UTC 2013

Modified Files:
        src/share/man/man3: Makefile queue.3

Log Message:
Sync queue man pages with queue.h.


To generate a diff of this commit:
cvs rdiff -u -r1.84 -r1.85 src/share/man/man3/Makefile
cvs rdiff -u -r1.45 -r1.46 src/share/man/man3/queue.3

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man3/Makefile
diff -u src/share/man/man3/Makefile:1.84 src/share/man/man3/Makefile:1.85
--- src/share/man/man3/Makefile:1.84	Mon Nov 25 20:33:02 2013
+++ src/share/man/man3/Makefile	Wed Nov 27 11:23:00 2013
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.84 2013/11/26 01:33:02 christos Exp $
+#	$NetBSD: Makefile,v 1.85 2013/11/27 16:23:00 christos Exp $
 #	@(#)Makefile	8.2 (Berkeley) 12/13/93
 
 MAN=	_DIAGASSERT.3 __CONCAT.3 __UNCONST.3 __USE.3 CMSG_DATA.3 \
@@ -136,72 +136,92 @@ MLINKS+=gcq.3 GCQ_INIT.3 \
 	gcq.3 GCQ_FIND_REV.3 \
 	gcq.3 GCQ_FIND_TYPED.3 \
 	gcq.3 GCQ_FIND_REV_TYPED.3
-MLINKS+=queue.3 LIST_HEAD.3 \
-	queue.3 LIST_HEAD_INITIALIZER.3 \
+
+MLINKS+=queue.3 LIST.3 \
 	queue.3 LIST_ENTRY.3 \
+	queue.3 LIST_FIRST.3 \
+	queue.3 LIST_FOREACH.3 \
+	queue.3 LIST_HEAD.3 \
+	queue.3 LIST_HEAD_INITIALIZER.3 \
 	queue.3 LIST_INIT.3 \
 	queue.3 LIST_INSERT_AFTER.3 \
 	queue.3 LIST_INSERT_BEFORE.3 \
 	queue.3 LIST_INSERT_HEAD.3 \
+	queue.3 LIST_NEXT.3 \
 	queue.3 LIST_REMOVE.3 \
-	queue.3 LIST_FOREACH.3 \
-	queue.3 LIST_EMPTY.3 \
-	queue.3 LIST_FIRST.3 \
-	queue.3 LIST_NEXT.3
-MLINKS+=queue.3 SLIST_HEAD.3 \
-	queue.3 SLIST_HEAD_INITIALIZER.3 \
+	queue.3 LIST_REPLACE.3
+
+MLINKS+=queue.3 SIMPLEQ.3 \
+	queue.3 SIMPLEQ_CONCAT.3 \
+	queue.3 SIMPLEQ_EMPTY.3 \
+	queue.3 SIMPLEQ_ENTRY.3 \
+	queue.3 SIMPLEQ_FIRST.3 \
+	queue.3 SIMPLEQ_FOREACH.3 \
+	queue.3 SIMPLEQ_HEAD.3 \
+	queue.3 SIMPLEQ_HEAD_INITIALIZER.3 \
+	queue.3 SIMPLEQ_INIT.3 \
+	queue.3 SIMPLEQ_INSERT_AFTER.3 \
+	queue.3 SIMPLEQ_INSERT_HEAD.3 \
+	queue.3 SIMPLEQ_INSERT_TAIL.3 \
+	queue.3 SIMPLEQ_LAST.3 \
+	queue.3 SIMPLEQ_NEXT.3 \
+	queue.3 SIMPLEQ_REMOVE.3 \
+	queue.3 SIMPLEQ_REMOVE_AFTER.3 \
+	queue.3 SIMPLEQ_REMOVE_HEAD.3 \
+	queue.3 SIMPLQ_REMOVE.3
+
+MLINKS+=queue.3 SLIST.3 \
+	queue.3 SLIST_EMPTY.3 \
 	queue.3 SLIST_ENTRY.3 \
+	queue.3 SLIST_FIRST.3 \
+	queue.3 SLIST_FOREACH.3 \
+	queue.3 SLIST_HEAD.3 \
+	queue.3 SLIST_HEAD_INITIALIZER.3 \
 	queue.3 SLIST_INIT.3 \
 	queue.3 SLIST_INSERT_AFTER.3 \
 	queue.3 SLIST_INSERT_HEAD.3 \
-	queue.3 SLIST_REMOVE_HEAD.3 \
+	queue.3 SLIST_NEXT.3 \
 	queue.3 SLIST_REMOVE.3 \
-	queue.3 SLIST_FOREACH.3 \
-	queue.3 SLIST_EMPTY.3 \
-	queue.3 SLIST_FIRST.3 \
-	queue.3 SLIST_NEXT.3
-MLINKS+=queue.3 STAILQ_HEAD.3 \
-	queue.3 STAILQ_HEAD_INITIALIZER.3 \
+	queue.3 SLIST_REMOVE_AFTER.3 \
+	queue.3 SLIST_REMOVE_HEAD.3
+
+MLINKS+=queue.3 STAILQ.3 \
+	queue.3 STAILQ_CONCAT.3 \
+	queue.3 STAILQ_EMPTY.3 \
 	queue.3 STAILQ_ENTRY.3 \
+	queue.3 STAILQ_FIRST.3 \
+	queue.3 STAILQ_FOREACH.3 \
+	queue.3 STAILQ_FOREACH_SAFE.3 \
+	queue.3 STAILQ_HEAD.3 \
+	queue.3 STAILQ_HEAD_INITIALIZER.3 \
 	queue.3 STAILQ_INIT.3 \
+	queue.3 STAILQ_INSERT_AFTER.3 \
 	queue.3 STAILQ_INSERT_HEAD.3 \
 	queue.3 STAILQ_INSERT_TAIL.3 \
-	queue.3 STAILQ_INSERT_AFTER.3 \
-	queue.3 STAILQ_REMOVE_HEAD.3 \
+	queue.3 STAILQ_LAST.3 \
+	queue.3 STAILQ_NEXT.3 \
 	queue.3 STAILQ_REMOVE.3 \
-	queue.3 STAILQ_FOREACH.3 \
-	queue.3 STAILQ_EMPTY.3 \
-	queue.3 STAILQ_FIRST.3 \
-	queue.3 STAILQ_NEXT.3
-MLINKS+=queue.3 SIMPLEQ_HEAD.3 \
-	queue.3 SIMPLEQ_HEAD_INITIALIZER.3 \
-	queue.3 SIMPLEQ_ENTRY.3 \
-	queue.3 SIMPLEQ_INIT.3 \
-	queue.3 SIMPLEQ_INSERT_HEAD.3 \
-	queue.3 SIMPLEQ_INSERT_TAIL.3 \
-	queue.3 SIMPLEQ_INSERT_AFTER.3 \
-	queue.3 SIMPLEQ_REMOVE_HEAD.3 \
-	queue.3 SIMPLEQ_REMOVE.3 \
-	queue.3 SIMPLEQ_FOREACH.3 \
-	queue.3 SIMPLEQ_EMPTY.3 \
-	queue.3 SIMPLEQ_FIRST.3 \
-	queue.3 SIMPLEQ_NEXT.3
-MLINKS+=queue.3 TAILQ_HEAD.3 \
-	queue.3 TAILQ_HEAD_INITIALIZER.3 \
+	queue.3 STAILQ_REMOVE_HEAD.3
+
+MLINKS+=queue.3 TAILQ.3 \
+	queue.3 TAILQ_CONCAT.3 \
+	queue.3 TAILQ_EMPTY.3 \
 	queue.3 TAILQ_ENTRY.3 \
+	queue.3 TAILQ_FIRST.3 \
+	queue.3 TAILQ_FOREACH_REVERSE_SAFE.3 \
+	queue.3 TAILQ_HEAD.3 \
+	queue.3 TAILQ_HEAD_INITIALIZER.3 \
 	queue.3 TAILQ_INIT.3 \
-	queue.3 TAILQ_INSERT_HEAD.3 \
-	queue.3 TAILQ_INSERT_TAIL.3 \
 	queue.3 TAILQ_INSERT_AFTER.3 \
 	queue.3 TAILQ_INSERT_BEFORE.3 \
-	queue.3 TAILQ_REMOVE.3 \
-	queue.3 TAILQ_FOREACH.3 \
-	queue.3 TAILQ_FOREACH_REVERSE.3 \
-	queue.3 TAILQ_EMPTY.3 \
-	queue.3 TAILQ_FIRST.3 \
-	queue.3 TAILQ_NEXT.3 \
+	queue.3 TAILQ_INSERT_HEAD.3 \
+	queue.3 TAILQ_INSERT_TAIL.3 \
 	queue.3 TAILQ_LAST.3 \
-	queue.3 TAILQ_PREV.3
+	queue.3 TAILQ_NEXT.3 \
+	queue.3 TAILQ_PREV.3 \
+	queue.3 TAILQ_REMOVE.3 \
+	queue.3 TAILQ_REPLACE.3
+
 MLINKS+=rbtree.3 rb_tree_init.3 \
 	rbtree.3 rb_tree_insert_node.3 \
 	rbtree.3 rb_tree_find_node.3 \

Index: src/share/man/man3/queue.3
diff -u src/share/man/man3/queue.3:1.45 src/share/man/man3/queue.3:1.46
--- src/share/man/man3/queue.3:1.45	Sat Nov 23 12:40:43 2013
+++ src/share/man/man3/queue.3	Wed Nov 27 11:23:00 2013
@@ -1,4 +1,4 @@
-.\"	$NetBSD: queue.3,v 1.45 2013/11/23 17:40:43 wiz Exp $
+.\"	$NetBSD: queue.3,v 1.46 2013/11/27 16:23:00 christos Exp $
 .\"
 .\" Copyright (c) 2000, 2002 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -53,194 +53,203 @@
 .\"
 .\"	@(#)queue.3	8.1 (Berkeley) 12/13/93
 .\"
-.Dd November 23, 2013
+.Dd November 27, 2013
 .Dt QUEUE 3
 .Os
 .Sh NAME
 .Nm SLIST_HEAD ,
 .Nm SLIST_HEAD_INITIALIZER ,
 .Nm SLIST_ENTRY ,
+.Nm SLIST_FIRST ,
+.Nm SLIST_EMPTY ,
+.Nm SLIST_NEXT ,
+.Nm SLIST_FOREACH ,
+.Nm SLIST_FOREACH_SAFE ,
 .Nm SLIST_INIT ,
-.Nm SLIST_INSERT_AFTER ,
 .Nm SLIST_INSERT_HEAD ,
+.Nm SLIST_INSERT_AFTER ,
+.Nm SLIST_REMOVE_AFTER ,
 .Nm SLIST_REMOVE_HEAD ,
 .Nm SLIST_REMOVE ,
-.Nm SLIST_FOREACH ,
-.Nm SLIST_FOREACH_SAFE ,
-.Nm SLIST_EMPTY ,
-.Nm SLIST_FIRST ,
-.Nm SLIST_NEXT ,
+.Nm LIST_HEAD ,
+.Nm LIST_HEAD_INITIALIZER ,
+.Nm LIST_ENTRY ,
+.Nm LIST_FIRST ,
+.Nm LIST_EMPTY ,
+.Nm LIST_NEXT ,
+.Nm LIST_FOREACH ,
+.Nm LIST_FOREACH_SAFE ,
+.Nm LIST_INIT ,
+.Nm LIST_INSERT_AFTER ,
+.Nm LIST_INSERT_BEFORE ,
+.Nm LIST_INSERT_HEAD ,
+.Nm LIST_REMOVE ,
+.Nm LIST_REPLACE ,
 .Nm SIMPLEQ_HEAD ,
 .Nm SIMPLEQ_HEAD_INITIALIZER ,
 .Nm SIMPLEQ_ENTRY ,
+.Nm SIMPLEQ_FIRST ,
+.Nm SIMPLEQ_EMPTY ,
+.Nm SIMPLEQ_NEXT ,
+.Nm SIMPLEQ_LAST ,
+.Nm SIMPLEQ_FOREACH ,
+.Nm SIMPLEQ_FOREACH_SAFE ,
 .Nm SIMPLEQ_INIT ,
 .Nm SIMPLEQ_INSERT_HEAD ,
 .Nm SIMPLEQ_INSERT_TAIL ,
 .Nm SIMPLEQ_INSERT_AFTER ,
 .Nm SIMPLEQ_REMOVE_HEAD ,
+.Nm SIMPLEQ_REMOVE_AFTER ,
 .Nm SIMPLEQ_REMOVE ,
-.Nm SIMPLEQ_FOREACH ,
-.Nm SIMPLEQ_FOREACH_SAFE ,
-.Nm SIMPLEQ_EMPTY ,
-.Nm SIMPLEQ_FIRST ,
-.Nm SIMPLEQ_NEXT ,
-.Nm SIMPLEQ_LAST ,
 .Nm SIMPLEQ_CONCAT ,
-.Nm STAILQ_HEAD ,
-.Nm STAILQ_HEAD_INITIALIZER ,
-.Nm STAILQ_ENTRY ,
-.Nm STAILQ_INIT ,
-.Nm STAILQ_INSERT_HEAD ,
-.Nm STAILQ_INSERT_TAIL ,
-.Nm STAILQ_INSERT_AFTER ,
-.Nm STAILQ_REMOVE_HEAD ,
-.Nm STAILQ_REMOVE ,
-.Nm STAILQ_FOREACH ,
-.Nm STAILQ_FOREACH_SAFE ,
-.Nm STAILQ_EMPTY ,
-.Nm STAILQ_FIRST ,
-.Nm STAILQ_NEXT ,
-.Nm STAILQ_LAST ,
-.Nm STAILQ_CONCAT ,
-.Nm LIST_HEAD ,
-.Nm LIST_HEAD_INITIALIZER ,
-.Nm LIST_ENTRY ,
-.Nm LIST_INIT ,
-.Nm LIST_INSERT_AFTER ,
-.Nm LIST_INSERT_BEFORE ,
-.Nm LIST_INSERT_HEAD ,
-.Nm LIST_REMOVE ,
-.Nm LIST_FOREACH ,
-.Nm LIST_EMPTY ,
-.Nm LIST_FIRST ,
-.Nm LIST_NEXT ,
 .Nm TAILQ_HEAD ,
 .Nm TAILQ_HEAD_INITIALIZER ,
 .Nm TAILQ_ENTRY ,
+.Nm TAILQ_FIRST ,
+.Nm TAILQ_NEXT ,
+.Nm TAILQ_LAST ,
+.Nm TAILQ_PREV ,
+.Nm TAILQ_EMPTY ,
+.Nm TAILQ_FOREACH ,
+.Nm TAILQ_FOREACH_SAFE ,
+.Nm TAILQ_FOREACH_REVERSE ,
+.Nm TAILQ_FOREACH_REVERSE_SAFE ,
 .Nm TAILQ_INIT ,
 .Nm TAILQ_INSERT_HEAD ,
 .Nm TAILQ_INSERT_TAIL ,
 .Nm TAILQ_INSERT_AFTER ,
 .Nm TAILQ_INSERT_BEFORE ,
 .Nm TAILQ_REMOVE ,
-.Nm TAILQ_FOREACH ,
-.Nm TAILQ_FOREACH_SAFE ,
-.Nm TAILQ_FOREACH_REVERSE ,
-.Nm TAILQ_FOREACH_REVERSE_SAFE ,
-.Nm TAILQ_EMPTY ,
-.Nm TAILQ_FIRST ,
-.Nm TAILQ_NEXT ,
-.Nm TAILQ_LAST ,
-.Nm TAILQ_PREV ,
+.Nm TAILQ_REPLACE ,
 .Nm TAILQ_CONCAT ,
-.Nd "implementations of singly-linked lists, simple queues, lists, and tail queues
+.Nm STAILQ_HEAD ,
+.Nm STAILQ_HEAD_INITIALIZER ,
+.Nm STAILQ_ENTRY ,
+.Nm STAILQ_FIRST ,
+.Nm STAILQ_EMPTY ,
+.Nm STAILQ_NEXT ,
+.Nm STAILQ_LAST ,
+.Nm STAILQ_FOREACH ,
+.Nm STAILQ_FOREACH_SAFE ,
+.Nm STAILQ_INIT ,
+.Nm STAILQ_INSERT_HEAD ,
+.Nm STAILQ_INSERT_TAIL ,
+.Nm STAILQ_INSERT_AFTER ,
+.Nm STAILQ_REMOVE_HEAD ,
+.Nm STAILQ_REMOVE ,
+.Nm STAILQ_CONCAT ,
+.Nd "implementations of singly-linked lists, lists, simple queues, tail queues, and singly-linked tail queues.
 .Sh SYNOPSIS
 .In sys/queue.h
 .Pp
 .Fn SLIST_HEAD "HEADNAME" "TYPE"
 .Fn SLIST_HEAD_INITIALIZER "head"
 .Fn SLIST_ENTRY "TYPE"
+.Ft TYPE *
+.Fn SLIST_FIRST "SLIST_HEAD *head"
+.Ft int
+.Fn SLIST_EMPTY "SLIST_HEAD *head"
+.Ft TYPE *
+.Fn SLIST_NEXT "TYPE *elm" "SLIST_ENTRY NAME"
+.Fn SLIST_FOREACH "TYPE *var" "SLIST_HEAD *head" "SLIST_ENTRY NAME"
+.Fn SLIST_FOREACH_SAFE "TYPE *var" "SLIST_HEAD *head" "SLIST_ENTRY NAME" "TYPE *tmp"
 .Fn SLIST_INIT "SLIST_HEAD *head"
-.Fn SLIST_INSERT_AFTER "TYPE *listelm" "TYPE *elm" "SLIST_ENTRY NAME"
 .Fn SLIST_INSERT_HEAD "SLIST_HEAD *head" "TYPE *elm" "SLIST_ENTRY NAME"
-.Fn SLIST_REMOVE_HEAD "SLIST_HEAD *head" "SLIST_ENTRY NAME"
+.Fn SLIST_INSERT_AFTER "TYPE *listelm" "TYPE *elm" "SLIST_ENTRY NAME"
 .Fn SLIST_REMOVE "SLIST_HEAD *head" "TYPE *elm" "TYPE" "SLIST_ENTRY NAME"
-.Fn SLIST_FOREACH "TYPE *var" "SLIST_HEAD *head" "SLIST_ENTRY NAME"
-.Fn SLIST_FOREACH_SAFE "TYPE *var" "SLIST_HEAD *head" "SLIST_ENTRY NAME" "TYPE *tmp"
-.Ft int
-.Fn SLIST_EMPTY "SLIST_HEAD *head"
+.Fn SLIST_REMOVE_HEAD "SLIST_HEAD *head" "SLIST_ENTRY NAME"
+.Pp
+.Fn LIST_HEAD "HEADNAME" "TYPE"
+.Fn LIST_HEAD_INITIALIZER "head"
+.Fn LIST_ENTRY "TYPE"
 .Ft TYPE *
-.Fn SLIST_FIRST "SLIST_HEAD *head"
+.Fn LIST_FIRST "LIST_HEAD *head"
 .Ft TYPE *
-.Fn SLIST_NEXT "TYPE *elm" "SLIST_ENTRY NAME"
+.Fn LIST_NEXT "TYPE *elm" "LIST_ENTRY NAME"
+.Ft int
+.Fn LIST_EMPTY "LIST_HEAD *head"
+.Fn LIST_FOREACH "TYPE *var" "LIST_HEAD *head" "LIST_ENTRY NAME"
+.Fn LIST_FOREACH_SAFE "TYPE *var" "LIST_HEAD *head" "LIST_ENTRY NAME" "TYPE *tmp"
+.Fn LIST_INIT "LIST_HEAD *head"
+.Fn LIST_INSERT_AFTER "TYPE *listelm" "TYPE *elm" "LIST_ENTRY NAME"
+.Fn LIST_INSERT_BEFORE "TYPE *listelm" "TYPE *elm" "LIST_ENTRY NAME"
+.Fn LIST_INSERT_HEAD "LIST_HEAD *head" "TYPE *elm" "LIST_ENTRY NAME"
+.Fn LIST_REMOVE "TYPE *elm" "LIST_ENTRY NAME"
+.Fn LIST_REPLACE "TYPE *elm" "TYPE *new" "LIST_ENTRY NAME"
 .Pp
 .Fn SIMPLEQ_HEAD "HEADNAME" "TYPE"
 .Fn SIMPLEQ_HEAD_INITIALIZER "head"
 .Fn SIMPLEQ_ENTRY "TYPE"
-.Fn SIMPLEQ_INIT "SIMPLEQ_HEAD *head"
-.Fn SIMPLEQ_INSERT_HEAD "SIMPLEQ_HEAD *head" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
-.Fn SIMPLEQ_INSERT_TAIL "SIMPLEQ_HEAD *head" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
-.Fn SIMPLEQ_INSERT_AFTER "SIMPLEQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
-.Fn SIMPLEQ_REMOVE_HEAD "SIMPLEQ_HEAD *head" "SIMPLEQ_ENTRY NAME"
-.Fn SIMPLEQ_REMOVE "SIMPLEQ_HEAD *head" "TYPE *elm" "TYPE" "SIMPLEQ_ENTRY NAME"
-.Fn SIMPLEQ_FOREACH "TYPE *var" "SIMPLEQ_HEAD *head" "SIMPLEQ_ENTRY NAME"
-.Fn SIMPLEQ_FOREACH_SAFE "TYPE *var" "SIMPLEQ_HEAD *head" "SIMPLEQ_ENTRY NAME" "TYPE *tmp"
-.Ft int
-.Fn SIMPLEQ_EMPTY "SIMPLEQ_HEAD *head"
 .Ft TYPE *
 .Fn SIMPLEQ_FIRST "SIMPLEQ_HEAD *head"
+.Ft int
+.Fn SIMPLEQ_EMPTY "SIMPLEQ_HEAD *head"
 .Ft TYPE *
 .Fn SIMPLEQ_NEXT "TYPE *elm" "SIMPLEQ_ENTRY NAME"
 .Ft TYPE *
 .Fn SIMPLEQ_LAST "SIMPLEQ_HEAD *head" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_FOREACH "TYPE *var" "SIMPLEQ_HEAD *head" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_FOREACH_SAFE "TYPE *var" "SIMPLEQ_HEAD *head" "SIMPLEQ_ENTRY NAME" "TYPE *tmp"
+.Fn SIMPLEQ_INIT "SIMPLEQ_HEAD *head"
+.Fn SIMPLEQ_INSERT_HEAD "SIMPLEQ_HEAD *head" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_INSERT_TAIL "SIMPLEQ_HEAD *head" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_INSERT_AFTER "SIMPLEQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_REMOVE_HEAD "SIMPLEQ_HEAD *head" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_REMOVE_AFTER "SIMPLEQ_HEAD *head" "TYPE *elm" "SIMPLEQ_ENTRY NAME"
+.Fn SIMPLEQ_REMOVE "SIMPLEQ_HEAD *head" "TYPE *elm" "TYPE" "SIMPLEQ_ENTRY NAME"
 .Fn SIMPLEQ_CONCAT "SIMPLEQ_HEAD *head1" "SIMPLEQ_HEAD *head2"
 .Pp
-.Fn STAILQ_HEAD "HEADNAME" "TYPE"
-.Fn STAILQ_HEAD_INITIALIZER "head"
-.Fn STAILQ_ENTRY "TYPE"
-.Fn STAILQ_INIT "STAILQ_HEAD *head"
-.Fn STAILQ_INSERT_HEAD "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
-.Fn STAILQ_INSERT_TAIL "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
-.Fn STAILQ_INSERT_AFTER "STAILQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "STAILQ_ENTRY NAME"
-.Fn STAILQ_REMOVE_HEAD "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
-.Fn STAILQ_REMOVE "STAILQ_HEAD *head" "TYPE *elm" "TYPE" "STAILQ_ENTRY NAME"
-.Fn STAILQ_FOREACH "TYPE *var" "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
-.Fn STAILQ_FOREACH_SAFE "TYPE *var" "STAILQ_HEAD *head" "STAILQ_ENTRY NAME" "TYPE *tmp"
-.Ft int
-.Fn STAILQ_EMPTY "STAILQ_HEAD *head"
-.Ft TYPE *
-.Fn STAILQ_FIRST "STAILQ_HEAD *head"
+.Fn TAILQ_HEAD "HEADNAME" "TYPE"
+.Fn TAILQ_HEAD_INITIALIZER "head"
+.Fn TAILQ_ENTRY "TYPE"
 .Ft TYPE *
-.Fn STAILQ_NEXT "TYPE *elm" "STAILQ_ENTRY NAME"
+.Fn TAILQ_FIRST "TAILQ_HEAD *head"
 .Ft TYPE *
-.Fn STAILQ_LAST "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
-.Fn STAILQ_CONCAT "STAILQ_HEAD *head1" "STAILQ_HEAD *head2"
-.Pp
-.Fn LIST_HEAD "HEADNAME" "TYPE"
-.Fn LIST_HEAD_INITIALIZER "head"
-.Fn LIST_ENTRY "TYPE"
-.Fn LIST_INIT "LIST_HEAD *head"
-.Fn LIST_INSERT_AFTER "TYPE *listelm" "TYPE *elm" "LIST_ENTRY NAME"
-.Fn LIST_INSERT_BEFORE "TYPE *listelm" "TYPE *elm" "LIST_ENTRY NAME"
-.Fn LIST_INSERT_HEAD "LIST_HEAD *head" "TYPE *elm" "LIST_ENTRY NAME"
-.Fn LIST_REMOVE "TYPE *elm" "LIST_ENTRY NAME"
-.Fn LIST_FOREACH "TYPE *var" "LIST_HEAD *head" "LIST_ENTRY NAME"
-.Ft int
-.Fn LIST_EMPTY "LIST_HEAD *head"
+.Fn TAILQ_NEXT "TYPE *elm" "TAILQ_ENTRY NAME"
 .Ft TYPE *
-.Fn LIST_FIRST "LIST_HEAD *head"
+.Fn TAILQ_LAST "TAILQ_HEAD *head" "HEADNAME"
 .Ft TYPE *
-.Fn LIST_NEXT "TYPE *elm" "LIST_ENTRY NAME"
-.Pp
-.Fn TAILQ_HEAD "HEADNAME" "TYPE"
-.Fn TAILQ_HEAD_INITIALIZER "head"
-.Fn TAILQ_ENTRY "TYPE"
+.Fn TAILQ_PREV "TYPE *elm" "HEADNAME" "TAILQ_ENTRY NAME"
+.Ft int
+.Fn TAILQ_EMPTY "TAILQ_HEAD *head"
+.Fn TAILQ_FOREACH "TYPE *var" "TAILQ_HEAD *head" "TAILQ_ENTRY NAME"
+.Fn TAILQ_FOREACH_SAFE "TYPE *var" "TAILQ_HEAD *head" "TAILQ_ENTRY NAME" "TYPE *tmp"
+.Fn TAILQ_FOREACH_REVERSE "TYPE *var" "TAILQ_HEAD *head" "HEADNAME" "TAILQ_ENTRY NAME"
+.Fn TAILQ_FOREACH_REVERSE_SAFE "TYPE *var" "TAILQ_HEAD *head" "HEADNAME" "TAILQ_ENTRY NAME" "TYPE *tmp"
 .Fn TAILQ_INIT "TAILQ_HEAD *head"
 .Fn TAILQ_INSERT_HEAD "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
 .Fn TAILQ_INSERT_TAIL "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
 .Fn TAILQ_INSERT_AFTER "TAILQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "TAILQ_ENTRY NAME"
 .Fn TAILQ_INSERT_BEFORE "TYPE *listelm" "TYPE *elm" "TAILQ_ENTRY NAME"
 .Fn TAILQ_REMOVE "TAILQ_HEAD *head" "TYPE *elm" "TAILQ_ENTRY NAME"
-.Fn TAILQ_FOREACH "TYPE *var" "TAILQ_HEAD *head" "TAILQ_ENTRY NAME"
-.Fn TAILQ_FOREACH_SAFE "TYPE *var" "TAILQ_HEAD *head" "TAILQ_ENTRY NAME" "TYPE *tmp"
-.Fn TAILQ_FOREACH_REVERSE "TYPE *var" "TAILQ_HEAD *head" "HEADNAME" "TAILQ_ENTRY NAME"
-.Fn TAILQ_FOREACH_REVERSE_SAFE "TYPE *var" "TAILQ_HEAD *head" "HEADNAME" "TAILQ_ENTRY NAME" "TYPE *tmp"
-.Ft int
-.Fn TAILQ_EMPTY "TAILQ_HEAD *head"
-.Ft TYPE *
-.Fn TAILQ_FIRST "TAILQ_HEAD *head"
+.Fn TAILQ_REPLACE "TAILQ_HEAD *head" "TYPE *elm" "TYPE *new" "TAILQ_ENTRY NAME"
+.Fn TAILQ_CONCAT "TAILQ_HEAD *head1" "TAILQ_HEAD *head2" "TAILQ_ENTRY NAME"
+.Pp
+.Fn STAILQ_HEAD "HEADNAME" "TYPE"
+.Fn STAILQ_HEAD_INITIALIZER "head"
+.Fn STAILQ_ENTRY "TYPE"
 .Ft TYPE *
-.Fn TAILQ_NEXT "TYPE *elm" "TAILQ_ENTRY NAME"
+.Fn STAILQ_FIRST "STAILQ_HEAD *head"
+.Ft int
+.Fn STAILQ_EMPTY "STAILQ_HEAD *head"
 .Ft TYPE *
-.Fn TAILQ_LAST "TAILQ_HEAD *head" "HEADNAME"
+.Fn STAILQ_NEXT "TYPE *elm" "STAILQ_ENTRY NAME"
 .Ft TYPE *
-.Fn TAILQ_PREV "TYPE *elm" "HEADNAME" "TAILQ_ENTRY NAME"
-.Fn TAILQ_CONCAT "TAILQ_HEAD *head1" "TAILQ_HEAD *head2" "TAILQ_ENTRY NAME"
+.Fn STAILQ_LAST "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
+.Fn STAILQ_FOREACH "TYPE *var" "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
+.Fn STAILQ_FOREACH_SAFE "TYPE *var" "STAILQ_HEAD *head" "STAILQ_ENTRY NAME" "TYPE *tmp"
+.Fn STAILQ_INIT "STAILQ_HEAD *head"
+.Fn STAILQ_INSERT_HEAD "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
+.Fn STAILQ_INSERT_TAIL "STAILQ_HEAD *head" "TYPE *elm" "STAILQ_ENTRY NAME"
+.Fn STAILQ_INSERT_AFTER "STAILQ_HEAD *head" "TYPE *listelm" "TYPE *elm" "STAILQ_ENTRY NAME"
+.Fn STAILQ_REMOVE_HEAD "STAILQ_HEAD *head" "STAILQ_ENTRY NAME"
+.Fn STAILQ_REMOVE "STAILQ_HEAD *head" "TYPE *elm" "TYPE" "STAILQ_ENTRY NAME"
+.Fn STAILQ_CONCAT "STAILQ_HEAD *head1" "STAILQ_HEAD *head2"
 .Sh DESCRIPTION
-These macros define and operate on four types of data structures:
-singly-linked lists, simple queues, lists, and tail queues
-.\" and circular queues.
-All four structures support the following functionality:
+These macros define and operate on five types of data structures:
+singly-linked lists, simple queues, lists, tail queues, and signly-linked
+tail queues.
+All five structures support the following functionality:
 .Bl -enum -compact -offset indent
 .It
 Insertion of a new entry at the head of the list.
@@ -341,11 +350,12 @@ In the macro definitions,
 .Fa TYPE
 is the name of a user defined structure,
 that must contain a field of type
+.Li SLIST_ENTRY ,
 .Li LIST_ENTRY ,
 .Li SIMPLEQ_ENTRY ,
-.Li SLIST_ENTRY ,
-or
 .Li TAILQ_ENTRY ,
+or
+.Li STAILQ_ENTRY ,
 named
 .Fa NAME .
 The argument
@@ -371,23 +381,25 @@ l | c | c | c | c | c
 l | c | c | c | c | c
 l | c | c | c | c | c
 l | c | c | c | c | c.
-:SLIST:LIST:SIMPLEQ:STAILQ:TAILQ
+:SLIST:LIST:SIMPLEQ:TAILQ:STAILQ
 _
-_EMPTY:+:+:+:+:+
 _FIRST:+:+:+:+:+
+_EMPTY:+:+:+:+:+
+_NEXT:+:+:+:+:+
+_PREV:-:-:-:+:-
+_LAST:-:-:+:+:+
 _FOREACH:+:+:+:+:+
-_FOREACH_REVERSE:-:-:-:-:+
-_INSERT_AFTER:+:+:+:+:+
-_INSERT_BEFORE:-:+:-:-:+
+_FOREACH_SAFE:+:+:+:+:+
+_FOREACH_REVERSE:-:-:-:+:-
+_FOREACH_REVERSE_SAFE:-:-:-:+:-
 _INSERT_HEAD:+:+:+:+:+
+_INSERT_AFTER:+:+:+:+:+
+_INSERT_BEFORE:-:+:-:+:-
 _INSERT_TAIL:-:-:+:+:+
-_LAST:-:-:-:+:+
-_LOOP_NEXT:-:-:-:-:-
-_LOOP_PREV:-:-:-:-:-
-_NEXT:+:+:+:+:+
-_PREV:-:-:-:-:+
 _REMOVE:+:+:+:+:+
-_REMOVE_HEAD:+:-:+:+:-
+_REMOVE_HEAD:+:-:+:-:+
+_REMOVE_AFTER:-:-:+:-:+
+_REPLACE:-:+:-:+:-
 _CONCAT:-:-:+:+:+
 .TE
 .Sh SINGLY-LINKED LISTS
@@ -429,10 +441,6 @@ evaluates to an initializer for the list
 .Fa head .
 .Pp
 The macro
-.Nm SLIST_EMPTY
-evaluates to true if there are no elements in the list.
-.Pp
-The macro
 .Nm SLIST_ENTRY
 declares a structure that connects the elements in
 the list.
@@ -442,6 +450,15 @@ The macro
 returns the first element in the list or NULL if the list is empty.
 .Pp
 The macro
+.Pp
+The macro
+.Nm SLIST_EMPTY
+evaluates to true if there are no elements in the list.
+.Pp
+The macro
+.Nm SLIST_NEXT
+returns the next element in the list.
+.Pp
 .Nm SLIST_FOREACH
 traverses the list referenced by
 .Fa head
@@ -449,7 +466,7 @@ in the forward direction, assigning each
 turn to
 .Fa var .
 .Pp
-The SAFE versions uses
+The SAFE version uses
 .Fa tmp
 to hold the next element, so
 .Fa var
@@ -474,10 +491,6 @@ after the element
 .Fa listelm .
 .Pp
 The macro
-.Nm SLIST_NEXT
-returns the next element in the list.
-.Pp
-The macro
 .Nm SLIST_REMOVE
 removes the element
 .Fa elm
@@ -491,6 +504,14 @@ elements being removed from the head of 
 this macro instead of the generic
 .Nm SLIST_REMOVE
 macro.
+.Pp
+The macros
+.Nm SLIST_REMOVE_AFTER
+removes the element after the one specified.
+For optimum efficiency,
+elements being removed after a specified one should explicitly use
+this macro instead of the generic
+.Nm SLIST_REMOVE
 .Sh SINGLY-LINKED LIST EXAMPLE
 .Bd -literal
 SLIST_HEAD(slisthead, entry) head =
@@ -526,30 +547,29 @@ while (!SLIST_EMPTY(\*[Am]head)) {      
         free(n1);
 }
 .Ed
-.Sh SIMPLE QUEUES
-A simple queue is headed by a structure defined by the
-.Nm SIMPLEQ_HEAD
+.Sh LISTS
+A list is headed by a structure defined by the
+.Nm LIST_HEAD
 macro.
-This structure contains a pair of pointers,
-one to the first element in the simple queue and the other to
-the last element in the simple queue.
-The elements are singly linked for minimum space and pointer manipulation
-overhead at the expense of O(n) removal for arbitrary elements.
-New elements can be added to the queue after an existing element,
-at the head of the queue, or at the end of the queue.
+This structure contains a single pointer to the first element
+on the list.
+The elements are doubly linked so that an arbitrary element can be
+removed without traversing the list.
+New elements can be added to the list after an existing element,
+before an existing element, or at the head of the list.
 A
-.Fa SIMPLEQ_HEAD
+.Fa LIST_HEAD
 structure is declared as follows:
 .Bd -literal -offset indent
-SIMPLEQ_HEAD(HEADNAME, TYPE) head;
+LIST_HEAD(HEADNAME, TYPE) head;
 .Ed
 .Pp
 where
-.Li HEADNAME
+.Fa HEADNAME
 is the name of the structure to be defined, and
-.Li TYPE
-is the type of the elements to be linked into the simple queue.
-A pointer to the head of the simple queue can later be declared as:
+.Fa TYPE
+is the type of the elements to be linked into the list.
+A pointer to the head of the list can later be declared as:
 .Bd -literal -offset indent
 struct HEADNAME *headp;
 .Ed
@@ -561,178 +581,139 @@ and
 are user selectable.)
 .Pp
 The macro
-.Nm SIMPLEQ_ENTRY
+.Nm LIST_ENTRY
 declares a structure that connects the elements in
-the simple queue.
+the list.
 .Pp
 The macro
-.Nm SIMPLEQ_HEAD_INITIALIZER
-provides a value which can be used to initialize a simple queue head at
-compile time, and is used at the point that the simple queue head
+.Nm LIST_HEAD_INITIALIZER
+provides a value which can be used to initialize a list head at
+compile time, and is used at the point that the list head
 variable is declared, like:
 .Bd -literal -offset indent
-struct HEADNAME head = SIMPLEQ_HEAD_INITIALIZER(head);
+struct HEADNAME head = LIST_HEAD_INITIALIZER(head);
 .Ed
 .Pp
 The macro
-.Nm SIMPLEQ_INIT
-initializes the simple queue referenced by
+.Nm LIST_FIRST
+returns the first element of the list
 .Fa head .
 .Pp
 The macro
-.Nm SIMPLEQ_INSERT_HEAD
-inserts the new element
-.Fa elm
-at the head of the simple queue.
-.Pp
-The macro
-.Nm SIMPLEQ_INSERT_TAIL
-inserts the new element
-.Fa elm
-at the end of the simple queue.
-.Pp
-The macro
-.Nm SIMPLEQ_INSERT_AFTER
-inserts the new element
-.Fa elm
-after the element
-.Fa listelm .
-.Pp
-The macro
-.Nm SIMPLEQ_REMOVE
-removes
-.Fa elm
-from the simple queue.
-.Pp
-The macro
-.Nm SIMPLEQ_REMOVE_HEAD
-removes the first element from the head of the simple queue.
-For optimum efficiency,
-elements being removed from the head of the queue should explicitly use
-this macro instead of the generic
-.Nm SIMPLQ_REMOVE
-macro.
-.Pp
-The macro
-.Nm SIMPLEQ_EMPTY
-return true if the simple queue
+.Nm LIST_EMPTY
+return true if the list
 .Fa head
 has no elements.
 .Pp
 The macro
-.Nm SIMPLEQ_FIRST
-returns the first element of the simple queue
-.Fa head .
+.Nm LIST_NEXT
+returns the element after the element
+.Fa elm .
 .Pp
-The macros
-.Nm SIMPLEQ_FOREACH
-and
-.Nm SIMPLEQ_FOREACH_SAFE
-traverse the tail queue referenced by
+The macro
+.Nm LIST_FOREACH
+traverses the list referenced by
 .Fa head
-in the forward direction, assigning each element
-in turn to
+in the forward direction, assigning each element in turn to
 .Fa var .
 .Pp
-The SAFE versions uses
+The SAFE version uses
 .Fa tmp
 to hold the next element, so
 .Fa var
 may be freed or removed from the list.
 .Pp
 The macro
-.Nm SIMPLEQ_NEXT
-returns the element after the element
-.Fa elm .
+.Nm LIST_INIT
+initializes the list referenced by
+.Fa head .
 .Pp
 The macro
-.Nm SIMPLEQ_LAST
-returns the last item on the tail queue.
-If the tail queue is empty the return value is
-.Dv NULL .
+.Nm LIST_INSERT_AFTER
+inserts the new element
+.Fa elm
+after the element
+.Fa listelm .
 .Pp
 The macro
-.Nm SIMPLEQ_CONCAT
-concatenates the tail queue headed by
-.Fa head2
-onto the end of the one headed by
-.Fa head1
-removing all entries from the former.
+.Nm LIST_INSERT_BEFORE
+inserts the new element
+.Fa elm
+before the element
+.Fa listelm .
 .Pp
-The macros prefixed with
-.Dq Nm STAILQ_
-.Nm ( STAILQ_HEAD ,
-.Nm STAILQ_HEAD_INITIALIZER ,
-.Nm STAILQ_ENTRY ,
-.Nm STAILQ_INIT ,
-.Nm STAILQ_INSERT_HEAD ,
-.Nm STAILQ_INSERT_TAIL ,
-.Nm STAILQ_INSERT_AFTER ,
-.Nm STAILQ_REMOVE_HEAD ,
-.Nm STAILQ_REMOVE ,
-.Nm STAILQ_FOREACH ,
-.Nm STAILQ_FOREACH_SAFE ,
-.Nm STAILQ_EMPTY ,
-.Nm STAILQ_FIRST ,
-.Nm STAILQ_NEXT ,
-.Nm STAILQ_LAST ,
-and
-.Nm STAILQ_CONCAT )
-are functionally identical to these simple queue functions,
-and are provided for compatibility with
-.Fx .
-.Sh SIMPLE QUEUE EXAMPLE
+The macro
+.Nm LIST_INSERT_HEAD
+inserts the new element
+.Fa elm
+at the head of the list.
+.Pp
+The macro
+.Nm LIST_REMOVE
+removes the element
+.Fa elm
+from the list.
+.Pp
+The macro
+.Nm LIST_REPLACE
+replaces the element
+.Fa elm
+with
+.Fa new
+in the list.
+.Sh LIST EXAMPLE
 .Bd -literal
-SIMPLEQ_HEAD(simplehead, entry) head;
-struct simplehead *headp;		/* Simple queue head. */
+LIST_HEAD(listhead, entry) head;
+struct listhead *headp;		/* List head. */
 struct entry {
 	...
-	SIMPLEQ_ENTRY(entry) entries;	/* Simple queue. */
+	LIST_ENTRY(entry) entries;	/* List. */
 	...
 } *n1, *n2, *np;
 
-SIMPLEQ_INIT(\*[Am]head);			/* Initialize the queue. */
+LIST_INIT(\*[Am]head);			/* Initialize the list. */
 
 n1 = malloc(sizeof(struct entry));	/* Insert at the head. */
-SIMPLEQ_INSERT_HEAD(\*[Am]head, n1, entries);
-
-n1 = malloc(sizeof(struct entry));	/* Insert at the tail. */
-SIMPLEQ_INSERT_TAIL(\*[Am]head, n1, entries);
+LIST_INSERT_HEAD(\*[Am]head, n1, entries);
 
 n2 = malloc(sizeof(struct entry));	/* Insert after. */
-SIMPLEQ_INSERT_AFTER(\*[Am]head, n1, n2, entries);
+LIST_INSERT_AFTER(n1, n2, entries);
+
+n2 = malloc(sizeof(struct entry));	/* Insert before. */
+LIST_INSERT_BEFORE(n1, n2, entries);
 					/* Forward traversal. */
-SIMPLEQ_FOREACH(np, \*[Am]head, entries)
+LIST_FOREACH(np, \*[Am]head, entries)
 	np-\*[Gt] ...
 					/* Delete. */
-while (SIMPLEQ_FIRST(\*[Am]head) != NULL)
-	SIMPLEQ_REMOVE_HEAD(\*[Am]head, entries);
-if (SIMPLEQ_EMPTY(\*[Am]head))		/* Test for emptiness. */
+while (LIST_FIRST(\*[Am]head) != NULL)
+	LIST_REMOVE(LIST_FIRST(\*[Am]head), entries);
+if (LIST_EMPTY(\*[Am]head))			/* Test for emptiness. */
 	printf("nothing to do\\n");
 .Ed
-.Sh LISTS
-A list is headed by a structure defined by the
-.Nm LIST_HEAD
+.Sh SIMPLE QUEUES
+A simple queue is headed by a structure defined by the
+.Nm SIMPLEQ_HEAD
 macro.
-This structure contains a single pointer to the first element
-on the list.
-The elements are doubly linked so that an arbitrary element can be
-removed without traversing the list.
-New elements can be added to the list after an existing element,
-before an existing element, or at the head of the list.
+This structure contains a pair of pointers,
+one to the first element in the simple queue and the other to
+the last element in the simple queue.
+The elements are singly linked for minimum space and pointer manipulation
+overhead at the expense of O(n) removal for arbitrary elements.
+New elements can be added to the queue after an existing element,
+at the head of the queue, or at the end of the queue.
 A
-.Fa LIST_HEAD
+.Fa SIMPLEQ_HEAD
 structure is declared as follows:
 .Bd -literal -offset indent
-LIST_HEAD(HEADNAME, TYPE) head;
+SIMPLEQ_HEAD(HEADNAME, TYPE) head;
 .Ed
 .Pp
 where
-.Fa HEADNAME
+.Li HEADNAME
 is the name of the structure to be defined, and
-.Fa TYPE
-is the type of the elements to be linked into the list.
-A pointer to the head of the list can later be declared as:
+.Li TYPE
+is the type of the elements to be linked into the simple queue.
+A pointer to the head of the simple queue can later be declared as:
 .Bd -literal -offset indent
 struct HEADNAME *headp;
 .Ed
@@ -744,99 +725,138 @@ and
 are user selectable.)
 .Pp
 The macro
-.Nm LIST_ENTRY
+.Nm SIMPLEQ_ENTRY
 declares a structure that connects the elements in
-the list.
+the simple queue.
 .Pp
 The macro
-.Nm LIST_HEAD_INITIALIZER
-provides a value which can be used to initialize a list head at
-compile time, and is used at the point that the list head
+.Nm SIMPLEQ_HEAD_INITIALIZER
+provides a value which can be used to initialize a simple queue head at
+compile time, and is used at the point that the simple queue head
 variable is declared, like:
 .Bd -literal -offset indent
-struct HEADNAME head = LIST_HEAD_INITIALIZER(head);
+struct HEADNAME head = SIMPLEQ_HEAD_INITIALIZER(head);
 .Ed
 .Pp
 The macro
-.Nm LIST_INIT
-initializes the list referenced by
+.Nm SIMPLEQ_FIRST
+returns the first element of the simple queue
 .Fa head .
 .Pp
 The macro
-.Nm LIST_INSERT_HEAD
+.Nm SIMPLEQ_EMPTY
+return true if the simple queue
+.Fa head
+has no elements.
+.Pp
+The macro
+.Nm SIMPLEQ_NEXT
+returns the element after the element
+.Fa elm .
+.Pp
+The macro
+.Nm SIMPLEQ_LAST
+returns the last item on the tail queue.
+If the tail queue is empty the return value is
+.Dv NULL .
+.Pp
+The macro
+.Nm SIMPLEQ_FOREACH
+traverses the tail queue referenced by
+.Fa head
+in the forward direction, assigning each element
+in turn to
+.Fa var .
+.Pp
+The SAFE version uses
+.Fa tmp
+to hold the next element, so
+.Fa var
+may be freed or removed from the list.
+.Pp
+The macro
+.Nm SIMPLEQ_INIT
+initializes the simple queue referenced by
+.Fa head .
+.Pp
+The macro
+.Nm SIMPLEQ_INSERT_HEAD
 inserts the new element
 .Fa elm
-at the head of the list.
+at the head of the simple queue.
 .Pp
 The macro
-.Nm LIST_INSERT_AFTER
+.Nm SIMPLEQ_INSERT_TAIL
 inserts the new element
 .Fa elm
-after the element
-.Fa listelm .
+at the end of the simple queue.
 .Pp
 The macro
-.Nm LIST_INSERT_BEFORE
+.Nm SIMPLEQ_INSERT_AFTER
 inserts the new element
 .Fa elm
-before the element
+after the element
 .Fa listelm .
 .Pp
 The macro
-.Nm LIST_REMOVE
-removes the element
-.Fa elm
-from the list.
+.Nm SIMPLEQ_REMOVE_HEAD
+removes the first element from the head of the simple queue.
+For optimum efficiency,
+elements being removed from the head of the queue should explicitly use
+this macro instead of the generic
+.Nm SIMPLQ_REMOVE
+macro.
 .Pp
 The macro
-.Nm LIST_EMPTY
-return true if the list
-.Fa head
-has no elements.
+.Nm SIMPLEQ_REMOVE_AFTER
+removes the element after the one specified from the simple queue.
+For optimum efficiency,
+elements being removed after specified elements should explicitly use
+this macro instead of the generic
+.Nm SIMPLQ_REMOVE
+macro.
 .Pp
 The macro
-.Nm LIST_FIRST
-returns the first element of the list
-.Fa head .
+.Nm SIMPLEQ_REMOVE
+removes
+.Fa elm
+from the simple queue.
 .Pp
 The macro
-.Nm LIST_FOREACH
-traverses the list referenced by
-.Fa head
-in the forward direction, assigning each element in turn to
-.Fa var .
+.Nm SIMPLEQ_CONCAT
+concatenates the tail queue headed by
+.Fa head2
+onto the end of the one headed by
+.Fa head1
+removing all entries from the former.
 .Pp
-The macro
-.Nm LIST_NEXT
-returns the element after the element
-.Fa elm .
-.Sh LIST EXAMPLE
+.Sh SIMPLE QUEUE EXAMPLE
 .Bd -literal
-LIST_HEAD(listhead, entry) head;
-struct listhead *headp;		/* List head. */
+SIMPLEQ_HEAD(simplehead, entry) head;
+struct simplehead *headp;		/* Simple queue head. */
 struct entry {
 	...
-	LIST_ENTRY(entry) entries;	/* List. */
+	SIMPLEQ_ENTRY(entry) entries;	/* Simple queue. */
 	...
 } *n1, *n2, *np;
 
-LIST_INIT(\*[Am]head);			/* Initialize the list. */
+SIMPLEQ_INIT(\*[Am]head);			/* Initialize the queue. */
 
 n1 = malloc(sizeof(struct entry));	/* Insert at the head. */
-LIST_INSERT_HEAD(\*[Am]head, n1, entries);
+SIMPLEQ_INSERT_HEAD(\*[Am]head, n1, entries);
 
-n2 = malloc(sizeof(struct entry));	/* Insert after. */
-LIST_INSERT_AFTER(n1, n2, entries);
+n1 = malloc(sizeof(struct entry));	/* Insert at the tail. */
+SIMPLEQ_INSERT_TAIL(\*[Am]head, n1, entries);
 
-n2 = malloc(sizeof(struct entry));	/* Insert before. */
-LIST_INSERT_BEFORE(n1, n2, entries);
+n2 = malloc(sizeof(struct entry));	/* Insert after. */
+SIMPLEQ_INSERT_AFTER(\*[Am]head, n1, n2, entries);
 					/* Forward traversal. */
-LIST_FOREACH(np, \*[Am]head, entries)
+SIMPLEQ_FOREACH(np, \*[Am]head, entries)
 	np-\*[Gt] ...
 					/* Delete. */
-while (LIST_FIRST(\*[Am]head) != NULL)
-	LIST_REMOVE(LIST_FIRST(\*[Am]head), entries);
-if (LIST_EMPTY(\*[Am]head))			/* Test for emptiness. */
+while (SIMPLEQ_FIRST(\*[Am]head) != NULL)
+	SIMPLEQ_REMOVE_HEAD(\*[Am]head, entries);
+if (SIMPLEQ_EMPTY(\*[Am]head))		/* Test for emptiness. */
 	printf("nothing to do\\n");
 .Ed
 .Sh TAIL QUEUES
@@ -889,6 +909,51 @@ struct HEADNAME head = TAILQ_HEAD_INITIA
 .Ed
 .Pp
 The macro
+.Nm TAILQ_FIRST
+returns the first element of the tail queue
+.Fa head .
+.Pp
+The macro
+.Nm TAILQ_NEXT
+returns the element after the element
+.Fa elm .
+.Pp
+The macro
+.Nm TAILQ_LAST
+returns the last item on the tail queue.
+If the tail queue is empty the return value is
+.Dv NULL .
+.Pp
+The macro
+.Nm TAILQ_PREV
+returns the previous item on the tail queue, from the one specified.
+If the tail queue is empty the return value is
+.Dv NULL .
+.Pp
+The macro
+.Nm TAILQ_EMPTY
+return true if the tail queue
+.Fa head
+has no elements.
+.Pp
+The macros
+.Nm TAILQ_FOREACH ,
+.Nm TAILQ_FOREACH_REVERSE ,
+.Nm TAILQ_FOREACH_SAFE ,
+and
+.Nm TAILQ_FOREACH_REVERSE_SAFE
+traverse the tail queue referenced by
+.Fa head
+in the forward or reverse direction direction, assigning each element in turn to
+.Fa var .
+.Pp
+The SAFE versions use
+.Fa tmp
+to hold the next element, so
+.Fa var
+may be freed or removed from the list.
+.Pp
+The macro
 .Nm TAILQ_INIT
 initializes the tail queue referenced by
 .Fa head .
@@ -926,37 +991,12 @@ removes the element
 from the tail queue.
 .Pp
 The macro
-.Nm TAILQ_EMPTY
-return true if the tail queue
-.Fa head
-has no elements.
-.Pp
-The macro
-.Nm TAILQ_FIRST
-returns the first element of the tail queue
-.Fa head .
-.Pp
-The macros
-.Nm TAILQ_FOREACH ,
-.Nm TAILQ_FOREACH_REVERSE ,
-.Nm TAILQ_FOREACH_SAFE ,
-and
-.Nm TAILQ_FOREACH_REVERSE_SAFE
-traverse the tail queue referenced by
-.Fa head
-in the forward or reverse direction direction, assigning each element in turn to
-.Fa var .
-.Pp
-The SAFE versions uses
-.Fa tmp
-to hold the next element, so
-.Fa var
-may be freed or removed from the list.
-.Pp
-The macro
-.Nm TAILQ_NEXT
-returns the element after the element
-.Fa elm .
+.Nm TAILQ_REPLACE
+replace the element
+.Fa elm
+with the
+.Fa new
+one specified in the tail queue.
 .Pp
 The macro
 .Nm TAILQ_CONCAT
@@ -1000,6 +1040,29 @@ while (TAILQ_FIRST(\*[Am]head) != NULL)
 if (TAILQ_EMPTY(\*[Am]head))			/* Test for emptiness. */
 	printf("nothing to do\\n");
 .Ed
+.Sh SINGLY LINKED TAIL QUEUES
+The macros prefixed with
+.Dq Nm STAILQ_
+.Nm ( STAILQ_HEAD ,
+.Nm STAILQ_HEAD_INITIALIZER ,
+.Nm STAILQ_ENTRY ,
+.Nm STAILQ_FOREACH ,
+.Nm STAILQ_FOREACH_SAFE ,
+.Nm STAILQ_FIRST ,
+.Nm STAILQ_EMPTY ,
+.Nm STAILQ_NEXT ,
+.Nm STAILQ_LAST ,
+.Nm STAILQ_INIT ,
+.Nm STAILQ_INSERT_HEAD ,
+.Nm STAILQ_INSERT_TAIL ,
+.Nm STAILQ_INSERT_AFTER ,
+.Nm STAILQ_REMOVE_HEAD ,
+.Nm STAILQ_REMOVE ,
+and
+.Nm STAILQ_CONCAT )
+are functionally identical to these simple queue functions,
+and are provided for compatibility with
+.Fx .
 .Sh NOTES
 Some of these macros or functions perform no error checking,
 and invalid usage leads to undefined behaviour.

Reply via email to