From 30d8973c42fc5c684c65ea0a345ef261eee2d89c Mon Sep 17 00:00:00 2001 From: "Rob Swindell (on Windows 11)" <rob@synchro.net> Date: Sat, 10 Feb 2024 16:42:47 -0800 Subject: [PATCH] nodestatus() use the user record's curxtrn internal code rather than aux value ... to determine/print the current external progarm being run. This fixes issue #716 --- src/sbbs3/scfglib.h | 2 ++ src/sbbs3/scfglib1.c | 16 ++++++++++++++++ src/sbbs3/userdat.c | 22 +++++++++++++++------- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/sbbs3/scfglib.h b/src/sbbs3/scfglib.h index e5049de0dc..6cbfb67796 100644 --- a/src/sbbs3/scfglib.h +++ b/src/sbbs3/scfglib.h @@ -59,6 +59,7 @@ int getlibnum_from_name(scfg_t*, const char* name); int getsubnum(scfg_t*, const char* code); int getgrpnum(scfg_t*, const char* code); int getgrpnum_from_name(scfg_t*, const char* name); +int getxtrnnum(scfg_t*, const char* code); int getxtrnsec(scfg_t*, const char* code); int getgurunum(scfg_t*, const char* code); int getchatactset(scfg_t*, const char* name); @@ -69,6 +70,7 @@ DLLEXPORT bool is_valid_dirnum(scfg_t*, int); DLLEXPORT bool is_valid_libnum(scfg_t*, int); DLLEXPORT bool is_valid_subnum(scfg_t*, int); DLLEXPORT bool is_valid_grpnum(scfg_t*, int); +DLLEXPORT bool is_valid_xtrnnum(scfg_t*, int); DLLEXPORT bool is_valid_xtrnsec(scfg_t*, int); DLLEXPORT char * trashcan_fname(scfg_t* cfg, const char *name, char* fname, size_t); diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c index 80e0e83066..2b14c5ac6b 100644 --- a/src/sbbs3/scfglib1.c +++ b/src/sbbs3/scfglib1.c @@ -761,6 +761,17 @@ int getlibnum_from_name(scfg_t* cfg, const char* name) return i; } +int getxtrnnum(scfg_t* cfg, const char* code) +{ + int i; + + for(i = 0; i < cfg->total_xtrns; i++) { + if(stricmp(cfg->xtrn[i]->code, code) == 0) + break; + } + return i; +} + int getxtrnsec(scfg_t* cfg, const char* code) { int i; @@ -838,6 +849,11 @@ bool is_valid_grpnum(scfg_t* cfg, int grpnum) return (grpnum >= 0) && (cfg != NULL) && (grpnum < cfg->total_grps); } +bool is_valid_xtrnnum(scfg_t* cfg, int xtrnnum) +{ + return (xtrnnum >= 0) && (cfg != NULL) && (xtrnnum < cfg->total_xtrns); +} + bool is_valid_xtrnsec(scfg_t* cfg, int secnum) { return (secnum >= 0) && (cfg != NULL) && (secnum < cfg->total_xtrnsecs); diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index f588d6e04e..11e20001b3 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -1106,7 +1106,7 @@ int opennodeext(scfg_t* cfg) } /****************************************************************************/ -/* Reads the data for node number 'number' into the structure 'node' */ +/* Reads the data for 1-based node number 'number' into the node structure */ /* from node.dab */ /****************************************************************************/ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) @@ -1157,6 +1157,7 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp) /****************************************************************************/ /* Write the data from the structure 'node' into node.dab */ +/* number is the 1-based node number */ /****************************************************************************/ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file) { @@ -1395,6 +1396,8 @@ char* nodestatus(scfg_t* cfg, node_t* node, char* buf, size_t buflen, int num) char tmp[128]; char* mer; int hour; + int xtrnnum; + user_t user = {0}; if(node==NULL) { strncpy(buf,"(null)",buflen); @@ -1467,13 +1470,18 @@ char* nodestatus(scfg_t* cfg, node_t* node, char* buf, size_t buflen, int num) strcat(str,"posting auto-message"); break; case NODE_XTRN: - if(!node->aux) + if(node->aux == 0) { strcat(str,"at external program menu"); - else if(node->aux<=cfg->total_xtrns) - sprintf(str+strlen(str),"running %s" - ,cfg->xtrn[node->aux-1]->name); - else - sprintf(str+strlen(str),"running external program #%d" + break; + } + user.number = node->useron; + getuserdat(cfg, &user); + xtrnnum = getxtrnnum(cfg, user.curxtrn); + if(is_valid_xtrnnum(cfg, xtrnnum)) + sprintf(str+strlen(str),"running %s" + ,cfg->xtrn[xtrnnum]->name); + else + sprintf(str+strlen(str),"running external program #%d" ,node->aux); break; case NODE_DFLT: -- GitLab