--- sbbs/src/sbbs3/atcodes.cpp 2018/04/24 16:41:23 1.1.1.1 +++ sbbs/src/sbbs3/atcodes.cpp 2018/04/24 16:43:08 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet "@code" functions */ -/* $Id: atcodes.cpp,v 1.1.1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: atcodes.cpp,v 1.1.1.2 2018/04/24 16:43:08 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -48,15 +48,16 @@ /****************************************************************************/ /* Returns 0 if invalid @ code. Returns length of @ code if valid. */ /****************************************************************************/ -int sbbs_t::show_atcode(char *instr) +int sbbs_t::show_atcode(const char *instr) { - char str[128],str2[128],*p,*tp,*sp; + char str[128],str2[128],*tp,*sp,*p; int len; int disp_len; bool padded_left=false; bool padded_right=false; + const char *cp; - sprintf(str,"%.80s",instr); + SAFECOPY(str,instr); tp=strchr(str+1,'@'); if(!tp) /* no terminating @ */ return(0); @@ -78,21 +79,21 @@ int sbbs_t::show_atcode(char *instr) *p=0; } - p=atcode(sp,str2,sizeof(str2)); - if(p==NULL) + cp=atcode(sp,str2,sizeof(str2)); + if(cp==NULL) return(0); if(padded_left) - rprintf("%-*.*s",disp_len,disp_len,p); + bprintf("%-*.*s",disp_len,disp_len,cp); else if(padded_right) - rprintf("%*.*s",disp_len,disp_len,p); + bprintf("%*.*s",disp_len,disp_len,cp); else - rputs(p); + bputs(cp); return(len); } -char* sbbs_t::atcode(char* sp, char* str, size_t maxlen) +const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen) { char* tp; uint i; @@ -145,7 +146,7 @@ char* sbbs_t::atcode(char* sp, char* str } if(!strcmp(sp,"UPTIME")) { - extern time_t uptime; + extern volatile time_t uptime; time_t up=time(NULL)-uptime; if(up<0) up=0; @@ -163,7 +164,7 @@ char* sbbs_t::atcode(char* sp, char* str } if(!strcmp(sp,"SERVED")) { - extern DWORD served; + extern volatile ulong served; safe_snprintf(str,maxlen,"%lu",served); return(str); } @@ -237,11 +238,17 @@ char* sbbs_t::atcode(char* sp, char* str return(str); } + if(!strcmp(sp,"TIMEZONE")) + return(smb_zonestr(sys_timezone(&cfg),str)); + if(!strcmp(sp,"DATE") || !strcmp(sp,"SYSDATE")) { now=time(NULL); return(unixtodstr(&cfg,now,str)); } + if(!strcmp(sp,"DATETIME")) + return(timestr(time(NULL))); + if(!strcmp(sp,"TMSG")) { l=0; for(i=0;i"); - return(timestr(&event_time)); + return(timestr(event_time)); } /* LASTCALL */ @@ -439,7 +446,7 @@ char* sbbs_t::atcode(char* sp, char* str } if(!strcmp(sp,"LASTON")) - return(timestr(&useron.laston)); + return(timestr(useron.laston)); if(!strcmp(sp,"LASTDATEON")) return(unixtodstr(&cfg,useron.laston,str)); @@ -508,7 +515,7 @@ char* sbbs_t::atcode(char* sp, char* str return(unixtodstr(&cfg,ns_time,str)); if(!strcmp(sp,"NEWFILETIME")) - return(timestr(&ns_time)); + return(timestr(ns_time)); /* MAXDL */ @@ -592,6 +599,15 @@ char* sbbs_t::atcode(char* sp, char* str return(nulstr); } + if(!strncmp(sp,"EXEC_XTRN:",10)) { + for(i=0;icode,sp+10)) + break; + if(ito_ext!=NULL) safe_snprintf(str,maxlen,"%s #%s",current_msg->to,current_msg->to_ext); - else if(current_msg->to_net.type!=NET_NONE) + else if(current_msg->to_net.type!=NET_NONE) { + char tmp[128]; safe_snprintf(str,maxlen,"%s (%s)",current_msg->to - ,smb_netaddr(¤t_msg->to_net)); - else + ,smb_netaddrstr(¤t_msg->to_net,tmp)); + } else return(current_msg->to); return(str); } @@ -924,7 +929,7 @@ char* sbbs_t::atcode(char* sp, char* str return(current_msg->to_ext); } if(!strcmp(sp,"MSG_TO_NET") && current_msg!=NULL) - return(smb_netaddr(¤t_msg->to_net)); + return(smb_netaddrstr(¤t_msg->to_net,str)); if(!strcmp(sp,"MSG_FROM") && current_msg!=NULL) { if(current_msg->from==NULL) return(nulstr); @@ -932,10 +937,11 @@ char* sbbs_t::atcode(char* sp, char* str return(text[Anonymous]); if(current_msg->from_ext!=NULL) safe_snprintf(str,maxlen,"%s #%s",current_msg->from,current_msg->from_ext); - else if(current_msg->from_net.type!=NET_NONE) + else if(current_msg->from_net.type!=NET_NONE) { + char tmp[128]; safe_snprintf(str,maxlen,"%s (%s)",current_msg->from - ,smb_netaddr(¤t_msg->from_net)); - else + ,smb_netaddrstr(¤t_msg->from_net,tmp)); + } else return(current_msg->from); return(str); } @@ -955,17 +961,17 @@ char* sbbs_t::atcode(char* sp, char* str if(!strcmp(sp,"MSG_FROM_NET") && current_msg!=NULL) { if(current_msg->from_net.type!=NET_NONE && (!(current_msg->hdr.attr&MSG_ANONYMOUS) || SYSOP)) - return(smb_netaddr(¤t_msg->from_net)); + return(smb_netaddrstr(¤t_msg->from_net,str)); return(nulstr); } if(!strcmp(sp,"MSG_SUBJECT") && current_msg!=NULL) return(current_msg->subj==NULL ? nulstr : current_msg->subj); if(!strcmp(sp,"MSG_DATE") && current_msg!=NULL) - return(timestr((time_t *)¤t_msg->hdr.when_written.time)); + return(timestr(current_msg->hdr.when_written.time)); if(!strcmp(sp,"MSG_TIMEZONE") && current_msg!=NULL) return(smb_zonestr(current_msg->hdr.when_written.zone,NULL)); if(!strcmp(sp,"MSG_ATTR") && current_msg!=NULL) { - safe_snprintf(str,maxlen,"%s%s%s%s%s%s%s%s%s%s" + safe_snprintf(str,maxlen,"%s%s%s%s%s%s%s%s%s%s%s" ,current_msg->hdr.attr&MSG_PRIVATE ? "Private " :nulstr ,current_msg->hdr.attr&MSG_READ ? "Read " :nulstr ,current_msg->hdr.attr&MSG_DELETE ? "Deleted " :nulstr @@ -976,6 +982,7 @@ char* sbbs_t::atcode(char* sp, char* str ,current_msg->hdr.attr&MSG_MODERATED ? "Moderated " :nulstr ,current_msg->hdr.attr&MSG_VALIDATED ? "Validated " :nulstr ,current_msg->hdr.attr&MSG_REPLIED ? "Replied " :nulstr + ,current_msg->hdr.attr&MSG_NOREPLY ? "NoReply " :nulstr ); return(str); }