BBS History and Last Callers revamp. Prep for A11 release
This commit is contained in:
parent
5d38954fe6
commit
55301cd6ea
|
@ -13,6 +13,33 @@ Uses
|
|||
{$I RECORDS.PAS}
|
||||
|
||||
Type
|
||||
OldLastOnRec = Record { CALLERS.DAT }
|
||||
Handle : String[30]; { User's Name }
|
||||
City : String[25]; { City/State }
|
||||
Address : String[30]; { user's address }
|
||||
Baud : String[6]; { Baud Rate }
|
||||
DateTime : LongInt; { Date & Time (UNIX) }
|
||||
Node : Byte; { Node number of login }
|
||||
CallNum : LongInt; { Caller Number }
|
||||
EmailAddr : String[35]; { email address }
|
||||
UserInfo : String[30]; { user info field }
|
||||
Option1 : String[35]; { optional data 1 }
|
||||
Option2 : String[35]; { " " 2 }
|
||||
Option3 : String[35]; { " " 3 }
|
||||
End;
|
||||
|
||||
OldHistoryRec = Record
|
||||
Date : LongInt;
|
||||
Emails : Word;
|
||||
Posts : Word;
|
||||
Downloads : Word;
|
||||
Uploads : Word;
|
||||
DownloadKB : LongInt;
|
||||
UploadKB : LongInt;
|
||||
Calls : LongInt;
|
||||
NewUsers : Word;
|
||||
End;
|
||||
|
||||
OldPercentRec = Record // percentage bar record
|
||||
BarLen : Byte;
|
||||
LoChar : Char;
|
||||
|
@ -708,11 +735,11 @@ Begin
|
|||
User.Gender := Gender;
|
||||
User.Email := EmailAddr;
|
||||
|
||||
FillChar (User.Optional, SizeOf(User.Optional), #0);
|
||||
FillChar (User.OptionData, SizeOf(User.OptionData), #0);
|
||||
|
||||
User.Optional[1] := Option1;
|
||||
User.Optional[2] := Option2;
|
||||
User.Optional[3] := Option3;
|
||||
User.OptionData[1] := Option1;
|
||||
User.OptionData[2] := Option2;
|
||||
User.OptionData[3] := Option3;
|
||||
|
||||
User.UserInfo := UserInfo;
|
||||
User.Theme := Language;
|
||||
|
@ -729,7 +756,7 @@ Begin
|
|||
User.ScreenSize := ScrnPause;
|
||||
User.ScreenCols := 80;
|
||||
User.PeerIP := '';
|
||||
User.PeerName := '';
|
||||
User.PeerHost := '';
|
||||
User.FirstOn := FirstOn;
|
||||
User.LastOn := LastOn;
|
||||
User.Calls := Calls;
|
||||
|
@ -1120,6 +1147,100 @@ Begin
|
|||
DeleteFile (Config.DataPath + 'fbases.old');
|
||||
End;
|
||||
|
||||
Procedure ConvertHistory;
|
||||
Var
|
||||
Hist : RecHistory;
|
||||
HistFile : File of RecHistory;
|
||||
OldHist : OldHistoryRec;
|
||||
OldHistFile : File of OldHistoryRec;
|
||||
Begin
|
||||
WriteLn ('[-] Updating BBS history...');
|
||||
|
||||
If Not ReNameFile(Config.DataPath + 'history.dat', Config.DataPath + 'history.old') Then Begin
|
||||
WriteLn('[!] UNABLE TO FIND: ' + Config.DataPath + 'history.dat');
|
||||
Exit;
|
||||
End;
|
||||
|
||||
Assign (OldHistFile, Config.DataPath + 'history.old');
|
||||
Reset (OldHistFile);
|
||||
|
||||
Assign (HistFile, Config.DataPath + 'history.dat');
|
||||
ReWrite (HistFile);
|
||||
|
||||
While Not Eof(OldHistFile) Do Begin
|
||||
Read (OldHistFile, OldHist);
|
||||
|
||||
FillChar(Hist, SizeOf(Hist), 0);
|
||||
|
||||
Hist.Date := OldHist.Date;
|
||||
Hist.Emails := OldHist.Emails;
|
||||
Hist.Posts := OldHist.Posts;
|
||||
Hist.Downloads := OldHist.Downloads;
|
||||
Hist.Uploads := OldHist.Uploads;
|
||||
Hist.DownloadKB := OldHIst.DownloadKB;
|
||||
Hist.UploadKB := OldHIst.UploadKB;
|
||||
Hist.Calls := OldHist.Calls;
|
||||
Hist.NewUsers := OldHist.NewUsers;
|
||||
|
||||
Write (HistFile, Hist);
|
||||
End;
|
||||
|
||||
Close (HIstFile);
|
||||
Close (OldHistFile);
|
||||
|
||||
DeleteFile (Config.DataPath + 'history.old');
|
||||
End;
|
||||
|
||||
Procedure ConvertLastOn;
|
||||
Var
|
||||
Last : RecLastOn;
|
||||
LastFile : File of RecLastOn;
|
||||
OldLast : OldLastOnRec;
|
||||
OldLastFile : File of OldLastOnRec;
|
||||
Begin
|
||||
WriteLn ('[-] Updating last callers...');
|
||||
|
||||
If Not ReNameFile(Config.DataPath + 'callers.dat', Config.DataPath + 'callers.old') Then Begin
|
||||
WriteLn('[!] UNABLE TO FIND: ' + Config.DataPath + 'callers.dat');
|
||||
Exit;
|
||||
End;
|
||||
|
||||
Assign (OldLastFile, Config.DataPath + 'callers.old');
|
||||
Reset (OldLastFile);
|
||||
|
||||
Assign (LastFile, Config.DataPath + 'callers.dat');
|
||||
ReWrite (LastFile);
|
||||
|
||||
While Not Eof(OldLastFile) Do Begin
|
||||
Read (OldLastFile, OldLast);
|
||||
|
||||
FillChar(Last, SizeOf(Last), 0);
|
||||
|
||||
With OldLast Do Begin
|
||||
Last.DateTime := DateTime;
|
||||
Last.Node := Node;
|
||||
Last.CallNum := CallNum;
|
||||
Last.Handle := Handle;
|
||||
Last.City := City;
|
||||
Last.Address := Address;
|
||||
Last.Gender := '?';
|
||||
Last.EmailAddr := EmailAddr;
|
||||
Last.UserInfo := UserInfo;
|
||||
Last.OptionData[1] := Option1;
|
||||
Last.OptionData[2] := Option2;
|
||||
Last.OptionData[3] := Option3;
|
||||
End;
|
||||
|
||||
Write (LastFile, Last);
|
||||
End;
|
||||
|
||||
Close (LastFile);
|
||||
Close (OldLastFile);
|
||||
|
||||
DeleteFile (Config.DataPath + 'callers.old');
|
||||
End;
|
||||
|
||||
|
||||
Procedure ConvertMessageBases;
|
||||
Var
|
||||
MBase : RecMessageBase;
|
||||
|
@ -1191,23 +1312,26 @@ Begin
|
|||
WarningDisplay;
|
||||
|
||||
//COMMENT this out if mystic.dat is being converted:
|
||||
Assign (ConfigFile, 'mystic.dat');
|
||||
Reset (ConfigFile);
|
||||
Read (ConfigFile, Config);
|
||||
Close (ConfigFile);
|
||||
// Assign (ConfigFile, 'mystic.dat');
|
||||
// Reset (ConfigFile);
|
||||
// Read (ConfigFile, Config);
|
||||
// Close (ConfigFile);
|
||||
|
||||
// ConvertConfig; //1.10a11
|
||||
// ConvertUsers; //1.10a11
|
||||
//ConvertSecurity; //1.10a11
|
||||
//ConvertFileLists; //1.10a11
|
||||
//ConvertFileBases; //1.10a11
|
||||
//ConvertMessageBases; //1.10a11
|
||||
//ConvertThemes; //1.10a11
|
||||
ConvertConfig; //1.10a11
|
||||
ConvertUsers; //1.10a11
|
||||
ConvertSecurity; //1.10a11
|
||||
ConvertFileLists; //1.10a11
|
||||
ConvertFileBases; //1.10a11
|
||||
ConvertMessageBases; //1.10a11
|
||||
ConvertThemes; //1.10a11
|
||||
ConvertHistory; //1.10a11
|
||||
ConvertLastOn; //1.10a11
|
||||
|
||||
// ConvertArchives; //1.10a1
|
||||
// ConvertGroups; //1.10a1
|
||||
|
||||
PurgeDataWildcard('*.lng');
|
||||
PurgeDataWildcard('node*.dat');
|
||||
|
||||
TextAttr := 12;
|
||||
WriteLn;
|
||||
|
|
|
@ -3974,3 +3974,10 @@
|
|||
3) Prompts within a prompt file no longer has to be in numerical order.
|
||||
More to come on why this change is being made, but generally this
|
||||
allows you to categorize prompts.
|
||||
|
||||
+ Mystic now saves the last known IP and hostname from each user.
|
||||
|
||||
+ Revamped last caller information. It now saves the IP, Hostname,
|
||||
Gender, and if the user was a new user or not. In addition, it will now
|
||||
save all 10 custom user questions (not implemented yet).
|
||||
|
||||
|
|
|
@ -169,13 +169,13 @@ Begin
|
|||
Session.io.OutRawLn ('J. E-mail ' + strPadR(Session.User.TempUser.Email, 32, ' ') +
|
||||
'5. Mail Index ' + Session.io.OutYN(Session.User.TempUser.UseLBMIdx));
|
||||
|
||||
Session.io.OutRawLn ('K. ' + strPadL(Config.OptionalField[1].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.Optional[1], 32, ' ') +
|
||||
Session.io.OutRawLn ('K. ' + strPadL(Config.OptionalField[1].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.OptionData[1], 32, ' ') +
|
||||
'6. Time Left ' + strI2S(Session.User.TempUser.TimeLeft));
|
||||
|
||||
Session.io.OutRawLn ('L. ' + strPadL(Config.OptionalField[2].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.Optional[2], 32, ' ') +
|
||||
Session.io.OutRawLn ('L. ' + strPadL(Config.OptionalField[2].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.OptionData[2], 32, ' ') +
|
||||
'7. Time Bank ' + strI2S(Session.User.TempUser.TimeBank));
|
||||
|
||||
Session.io.OutRawLn ('N. ' + strPadL(Config.OptionalField[3].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.Optional[3], 32, ' ') +
|
||||
Session.io.OutRawLn ('N. ' + strPadL(Config.OptionalField[3].Desc, 10, ' ') + ' ' + strPadR(Session.User.TempUser.OptionData[3], 32, ' ') +
|
||||
'8. Screen Size ' + strI2S(Session.User.TempUser.ScreenSize));
|
||||
|
||||
Session.io.OutRawLn ('O. User Note ' + strPadR(Session.User.TempUser.UserInfo, 32, ' ') +
|
||||
|
@ -212,9 +212,9 @@ Begin
|
|||
'H' : Session.User.TempUser.HomePhone := Session.io.InXY (16, 10, 15, 15, 12, Session.User.TempUser.HomePhone);
|
||||
'I' : Session.User.TempUser.DataPhone := Session.io.InXY (16, 11, 15, 15, 12, Session.User.TempUser.DataPhone);
|
||||
'J' : Session.User.TempUser.Email := Session.io.InXY (16, 12, 30, 35, 11, Session.User.TempUser.Email);
|
||||
'K' : Session.User.TempUser.Optional[1] := Session.io.InXY (16, 13, 30, 35, 11, Session.User.TempUser.Optional[1]);
|
||||
'L' : Session.User.TempUser.Optional[2] := Session.io.InXY (16, 14, 30, 35, 11, Session.User.TempUser.Optional[2]);
|
||||
'N' : Session.User.TempUser.Optional[3] := Session.io.InXY (16, 15, 30, 35, 11, Session.User.TempUser.Optional[3]);
|
||||
'K' : Session.User.TempUser.OptionData[1] := Session.io.InXY (16, 13, 30, 35, 11, Session.User.TempUser.OptionData[1]);
|
||||
'L' : Session.User.TempUser.OptionData[2] := Session.io.InXY (16, 14, 30, 35, 11, Session.User.TempUser.OptionData[2]);
|
||||
'N' : Session.User.TempUser.OptionData[3] := Session.io.InXY (16, 15, 30, 35, 11, Session.User.TempUser.OptionData[3]);
|
||||
'O' : Session.User.TempUser.UserInfo := Session.io.InXY (16, 16, 30, 30, 11, Session.User.TempUser.UserInfo);
|
||||
'P' : Begin
|
||||
Session.User.TempUser.Security := strS2I(Session.io.InXY(16, 17, 3, 3, 12, strI2S(Session.User.TempUser.Security)));
|
||||
|
|
|
@ -41,8 +41,8 @@ Var
|
|||
Vote : VoteRec;
|
||||
Chat : ChatRec;
|
||||
Room : RoomRec;
|
||||
LastOnFile : File of LastOnRec;
|
||||
LastOn : LastOnRec;
|
||||
LastOnFile : File of RecLastOn;
|
||||
LastOn : RecLastOn;
|
||||
Config : RecConfig;
|
||||
StatusPtr : Byte = 1;
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ Type
|
|||
TimeChecked : Boolean;
|
||||
ConfigMode : Boolean;
|
||||
InUserEdit : Boolean;
|
||||
HistoryFile : File of HistoryRec;
|
||||
HistoryFile : File of RecHistory;
|
||||
HistoryEmails : Word;
|
||||
HistoryPosts : Word;
|
||||
HistoryDLs : Word;
|
||||
|
@ -142,12 +142,12 @@ End;
|
|||
|
||||
Procedure TBBSCore.UpdateHistory;
|
||||
Var
|
||||
History : HistoryRec;
|
||||
History : RecHistory;
|
||||
Begin
|
||||
Assign (HistoryFile, Config.DataPath + 'history.dat');
|
||||
ioReset (HistoryFile, SizeOf(HistoryRec), fmRWDW);
|
||||
ioReset (HistoryFile, SizeOf(RecHistory), fmRWDW);
|
||||
|
||||
If IoResult <> 0 Then ioReWrite(HistoryFile, SizeOf(HistoryRec), fmRWDW);
|
||||
If IoResult <> 0 Then ioReWrite(HistoryFile, SizeOf(RecHistory), fmRWDW);
|
||||
|
||||
History.Date := CurDateDos;
|
||||
|
||||
|
|
|
@ -434,9 +434,9 @@ Begin
|
|||
Session.io.PromptInfo[7] := strI2S(DaysAgo(TempUser.Birthday) DIV 365);
|
||||
Session.io.PromptInfo[8] := TempUser.Email;
|
||||
Session.io.PromptInfo[9] := TempUser.UserInfo;
|
||||
Session.io.PromptInfo[10] := TempUser.Optional[1];
|
||||
Session.io.PromptInfo[11] := TempUser.Optional[2];
|
||||
Session.io.PromptInfo[12] := TempUser.Optional[3];
|
||||
Session.io.PromptInfo[10] := TempUser.OptionData[1];
|
||||
Session.io.PromptInfo[11] := TempUser.OptionData[2];
|
||||
Session.io.PromptInfo[12] := TempUser.OptionData[3];
|
||||
|
||||
If (Data = '') or (Pos(Data, strUpper(TempUser.Handle)) > 0) Then Begin
|
||||
Session.io.OutFullLn (Session.GetPrompt(30));
|
||||
|
@ -471,14 +471,13 @@ Begin
|
|||
Session.io.PromptInfo[3] := LastOn.City;
|
||||
Session.io.PromptInfo[4] := DateDos2Str(LastOn.DateTime, Session.User.ThisUser.DateType);
|
||||
Session.io.PromptInfo[5] := TimeDos2Str(LastOn.DateTime, True);
|
||||
Session.io.PromptInfo[6] := LastOn.Baud;
|
||||
Session.io.PromptInfo[7] := strI2S(LastOn.CallNum);
|
||||
Session.io.PromptInfo[8] := LastOn.Address;
|
||||
Session.io.PromptInfo[9] := LastOn.UserInfo;
|
||||
Session.io.PromptInfo[10] := LastOn.EmailAddr;
|
||||
Session.io.PromptInfo[11] := LastOn.Option1;
|
||||
Session.io.PromptInfo[12] := LastOn.Option2;
|
||||
Session.io.PromptInfo[13] := LastOn.Option3;
|
||||
Session.io.PromptInfo[11] := LastOn.OptionData[1];
|
||||
Session.io.PromptInfo[12] := LastOn.OptionData[2];
|
||||
Session.io.PromptInfo[13] := LastOn.OptionData[3];
|
||||
|
||||
Session.io.OutFullLn (Session.GetPrompt(142));
|
||||
End;
|
||||
|
@ -837,7 +836,7 @@ End;
|
|||
|
||||
Procedure ShowBBSHistory (LastDays: Word);
|
||||
Var
|
||||
Temp : HistoryRec;
|
||||
Temp : RecHistory;
|
||||
Days : Word;
|
||||
Begin
|
||||
Assign (Session.HistoryFile, Config.DataPath + 'history.dat');
|
||||
|
|
|
@ -583,9 +583,9 @@ Begin
|
|||
End;
|
||||
'U' : Case Code[2] of
|
||||
'#' : LastMCIValue := strI2S(TBBSCore(Core).User.ThisUser.PermIdx);
|
||||
'1' : LastMCIValue := TBBSCore(Core).User.ThisUser.Optional[1];
|
||||
'2' : LastMCIValue := TBBSCore(Core).User.ThisUser.Optional[2];
|
||||
'3' : LastMCIValue := TBBSCore(Core).User.ThisUser.Optional[3];
|
||||
'1' : LastMCIValue := TBBSCore(Core).User.ThisUser.OptionData[1];
|
||||
'2' : LastMCIValue := TBBSCore(Core).User.ThisUser.OptionData[2];
|
||||
'3' : LastMCIValue := TBBSCore(Core).User.ThisUser.OptionData[3];
|
||||
'A' : LastMCIValue := TBBSCore(Core).User.ThisUser.Address;
|
||||
'B' : Case TBBSCore(Core).User.ThisUser.FileList of
|
||||
0 : LastMCIValue := 'Normal';
|
||||
|
|
|
@ -460,7 +460,7 @@ Begin
|
|||
Else
|
||||
Session.io.OutFull (Session.GetPrompt(443));
|
||||
|
||||
ThisUser.Optional[1] := Session.io.GetInput(35, 35, 11, ThisUser.Optional[1]);
|
||||
ThisUser.OptionData[1] := Session.io.GetInput(35, 35, 11, ThisUser.OptionData[1]);
|
||||
End;
|
||||
|
||||
Procedure TBBSUser.GetOption2 (Edit : Boolean);
|
||||
|
@ -470,7 +470,7 @@ Begin
|
|||
Else
|
||||
Session.io.OutFull (Session.GetPrompt(445));
|
||||
|
||||
ThisUser.Optional[2] := Session.io.GetInput(35, 35, 11, ThisUser.Optional[2]);
|
||||
ThisUser.OptionData[2] := Session.io.GetInput(35, 35, 11, ThisUser.OptionData[2]);
|
||||
End;
|
||||
|
||||
Procedure TBBSUser.GetOption3 (Edit : Boolean);
|
||||
|
@ -480,7 +480,7 @@ Begin
|
|||
Else
|
||||
Session.io.OutFull (Session.GetPrompt(447));
|
||||
|
||||
ThisUser.Optional[3] := Session.io.GetInput(35, 35, 11, ThisUser.Optional[3]);
|
||||
ThisUser.OptionData[3] := Session.io.GetInput(35, 35, 11, ThisUser.OptionData[3]);
|
||||
End;
|
||||
|
||||
Procedure TBBSUser.GetEditor (Edit : Boolean);
|
||||
|
@ -971,8 +971,8 @@ End;
|
|||
|
||||
Procedure TBBSUser.User_Logon3;
|
||||
Var
|
||||
A : Byte;
|
||||
Ch : Char;
|
||||
Count : Byte;
|
||||
Ch : Char;
|
||||
Begin
|
||||
{$IFDEF LOGGING} Session.SystemLog('Logon3'); {$ENDIF}
|
||||
|
||||
|
@ -987,24 +987,23 @@ Begin
|
|||
Reset (LastOnFile);
|
||||
|
||||
If FileSize(LastOnFile) >= 10 Then
|
||||
KillRecord (LastOnFile, 1, SizeOf(LastOnRec));
|
||||
KillRecord (LastOnFile, 1, SizeOf(RecLastOn));
|
||||
|
||||
LastOn.Handle := ThisUser.Handle;
|
||||
LastOn.City := ThisUser.City;
|
||||
LastOn.Node := Session.NodeNum;
|
||||
LastOn.DateTime := CurDateDos;
|
||||
LastOn.CallNum := Config.SystemCalls;
|
||||
LastOn.Address := ThisUser.Address;
|
||||
LastOn.EmailAddr := ThisUser.Email;
|
||||
LastOn.UserInfo := ThisUser.UserInfo;
|
||||
LastOn.Option1 := ThisUser.Optional[1];
|
||||
LastOn.Option2 := ThisUser.Optional[2];
|
||||
LastOn.Option3 := ThisUser.Optional[3];
|
||||
LastOn.Handle := ThisUser.Handle;
|
||||
LastOn.City := ThisUser.City;
|
||||
LastOn.Node := Session.NodeNum;
|
||||
LastOn.DateTime := CurDateDos;
|
||||
LastOn.CallNum := Config.SystemCalls;
|
||||
LastOn.Address := ThisUser.Address;
|
||||
LastOn.EmailAddr := ThisUser.Email;
|
||||
LastOn.UserInfo := ThisUser.UserInfo;
|
||||
LastOn.Gender := ThisUser.Gender;
|
||||
LastOn.PeerIP := Session.UserIPInfo;
|
||||
LastOn.PeerHost := Session.UserHostInfo;
|
||||
LastOn.NewUser := ThisUser.Calls = 0;
|
||||
|
||||
If Session.LocalMode Then
|
||||
LastOn.Baud := 'LOCAL'
|
||||
Else
|
||||
LastOn.Baud := 'TELNET';
|
||||
For Count := 1 to 10 Do
|
||||
LastOn.OptionData[Count] := ThisUser.OptionData[Count];
|
||||
|
||||
Seek (LastOnFile, FileSize(LastOnFile));
|
||||
Write (LastOnFile, LastOn);
|
||||
|
@ -1017,8 +1016,8 @@ Begin
|
|||
|
||||
{ this (below) causes runtime 201 when range checking is ON }
|
||||
|
||||
For A := 1 to 9 Do
|
||||
Session.io.OutFile ('logon' + strI2S(A), True, 0);
|
||||
For Count := 1 to 9 Do
|
||||
Session.io.OutFile ('logon' + strI2S(Count), True, 0);
|
||||
|
||||
Session.io.OutFile ('sl' + strI2S(ThisUser.Security), True, 0);
|
||||
|
||||
|
@ -1036,11 +1035,11 @@ Begin
|
|||
While Not Eof(VoteFile) Do Begin
|
||||
Read (VoteFile, Vote);
|
||||
If Access(Vote.ACS) and Access(Vote.ForceACS) and (ThisUser.Vote[FilePos(VoteFile)] = 0) Then Begin
|
||||
A := FilePos(VoteFile);
|
||||
Count := FilePos(VoteFile);
|
||||
Close (VoteFile);
|
||||
Voting_Booth (True, A);
|
||||
Voting_Booth (True, Count);
|
||||
Reset (VoteFile);
|
||||
Seek (VoteFile, A);
|
||||
Seek (VoteFile, Count);
|
||||
End;
|
||||
End;
|
||||
Close (VoteFile);
|
||||
|
|
|
@ -58,7 +58,7 @@ Begin
|
|||
Reset (TF);
|
||||
|
||||
If IoResult <> 0 Then Begin
|
||||
WriteLn ('ERROR: Theme file (' + FName + FExt + ') not found.');
|
||||
WriteLn ('ERROR: Theme file (' + FName + FExt + ') not found');
|
||||
Halt (1);
|
||||
End;
|
||||
|
||||
|
@ -70,7 +70,7 @@ Begin
|
|||
If IoResult <> 0 Then Begin
|
||||
WriteLn;
|
||||
WriteLn;
|
||||
WriteLn ('ERROR: Cannot run while Mystic is loaded.');
|
||||
WriteLn ('ERROR: Cannot run while Mystic is loaded');
|
||||
Halt(1);
|
||||
End;
|
||||
|
||||
|
@ -98,7 +98,7 @@ Begin
|
|||
If Count > mysMaxThemeText Then Begin
|
||||
WriteLn;
|
||||
WriteLn;
|
||||
WriteLn ('ERROR: Prompt #', Count, ' was not expected. Theme file not created.');
|
||||
WriteLn ('ERROR: Prompt #', Count, ' was not expected. Theme file not created');
|
||||
Close (ThemeFile);
|
||||
Erase (ThemeFile);
|
||||
Halt(1);
|
||||
|
@ -107,7 +107,7 @@ Begin
|
|||
If Found[Count] Then Begin
|
||||
WriteLn;
|
||||
WriteLn;
|
||||
WriteLn ('ERROR: Prompt #', Count, ' was found twice. Theme file not created.');
|
||||
WriteLn ('ERROR: Prompt #', Count, ' was found twice. Theme file not created');
|
||||
Close (ThemeFile);
|
||||
Erase (ThemeFile);
|
||||
Halt (1);
|
||||
|
@ -128,7 +128,7 @@ Begin
|
|||
For Count := 0 to mysMaxThemeText Do Begin
|
||||
If Not Found[Count] Then Begin
|
||||
WriteLn;
|
||||
WriteLn (^G'ERROR: Prompt #', Count, ' was not found. Theme file not created.');
|
||||
WriteLn (^G'ERROR: Prompt #', Count, ' was not found. Theme file not created');
|
||||
Erase (ThemeFile);
|
||||
Halt (1);
|
||||
End;
|
||||
|
@ -153,7 +153,7 @@ Begin
|
|||
ReWrite(TF);
|
||||
|
||||
If IoResult <> 0 Then Begin
|
||||
WriteLn ('ERROR: Unable to create output file.');
|
||||
WriteLn ('ERROR: Unable to create output file');
|
||||
Halt(1);
|
||||
End;
|
||||
|
||||
|
|
|
@ -131,8 +131,8 @@ End;
|
|||
|
||||
Procedure TFTPServer.UpdateUserStats (TFBase: RecFileBase; FDir: RecFileList; DirPos: LongInt);
|
||||
Var
|
||||
HistFile: File of HistoryRec;
|
||||
History : HistoryRec;
|
||||
HistFile: File of RecHistory;
|
||||
History : RecHistory;
|
||||
FDirFile: File of RecFileList;
|
||||
UserFile: File of RecUser;
|
||||
Begin
|
||||
|
@ -168,7 +168,7 @@ Begin
|
|||
Close (FDirFile);
|
||||
|
||||
Assign (HistFile, bbsConfig.DataPath + 'history.dat');
|
||||
ioReset (HistFile, SizeOf(HistoryRec), fmReadWrite + fmDenyWrite);
|
||||
ioReset (HistFile, SizeOf(RecHistory), fmReadWrite + fmDenyWrite);
|
||||
|
||||
If IoResult <> 0 Then ReWrite(HistFile);
|
||||
|
||||
|
|
|
@ -84,7 +84,9 @@ Begin
|
|||
If ErrorAddr <> NIL Then ExitCode := 1;
|
||||
|
||||
If Session.User.UserNum <> -1 Then Begin
|
||||
Session.User.ThisUser.LastOn := CurDateDos;
|
||||
Session.User.ThisUser.LastOn := CurDateDos;
|
||||
Session.User.ThisUser.PeerIP := Session.UserIPInfo;
|
||||
Session.User.ThisUser.PeerHost := Session.UserHostInfo;
|
||||
|
||||
If Session.TimerOn Then
|
||||
If (Session.TimeOffset > 0) and (Session.TimeSaved > Session.TimeOffset) Then
|
||||
|
|
|
@ -278,7 +278,7 @@ Type
|
|||
Birthday : LongInt;
|
||||
Gender : Char; { M> Male F> Female }
|
||||
Email : String[60]; { email address }
|
||||
Optional : Array[1..10] of String[60];
|
||||
OptionData : Array[1..10] of String[60];
|
||||
UserInfo : String[30]; { user comment field }
|
||||
Theme : String[20]; // user's theme file
|
||||
AF1 : AccessFlagType;
|
||||
|
@ -294,7 +294,7 @@ Type
|
|||
ScreenSize : Byte; { user's screen length }
|
||||
ScreenCols : Byte;
|
||||
PeerIP : String[20];
|
||||
PeerName : String[50];
|
||||
PeerHost : String[50];
|
||||
FirstOn : LongInt; { Date/Time of First Call }
|
||||
LastOn : LongInt; { Date/Time of Last Call }
|
||||
Calls : LongInt; { Number of calls to BBS }
|
||||
|
@ -671,22 +671,24 @@ Type
|
|||
(* file is always 10 records long with the most recent caller being the *)
|
||||
(* 10th record. *)
|
||||
|
||||
LastOnRec = Record { CALLERS.DAT }
|
||||
Handle : String[30]; { User's Name }
|
||||
City : String[25]; { City/State }
|
||||
Address : String[30]; { user's address }
|
||||
Baud : String[6]; { Baud Rate }
|
||||
DateTime : LongInt; { Date & Time (UNIX) }
|
||||
Node : Byte; { Node number of login }
|
||||
CallNum : LongInt; { Caller Number }
|
||||
EmailAddr : String[35]; { email address }
|
||||
UserInfo : String[30]; { user info field }
|
||||
Option1 : String[35]; { optional data 1 }
|
||||
Option2 : String[35]; { " " 2 }
|
||||
Option3 : String[35]; { " " 3 }
|
||||
RecLastOn = Record // CALLERS.DAT
|
||||
DateTime : LongInt;
|
||||
NewUser : Boolean;
|
||||
PeerIP : String[15];
|
||||
PeerHost : String[50];
|
||||
Node : Byte;
|
||||
CallNum : LongInt;
|
||||
Handle : String[30];
|
||||
City : String[25];
|
||||
Address : String[30];
|
||||
Gender : Char;
|
||||
EmailAddr : String[35];
|
||||
UserInfo : String[30];
|
||||
OptionData : Array[1..10] of String[60];
|
||||
Reserved : Array[1..53] of Byte;
|
||||
End;
|
||||
|
||||
HistoryRec = Record
|
||||
RecHistory = Record
|
||||
Date : LongInt;
|
||||
Emails : Word;
|
||||
Posts : Word;
|
||||
|
@ -696,6 +698,13 @@ Type
|
|||
UploadKB : LongInt;
|
||||
Calls : LongInt;
|
||||
NewUsers : Word;
|
||||
Telnet : Word;
|
||||
FTP : Word;
|
||||
POP3 : Word;
|
||||
SMTP : Word;
|
||||
NNTP : Word;
|
||||
HTTP : Word;
|
||||
Reserved : Array[1..26] of Byte;
|
||||
End;
|
||||
|
||||
RecProtocol = Record
|
||||
|
|
|
@ -98,6 +98,7 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
|||
rename them automatically.
|
||||
- ANSI listbox is terribly inefficient with its output.
|
||||
- So much cool stuff to do with the new themes
|
||||
- LastOn revamp make sure its not global and new stuff is populated
|
||||
|
||||
RANDOM DRUNKEN BRAINDUMP AKA DESIGN DETAILS
|
||||
===========================================
|
||||
|
|
Loading…
Reference in New Issue