summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2003-10-03 14:44:36 +0800
committervictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2003-10-03 14:44:36 +0800
commita49d8c1a017203186e113e0d5f078c747d2b6f88 (patch)
treefad9ddae4122dba7776e0158f3022dffe35bd5c3
parentdb6634504b1defb470c8fd9bff20351206326fbe (diff)
downloadpttbbs-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.c16
-rw-r--r--pttbbs/mbbsd/fav.c15
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)