diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-06 19:03:14 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-06 19:03:14 +0800 |
commit | 525ac36db85be7dd442b654f789582fa12dab91e (patch) | |
tree | 30948211b18de9dd6ca37efe0002b83f0fcf8f8c | |
parent | 0480bbc1fe207b2d056b522f1e64423dc1dffbad (diff) | |
download | pttbbs-525ac36db85be7dd442b654f789582fa12dab91e.tar pttbbs-525ac36db85be7dd442b654f789582fa12dab91e.tar.gz pttbbs-525ac36db85be7dd442b654f789582fa12dab91e.tar.bz2 pttbbs-525ac36db85be7dd442b654f789582fa12dab91e.tar.lz pttbbs-525ac36db85be7dd442b654f789582fa12dab91e.tar.xz pttbbs-525ac36db85be7dd442b654f789582fa12dab91e.tar.zst pttbbs-525ac36db85be7dd442b654f789582fa12dab91e.zip |
- fixed: peek_input keeps waiting for new input. (due to buf control)
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3799 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | include/proto.h | 2 | ||||
-rw-r--r-- | mbbsd/bbslua.c | 16 | ||||
-rw-r--r-- | mbbsd/io.c | 14 | ||||
-rw-r--r-- | mbbsd/user.c | 3 |
4 files changed, 21 insertions, 14 deletions
diff --git a/include/proto.h b/include/proto.h index e29cba46..2f6c2470 100644 --- a/include/proto.h +++ b/include/proto.h @@ -333,7 +333,7 @@ void set_converting_type(int which); /* io */ int getdata(int line, int col, const char *prompt, char *buf, int len, int echo); int igetch(void); -int wait_input(float f, int flDoRefresh); +int wait_input(float f, int bIgnoreBuf); int peek_input(float f, int c); void drop_input(void); int getdata_str(int line, int col, const char *prompt, char *buf, int len, int echo, const char *defaultstr); diff --git a/mbbsd/bbslua.c b/mbbsd/bbslua.c index 09c75dcc..98802b4a 100644 --- a/mbbsd/bbslua.c +++ b/mbbsd/bbslua.c @@ -33,8 +33,8 @@ ////////////////////////////////////////////////////////////////////////// #define BLAPI_PROTO int -#define BLCONF_EXEC_COUNT (1000) -#define BLCONF_PEEK_TIME (0.1) +#define BLCONF_EXEC_COUNT (5000) +#define BLCONF_PEEK_TIME (0.01) #define BLCONF_BREAK_KEY Ctrl('C') ////////////////////////////////////////////////////////////////////////// @@ -143,6 +143,14 @@ bl_addstr(lua_State* L) return 0; } +BLAPI_PROTO +bl_print(lua_State* L) +{ + bl_addstr(L); + outc('\n'); + return 0; +} + void bl_k2s(lua_State* L, int v) { @@ -343,8 +351,8 @@ static const struct luaL_reg lib_bbslua [] = { { "refresh", bl_refresh }, { "redrawwin", bl_redrawwin }, { "addstr", bl_addstr }, - { "print", bl_addstr }, { "outs", bl_addstr }, + { "print", bl_print }, /* input */ { "getch", bl_getch }, { "getdata", bl_getstr }, @@ -402,7 +410,7 @@ bbsluaRegConst(lua_State *L, const char *globName) lua_settable(L, -3); // global - lua_pushcfunction(L, bl_addstr); + lua_pushcfunction(L, bl_print); lua_setglobal(L, "print"); } @@ -325,7 +325,8 @@ _debug_check_keyinput() } else { outs("Waiting for key input. 'q' to exit, 'd' to try dbcs-aware"); } - wait_input(-1, 1); + refresh(); + wait_input(-1, 0); switch(dogetch()) { case 'd': @@ -647,21 +648,18 @@ igetch(void) * Return 1 if anything available. */ int -wait_input(float f, int flDoRefresh) +wait_input(float f, int bIgnoreBuf) { int sel = 0; fd_set readfds; struct timeval tv, *ptv = &tv; - if(num_in_buf() > 0) // for EINTR + if(!bIgnoreBuf && num_in_buf() > 0) return 1; FD_ZERO(&readfds); FD_SET(0, &readfds); - if(flDoRefresh) - refresh(); - if(f > 0) { tv.tv_sec = (long) f; @@ -674,7 +672,7 @@ wait_input(float f, int flDoRefresh) #endif do { - if(num_in_buf() > 0) + if(!bIgnoreBuf && num_in_buf() > 0) return 1; sel = select(1, &readfds, NULL, NULL, ptv); } while (sel < 0 && errno == EINTR); @@ -699,7 +697,7 @@ peek_input(float f, int c) assert (c > 0 && c < ' '); // only ^x keys are safe to be detected. // other keys may fall into escape sequence. - if (wait_input(f, 0) && (IBUFSIZE > ibufsize)) + if (wait_input(f, 1) && (IBUFSIZE > ibufsize)) { int len = tty_read(inbuf + ibufsize, IBUFSIZE - ibufsize); #ifdef CONVERT diff --git a/mbbsd/user.c b/mbbsd/user.c index c68dc5b3..182f8610 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -2062,7 +2062,8 @@ int u_detectDBCSAwareEvilClient() * years) of num_in_buf forced me to write new wait_input. * Anyway it is fixed now. */ - if(wait_input(0.1, 1)) + refresh(); + if(wait_input(0.1, 0)) // if(igetch() == ch) // if (num_in_buf() > 0) { |