/********************************************************************** 函数 : creat_boy_link() 功能 : 创建学生的链表 传入参数: 无 传出参数: 无 返回值 : 无 **********************************************************************/ void creat_link() { struct student *stu1 = init_student("liming", 18, MALE); insert_link(stu1); struct student *stu2 = init_student("wangning", 19, MALE); insert_link(stu2); struct student *stu3 = init_student("zhaoming", 17, MALE); insert_link(stu3); struct student *stu4 = init_student("zhangming", 24, MALE); insert_link(stu4); struct student *stu5 = init_student("luoliming", 16, MALE); insert_link(stu5); struct student *stu6 = init_student("lili", 20, FEMALE); insert_link(stu6); struct student *stu7 = init_student("wangli", 21, FEMALE); insert_link(stu7); struct student *stu8 = init_student("dingli", 22, FEMALE); insert_link(stu8); struct student *stu9 = init_student("zhaoli", 23, FEMALE); insert_link(stu9); struct student *stu10 = init_student("zhouli", 15, FEMALE); insert_link(stu10); }
/* Same as list_insert_sorted but uses supplied link instead of creating a * new one. */ List *list_insert_link_sorted (List *head, CompareFunc func, List *new_link) { List *link; assert (func); assert (new_link); if (!head) return insert_link (NULL, NULL, new_link); if (func (head->data, new_link->data) >= 0) return insert_link (NULL, head, new_link); for (link = head; link->next; link = link->next) { if (func (link->next->data, new_link->data) >= 0) { insert_link (link, link->next, new_link); return head; } } /* insert as last element */ insert_link (link, NULL, new_link); return head; }
static void create_intro(GtkTextView *view) { GtkTextTag *tag; GtkTextTag *tag1; GtkTextIter iter; const char title[] = N_("Openfetion "OPENFETION_VERSION"\n\n"); const char intro[] = N_("OpenFetion is a Fetion client for linux based on GTK+2.0, " "implementing Fetion Protocol Version 4.\n" "It supports most features of Fetion. \n" "What's more, it's lightweight and efficient with intuitive interface.\n\n" "Project homepage: "); gtk_text_view_set_editable(view,FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR); g_signal_connect (view, "motion-notify-event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect(view, "event-after", G_CALLBACK (event_after), NULL); GtkTextBuffer *buffer = gtk_text_view_get_buffer(view); tag = gtk_text_buffer_create_tag (buffer, NULL, "size", 15 * PANGO_SCALE, "justification", GTK_JUSTIFY_CENTER, "weight", PANGO_WEIGHT_BOLD, NULL); tag1 = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 25, "right-margin", 25, NULL); gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_insert_with_tags(buffer, &iter, title, -1, tag, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, _(intro), -1, tag1, NULL); insert_link(buffer, &iter, "http://code.google.com/p/ofetion/"); gtk_text_buffer_insert_with_tags(buffer, &iter, _("\nBug report: "), -1, tag1, NULL); insert_link(buffer, &iter, "http://code.google.com/p/ofetion/issues/"); gtk_text_buffer_insert_with_tags(buffer, &iter, _("\n\nPage on author's blog: "), -1, tag1, NULL); insert_link(buffer, &iter, "http://basiccoder.com/openfetion"); }
//- put new item in list at index 0 and make it current void DLList::insert_link_first(void* new_item) { // set index to -1 ... index will be set to 0 in insert_link index = -1; insert_link(new_item); }
static void create_gpl(GtkTextView *view) { GtkTextTag *tag; GtkTextIter iter; char *buf1 = N_("This program is free software; you can redistribute it and/or modify " "it under the terms of the GNU General Public License as published by " "the Free Software Foundation; either version 2 of the License, or " "(at your option) any later version.\n\n"); char *buf2 = N_("This program is distributed in the hope that it will be useful, " "but WITHOUT ANY WARRANTY; without even the implied warranty of " "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " "GNU General Public License for more details.\n\n"); char *buf3 = N_("You should have received a copy of the GNU General Public License " "along with this program; if not, see:"); gtk_text_view_set_editable(view, FALSE); gtk_text_view_set_wrap_mode(view, GTK_WRAP_WORD); g_signal_connect (view, "motion-notify-event", G_CALLBACK (motion_notify_event), NULL); GtkTextBuffer *buffer = gtk_text_view_get_buffer(view); tag = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 5, "right-margin", 5, NULL); gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_insert(buffer, &iter, "\n\n", 2); gtk_text_buffer_insert_with_tags(buffer, &iter, _(buf1), -1, tag, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, _(buf2), -1, tag, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, _(buf3), -1, tag, NULL); insert_link(buffer, &iter, "http://www.gnu.org/licenses/gpl-2.0.txt", NULL); }
static void create_author(GtkTextView *view) { GtkTextTag *tag; GtkTextTag *tag1; GtkTextIter iter; const char title[] = "Levin\n\n"; const char *intro = _("Graduate student at Beijing University of Post & Telecommunication." "Love Linux,Love OpenSource.Started this project in order to help " "linux users including myself to get a better way to use fetion.\n\n" "Blog:"); gtk_text_view_set_editable(view,FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR); g_signal_connect (view, "motion-notify-event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect(view, "event-after", G_CALLBACK (event_after), NULL); GtkTextBuffer *buffer = gtk_text_view_get_buffer(view); tag = gtk_text_buffer_create_tag (buffer, NULL, "size", 15 * PANGO_SCALE, "justification", GTK_JUSTIFY_CENTER, "weight", PANGO_WEIGHT_BOLD, NULL); tag1 = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 25, "right-margin", 25, NULL); gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_insert_with_tags(buffer, &iter, title, -1, tag, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, intro, -1, tag1, NULL); insert_link(buffer, &iter, "http://basiccoder.com"); gtk_text_buffer_insert_with_tags(buffer, &iter, "\nE-mail: [email protected]\n", -1, tag1, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, "Twitter: ", -1, tag1, NULL); insert_link(buffer, &iter, "http://twitter.com/levin108"); }
static void create_contri(GtkTextView *view) { GtkTextTag *tag1; GtkTextTag *tag2; GtkTextIter iter; gtk_text_view_set_editable(view,FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR); g_signal_connect (view, "motion-notify-event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect(view, "event-after", G_CALLBACK (event_after), NULL); GtkTextBuffer *buffer = gtk_text_view_get_buffer(view); tag1 = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 25, "right-margin", 25, NULL); tag2 = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 25, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_insert(buffer, &iter, "\n\n", 2); gtk_text_buffer_insert_with_tags(buffer, &iter, "Levin Li <", -1, tag1, NULL); insert_link(buffer, &iter, "*****@*****.**", "mailto:[email protected]"); gtk_text_buffer_insert(buffer, &iter, ("> ("), 3); insert_link(buffer, &iter, "@levin108", "http://twitter.com/levin108"); gtk_text_buffer_insert(buffer, &iter, (")\n"), 2); gtk_text_buffer_insert_with_tags(buffer, &iter, "Yichao Yu <", -1, tag1, NULL); insert_link(buffer, &iter, "*****@*****.**", "mailto:[email protected]"); gtk_text_buffer_insert(buffer, &iter, ("> ("), 3); insert_link(buffer, &iter, "@yuyichao", "http://twitter.com/yuyichao"); gtk_text_buffer_insert(buffer, &iter, (")\n"), 2); }
/* Fills the buffer with text and interspersed links. In any real * hypertext app, this method would parse a file to identify the links. */ static void show_page (GtkTextBuffer *buffer, gint page) { GtkTextIter iter; gtk_text_buffer_set_text (buffer, "", 0); gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); if (page == 1) { gtk_text_buffer_insert (buffer, &iter, "Some text to show that simple ", -1); insert_link (buffer, &iter, "hypertext", 3); gtk_text_buffer_insert (buffer, &iter, " can easily be realized with ", -1); insert_link (buffer, &iter, "tags", 2); gtk_text_buffer_insert (buffer, &iter, ".", -1); } else if (page == 2) { gtk_text_buffer_insert (buffer, &iter, "A tag is an attribute that can be applied to some range of text. " "For example, a tag might be called \"bold\" and make the text inside " "the tag bold. However, the tag concept is more general than that; " "tags don't have to affect appearance. They can instead affect the " "behavior of mouse and key presses, \"lock\" a range of text so the " "user can't edit it, or countless other things.\n", -1); insert_link (buffer, &iter, "Go back", 1); } else if (page == 3) { GtkTextTag *tag; tag = gtk_text_buffer_create_tag (buffer, NULL, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_buffer_insert_with_tags (buffer, &iter, "hypertext:\n", -1, tag, NULL); gtk_text_buffer_insert (buffer, &iter, "machine-readable text that is not sequential but is organized " "so that related items of information are connected.\n", -1); insert_link (buffer, &iter, "Go back", 1); } }
void prim(item vertex[],int numV,int s) { int i; edge_link* link; link=(edge_link*)malloc(sizeof(edge_link)); edge_adj* curr_node; edge* curr_edge; for(i=0;i<numV;i++) { vertex[i].color=WHITE; vertex[i].par=0; } vertex[s].color=BLACK; init_link(link); curr_edge=vertex[s].adj; while(curr_edge!=NULL) { if(vertex[curr_edge->dest].color==WHITE) { insert_link(link,curr_edge->dest,s,curr_edge->weight); } curr_edge=curr_edge->next; } while(!is_empty(link)) { curr_node=del_min_link(link); vertex[curr_node->dest].color=BLACK; printf("%c %c %d\n",vertex[curr_node->par].data,vertex[curr_node->dest].data,curr_node->weight); curr_edge=vertex[curr_node->dest].adj; while(curr_edge!=NULL) { if(vertex[curr_edge->dest].color==WHITE) { insert_link(link,curr_edge->dest,curr_node->dest,curr_edge->weight); } curr_edge=curr_edge->next; } free(curr_node); } }
static void create_intro(GtkTextView *view) { GtkTextTag *tag1; GtkTextIter iter; const char intro[] = N_("Hybrid is a lightweight extensible IM framework," "currently supports China Mobile Fetion protocol," "XMPP protocol, and IMAP mail notifier.\n\n\n"); gtk_text_view_set_editable(view,FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR); g_signal_connect (view, "motion-notify-event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect(view, "event-after", G_CALLBACK (event_after), NULL); GtkTextBuffer *buffer = gtk_text_view_get_buffer(view); tag1 = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 25, "right-margin", 25, NULL); gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_insert(buffer, &iter, "\n\n", 2); gtk_text_buffer_insert_with_tags(buffer, &iter, _(intro), -1, tag1, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, _("\nWebsite: "), -1, tag1, NULL); insert_link(buffer, &iter, "https://github.com/levin108/hybrid", NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, _("\nBug report: "), -1, tag1, NULL); insert_link(buffer, &iter, "https://github.com/levin108/hybrid/issues", NULL); }
int main() { linknode *head; head = create_link(); int i; for(i=0; i<30; i++){ insert_link(head, i); } print_link(head); linknode *tmp = NULL; tmp = find_node(head, 8); printf("the top:%d\n", tmp->num); return 0; }
/****************************************************************************** 函 数: my_register 功 能: 完成用户的注册工作 传入参数: confd : 服务器和客户端的通信接口 传出参数: 无 返 回: -1:程序错误返回 0:程序正确执行 ******************************************************************************/ int my_register(int confd, struct user *temp_user) { debug_msg("d: my_reg- %s",temp_user->name); char buf[MAXSIZE]; memset(buf,0,MAXSIZE); int n_write; /*判断用户名是否已经存在*/ if(check_user(temp_user->name) == 1) { strcpy(buf,"Sorry!Register failed, user has existed\n"); n_write = Write(confd,buf,strlen(buf)); if(n_write <= 0) { fputs("Write error in my_register\n",stderr); close(confd); return -1; } } else { pthread_mutex_lock(®_lock); //链表和文件操作地方上锁 write_in(temp_user); struct user_link *temp = user_node(temp_user,-1); insert_link(temp); pthread_mutex_unlock(®_lock); strcpy(buf,"Register success!\n"); n_write = Write(confd,buf,strlen(buf)); if(n_write <= 0) { fputs("Write error in my_register\n",stderr); close(confd); return -1; } } return 0; }
/** * * @brief * Creates a task of type 'type', 'event_id', and when task is dispatched, * execute func with argument 'parm'. The task is added to * 'task_list_immed' if 'type' is WORK_Immed; otherwise, task is added * 'task_list_event'. * * @param[in] type - of task * @param[in] event_id - event id of the task * @param[in] func - function that will be executed in behalf of the task * @param[in] parm - parameter to 'func' * * @return struct work_task * * @retval <a work task entry> - for success * @retval NULL - for any error * */ struct work_task *set_task(enum work_type type, long event_id, void (*func)(struct work_task *) , void *parm) { struct work_task *pnew; struct work_task *pold; pnew = (struct work_task *)malloc(sizeof(struct work_task)); if (pnew == (struct work_task *)0) return ((struct work_task *)0); CLEAR_LINK(pnew->wt_linkall); CLEAR_LINK(pnew->wt_linkobj); CLEAR_LINK(pnew->wt_linkobj2); pnew->wt_event = event_id; pnew->wt_event2 = NULL; pnew->wt_type = type; pnew->wt_func = func; pnew->wt_parm1 = parm; pnew->wt_parm2 = NULL; pnew->wt_parm3 = NULL; pnew->wt_aux = 0; pnew->wt_aux2 = 0; if (type == WORK_Immed) append_link(&task_list_immed, &pnew->wt_linkall, pnew); else if (type == WORK_Timed) { pold = (struct work_task *)GET_NEXT(task_list_timed); while (pold) { if (pold->wt_event > pnew->wt_event) break; pold = (struct work_task *)GET_NEXT(pold->wt_linkall); } if (pold) insert_link(&pold->wt_linkall, &pnew->wt_linkall, pnew, LINK_INSET_BEFORE); else append_link(&task_list_timed, &pnew->wt_linkall, pnew); } else append_link(&task_list_event, &pnew->wt_linkall, pnew); return (pnew); }
#define QN QT_TR_NOOP #define NA QWebPage::NoWebAction // {name, shortcut, icon, WebAction {QN("Bold"), QN("Ctrl+B"), "icon-bold.png", SLOT(bold()), NA } ,{QN("Italic"), QN("Ctrl+I"), "icon-italic.png", SLOT(italic()), NA } ,{QN("Underline"), QN("Ctrl+U"), "icon-underline.png", SLOT(underline()), NA } ,{QN("Strike through"), QN("Ctrl+S"), "icon-strikethrough.png", SLOT(strikethrough()) , NA} ,{QN("Superscript"), NULL, "icon-superscript.png", SLOT(superscript()), NA } ,{QN("Subscript"), NULL, "icon-subscript.png", SLOT(subscript()), NA } // separator before 6 ,{QN("Set foreground color"), NULL, "icon-foreground-color.png", SLOT(foreground_color()), NA } ,{QN("Set background color"), NULL, "icon-background-color.png", SLOT(background_color()), NA } ,{QN("Insert image"), NULL, "icon-image.png", SLOT(insert_image()), NA } ,{QN("Insert link"), NULL, "icon-link.png", SLOT(insert_link()), NA } ,{QN("Insert horizontal rule"), NULL, "icon-hr.png", SLOT(insert_hr()), NA } ,{QN("Insert unordered list"), NULL, "icon-bullet-list.png", SLOT(insert_unordered_list()), NA } ,{QN("Insert ordered list"), NULL, "icon-ordered-list.png", SLOT(insert_ordered_list()), NA } ,{QN("Remove format"), NULL, "icon-eraser.png", SLOT(remove_format()), NA } ,{QN("Cut"), NULL, "icon-cut.png", NULL, QWebPage::Cut } ,{QN("Copy"), NULL, "icon-copy.png", NULL, QWebPage::Copy } ,{QN("Paste"), NULL, "icon-paste.png", NULL, QWebPage::Paste } ,{QN("Undo"), QN("Ctrl+Z"), "icon-undo.png", NULL, QWebPage::Undo } ,{QN("Redo"), NULL, "icon-redo.png", NULL, QWebPage::Redo } ,{QN("Align left"), NULL, "icon-align-left.png", SLOT(align_left()), NA } ,{QN("Justify"), NULL, "icon-justify.png", SLOT(justify()), NA } ,{QN("Align right"), NULL, "icon-align-right.png", SLOT(align_right()), NA } ,{QN("Center"), NULL, "icon-center.png", SLOT(center()), NA } ,{QN("Indent right"), NULL, "icon-indent-right.png", SLOT(indent_right()), NA } ,{QN("Indent left"), NULL, "icon-indent-left.png", SLOT(indent_left()), NA }
static void create_contri(GtkTextView *view) { GtkTextTag *tag; GtkTextTag *tag1; GtkTextTag *tag2; GtkTextIter iter; const char title[] = N_("The Main Contributors\n\n"); const char *intro; gtk_text_view_set_editable(view,FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR); g_signal_connect (view, "motion-notify-event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect(view, "event-after", G_CALLBACK (event_after), NULL); GtkTextBuffer *buffer = gtk_text_view_get_buffer(view); tag = gtk_text_buffer_create_tag (buffer, NULL, "size", 15 * PANGO_SCALE, "justification", GTK_JUSTIFY_CENTER, "weight", PANGO_WEIGHT_BOLD, NULL); tag1 = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 25, "right-margin", 25, NULL); tag2 = gtk_text_buffer_create_tag (buffer, NULL, "left-margin", 25, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_insert_with_tags(buffer, &iter, title, -1, tag, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, "happyaron: ", -1, tag2, NULL); intro = N_("Make deb package for debian/ubuntu users," "maintainer of the PPA of openfetion.\nBlog:"); gtk_text_buffer_insert_with_tags(buffer, &iter, _(intro), -1, tag1, NULL); insert_link(buffer, &iter, "http://blogs.gnome.org/happyaron/"); gtk_text_buffer_insert_with_tags(buffer, &iter, "\n\nwzssyqa: ", -1, tag2, NULL); intro = N_("Main translater of openfetion,accomplish" " the internationalisation(i18n) of openfetion"); gtk_text_buffer_insert_with_tags(buffer, &iter, _(intro), -1, tag1, NULL); gtk_text_buffer_insert_with_tags(buffer, &iter, "\n\nxhacker: ", -1, tag2, NULL); intro = N_("Contributed to the UI development,and fixed some " "bugs of the UI.\nFollow him:"); gtk_text_buffer_insert_with_tags(buffer, &iter, _(intro), -1, tag1, NULL); insert_link(buffer, &iter, "http://twitter.com/xhacker"); gtk_text_buffer_insert_with_tags(buffer, &iter, "\n\nriku: ", -1, tag2, NULL); intro = N_("A good designer,designed a logo and some icons for " "openfetion,and also contributed to the UI design.\nFollow him:"); gtk_text_buffer_insert_with_tags(buffer, &iter, _(intro), -1, tag1, NULL); insert_link(buffer, &iter, "http://twitter.com/riku"); }
static void mtx_eliminate_row2(mtx_matrix_t mtx, mtx_matrix_t upper_mtx, mtx_range_t *rng, int32 row, real64 *vec, real64 *pivots, int32 *inserted, mem_store_t eltbuffer) { struct element_t *elt; struct mtx_linklist *diag, *right=NULL, *ptr; int32 *tocur; real64 multiplier; int k, j; mtx_coord_t nz; (void)rng; /* stop gcc whine about unused parameter */ /* * Move all non-zeros from current row to full array. * The full array would have been initialized before, * we must put it back in the clean state when we leave. * All operations are done over mtx_ALL_COLS. */ /* * we use the following code fragment instead of : * mtx_cur_row_vec(mtx,row,vec,mtx_ALL_COLS); * so that we can put the elements in the correct place. */ diag = (struct mtx_linklist *)mem_get_element(eltbuffer); diag->index = row; diag->prev = NULL; inserted[row] = 1; /* * the insertion for this phase. */ tocur = mtx->perm.col.org_to_cur; elt = mtx->hdr.row[mtx->perm.row.cur_to_org[row]]; ptr = diag; for ( ;NOTNULL(elt); elt = elt->next.col) { if (elt->value == 0.0) { continue; /* hard zeros */ } k = tocur[elt->col]; vec[k] = elt->value; if (k < row) { /* the less than is critical */ (void)insert_link(diag,k,eltbuffer); inserted[k] = 1; } else if (k > row) { right = add_link(right,k,eltbuffer); inserted[k] = 1; } else continue; } mtx_clear_row(mtx,row,mtx_ALL_COLS); /* we shuold be trapping for these 0 multipliers before. !!! */ for (ptr = diag->prev; NOTNULL(ptr); ) { k = ptr->index; multiplier = vec[k]/pivots[k]; if (multiplier==D_ZERO) { ptr = ptr->prev; /* FPRINTF(stderr,"0 multiplier found at %d\n",k); */ continue; } #ifdef NOP_DEBUG mtx_number_ops++; #endif /* NOP_DEBUG */ elt = mtx->hdr.row[mtx->perm.row.cur_to_org[k]]; for ( ;NOTNULL(elt); elt = elt->next.col) { j = tocur[elt->col]; if (!inserted[j]) { if (j < k) (void)insert_link(ptr,j,eltbuffer); else right = add_link(right,j,eltbuffer); inserted[j] = 1; } vec[j] = vec[j] - multiplier * elt->value; #ifdef NOP_DEBUG mtx_number_ops++; #endif /* NOP_DEBUG */ } vec[k] = multiplier; /* backpatch multiplier */ ptr = ptr->prev; } /* * Map the data back to the appropriate matrices. */ /* * Fill up the upper_matrix with the multipliers. */ nz.row = row; for (ptr = diag->prev; NOTNULL(ptr); ptr = ptr->prev) { nz.col = ptr->index; if (vec[nz.col] != D_ZERO) { /* dont fill hard 0's */ mtx_fill_value(upper_mtx,&nz,vec[nz.col]); } vec[nz.col] = D_ZERO; inserted[nz.col] = 0; } /* * Fill the diagonal back to the regular matrix. */ nz.col = row; if (vec[nz.col] != D_ZERO) { /* dont fill hard 0's */ mtx_fill_value(mtx,&nz,vec[nz.col]); } vec[row] = D_ZERO; inserted[row] = 0; /* * Fill the lower matrix with the stuff to the right of * diagonal. */ for (ptr = right; NOTNULL(ptr); ptr = ptr->prev) { nz.col = ptr->index; if (fabs(vec[nz.col]) > 1.0e-16) { /* THIS NEEDS A DROP TOL DEFINE */ mtx_fill_value(mtx,&nz,vec[nz.col]); } vec[nz.col] = D_ZERO; inserted[nz.col] = 0; } }
static int parse_array_request(char *request, tlist_head *tl) { char *temp_str; int num_tokens; char **tokens; int i; int j; int num_elements; int start; int end; int num_bad_tokens; int searching; array_request_node *rn; array_request_node *rn2; temp_str = strdup(request); num_tokens = array_request_token_count(request); num_bad_tokens = 0; tokens = (char**)malloc(sizeof(char*) * num_tokens); j = num_tokens - 1; /* start from back and scan backwards setting pointers to tokens and changing ',' to '\0' */ for (i = strlen(temp_str) - 1; i >= 0; i--) { if (temp_str[i] == ',') { tokens[j--] = &temp_str[i+1]; temp_str[i] = '\0'; } else if (i == 0) { tokens[0] = temp_str; } } for (i = 0; i < num_tokens; i++) { num_elements = array_request_parse_token(tokens[i], &start, &end); if (num_elements == 0) { num_bad_tokens++; } else { rn = (array_request_node*)malloc(sizeof(array_request_node)); rn->start = start; rn->end = end; CLEAR_LINK(rn->request_tokens_link); rn2 = GET_NEXT(*tl); searching = TRUE; while (searching) { if (rn2 == NULL) { append_link(tl, &rn->request_tokens_link, (void*)rn); searching = FALSE; } else if (rn->start < rn2->start) { insert_link(&rn2->request_tokens_link, &rn->request_tokens_link, (void*)rn, LINK_INSET_BEFORE); searching = FALSE; } else { rn2 = GET_NEXT(rn2->request_tokens_link); } } rn2 = GET_PRIOR(rn->request_tokens_link); if (rn2 != NULL && rn2->end >= rn->start) { num_bad_tokens++; } rn2 = GET_NEXT(rn->request_tokens_link); if (rn2 != NULL && rn2->start <= rn->end) { num_bad_tokens++; } } } free(tokens); free(temp_str); return num_bad_tokens; }