void doRemove(GtkWidget *button, Widgets *app) { tree = btopn("data/tudienanhviet.dat", 0, 0); gchar *text; GtkTextBuffer *textbuffer; textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(app->textview)); text = gtk_entry_get_text(GTK_ENTRY(app->searchentry)); char defnFind[6500]; int rsize; long value; int exist = bfndky(tree,text,&value); if (exist == 0) { bdelky(tree, text); gtk_entry_set_text(app->searchentry,""); gtk_text_buffer_set_text(textbuffer,"",-1); strcpy(thongbao_text,"Deleted data !"); gtk_label_set_text(thongbao,thongbao_text); } gtk_widget_hide(del); gtk_widget_hide(edit); gtk_widget_hide(add); btcls(tree); }
int binsky(BTA *b, char *key,BTint val) { BTint lval,dups_allowed; int status; KEYENT keyent; bterr("",0,NULL); if ((status=bvalap("BINSKY",b)) != 0) return(status); btact = b; if (btact->shared) { if (!block()) { bterr("BINSKY",QBUSY,NULL); goto fin; } } if (b->cntxt->super.smode != 0) { /* read only, can't insert */ bterr("BINSKY",QNOWRT,NULL); } else { dups_allowed = bgtinf(btact->cntxt->super.scroot,ZMISC); strncpy(keyent.key,key,ZKYLEN); keyent.key[ZKYLEN-1] = '\0'; keyent.val = val; keyent.dup = ZNULL; status = bfndky(b,keyent.key,&lval); if (status == QNOKEY || (status == 0 && dups_allowed)) { /* QNOKEY is not an error in this context; remove it */ bterr("",0,NULL); if (status == 0) { /* inserting duplicate key */ btdupkey(key,val); } else { bleaf(1); bputky(btact->cntxt->lf.lfblk,&keyent,ZNULL,ZNULL); } } else { bterr("BINSKY",QDUP,key); } } fin: if (btact->shared) bulock(); return(btgerr()); }
void doAdd(GtkWidget *button, Widgets *app){ tree = btopn("data/tudienanhviet.dat", 0, 0); GtkTextIter start, end; gchar *text,*btext; GtkTextBuffer *textbuffer; textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(app->textview)); text = gtk_entry_get_text(GTK_ENTRY(app->searchentry)); gtk_text_buffer_get_bounds (textbuffer, &start, &end); btext=gtk_text_buffer_get_text(textbuffer,&start,&end ,FALSE); long value; if (bfndky(tree,text,&value)!=0) //Neu s1 khong co { btins(tree,text,btext,strlen(btext)+1); //insert vao btree strcpy(thongbao_text,"Added data !"); gtk_label_set_text(thongbao,thongbao_text); } gtk_widget_hide(add); btcls(tree); }
int bnxtky(BTA* b,char *key,BTint *val) { int idx,nkeys,status; int found; bterr("",0,NULL); if ((status=bvalap("BNXTKY",b)) != 0) return(status); btact = b; /* set global context pointer */ if (btact->shared) { if (!block()) { bterr("BNXTKY",QBUSY,NULL); goto fin; } } /* handle duplicate positioning */ found = btduppos(ZNEXT,val); if (found > 0) { goto fin; } else if (found == 0) { strncpy(key,btact->cntxt->lf.lfkey,ZKYLEN); key[ZKYLEN-1] = '\0'; goto fin; } if (btact->shared && btact->cntxt->lf.lfblk != ZNULL) { /* position to last found key via bfndky, since context could * have been invalidated by concurrent updates by other users. * Note we don't care if the key is found or not, so the error * status is always cleared. */ status = bfndky(btact,btact->cntxt->lf.lfkey,val); bterr("",0,NULL); } found = FALSE; while (btact->cntxt->lf.lfblk != ZNULL && !found) { status = brdblk(btact->cntxt->lf.lfblk,&idx); if (idx < 0) { bterr("BNXTKY",QRDBLK,itostr(btact->cntxt->lf.lfblk)); break; } nkeys = bgtinf(btact->cntxt->lf.lfblk,ZNKEYS); #if DEBUG >= 1 printf("BNXTKY: lfblk: " ZINTFMT ", lfpos: %d, nkeys: %d\n", btact->cntxt->lf.lfblk,btact->cntxt->lf.lfpos,nkeys); #endif if (btact->cntxt->lf.lfpos >= nkeys || nkeys == 0) { /* finished with this block (or no key was found at all), * get parent from stack */ btact->cntxt->lf.lfpos = bpull(); btact->cntxt->lf.lfblk = bpull(); btact->cntxt->lf.lfexct = FALSE; continue; } if (!btact->cntxt->lf.lfexct) { btact->cntxt->lf.lfexct = TRUE; } else { btact->cntxt->lf.lfpos++; /* invalidate existing dup chain */ btact->cntxt->lf.draddr = ZNULL; idx = bleaf(0); if (idx < 0) continue; } if (btact->cntxt->lf.lfpos < nkeys) { found = TRUE; strncpy(key, ((btact->memrec)+idx)->keyblk[btact->cntxt->lf.lfpos].key, ZKYLEN); key[ZKYLEN-1] = '\0'; /* remember found key (need for shared mode) */ strncpy(btact->cntxt->lf.lfkey,key,ZKYLEN); btact->cntxt->lf.lfkey[ZKYLEN-1] = '\0'; *val = ((btact->memrec)+idx)->keyblk[btact->cntxt->lf.lfpos].val; btduppos(ZNEXT,val); } } if (btact->cntxt->lf.lfblk == ZNULL) { /* end of index reached */ bclrlf(); bterr("BNXTKY",QNOKEY,NULL); } fin: if (btact->shared) bulock(); return btgerr(); }