Конкретно — что не понятно?
все не понятно, очень сложно используются макросы ...
я вот щас про классы и объекты начал читать, по идее с позиций ООП если дописать:
struct head{
dl_list *begin;
dl_list *end;
}
и начать передавать ссылку на нее в каждую фукнцию, работающую со списком, то хоть это и муторно, но каждая функция сможет позаботится, о том, чтобы после ее работы указатели на начало и конец списока оставались актуальны
естественно придется не сохранять итераторы между вызовами функций, но это уже для 1 поточной среды не критично