int movelines ( char *linespec , double_list *p_head, double_list *p_current ) { double_list startnode, endnode, tmpnode ; int startnumber, endnumber, rc, currentnumber, tmp; rc = parse_linespec( linespec, *p_head, *p_current, &startnode, &endnode ) ; if( rc ) return rc ; startnumber = double_node_number( startnode ) ; endnumber = double_node_number( endnode ) ; currentnumber = double_node_number( *p_current ) ; if( startnumber > endnumber ) { tmp = startnumber ; startnumber = endnumber ; endnumber = tmp ; tmpnode = startnode ; startnode = endnode ; endnode = tmpnode ; } if(( currentnumber >= startnumber ) && ( currentnumber <= endnumber )) return E_LINES; cut_list( p_head, &startnode, &endnode ) ; paste_list( &PREV( *p_current ), &startnode ) ; return 0; }
int deletelines ( char *linespec, double_list *p_head, double_list *p_current ) { double_list startnode, endnode, tmplist ; double_list new_current ; int startnumber, endnumber ; int rc = parse_linespec( linespec, *p_head, *p_current, &startnode, &endnode ) ; if( rc ) return rc ; startnumber = double_node_number( startnode ) ; endnumber = double_node_number( endnode ) ; if( startnumber > endnumber ) { tmplist = startnode ; startnode = endnode ; endnode = tmplist ; } new_current = nth_relative_double_node( endnode, 1 ) ; if( new_current == NULL ) new_current = nth_relative_double_node( startnode, -1 ) ; cut_list(p_head, &startnode , &endnode ) ; *p_current = new_current ; destroy_double_list ( &startnode, free ) ; return 0 ; }
t_env *find_and_cut(t_env *env, char *name) { while (env) { if (ft_strcmp(env->name, name) == 0) { env = cut_list(env); } if (env->next) env = env->next; else break ; } return (get_start(env)); }
void event_clear_list(event_list_state_t *list) { if (list != NULL && list->base != NULL) cut_list(list->base); }