Skip to content
Snippets Groups Projects
Commit 8f6d211d authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Several new @-codes that can be used to display user's configuration settings

I'll add detailed docs to http://wiki.synchro.net/custom:atcodes soon, but the
list is:

- TERMTYPE
- TERMROWS
- TERMCOLS
- AUTOTERM
- ANSI
- ASCII
- COLOR
- ICE
- RIP
- PETSCII
- SWAPDEL
- UTF8
- MOUSE
- UPAUSE
- SPIN
- PAUSESPIN
- EXPERT
- HOTKEYS
- MSGCLS
- REMSUBS
- FILEDESC
- FILEFLAG
- AUTOHANG
- AUTOLOGON
- QUIET
- ASKNSCAN
- ASKSSCAN
- ANFSCAN
- EDITOR
- SHELL

This should (at least mostly) address the issue #629
parent 65f1df28
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #4711 passed
......@@ -555,9 +555,99 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen, int* pmode, bool
if(strcmp(sp, "NETMAIL") == 0)
return useron.netmail;
if(strcmp(sp, "TERMTYPE") == 0)
return term_type(&useron, term_supports(), str, maxlen);
if(strcmp(sp, "TERMROWS") == 0)
return term_rows(&useron, str, maxlen);
if(strcmp(sp, "TERMCOLS") == 0)
return term_cols(&useron, str, maxlen);
if(strcmp(sp, "AUTOTERM") == 0)
return (useron.misc & AUTOTERM) ? text[On] : text[Off];
if(strcmp(sp, "ANSI") == 0)
return (useron.misc & ANSI) ? text[On] : text[Off];
if(strcmp(sp, "ASCII") == 0)
return (useron.misc & NO_EXASCII) ? text[On] : text[Off];
if(strcmp(sp, "COLOR") == 0)
return (useron.misc & COLOR) ? text[On] : text[Off];
if(strcmp(sp, "ICE") == 0)
return (useron.misc & ICE_COLOR) ? text[On] : text[Off];
if(strcmp(sp, "RIP") == 0)
return (useron.misc & RIP) ? text[On] : text[Off];
if(strcmp(sp, "PETSCII") == 0)
return (useron.misc & PETSCII) ? text[On] : text[Off];
if(strcmp(sp, "SWAPDEL") == 0)
return (useron.misc & SWAP_DELETE) ? text[On] : text[Off];
if(strcmp(sp, "UTF8") == 0)
return (useron.misc & UTF8) ? text[On] : text[Off];
if(strcmp(sp, "MOUSE") == 0)
return (useron.misc & MOUSE) ? text[On] : text[Off];
if(strcmp(sp, "UPAUSE") == 0)
return (useron.misc & UPAUSE) ? text[On] : text[Off];
if(strcmp(sp, "SPIN") == 0)
return (useron.misc & SPIN) ? text[On] : text[Off];
if(strcmp(sp, "PAUSESPIN") == 0)
return (useron.misc & NOPAUSESPIN) ? text[Off] : text[On];
if(strcmp(sp, "EXPERT") == 0)
return (useron.misc & EXPERT) ? text[On] : text[Off];
if(strcmp(sp, "HOTKEYS") == 0)
return (useron.misc & COLDKEYS) ? text[Off] : text[On];
if(strcmp(sp, "MSGCLS") == 0)
return (useron.misc & CLRSCRN) ? text[On] : text[Off];
if(strcmp(sp, "FWD") == 0)
return (useron.misc & NETMAIL) ? text[On] : text[Off];
if(strcmp(sp, "REMSUBS") == 0)
return (useron.misc & CURSUB) ? text[On] : text[Off];
if(strcmp(sp, "FILEDESC") == 0)
return (useron.misc & EXTDESC) ? text[On] : text[Off];
if(strcmp(sp, "FILEFLAG") == 0)
return (useron.misc & BATCHFLAG) ? text[On] : text[Off];
if(strcmp(sp, "AUTOHANG") == 0)
return (useron.misc & AUTOHANG) ? text[On] : text[Off];
if(strcmp(sp, "AUTOLOGON") == 0)
return (useron.misc & AUTOLOGON) ? text[On] : text[Off];
if(strcmp(sp, "QUIET") == 0)
return (useron.misc & QUIET) ? text[On] : text[Off];
if(strcmp(sp, "ASKNSCAN") == 0)
return (useron.misc & ASK_NSCAN) ? text[On] : text[Off];
if(strcmp(sp, "ASKSSCAN") == 0)
return (useron.misc & ASK_SSCAN) ? text[On] : text[Off];
if(strcmp(sp, "ANFSCAN") == 0)
return (useron.misc & ANFSCAN) ? text[On] : text[Off];
if(strcmp(sp, "EDITOR") == 0)
return (useron.xedit < 1 || useron.xedit >= cfg.total_xedits) ? text[None] : cfg.xedit[useron.xedit - 1]->name;
if(strcmp(sp, "SHELL") == 0)
return cfg.shell[useron.shell]->name;
if(strcmp(sp, "TMP") == 0)
return useron.tmpext;
......
......@@ -513,8 +513,44 @@ int sbbs_t::term_supports(int cmp_flags)
return(cmp_flags ? ((flags&cmp_flags)==cmp_flags) : (flags&TERM_FLAGS));
}
char* sbbs_t::term_rows(user_t* user, char* str, size_t size)
{
if(user->rows != TERM_ROWS_AUTO)
rows = user->rows;
safe_snprintf(str, size, "%s%d %s", user->rows ? nulstr:text[TerminalAutoDetect], rows, text[TerminalRows]);
return str;
}
char* sbbs_t::term_cols(user_t* user, char* str, size_t size)
{
if(user->cols != TERM_COLS_AUTO)
cols = user->cols;
safe_snprintf(str, size, "%s%d %s", user->cols ? nulstr:text[TerminalAutoDetect], cols, text[TerminalColumns]);
return str;
}
/****************************************************************************/
/* Returns verbose description of the terminal type configuration for user */
/****************************************************************************/
char* sbbs_t::term_type(user_t* user, int term, char* str, size_t size)
{
if(term & PETSCII)
safe_snprintf(str, size, "%sCBM/PETSCII"
,(user->misc & AUTOTERM) ? text[TerminalAutoDetect] : nulstr);
else
safe_snprintf(str, size, "%s%s / %s %s%s%s"
,(user->misc & AUTOTERM) ? text[TerminalAutoDetect] : nulstr
,term_charset(term)
,term_type(term)
,(term & COLOR) ? (term&ICE_COLOR ? text[TerminalIceColor] : text[TerminalColor]) : text[TerminalMonochrome]
,(term & MOUSE) ? text[TerminalMouse] : ""
,(term & SWAP_DELETE) ? "DEL=BS" : nulstr);
truncsp(str);
return str;
}
/****************************************************************************/
/* Returns description of the terminal type */
/* Returns short description of the terminal type */
/****************************************************************************/
const char* sbbs_t::term_type(int term)
{
......
......@@ -867,6 +867,9 @@ public:
void cond_blankline() { if(column > 0) newline(); if(lastlinelen) newline(); }
void cond_contline() { if(column > 0 && cols < TERM_COLS_DEFAULT) bputs(text[LongLineContinuationPrefix]); }
int term_supports(int cmp_flags=0);
char* term_rows(user_t*, char* str, size_t);
char* term_cols(user_t*, char* str, size_t);
char* term_type(user_t*, int term, char* str, size_t);
const char* term_type(int term_supports = -1);
const char* term_charset(int term_supports = -1);
bool update_nodeterm(void);
......
......@@ -875,6 +875,7 @@ enum {
,HashedFile
,NewUserValEmailSubj
,InactivityAlert
,None
,TOTAL_TEXT
};
......
......@@ -783,8 +783,8 @@ const char * const text_defaults[TOTAL_TEXT]={
,"\x01\x6e\x01\x62\x5b\x01\x68\x01\x77\x45\x01\x6e\x01\x62\x5d\x20\x01\x68\x45\x78\x74\x65\x72\x6e\x61\x6c\x20\x45\x64\x69\x74\x6f"
"\x72\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x01\x6e\x01\x62\x01\x5c\x3a\x20\x01\x63\x25\x73\x0d\x0a" // 476 UserDefaultsXeditor
,"\x01\x6e\x01\x62\x5b\x01\x68\x01\x77\x4c\x01\x6e\x01\x62\x5d\x20\x01\x68\x54\x65\x72\x6d\x69\x6e\x61\x6c\x20\x44\x69\x6d\x65\x6e"
"\x73\x69\x6f\x6e\x73\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x01\x6e\x01\x62\x01\x5c\x3a\x20\x01\x63\x25\x73\x20\x25\x73\x0d\x0a"
"" // 477 UserDefaultsRows
"\x73\x69\x6f\x6e\x73\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x01\x6e\x01\x62\x01\x5c\x3a\x20\x01\x63\x25\x73\x2c\x20\x25\x73\x0d"
"\x0a" // 477 UserDefaultsRows
,"\x01\x6e\x01\x62\x5b\x01\x68\x01\x77\x58\x01\x6e\x01\x62\x5d\x20\x01\x68\x45\x78\x70\x65\x72\x74\x20\x4d\x65\x6e\x75\x20\x4d\x6f"
"\x64\x65\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x01\x6e\x01\x62\x3a\x20\x01\x63\x25\x73\x0d\x0a" // 478 UserDefaultsMenuMode
,"\x01\x6e\x01\x62\x5b\x01\x68\x01\x77\x50\x01\x6e\x01\x62\x5d\x20\x01\x68\x53\x63\x72\x65\x65\x6e\x20\x50\x61\x75\x73\x65\x20\x20"
......@@ -1170,8 +1170,7 @@ const char * const text_defaults[TOTAL_TEXT]={
,"" // 709 NodeActionListFiles
,"" // 710 NodeActionLoggingOn
,"" // 711 NodeActionLocalChat
,"\x01\x68\x25\x73\x01\x6e\x01\x67\x20\x01\x28\x25\x75\x01\x29\x20\x25\x75\x20\x25\x63\x20\x69\x6e\x20\x6d\x75\x6c\x74\x69\x6e\x6f"
"\x64\x65\x20\x63\x68\x61\x74\x25\x2e\x30\x73\x25\x2e\x30\x73\x25\x2e\x30\x73\x20\x63\x68\x61\x6e\x6e\x65\x6c\x20\x25\x75" // 712 NodeActionMultiChat
,"" // 712 NodeActionMultiChat
,"" // 713 NodeActionGuruChat
,"" // 714 NodeActionChatSec
,"" // 715 NodeActionSysopAct
......@@ -1415,4 +1414,5 @@ const char * const text_defaults[TOTAL_TEXT]={
,"\x01\x5b\x01\x3e" // 862 HashedFile
,"\x4e\x65\x77\x20\x55\x73\x65\x72\x20\x56\x61\x6c\x69\x64\x61\x74\x69\x6f\x6e" // 863 NewUserValEmailSubj
,"\x07\x07\x07" // 864 InactivityAlert
,"\x4e\x6f\x6e\x65" // 865 None
};
......@@ -721,31 +721,14 @@ void sbbs_t::maindflts(user_t* user)
while(online) {
CLS;
getuserdat(&cfg,user);
if(user->rows != TERM_ROWS_AUTO)
rows = user->rows;
if(user->cols != TERM_COLS_AUTO)
cols = user->cols;
bprintf(text[UserDefaultsHdr],user->alias,user->number);
if(user == &useron)
update_nodeterm();
long term = (user == &useron) ? term_supports() : user->misc;
if(term&PETSCII)
safe_snprintf(str,sizeof(str),"%sCBM/PETSCII"
,user->misc&AUTOTERM ? text[TerminalAutoDetect]:nulstr);
else
safe_snprintf(str,sizeof(str),"%s%s / %s %s%s%s"
,user->misc&AUTOTERM ? text[TerminalAutoDetect]:nulstr
,term_charset(term)
,term_type(term)
,term&COLOR ? (term&ICE_COLOR ? text[TerminalIceColor] : text[TerminalColor]) : text[TerminalMonochrome]
,term&MOUSE ? text[TerminalMouse] : ""
,term&SWAP_DELETE ? "DEL=BS" : nulstr);
add_hotspot('T');
bprintf(text[UserDefaultsTerminal], truncsp(str));
safe_snprintf(str, sizeof(str), "%s%d %s,", user->cols ? nulstr:text[TerminalAutoDetect], cols, text[TerminalColumns]);
safe_snprintf(tmp, sizeof(tmp), "%s%d %s", user->rows ? nulstr:text[TerminalAutoDetect], rows, text[TerminalRows]);
bprintf(text[UserDefaultsTerminal], term_type(user, term, str, sizeof str));
add_hotspot('L');
bprintf(text[UserDefaultsRows], str, tmp);
bprintf(text[UserDefaultsRows], term_cols(user, str, sizeof str), term_rows(user, tmp, sizeof tmp));
if(cfg.total_shells>1) {
add_hotspot('K');
bprintf(text[UserDefaultsCommandSet]
......@@ -754,7 +737,7 @@ void sbbs_t::maindflts(user_t* user)
if(cfg.total_xedits) {
add_hotspot('E');
bprintf(text[UserDefaultsXeditor]
,user->xedit ? cfg.xedit[user->xedit-1]->name : "None");
,user->xedit ? cfg.xedit[user->xedit-1]->name : text[None]);
}
add_hotspot('A');
bprintf(text[UserDefaultsArcType]
......@@ -805,7 +788,7 @@ void sbbs_t::maindflts(user_t* user)
bprintf(text[UserDefaultsQuiet]
,user->misc&QUIET ? text[On] : text[Off]);
}
SAFECOPY(str,"None");
SAFECOPY(str, text[None]);
for(i=0;i<cfg.total_prots;i++) {
if(user->prot==cfg.prot[i]->mnemonic) {
SAFECOPY(str,cfg.prot[i]->name);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment