diff options
author | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-10-03 14:44:36 +0800 |
---|---|---|
committer | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-10-03 14:44:36 +0800 |
commit | a49d8c1a017203186e113e0d5f078c747d2b6f88 (patch) | |
tree | fad9ddae4122dba7776e0158f3022dffe35bd5c3 | |
parent | db6634504b1defb470c8fd9bff20351206326fbe (diff) | |
download | pttbbs-a49d8c1a017203186e113e0d5f078c747d2b6f88.tar pttbbs-a49d8c1a017203186e113e0d5f078c747d2b6f88.tar.gz pttbbs-a49d8c1a017203186e113e0d5f078c747d2b6f88.tar.bz2 pttbbs-a49d8c1a017203186e113e0d5f078c747d2b6f88.tar.lz pttbbs-a49d8c1a017203186e113e0d5f078c747d2b6f88.tar.xz pttbbs-a49d8c1a017203186e113e0d5f078c747d2b6f88.tar.zst pttbbs-a49d8c1a017203186e113e0d5f078c747d2b6f88.zip |
status:
all most functions are work, but still some bugs.
like copy a dir to it's subdir, SIGBUS when logout.
maybe there are still some not discovered.
git-svn-id: http://opensvn.csie.org/pttbbs/branches/victor.fav4@1210 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | pttbbs/mbbsd/board.c | 16 | ||||
-rw-r--r-- | pttbbs/mbbsd/fav.c | 15 |
2 files changed, 19 insertions, 12 deletions
diff --git a/pttbbs/mbbsd/board.c b/pttbbs/mbbsd/board.c index 52562bc6..40512e18 100644 --- a/pttbbs/mbbsd/board.c +++ b/pttbbs/mbbsd/board.c @@ -845,6 +845,7 @@ choose_board(int newflag) do { if (brdnum <= 0) { load_boards(keyword); + fav_cursor_set(num); if (brdnum <= 0) { if (keyword[0] != 0) { mprints(b_lines - 1, 0, "沒有任何看板標題有此關鍵字 " @@ -869,6 +870,8 @@ choose_board(int newflag) } head = -1; } + + /* reset the cursor when out of range */ if (num < 0){ num = 0; fav_cursor_set(num); @@ -976,12 +979,9 @@ choose_board(int newflag) case KEY_DOWN: case 'n': case 'j': - if (++num < brdnum){ - fav_cursor_down(); + fav_cursor_down(); + if (++num < brdnum) break; - } - else - fav_cursor_down(); case '0': case KEY_HOME: num = 0; @@ -1271,7 +1271,8 @@ choose_board(int newflag) case 'A': { char buf[128]; fav_type_t *ft = get_current_entry(); - sprintf(buf, "type: %d, id: %d", ft->type, fav_getid(ft)); + fav_t *fp = get_current_fav(); + sprintf(buf, "d: %d b: %d f: %d bn: %d num: %d t: %d, id: %d", fp->nDatas, fp->nBoards, fp->nFolders, brdnum, num, ft->type, fav_getid(ft)); vmsg(buf); } break; @@ -1286,9 +1287,12 @@ choose_board(int newflag) if (ptr->myattr & BRD_LINE) break; else if (ptr->myattr & BRD_FOLDER){ + int t = num; fav_folder_in(); choose_board(0); fav_folder_out(); + num = t; + fav_cursor_set(num); brdnum = -1; head = 9999; break; diff --git a/pttbbs/mbbsd/fav.c b/pttbbs/mbbsd/fav.c index 16504cce..52cb44b5 100644 --- a/pttbbs/mbbsd/fav.c +++ b/pttbbs/mbbsd/fav.c @@ -353,7 +353,7 @@ void fav_cursor_down_step(int step) { int i; for(i = 0; i < step; i++){ - if (fav_place >= get_current_fav()->nDatas) + if (fav_place >= get_current_fav()->nAllocs - 1) break; fav_cursor_down(); } @@ -481,8 +481,8 @@ static void fav_free_item(fav_type_t *ft) static int fav_remove(fav_t *fp, fav_type_t *ft) { - fav_decrease(fp, ft); fav_free_item(ft); + fav_decrease(fp, ft); return 0; } @@ -639,8 +639,9 @@ void move_in_current_folder(int from, int to) } /* the following defines the interface of add new fav_XXX */ -inline static fav_t *alloc_fav_item(void){ +inline static fav_t *alloc_folder_item(void){ fav_t *fp = (fav_t *)fav_malloc(sizeof(fav_t)); + fp->nAllocs = FAV_PRE_ALLOC; fp->favh = (fav_type_t *)fav_malloc(sizeof(fav_type_t) * FAV_PRE_ALLOC); return fp; } @@ -678,7 +679,7 @@ fav_type_t *fav_add_folder(int place) ft = init_add(fp, FAVT_FOLDER, place); if (ft == NULL) return NULL; - cast_folder(ft)->this_folder = alloc_fav_item(); + cast_folder(ft)->this_folder = alloc_folder_item(); cast_folder(ft)->fid = get_folder_num(fp); // after fav_increase return ft; } @@ -704,7 +705,7 @@ static void fav_dosomething_tagged_item(fav_t *fp, int (*act)(fav_t *, fav_type_ { int i; for(i = 0; i < fp->nAllocs; i++){ - if (is_set_attr(&fp->favh[i], FAVH_FAV) && is_set_attr(&fp->fav[i], FAVH_TAG)) + if (is_set_attr(&fp->favh[i], FAVH_FAV) && is_set_attr(&fp->favh[i], FAVH_TAG)) if ((*act)(fp, &fp->favh[i]) < 0) break; } @@ -742,7 +743,7 @@ static void fav_do_recursively(int (*act)(fav_t *)) ft = &fp->favh[i]; if (!is_set_attr(ft, FAVH_FAV)) continue; - if (get_item_type(ft) == FAVT_FOLDER){ + if (get_item_type(ft) == FAVT_FOLDER && get_fav_folder(ft) != NULL){ fav_stack_push(ft); fav_do_recursively(act); fav_stack_pop(); @@ -754,9 +755,11 @@ static void fav_do_recursively(int (*act)(fav_t *)) static void fav_dosomething_all_tagged_item(int (*act)(fav_t *)) { int tmp = fav_stack_num; + fav_t *fp = get_current_fav(); fav_stack_num = 1; fav_do_recursively(act); fav_stack_num = tmp; + fav_stack[fav_stack_num - 1] = fp; } void fav_remove_all_tagged_item(void) |