Listing 1. Doubly Linked List Template

/*
 * Template for using the doubly linked list.
 * The dll_dbg.h header is not actually used in
 * the code below; however, this could be one way
 * that a debugging version could be implemented.
 * For a more complete example of how to use the
 * doubly linked list refer to the documentation
 * and source code in the distribution package.
 */
#include <stdio.h>
#include <stdlib.h>
#ifdef DEBUG
#  include <dll_dbg.h>  /* For debug only */
#else
#  include <linklist.h> /* For production */
#endif
typedef struct name_addr   /* Sample data
                            * structure */
   {
   char name[30];
   char street[40];
   char city[22];
   char state[3];
   char zip[11];
   } NameAddr;
void main(void)
   {
   List *NAList = NULL;
   DLL_Return DLL_Exit;
   if(DLL_CreateList(&NAList) == NULL)
      {
      fputs("Fatal Memory error", stderr);
      exit(EXIT_FAILURE);
      }
   if((DLL_Exit = DLL_InitializeList(NAList,
   sizeof(NameAddr)))
    != DLL_NORMAL)
      {
      (void)(DLL_Exit == DLL_ZERO_INFO
       && fputs(
"Size of address record is zero.\n\n", stderr));
      (void)(DLL_Exit == DLL_NULL_LIST
       && fputs(
"NAList points to a NULL address.\n\n", stderr));
      exit(EXIT_FAILURE);
      }
   DoYourThingHere(NAList);
   DLL_DestroyList(&NAList);
   exit(EXIT_SUCCESS);
   }