void insert_list (list_ref list, list_item item) { listnode_ref newnode = malloc (sizeof (struct listnode)); assert (is_list (list)); newnode->tag = listnode_tag; newnode->item = item; if (list->curr == NULL){ list->curr = newnode; }else{ if (list->curr->next == list->last){ list->last = newnode; }else{ newnode->next = list->curr->next; newnode->prev = list->curr; list->curr->next = newnode; if (newnode->next != NULL) newnode->next->prev = newnode; list->curr = newnode; } list->last = newnode; } }