diff options
Diffstat (limited to 'mbbsd/announce.c')
-rw-r--r-- | mbbsd/announce.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/mbbsd/announce.c b/mbbsd/announce.c index 8298f158..ed1e7cea 100644 --- a/mbbsd/announce.c +++ b/mbbsd/announce.c @@ -1143,17 +1143,16 @@ a_where_am_i(const menu_t *root, int current_idx, const char *current_title) return 0; } -int a_parse_zindexes(const char *sidx, a_menu_session_t *sess) +int a_parse_zindexes(const char *s, a_menu_session_t *sess) { int i = 0; - const char *s = sidx; memset(sess->z_indexes, 0, sizeof(sess->z_indexes)); - if (strpbrk(sidx, "0123456789") == NULL) + if (strpbrk(s, "0123456789") == NULL) return -1; while (NULL != (s = strpbrk(s, "0123456789")) && - i < _DIM(sess->z_indexes) ) + i+1 < _DIM(sess->z_indexes) ) { sess->z_indexes[i] = atoi(s); // only increase index @@ -1245,12 +1244,7 @@ a_menu_rec(const char *maintitle, const char *path, if (preselect && !*preselect) preselect = NULL; - if (preselect) - { - me.now = *preselect-1; - } else { - me.now = 0; - } + me.now = preselect ? (*preselect -1) : 0; for (;;) { if (me.now >= me.num) @@ -1285,14 +1279,15 @@ a_menu_rec(const char *maintitle, const char *path, int n = a_multi_search_num(isascii(ch) && isdigit(ch) ? ch : '\0', sess); me.page = A_INVALID_PAGE; if (n > 0) + { me.now = n-1; - else if (n < 0) - vmsg("¿é¤J¿ù»~¡C"); - else if (sess->z_indexes[0]) + me.page = 10000; // I don't know what's the magic value 10000... + } + else if (n == 0 && sess->z_indexes[0]) { // n == 0, check new preselects preselect = sess->z_indexes; - me.now = *preselect-1; + me.now = *preselect - 1; } continue; } |