summaryrefslogtreecommitdiffstats
path: root/mbbsd
diff options
context:
space:
mode:
authorwens <wens@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-06-15 22:51:45 +0800
committerwens <wens@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-06-15 22:51:45 +0800
commit812510403b36b7dd967bbf37d3f0b0b54cf9b188 (patch)
tree72e68a6f3151d17a54b1b2501b68ee149e71f00e /mbbsd
parentd2619aa396af53702b780fa8bfd34a78abc0edc6 (diff)
downloadpttbbs-812510403b36b7dd967bbf37d3f0b0b54cf9b188.tar
pttbbs-812510403b36b7dd967bbf37d3f0b0b54cf9b188.tar.gz
pttbbs-812510403b36b7dd967bbf37d3f0b0b54cf9b188.tar.bz2
pttbbs-812510403b36b7dd967bbf37d3f0b0b54cf9b188.tar.lz
pttbbs-812510403b36b7dd967bbf37d3f0b0b54cf9b188.tar.xz
pttbbs-812510403b36b7dd967bbf37d3f0b0b54cf9b188.tar.zst
pttbbs-812510403b36b7dd967bbf37d3f0b0b54cf9b188.zip
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
Diffstat (limited to 'mbbsd')
-rw-r--r--mbbsd/board.c10
-rw-r--r--mbbsd/name.c189
2 files changed, 28 insertions, 171 deletions
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 && idx<self->size);
- return self->base[idx];
-}
-
-static int NameList_MaxLen(const struct NameList *list, int offset, int count)
-{
- int i;
- int maxlen = 0;
-
- for(i=offset; i<list->size; 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; i<src->size; 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; i<src->size; 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; i<self->size; 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; i<self->size; 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;
}