diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp index 878f7520ef7a7b486ed3e6690897daf4784757b8..74d5a9daea883c4933c82194b6917335c6a410b4 100644 --- a/src/sbbs3/atcodes.cpp +++ b/src/sbbs3/atcodes.cpp @@ -321,15 +321,22 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen, long* pmode) if(!strcmp(sp,"LOCATION")) return(cfg.sys_location); - if(!strcmp(sp,"NODE")) { + if(strcmp(sp,"NODE") == 0 || strcmp(sp,"NN") == 0) { safe_snprintf(str,maxlen,"%u",cfg.node_num); return(str); } - - if(!strcmp(sp,"TNODE")) { + if(strcmp(sp, "TNODES") == 0 || strcmp(sp, "TNODE") == 0 || strcmp(sp, "TN") == 0) { safe_snprintf(str,maxlen,"%u",cfg.sys_nodes); return(str); } + if(strcmp(sp, "ANODES") == 0 || strcmp(sp, "ANODE") == 0 || strcmp(sp, "AN") == 0) { + safe_snprintf(str, maxlen, "%u", count_nodes(/* self: */true)); + return str; + } + if(strcmp(sp, "ONODES") == 0 || strcmp(sp, "ONODE") == 0 || strcmp(sp, "ON") == 0) { + safe_snprintf(str, maxlen, "%u", count_nodes(/* self: */false)); + return str; + } if(strcmp(sp, "PAGER") == 0) return (thisnode.misc&NODE_POFF) ? text[Off] : text[On]; diff --git a/src/sbbs3/getnode.cpp b/src/sbbs3/getnode.cpp index c09096b1d552840ea82ba6ae8388a6985e2d3738..dff1d6ff23b3e6280136e6dfe66d9e68e2a7685d 100644 --- a/src/sbbs3/getnode.cpp +++ b/src/sbbs3/getnode.cpp @@ -661,3 +661,20 @@ void sbbs_t::printnodedat(uint number, node_t* node) attr(LIGHTGRAY); CRLF; } + +uint sbbs_t::count_nodes(bool self) +{ + uint count = 0; + + for(int i=1; i<=cfg.sys_nodes && i<=cfg.sys_lastnode; i++) { + node_t node; + if(getnodedat(i, &node, false) != 0) + continue; + if(!self && i==cfg.node_num) + continue; + if(node.status != NODE_INUSE) + continue; + count++; + } + return count; +} diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index d5c30254f5bea85b44e57c7b95e5ea18c46c14d3..72549d9c604b13deeb2a925ce4df7bc748b2836f 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -819,6 +819,7 @@ public: void nodesync(bool clearline = false); user_t nodesync_user; bool nodesync_inside; + uint count_nodes(bool self = true); /* putnode.cpp */ int putnodedat(uint number, node_t * node);