diff --git a/src/sbbs3/getkey.cpp b/src/sbbs3/getkey.cpp index 3bfdbfd212706bdbebedba7f6ee9ff3f558d1205..17324676df70c74efad4c7db2fd787f1930222a8 100644 --- a/src/sbbs3/getkey.cpp +++ b/src/sbbs3/getkey.cpp @@ -538,5 +538,11 @@ void sbbs_t::pause() /****************************************************************************/ void sbbs_t::ungetkey(char ch) { +#if 0 /* this way breaks ansi_getxy() */ RingBufWrite(&inbuf,(uchar*)&ch,sizeof(uchar)); +#else + keybuf[keybuftop++]=ch; + if(keybuftop==KEY_BUFSIZE) + keybuftop=0; +#endif } diff --git a/src/sbbs3/inkey.cpp b/src/sbbs3/inkey.cpp index e29d8c0c9c6db804d9179036ad1ddf6eca478de7..39b3dd5b2b28527aed3ca32c67611c69fc2efc3b 100644 --- a/src/sbbs3/inkey.cpp +++ b/src/sbbs3/inkey.cpp @@ -49,7 +49,13 @@ char sbbs_t::inkey(long mode, unsigned long timeout) { uchar ch=0; - ch=incom(timeout); + if(keybuftop!=keybufbot) { + ch=keybuf[keybufbot++]; + if(keybufbot==KEY_BUFSIZE) + keybufbot=0; + } else + ch=incom(timeout); + if(ch==0) { // moved here from getkey() on AUG-29-2001 if(sys_status&SS_SYSPAGE) diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 5f3b4875ad1502bc05e62fb531667fe673c21660..7581e227cfd51c47112562f98629fe353c7af27f 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -2340,6 +2340,7 @@ sbbs_t::sbbs_t(ushort node_num, DWORD addr, char* name, SOCKET sd, timeleft = 60*10; /* just incase this is being used for calling gettimeleft() */ uselect_total = 0; lbuflen = 0; + keybufbot=keybuftop=0; /* initialize [unget]keybuf pointers */ connection="Telnet"; ZERO_VAR(telnet_local_option); @@ -2349,7 +2350,7 @@ sbbs_t::sbbs_t(ushort node_num, DWORD addr, char* name, SOCKET sd, telnet_mode=0; telnet_last_rxch=0; - sys_status=lncntr=tos=criterrs=lbuflen=slcnt=0L; + sys_status=lncntr=tos=criterrs=slcnt=0L; curatr=LIGHTGRAY; attr_sp=0; /* attribute stack pointer */ errorlevel=0; @@ -3215,6 +3216,7 @@ void sbbs_t::reset_logon_vars(void) slcnt=0; altul=0; timeleft_warn=0; + keybufbot=keybuftop=0; logon_uls=logon_ulb=logon_dls=logon_dlb=0; logon_posts=logon_emails=logon_fbacks=0; batdn_total=batup_total=0; diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index 7bdadbb9e45360a99c92a74ff555e1aed9f89cb4..d2e832ce567d11567f2b6889187ffb9ac9ae8980 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -255,6 +255,8 @@ public: char *text[TOTAL_TEXT]; /* Text from ctrl\text.dat */ char *text_sav[TOTAL_TEXT]; /* Text from ctrl\text.dat */ char dszlog[127]; /* DSZLOG enviornment variable */ + int keybuftop,keybufbot; /* Keyboard input buffer pointers (for ungetkey) */ + char keybuf[KEY_BUFSIZE]; /* Keyboard input buffer */ char * connection; /* Connection Description */ ulong cur_rate; /* Current Connection (DCE) Rate */ ulong cur_cps; /* Current Average Transfer CPS */