//递归方式 int Search_Bin(SStable ST,KeyType key,int low,int high) { mid=(low+high)/2; if(EQ(key,ST.elem[mid].key)) return mid; else if(LT(key,ST.elem[mid].key)) Search_Bin(ST,key,low,mid-1); else Search_Bin(ST,key,mid+1,high); }
int do_set(char *dirptr, int size, char *file, int flag, char *board) { char path[256], buf[256]; struct fileheader *f; int om, og, nm, ng, filetime; int start; int total = size / sizeof(struct fileheader); filetime = atoi(file + 2); sprintf(path, "boards/%s/%s", board, file); start = Search_Bin(dirptr, filetime,0 , total - 1); if (start >= 0) { f = (struct fileheader*)(dirptr + start * sizeof(struct fileheader)); om = f->accessed & FH_MARKED; og = f->accessed & FH_DIGEST; f->accessed |= flag; if (flag == 0) f->accessed = 0; nm = f->accessed & FH_MARKED; ng = f->accessed & FH_DIGEST; printf("<tr><td>%s<td>标题:%s<td>标记成功.\n", fh2owner(f), nohtml(f->title)); buf[0] = 0; if ((!om) && (nm)) snprintf(buf, 256, "%s mark %s %s %s", currentuser.userid, board, fh2owner(f), f->title); if ((om) && (!nm)) snprintf(buf, 256, "%s unmark %s %s %s", currentuser.userid, board, fh2owner(f), f->title); if ((!og) && (ng)) snprintf(buf, 256, "%s digest %s %s %s", currentuser.userid, board, fh2owner(f), f->title); if ((og) && (!ng)) snprintf(buf, 256, "%s undigest %s %s %s", currentuser.userid, board, fh2owner(f), f->title); if (buf[0] != 0) newtrace(buf); return 0; } printf("<td><td><td>%s<td>文件不存在.\n", file); return -1; }