| /* insque(3C) routines | 
 |    This file is in the public domain.  */ | 
 |  | 
 | /* | 
 |  | 
 | @deftypefn Supplemental void insque (struct qelem *@var{elem}, @ | 
 |   struct qelem *@var{pred}) | 
 | @deftypefnx Supplemental void remque (struct qelem *@var{elem}) | 
 |  | 
 | Routines to manipulate queues built from doubly linked lists.  The | 
 | @code{insque} routine inserts @var{elem} in the queue immediately | 
 | after @var{pred}.  The @code{remque} routine removes @var{elem} from | 
 | its containing queue.  These routines expect to be passed pointers to | 
 | structures which have as their first members a forward pointer and a | 
 | back pointer, like this prototype (although no prototype is provided): | 
 |  | 
 | @example | 
 | struct qelem @{ | 
 |   struct qelem *q_forw; | 
 |   struct qelem *q_back; | 
 |   char q_data[]; | 
 | @}; | 
 | @end example | 
 |  | 
 | @end deftypefn | 
 |  | 
 | */ | 
 |  | 
 |  | 
 | struct qelem { | 
 |   struct qelem *q_forw; | 
 |   struct qelem *q_back; | 
 | }; | 
 |  | 
 |  | 
 | void | 
 | insque (struct qelem *elem, struct qelem *pred) | 
 | { | 
 |   elem -> q_forw = pred -> q_forw; | 
 |   pred -> q_forw -> q_back = elem; | 
 |   elem -> q_back = pred; | 
 |   pred -> q_forw = elem; | 
 | } | 
 |  | 
 |  | 
 | void | 
 | remque (struct qelem *elem) | 
 | { | 
 |   elem -> q_forw -> q_back = elem -> q_back; | 
 |   elem -> q_back -> q_forw = elem -> q_forw; | 
 | } |