Skip to content
Snippets Groups Projects
Commit af91e75f authored by rswindell's avatar rswindell
Browse files

Added support for control key pass-through mask, allows for pass-through

of control key combinations in inkey() via SCFG or script.
parent c2f6131d
No related branches found
No related tags found
No related merge requests found
......@@ -74,6 +74,11 @@ char sbbs_t::inkey(long mode)
ch&=0x7f;
timeout=time(NULL);
/* Is this control key flagged as passthru? */
if(ch<' ' && cfg.ctrlkey_passthru&(1<<ch))
return(ch); /* do not handle here */
if(ch==CTRL_C) { /* Ctrl-C Abort */
sys_status|=SS_ABORT;
if(mode&K_SPIN) /* back space once if on spinning cursor */
......
......@@ -55,6 +55,7 @@ enum {
,CON_PROP_TIMELEFT_WARN /* low timeleft warning flag */
,CON_PROP_ABORTABLE
,CON_PROP_TELNET_MODE
,CON_PROP_CTRLKEY_PASSTHRU
};
static JSBool js_console_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
......@@ -110,6 +111,9 @@ static JSBool js_console_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
return(JS_FALSE);
*vp = STRING_TO_JSVAL(js_str);
return(JS_TRUE);
case CON_PROP_CTRLKEY_PASSTHRU:
val=sbbs->cfg.ctrlkey_passthru;
break;
default:
return(JS_TRUE);
}
......@@ -171,6 +175,9 @@ static JSBool js_console_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
break;
SAFECOPY(sbbs->question,JS_GetStringBytes(str));
break;
case CON_PROP_CTRLKEY_PASSTHRU:
sbbs->cfg.ctrlkey_passthru=val;
break;
default:
return(JS_TRUE);
}
......@@ -181,20 +188,21 @@ static JSBool js_console_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
#define CON_PROP_FLAGS JSPROP_ENUMERATE
static struct JSPropertySpec js_console_properties[] = {
/* name ,tinyid ,flags ,getter,setter */
{ "status" ,CON_PROP_STATUS ,CON_PROP_FLAGS ,NULL,NULL},
{ "line_counter" ,CON_PROP_LNCNTR ,CON_PROP_FLAGS ,NULL,NULL},
{ "attributes" ,CON_PROP_ATTR ,CON_PROP_FLAGS ,NULL,NULL},
{ "top_of_screen" ,CON_PROP_TOS ,CON_PROP_FLAGS ,NULL,NULL},
{ "screen_rows" ,CON_PROP_ROWS ,CON_PROP_FLAGS ,NULL,NULL},
{ "autoterm" ,CON_PROP_AUTOTERM ,CON_PROP_FLAGS ,NULL,NULL},
{ "timeout" ,CON_PROP_TIMEOUT ,CON_PROP_FLAGS ,NULL,NULL},
{ "timeleft_warning" ,CON_PROP_TIMELEFT_WARN ,CON_PROP_FLAGS ,NULL,NULL},
{ "rio_abortable" ,CON_PROP_ABORTABLE ,CON_PROP_FLAGS ,NULL,NULL},
{ "telnet_mode" ,CON_PROP_TELNET_MODE ,CON_PROP_FLAGS ,NULL,NULL},
{ "wordwrap" ,CON_PROP_WORDWRAP ,JSPROP_ENUMERATE|JSPROP_READONLY ,NULL,NULL},
{ "question" ,CON_PROP_QUESTION ,CON_PROP_FLAGS ,NULL,NULL},
/* name ,tinyid ,flags ,getter,setter */
{ "status" ,CON_PROP_STATUS ,CON_PROP_FLAGS ,NULL,NULL},
{ "line_counter" ,CON_PROP_LNCNTR ,CON_PROP_FLAGS ,NULL,NULL},
{ "attributes" ,CON_PROP_ATTR ,CON_PROP_FLAGS ,NULL,NULL},
{ "top_of_screen" ,CON_PROP_TOS ,CON_PROP_FLAGS ,NULL,NULL},
{ "screen_rows" ,CON_PROP_ROWS ,CON_PROP_FLAGS ,NULL,NULL},
{ "autoterm" ,CON_PROP_AUTOTERM ,CON_PROP_FLAGS ,NULL,NULL},
{ "timeout" ,CON_PROP_TIMEOUT ,CON_PROP_FLAGS ,NULL,NULL},
{ "timeleft_warning" ,CON_PROP_TIMELEFT_WARN ,CON_PROP_FLAGS ,NULL,NULL},
{ "rio_abortable" ,CON_PROP_ABORTABLE ,CON_PROP_FLAGS ,NULL,NULL},
{ "telnet_mode" ,CON_PROP_TELNET_MODE ,CON_PROP_FLAGS ,NULL,NULL},
{ "wordwrap" ,CON_PROP_WORDWRAP ,JSPROP_ENUMERATE|JSPROP_READONLY ,NULL,NULL},
{ "question" ,CON_PROP_QUESTION ,CON_PROP_FLAGS ,NULL,NULL},
{ "ctrlkey_passthru" ,CON_PROP_CTRLKEY_PASSTHRU ,CON_PROP_FLAGS ,NULL,NULL},
{0}
};
......@@ -212,6 +220,7 @@ static char* con_prop_desc[] = {
,"current telnet mode (see TELNET_MODE_* in sbbsdefs.js for valid values)"
,"word-wrap buffer (used by getstr)"
,"current yes/no question (set by yesno and noyes)"
,"control key pass-through bitmask, set bits represent control key combinations <b>not</b> handled by inkey() method"
,NULL
};
#endif
......
......@@ -575,6 +575,7 @@ typedef struct
ushort sec_hangup; /* Seconds before inactivity hang-up */
char color[TOTAL_COLORS]; /* Different colors for the BBS */
ulong ctrlkey_passthru; /* Bits represent control keys NOT handled by inkey() */
char wfc_cmd[10][LEN_CMD+1]; /* 0-9 WFC DOS commands */
char wfc_scmd[12][LEN_CMD+1]; /* F1-F12 WFC shrinking DOS commands */
......
......@@ -294,9 +294,10 @@ BOOL read_main_cfg(scfg_t* cfg, char* error)
get_str(cfg->logout_mod,instream);
get_str(cfg->sync_mod,instream);
get_str(cfg->expire_mod,instream);
get_int(cfg->ctrlkey_passthru,instream);
get_int(c,instream);
for(i=0;i<224;i++) /* unused - initialized to NULL */
for(i=0;i<222;i++) /* unused - initialized to NULL */
get_int(n,instream);
for(i=0;i<254;i++) /* unused - initialized to 0xff */
get_int(n,instream);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment