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

Overhaul EXITINFO.BBS creation using C++ templated classes

Ah, that's better. Actually would work correctly on big-endian platforms (should we ever support one) and with way less code.
parent 29b86453
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #2859 failed
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "sbbs.h" #include "sbbs.h"
#include "qbbsdefs.hpp"
/****************************************************************************/ /****************************************************************************/
/* This is the external programs (doors) section of the bbs */ /* This is the external programs (doors) section of the bbs */
...@@ -545,131 +546,52 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl ...@@ -545,131 +546,52 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC); errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
return; return;
} }
char blank[256]{};
w=(WORD)dte_rate;
write(file,&w,sizeof(w)); /* BaudRate */
/* SysInfo */
getstats(&cfg,0,&stats); getstats(&cfg,0,&stats);
write(file,&stats.logons,sizeof(stats.logons)); /* CallCount */ QBBS::exitinfo exitinfo{};
write(file,blank,36); /* LastCallerName */ exitinfo.BaudRate = (uint16_t)dte_rate;
write(file,blank,36); /* LastCallerAlias */ exitinfo.SysInfo.CallCount = stats.logons;
write(file,blank,92); /* ExtraSpace */ exitinfo.UserInfo.Name = name;
/* TimeLogInfo */ exitinfo.UserInfo.Location = useron.location;
write(file,blank,9); /* StartDate */ exitinfo.UserInfo.DataPhone = useron.phone;
write(file,blank,24*sizeof(int16_t)); /* BusyPerHour */ exitinfo.UserInfo.HomePhone = useron.phone;
write(file,blank,7*sizeof(int16_t)); /* BusyPerDay */
/* UserInfo */
str2pas(name,str); /* Name */
write(file,str,36);
str2pas(useron.location,str);
write(file,str,26); /* City */
str2pas(useron.pass,str);
write(file,str,16); /* Pwd */
str2pas(useron.phone,str);
write(file,str,13); /* DataPhone */
write(file,str,13); /* HomePhone */
localtime32(&useron.laston,&tm); localtime32(&useron.laston,&tm);
SAFEPRINTF2(tmp,"%02d:%02d",tm.tm_hour,tm.tm_min); SAFEPRINTF2(tmp,"%02d:%02d",tm.tm_hour,tm.tm_min);
str2pas(tmp,str); exitinfo.UserInfo.LastTime = tmp;
write(file,str,6); /* LastTime */
unixtodstr(&cfg,useron.laston,tmp); unixtodstr(&cfg,useron.laston,tmp);
str2pas(tmp,str); exitinfo.UserInfo.LastDate = tmp;
write(file,str,9); /* LastDate */ if(useron.misc&DELETED) exitinfo.UserInfo.Attrib |= QBBS::USER_ATTRIB_DELETED;
c=0; if(useron.misc&CLRSCRN) exitinfo.UserInfo.Attrib |= QBBS::USER_ATTRIB_CLRSCRN;
if(useron.misc&DELETED) c|=(1<<0); if(useron.misc&UPAUSE) exitinfo.UserInfo.Attrib |= QBBS::USER_ATTRIB_MORE;
if(useron.misc&CLRSCRN) c|=(1<<1); if(term & ANSI) exitinfo.UserInfo.Attrib |= QBBS::USER_ATTRIB_ANSI;
if(useron.misc&UPAUSE) c|=(1<<2); if(useron.sex=='F') exitinfo.UserInfo.Attrib |= QBBS::USER_ATTRIB_FEMALE;
if(term & ANSI) c|=(1<<3); exitinfo.UserInfo.Flags = useron.flags1;
if(useron.sex=='F') c|=(1<<7); exitinfo.UserInfo.TimesPosted = useron.posts;
write(file,&c,1); /* Attrib */ exitinfo.UserInfo.SecLvl = useron.level;
write(file,&useron.flags1,4); /* Flags */ exitinfo.UserInfo.Ups = useron.uls;
w=0; exitinfo.UserInfo.Downs = useron.dls;
write(file,&w,sizeof(w)); /* Credit */ exitinfo.UserInfo.UpK = (uint16_t)(useron.ulb/1024UL);
write(file,&w,sizeof(w)); /* Pending */ exitinfo.UserInfo.DownK = (uint16_t)(useron.dlb/1024UL);
write(file,&useron.posts,sizeof(useron.posts));/* TimesPosted */ exitinfo.UserInfo.TodayK = (uint16_t)(logon_dlb/1024UL);
write(file,&w,sizeof(w)); /* HighMsgRead */ exitinfo.UserInfo.ScreenLength = (int16_t)rows;
w=useron.level;
write(file,&w,sizeof(w)); /* SecLvl */
w=0;
write(file,&w,sizeof(w)); /* Times */
write(file,&useron.uls,sizeof(useron.uls)); /* Ups */
write(file,&useron.dls,sizeof(useron.dls)); /* Downs */
w=(ushort)(useron.ulb/1024UL);
write(file,&w,sizeof(w)); /* UpK */
w=(ushort)(useron.dlb/1024UL);
write(file,&w,sizeof(w)); /* DownK */
w=(ushort)(logon_dlb/1024UL);
write(file,&w,sizeof(w)); /* TodayK */
w=0;
write(file,&w,sizeof(w)); /* Elapsed */
write(file,&w,sizeof(w)); /* Len */
write(file,&w,sizeof(w)); /* CombinedPtr */
write(file,&w,sizeof(w)); /* AliasPtr */
l = strtol(useron.birth, NULL, 10);
write(file,&l,sizeof(l)); /* Birthday (as a long?) */
/* EventInfo */
c=0;
write(file,&c,sizeof(char)); /* Status */
write(file,&l /* sys_eventtime */,sizeof(l)); /* RunTime */
write(file,&c,sizeof(char)); /* ErrorLevel */
c='\xff';
write(file,&c,sizeof(char)); /* Days */
// c=sys_eventnode==node_num || sys_misc&SM_TIMED_EX ? 1 : 0;
c=0;
write(file,&c,sizeof(char)); /* Forced */
if(!cfg.total_events)
l=0;
else
l=cfg.event[0]->last;
write(file,&l,sizeof(l)); /* LastTimeRun */
memset(str,0,40);
write(file,str,7); /* Spare */
c=0;
write(file,&c,1); /* NetMailEntered */
write(file,&c,1); /* EchoMailEntered */
localtime_r(&logontime,&tm); localtime_r(&logontime,&tm);
SAFEPRINTF2(tmp,"%02d:%02d",tm.tm_hour,tm.tm_min); SAFEPRINTF2(tmp,"%02d:%02d",tm.tm_hour,tm.tm_min);
str2pas(tmp,str); exitinfo.LoginTime = tmp;
write(file,str,6); /* LoginTime */
unixtodstr(&cfg,(time32_t)logontime,tmp); unixtodstr(&cfg,(time32_t)logontime,tmp);
str2pas(tmp,str); exitinfo.LoginDate = tmp;
write(file,str,9); /* LoginDate */ exitinfo.TimeLimit = cfg.level_timepercall[useron.level];
write(file,&cfg.level_timepercall[useron.level],sizeof(int16_t)); /* TmLimit */ exitinfo.Credit = useron.cdt;
write(file,&logontime,sizeof(time32_t)); /* LoginSec */ exitinfo.UserRecNum = useron.number;
write(file,&useron.cdt,sizeof(useron.cdt)); /* Credit */ exitinfo.WantChat = (sys_status & SS_SYSPAGE);
write(file,&useron.number,sizeof(useron.number)); /* UserRecNum */ exitinfo.ScreenClear = (useron.misc & CLRSCRN);
i=0; exitinfo.MorePrompts = (useron.misc & UPAUSE);
write(file,&i,2); /* ReadThru */ exitinfo.GraphicsMode = !(term & NO_EXASCII);
write(file,&i,2); /* PageTimes */ exitinfo.ExternEdit = (useron.xedit);
write(file,&i,2); /* DownLimit */ exitinfo.ScreenLength = (int16_t)rows;
c=sys_status&SS_SYSPAGE ? 1:0; exitinfo.MNP_Connect = true;
write(file,&c,1); /* WantChat */ exitinfo.ANSI_Capable = (term & ANSI);
c=0; exitinfo.RIP_Active = (term & RIP);
write(file,&c,1); /* GosubLevel */
write(file, &exitinfo, sizeof(exitinfo));
memset(str,0,255);
for(i=0;i<20;i++)
write(file,str,9); /* GosubData */
write(file,str,9); /* Menu */
c=useron.misc&CLRSCRN ? 1:0;
write(file,&c,1); /* ScreenClear */
c=useron.misc&UPAUSE ? 1:0;
write(file,&c,1); /* MorePrompts */
c=(term & NO_EXASCII) ? 0:1;
write(file,&c,1); /* GraphicsMode */
c=useron.xedit ? 1:0;
write(file,&c,1); /* ExternEdit */
i=(int16_t)rows;
write(file,&i,2); /* ScreenLength */
c=1;
write(file,&c,1); /* MNP_Connect */
write(file,str,49); /* ChatReason */
c=0;
write(file,&c,1); /* ExternLogoff */
c=(char)INT_TO_BOOL(term & ANSI);
write(file,&c,1); /* ANSI_Capable */
close(file); close(file);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment