summaryrefslogtreecommitdiffstats
path: root/mbbsd/read.c
diff options
context:
space:
mode:
authormhsin <mhsin@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2007-12-17 16:14:27 +0800
committermhsin <mhsin@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2007-12-17 16:14:27 +0800
commitd023f75854cf77c29a1d2b52635bab90dc370fa1 (patch)
treebbdf07c2b6e1b80750f611588d433adb1e32a509 /mbbsd/read.c
parentec4a554115d214ba754951deb570742a5c0bb2e2 (diff)
downloadpttbbs-d023f75854cf77c29a1d2b52635bab90dc370fa1.tar
pttbbs-d023f75854cf77c29a1d2b52635bab90dc370fa1.tar.gz
pttbbs-d023f75854cf77c29a1d2b52635bab90dc370fa1.tar.bz2
pttbbs-d023f75854cf77c29a1d2b52635bab90dc370fa1.tar.lz
pttbbs-d023f75854cf77c29a1d2b52635bab90dc370fa1.tar.xz
pttbbs-d023f75854cf77c29a1d2b52635bab90dc370fa1.tar.zst
pttbbs-d023f75854cf77c29a1d2b52635bab90dc370fa1.zip
* Add Article IDentification System(AIDS)
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3700 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/read.c')
-rw-r--r--mbbsd/read.c128
1 files changed, 128 insertions, 0 deletions
diff --git a/mbbsd/read.c b/mbbsd/read.c
index 9137d304..883f75d5 100644
--- a/mbbsd/read.c
+++ b/mbbsd/read.c
@@ -677,6 +677,8 @@ select_read(const keeploc_t * locmem, int sr_mode)
return READ_REDRAW;
}
+static int newdirect_new_ln = -1;
+
static int
i_read_key(const onekey_t * rcmdlist, keeploc_t * locmem,
int bid, int bottom_line)
@@ -726,6 +728,127 @@ i_read_key(const onekey_t * rcmdlist, keeploc_t * locmem,
mode =
(currmode & MODE_DIGEST) ? board_digest() : DOQUIT;
break;
+ case '#':
+ {
+ char aidc[100];
+ unsigned long aidu = 0;
+ char dirfile[PATHLEN];
+ char *sp;
+ int n = -1;
+
+ if(!getdata(b_lines, 0, "搜尋" AID_DISPLAYNAME ": #", aidc, 20, LCECHO))
+ {
+ move(b_lines, 0);
+ clrtoeol();
+ mode = FULLUPDATE;
+ break;
+ }
+
+ if((currmode & MODE_SELECT) ||
+ (currstat == RMAIL))
+ {
+ move(21, 0);
+ clrtobot();
+ move(22, 0);
+ prints("此狀態下無法使用搜尋" AID_DISPLAYNAME "功\能");
+ pressanykey();
+ mode = FULLUPDATE;
+ break;
+ }
+
+ /* strip leading spaces and '#' */
+ sp = aidc;
+ while(*sp == ' ')
+ sp ++;
+ if(*sp == '#')
+ sp ++;
+
+ if((aidu = aidc2aidu(sp)) > 0)
+ {
+ /* search bottom */
+ /* FIXME: 置底文但沒列在 .DIR.bottom 的在這段會搜不到,
+ 在下一段 search board 時才會搜到本體。難解。 */
+ {
+ char buf[FNLEN];
+
+ snprintf(buf, FNLEN, "%s.bottom", FN_DIR);
+ setbfile(dirfile, currboard, buf);
+ if((n = search_aidu(dirfile, aidu)) >= 0)
+ {
+ n += getbtotal(currbid);
+ /* 不可用 bottom_line,因為如果是在 digest mode,
+ bottom_line 會是文摘的數目,而不是真正的文章數 */
+ if(currmode & MODE_DIGEST)
+ {
+ newdirect_new_ln = n;
+
+ new_ln = locmem->crs_ln;
+ /* dirty hack for crs_ln = 1, then HOME pressed */
+
+ default_ch = KEY_TAB;
+ mode = DONOTHING;
+ break;
+ }
+ }
+ }
+ if(n < 0)
+ /* search board */
+ {
+ setbfile(dirfile, currboard, FN_DIR);
+ n = search_aidu(dirfile, aidu);
+ if(n >= 0 && (currmode & MODE_DIGEST))
+ /* switch to normal read mode */
+ {
+ newdirect_new_ln = n;
+
+ new_ln = locmem->crs_ln;
+ /* dirty hack for crs_ln = 1, then HOME pressed */
+
+ default_ch = KEY_TAB;
+ mode = DONOTHING;
+ break;
+ }
+ }
+ if(n < 0)
+ /* search digest */
+ {
+ setbfile(dirfile, currboard, fn_mandex);
+ n = search_aidu(dirfile, aidu);
+ if(n >= 0 && !(currmode & MODE_DIGEST))
+ /* switch to digest mode */
+ {
+ newdirect_new_ln = n;
+
+ new_ln = locmem->crs_ln;
+ /* dirty hack for crs_ln = 1, then HOME pressed */
+
+ default_ch = KEY_TAB;
+ mode = DONOTHING;
+ break;
+ }
+ }
+ } /* if(aidu > 0) */
+ if(n < 0)
+ {
+ move(21, 0);
+ clrtobot();
+ move(22, 0);
+ if(aidu <= 0)
+ prints("不合法的" AID_DISPLAYNAME ",請確定輸入是正確的");
+ else
+ prints("找不到這個" AID_DISPLAYNAME ",可能是文章已消失,或是你找錯看板了");
+ pressanykey();
+ mode = FULLUPDATE;
+ } /* if(n < 0) */
+ else
+ {
+ new_ln = n + 1;
+ move(b_lines, 0);
+ clrtoeol();
+ mode = DONOTHING;
+ }
+ }
+ break;
case Ctrl('L'):
redoscr();
break;
@@ -1082,6 +1205,11 @@ i_read(int cmdmode, const char *direct, void (*dotitle) (),
int num;
num = last_line - p_lines + 1;
locmem = getkeep(currdirect, num < 1 ? 1 : num, last_line);
+ if(newdirect_new_ln >= 0)
+ {
+ locmem->crs_ln = newdirect_new_ln + 1;
+ newdirect_new_ln = -1;
+ }
}
recbase = -1;
/* no break */