From 812510403b36b7dd967bbf37d3f0b0b54cf9b188 Mon Sep 17 00:00:00 2001 From: wens Date: Sun, 15 Jun 2008 14:51:45 +0000 Subject: Use general Vector_*. include/proto.h in last commit should be in this one :( git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4359 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/board.c | 10 ++-- mbbsd/name.c | 189 +++++++--------------------------------------------------- 2 files changed, 28 insertions(+), 171 deletions(-) (limited to 'mbbsd') diff --git a/mbbsd/board.c b/mbbsd/board.c index 57ff1e8b..60a8aa4c 100644 --- a/mbbsd/board.c +++ b/mbbsd/board.c @@ -1042,20 +1042,20 @@ search_local_board() { int num; char genbuf[IDLEN + 2]; - struct NameList namelist; + struct Vector namelist; move(0, 0); clrtoeol(); - NameList_init(&namelist); + Vector_init(&namelist, IDLEN + 1); assert(brdnum<=nbrdsize); - NameList_resizefor(&namelist, brdnum); + Vector_resize(&namelist, brdnum); for (num = 0; num < brdnum; num++) if (!IS_LISTING_FAV() || (nbrd[num].myattr & NBRD_BOARD && HasBoardPerm(B_BH(&nbrd[num]))) ) - NameList_add(&namelist, B_BH(&nbrd[num])->brdname); + Vector_add(&namelist, B_BH(&nbrd[num])->brdname); namecomplete2(&namelist, ANSI_REVERSE "【 搜尋所在位置看板 】" ANSI_RESET "\n請輸入看板名稱(按空白鍵自動搜尋): ", genbuf); - NameList_delete(&namelist); + Vector_delete(&namelist); for (num = 0; num < brdnum; num++) diff --git a/mbbsd/name.c b/mbbsd/name.c index 0cbb9242..c0a7a00f 100644 --- a/mbbsd/name.c +++ b/mbbsd/name.c @@ -16,149 +16,6 @@ prompt_more() //----------------------------------------------------------------------- -void NameList_init(struct NameList *self) -{ - self->size = 0; - self->capacity = 0; - self->base = NULL; -} - -void NameList_delete(struct NameList *self) -{ - self->size = 0; - self->capacity = 0; - if(self->base) - free(self->base); - self->base = NULL; -} - -void NameList_clear(struct NameList *self) -{ - NameList_delete(self); - NameList_init(self); -} - -void NameList_resizefor(struct NameList *self, int size) -{ - int capacity = size * (IDLEN+1); -#define MIN_CAPACITY 4096 - if (capacity == 0) { - if(self->base) free(self->base); - self->base = NULL; - self->capacity = 0; - } else { - int old_capacity = self->capacity; - assert(capacity > 0); - if (self->capacity == 0) - self->capacity = MIN_CAPACITY; - //if (self->capacity > capacity && self->capacity > MIN_CAPACITY) - // self->capacity /= 2; - if (self->capacity < capacity) - self->capacity *= 2; - - if(old_capacity != self->capacity || self->base == NULL) { - char (*tmp)[IDLEN+1] = (char(*)[IDLEN+1])malloc((IDLEN+1)*self->capacity); - assert(tmp); - if (self->size) - memcpy(tmp, self->base, (IDLEN+1)*self->size); - if (self->base) - free(self->base); - self->base = tmp; - } - } -} - -void NameList_add(struct NameList *self, const char *name) -{ - NameList_resizefor(self, self->size+1); - strlcpy(self->base[self->size], name, IDLEN+1); - self->size++; -} - -const char* NameList_get(struct NameList *self, int idx) -{ - assert(0<=idx && idxsize); - return self->base[idx]; -} - -static int NameList_MaxLen(const struct NameList *list, int offset, int count) -{ - int i; - int maxlen = 0; - - for(i=offset; isize; i++) { - int len = strlen(list->base[i]); - if (len > maxlen) - maxlen = len; - } - assert(maxlen <= IDLEN); - return maxlen; -} - -int NameList_match(const struct NameList *src, struct NameList *dst, int key, int pos) -{ - int uckey, lckey; - int i; - - NameList_clear(dst); - - uckey = chartoupper(key); - if (key >= 'A' && key <= 'Z') - lckey = key | 0x20; - else - lckey = key; - - for(i=0; isize; i++) { - int ch = src->base[i][pos]; - if (ch == lckey || ch == uckey) - NameList_add(dst, src->base[i]); - } - - return dst->size; -} - -int NameList_length(struct NameList *self) -{ - return self->size; -} - -void NameList_sublist(struct NameList *src, struct NameList *dst, char *tag) -{ - int i; - int len; - NameList_clear(dst); - - len = strlen(tag); - for(i=0; isize; i++) - if(len==0 || strncasecmp(src->base[i], tag, len)==0) - NameList_add(dst, src->base[i]); -} - -int NameList_remove(struct NameList *self, const char *name) -{ - int i; - for(i=0; isize; i++) - if(strcasecmp(self->base[i], name)==0) { - strcpy(self->base[i], self->base[self->size-1]); - - self->size--; - NameList_resizefor(self, self->size); - return 1; - } - return 0; -} - -int NameList_search(const struct NameList *self, const char *name) -{ - int i; - for(i=0; isize; i++) - if (strcasecmp(self->base[i], name)==0) - return 1; - return 0; -} - -//----------------------------------------------------------------------- - char * u_namearray(char buf[][IDLEN + 1], int *pnum, char *tag) { @@ -563,19 +420,19 @@ namecomplete(const char *prompt, char *data) } void -namecomplete2(struct NameList *namelist, const char *prompt, char *data) +namecomplete2(struct Vector *namelist, const char *prompt, char *data) { char *temp; int x, y, origx, scrx; int ch; int count = 0; int clearbot = NA; - struct NameList sublist; + struct Vector sublist; int viewoffset = 0; - NameList_init(&sublist); + Vector_init(&sublist, IDLEN + 1); - NameList_sublist(namelist, &sublist, ""); + Vector_sublist(namelist, &sublist, ""); temp = data; outs(prompt); @@ -600,44 +457,44 @@ namecomplete2(struct NameList *namelist, const char *prompt, char *data) if (ch == KEY_ENTER) { *temp = '\0'; - if (NameList_length(&sublist)==1) - strcpy(data, NameList_get(&sublist, 0)); - else if (!NameList_search(&sublist, data)) + if (Vector_length(&sublist)==1) + strcpy(data, Vector_get(&sublist, 0)); + else if (!Vector_search(&sublist, data)) data[0] = '\0'; - NameList_delete(&sublist); + Vector_delete(&sublist); break; } if (ch == ' ') { int col, len; - if (NameList_length(&sublist) == 1) { - strcpy(data, NameList_get(&sublist, 0)); + if (Vector_length(&sublist) == 1) { + strcpy(data, Vector_get(&sublist, 0)); count = strlen(data); temp = data + count; continue; } clearbot = YEA; col = 0; - len = NameList_MaxLen(&sublist, viewoffset, p_lines); + len = Vector_MaxLen(&sublist, viewoffset, p_lines); move(2, 0); clrtobot(); printdash("相關資訊一覽表", 0); while (len + col < t_columns) { int i; - for (i = p_lines; viewoffset < NameList_length(&sublist) && (i > 0); i--) { + for (i = p_lines; viewoffset < Vector_length(&sublist) && (i > 0); i--) { move(3 + (p_lines - i), col); - outs(NameList_get(&sublist, viewoffset)); + outs(Vector_get(&sublist, viewoffset)); viewoffset++; } col += len + 2; - if (viewoffset == NameList_length(&sublist)) { + if (viewoffset == Vector_length(&sublist)) { viewoffset = 0; break; } - len = NameList_MaxLen(&sublist, viewoffset, p_lines); + len = Vector_MaxLen(&sublist, viewoffset, p_lines); } - if (viewoffset < NameList_length(&sublist)) { + if (viewoffset < Vector_length(&sublist)) { prompt_more(); } continue; @@ -648,27 +505,27 @@ namecomplete2(struct NameList *namelist, const char *prompt, char *data) temp--; count--; *temp = '\0'; - NameList_sublist(namelist, &sublist, data); + Vector_sublist(namelist, &sublist, data); viewoffset = 0; continue; } if (count < STRLEN && isprint(ch)) { - struct NameList tmplist; - NameList_init(&tmplist); + struct Vector tmplist; + Vector_init(&tmplist, IDLEN + 1); *temp++ = ch; count++; *temp = '\0'; - NameList_sublist(&sublist, &tmplist, data); - if (NameList_length(&tmplist)==0) { - NameList_delete(&tmplist); + Vector_sublist(&sublist, &tmplist, data); + if (Vector_length(&tmplist)==0) { + Vector_delete(&tmplist); temp--; *temp = '\0'; count--; continue; } - NameList_delete(&sublist); + Vector_delete(&sublist); sublist = tmplist; viewoffset = 0; } -- cgit v1.2.3