974 lines
24 KiB
Plaintext
974 lines
24 KiB
Plaintext
{$IFDEF WIN32}
|
|
{$I DEFINES.INC}
|
|
{$ENDIF}
|
|
|
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|
|
|
UNIT Maint;
|
|
|
|
INTERFACE
|
|
|
|
PROCEDURE LogonMaint;
|
|
PROCEDURE LogoffMaint;
|
|
PROCEDURE DailyMaint;
|
|
PROCEDURE UpdateGeneral;
|
|
|
|
IMPLEMENTATION
|
|
|
|
USES
|
|
Automsg,
|
|
Bulletin,
|
|
Common,
|
|
CUser,
|
|
Email,
|
|
Events,
|
|
File6,
|
|
File12,
|
|
Mail1,
|
|
Mail4,
|
|
ShortMsg,
|
|
TimeFunc,
|
|
Vote;
|
|
|
|
PROCEDURE LogonMaint;
|
|
VAR
|
|
LastCallerFile: FILE OF LastCallerRec;
|
|
LastCaller: LastCallerRec;
|
|
TempStr,
|
|
TempStr1: AStr;
|
|
Cmd: Char;
|
|
Counter,
|
|
Counter1: Integer;
|
|
RecNum: LongInt;
|
|
BSince: Boolean;
|
|
|
|
PROCEDURE UpdateUserInformation;
|
|
VAR
|
|
UpdateArray: ARRAY [0..10] OF Integer;
|
|
Counter,
|
|
Counter1: Integer;
|
|
BEGIN
|
|
FOR Counter := 0 TO 10 DO
|
|
UpdateArray[Counter] := 0;
|
|
Counter := 0;
|
|
IF (ThisUser.RealName = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[1] := 10;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.Street = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[2] := 1;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.CityState = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[0] := 23;
|
|
UpdateArray[3] := 4;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.ZipCode = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[0] := 23;
|
|
UpdateArray[4] := 14;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.BirthDate = User_Date_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[5] := 2;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.Ph = User_Phone_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[6] := 8;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.UsrDefStr[1] = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[7] := 5;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.UsrDefStr[2] = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[8] := 6;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.UsrDefStr[3] = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[9] := 13;
|
|
Inc(Counter);
|
|
END;
|
|
IF (ThisUser.ForgotPWAnswer = User_String_Ask) THEN
|
|
BEGIN
|
|
UpdateArray[10] := 30;
|
|
Inc(Counter);
|
|
END;
|
|
IF (Counter <> 0) THEN
|
|
BEGIN
|
|
CLS;
|
|
NL;
|
|
Print('Please update the following information:');
|
|
Counter := 0;
|
|
WHILE (Counter <= 10) AND (NOT HangUp) DO
|
|
BEGIN
|
|
IF (UpDateArray[Counter] <> 0) THEN
|
|
BEGIN
|
|
Update_Screen;
|
|
CStuff(UpdateArray[Counter],1,ThisUser);
|
|
END;
|
|
Inc(Counter);
|
|
END;
|
|
NL;
|
|
Print('Thank you!');
|
|
NL;
|
|
PauseScr(FALSE);
|
|
END;
|
|
END;
|
|
|
|
FUNCTION CheckBirthday: Boolean;
|
|
VAR
|
|
BDate: LongInt;
|
|
BEGIN
|
|
BSince := FALSE;
|
|
BDate := Date2PD(Copy(PD2Date(ThisUser.BirthDate),1,6) + Copy(DateStr,7,4));
|
|
IF (BDate > ThisUser.LastOn) AND (BDate <= Date2PD(DateStr)) THEN
|
|
BEGIN
|
|
CheckBirthday := TRUE;
|
|
BSince := (BDate < Date2PD(DateStr));
|
|
END
|
|
ELSE
|
|
CheckBirthday := FALSE;
|
|
END;
|
|
|
|
PROCEDURE ShowBDay(CONST UserNumber: AStr);
|
|
BEGIN
|
|
IF (BSince) THEN
|
|
PrintF('BDYS'+UserNumber);
|
|
IF (NoFile) THEN
|
|
PrintF('BDAY'+UserNumber);
|
|
END;
|
|
|
|
PROCEDURE FindChopTime;
|
|
VAR
|
|
LNG,
|
|
LNG2,
|
|
LNG3: LongInt;
|
|
EventNum: Byte;
|
|
|
|
PROCEDURE OnlineTime;
|
|
BEGIN
|
|
PrintF('REVENT'+IntToStr(EventNum));
|
|
IF (NoFile) THEN
|
|
BEGIN
|
|
Print(^G);
|
|
NL;
|
|
Print('^8Note: ^5System event approaching.');
|
|
Print('System will be shut down in '+FormattedTime(NSL));
|
|
NL;
|
|
Print(^G);
|
|
PauseScr(FALSE);
|
|
END;
|
|
END;
|
|
|
|
BEGIN
|
|
IF (ExtEventTime <> 0) THEN
|
|
BEGIN
|
|
LNG := ExtEventTime;
|
|
IF (LNG < (NSL DIV 60)) THEN
|
|
BEGIN
|
|
ChopTime := (NSL - (LNG * 60)) + 120;
|
|
OnlineTime;
|
|
Exit;
|
|
END;
|
|
END;
|
|
|
|
LNG := 1;
|
|
LNG2 := (NSL DIV 60);
|
|
IF (LNG2 > 180) THEN
|
|
LNG2 := 180;
|
|
WHILE (LNG <= LNG2) DO
|
|
BEGIN
|
|
LNG3 := (LNG * 60);
|
|
EventNum := CheckEvents(LNG3);
|
|
IF (EventNum <> 0) THEN
|
|
BEGIN
|
|
ChopTime := (NSL - (LNG * 60)) + 60;
|
|
OnlineTime;
|
|
Exit;
|
|
END;
|
|
Inc(LNG,2);
|
|
END;
|
|
END;
|
|
|
|
BEGIN
|
|
IF (General.MultiNode) THEN
|
|
BEGIN
|
|
LoadNode(ThisNode);
|
|
IF AACS(General.Invisible) AND PYNQ(lRGLngStr(45,TRUE){FString.AskInvisibleLoginStr},0,FALSE) THEN
|
|
BEGIN
|
|
IsInvisible := TRUE;
|
|
Include(NodeR.Status,NInvisible);
|
|
SysOpLog('Selected invisible mode.');
|
|
END
|
|
ELSE
|
|
IsInvisible := FALSE;
|
|
FillChar(NodeR.Invited,SizeOf(NodeR.Invited),0);
|
|
FillChar(NodeR.Booted,SizeOf(NodeR.Booted),0);
|
|
FillChar(NodeR.Forget,SizeOf(NodeR.Forget),0);
|
|
Include(NodeR.Status,NAvail);
|
|
SaveNode(ThisNode);
|
|
Update_Node(RGNoteStr(37,TRUE),TRUE);
|
|
FOR Counter := 1 TO MaxNodes DO
|
|
BEGIN
|
|
LoadNode(Counter);
|
|
NodeR.Forget[ThisNode DIV 8] := NodeR.Forget[ThisNode DIV 8] - [ThisNode MOD 8];
|
|
SaveNode(Counter);
|
|
END;
|
|
END;
|
|
|
|
ConfSystem := TRUE;
|
|
|
|
IF (ThisUser.LastConf IN ConfKeys) THEN
|
|
CurrentConf := ThisUser.LastConf
|
|
ELSE
|
|
BEGIN
|
|
CurrentConf := '@';
|
|
ThisUser.LastConf := CurrentConf;
|
|
END;
|
|
|
|
PublicReadThisCall := 0;
|
|
ExtraTime := 0;
|
|
FreeTime := 0;
|
|
CreditTime := 0;
|
|
TimeOn := GetPackDateTime;
|
|
UserOn := TRUE;
|
|
|
|
Com_Flush_Recv;
|
|
|
|
lStatus_Screen(100,'Cleaning up work areas...',FALSE,TempStr);
|
|
PurgeDir(TempDir+'ARC\',FALSE);
|
|
PurgeDir(TempDir+'QWK\',FALSE);
|
|
PurgeDir(TempDir+'UP\',FALSE);
|
|
PurgeDir(TempDir+'CD\',FALSE);
|
|
|
|
DailyMaint;
|
|
|
|
IF (ComPortSpeed > 0) AND (NOT LocalIOOnly) THEN
|
|
Inc(TodayCallers);
|
|
|
|
IF (SLogSeparate IN ThisUser.SFlags) THEN
|
|
BEGIN
|
|
Assign(SysOpLogFile1,General.LogsPath+'SLOG'+IntToStr(UserNum)+'.LOG');
|
|
Append(SysOpLogFile1);
|
|
IF (IOResult = 2) THEN
|
|
BEGIN
|
|
ReWrite(SysOpLogFile1);
|
|
Append(SysOpLogFile1);
|
|
TempStr := '';
|
|
TempStr1 := '';
|
|
FOR Counter := 1 TO (26 + Length(ThisUser.Name)) DO
|
|
BEGIN
|
|
TempStr := TempStr + '_';
|
|
TempStr1 := TempStr1 + ' ';
|
|
END;
|
|
WriteLn(SysOpLogFile1,'');
|
|
WriteLn(SysOpLogFile1,' '+TempStr);
|
|
WriteLn(SysOpLogFile1,'>>'+TempStr1+'<<');
|
|
WriteLn(SysOpLogFile1,'>> Renegade SysOp Log for '+Caps(ThisUser.Name)+': <<');
|
|
WriteLn(SysOpLogFile1,'>>'+TempStr+'<<');
|
|
WriteLn(SysOpLogFile1,'');
|
|
END;
|
|
WriteLn(SysOpLogFile1);
|
|
|
|
TempStr := '^3Logon ^5['+Dat+']^4 (';
|
|
|
|
IF (ComPortSpeed > 0) THEN
|
|
BEGIN
|
|
TempStr := TempStr + IntToStr(ActualSpeed)+' baud';
|
|
|
|
IF (Reliable) THEN
|
|
TempStr := TempStr + '/Reliable)'
|
|
ELSE
|
|
TempStr := TempStr + ')';
|
|
|
|
IF (CallerIDNumber > '') THEN
|
|
BEGIN
|
|
IF (NOT Telnet) THEN
|
|
TempStr := TempStr + ' Number: '+CallerIDNumber
|
|
ELSE
|
|
TempStr := TempStr + ' IP Number: '+CallerIDNumber;
|
|
END;
|
|
END
|
|
ELSE
|
|
TempStr := TempStr + 'Keyboard)';
|
|
|
|
IF (General.StripCLog) THEN
|
|
TempStr := StripColor(TempStr);
|
|
|
|
WriteLn(SysOpLogFile1,TempStr);
|
|
|
|
Close(SysOpLogFile1);
|
|
END;
|
|
|
|
TempStr := '^3'+IntToStr(General.CallerNum)+'^4 -- ^0'+Caps(ThisUser.Name)+'^4 -- ^3'+'Today '+IntToStr(ThisUser.OnToday);
|
|
IF (Trapping) THEN
|
|
TempStr := TempStr + '^0*';
|
|
SL1(TempStr);
|
|
SaveGeneral(FALSE);
|
|
LastError := IOResult;
|
|
|
|
IF ((CoSysOp) AND (NOT FastLogon) AND (ComPortSpeed > 0)) THEN
|
|
BEGIN
|
|
IF PYNQ(lRGLngStr(57,TRUE){FString.QuickLogon},0,FALSE) THEN
|
|
FastLogon := TRUE;
|
|
NL;
|
|
END;
|
|
|
|
Assign(LastCallerFile,General.DataPath+'LASTON.DAT');
|
|
IF Exist(General.DataPath+'LASTON.DAT') THEN
|
|
Reset(LastCallerFile)
|
|
ELSE
|
|
ReWrite(LastCallerFile);
|
|
FillChar(LastCaller,SizeOf(LastCaller),#0);
|
|
WITH LastCaller DO
|
|
BEGIN
|
|
Node := ThisNode;
|
|
Caller := General.CallerNum;
|
|
UserName := Caps(ThisUser.Name);
|
|
UserID := UserNum;
|
|
Location := ThisUser.CityState;
|
|
IF (ComPortSpeed <> 0) THEN
|
|
Speed := ActualSpeed
|
|
ELSE
|
|
Speed := 0;
|
|
LogonTime := TimeOn;
|
|
LogoffTime := 0;
|
|
NewUser := WasNewUser;
|
|
Invisible := IsInvisible;
|
|
END;
|
|
IF AACS(General.LastOnDatACS) THEN
|
|
BEGIN
|
|
Seek(LastCallerFile,FileSize(LastCallerFile));
|
|
Write(LastCallerFile,LastCaller);
|
|
END;
|
|
Close(LastCallerFile);
|
|
LastError := IOResult;
|
|
|
|
SaveGeneral(TRUE);
|
|
|
|
IF (NOT FastLogon) AND (NOT HangUp) THEN
|
|
BEGIN
|
|
|
|
PrintF('LOGON');
|
|
Counter := 0;
|
|
REPEAT
|
|
Inc(Counter);
|
|
PrintF('LOGON'+IntToStr(Counter));
|
|
UNTIL (Counter = 9) OR (NoFile) OR (HangUp);
|
|
|
|
PrintF('SL'+IntToStr(ThisUser.SL));
|
|
|
|
PrintF('DSL'+IntToStr(ThisUser.DSL));
|
|
|
|
FOR Cmd := 'A' TO 'Z' DO
|
|
IF (Cmd IN ThisUser.AR) THEN
|
|
PrintF('ARLEVEL'+Cmd);
|
|
|
|
PrintF('USER'+IntToStr(UserNum));
|
|
|
|
IF (FindOnlyOnce) THEN
|
|
PrintF('ONCEONLY');
|
|
|
|
UpdateUserInformation;
|
|
|
|
IF (General.LogonQuote) THEN
|
|
RGQuote('LGNQUOTE');
|
|
|
|
IF (CheckBirthday) THEN
|
|
BEGIN
|
|
ShowBDay(IntToStr(UserNum));
|
|
IF (NoFile) THEN
|
|
ShowBDay('');
|
|
IF (NoFile) THEN
|
|
IF (BSince) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^3Happy Birthday, '+Caps(ThisUser.Name)+' !!!');
|
|
Print('^3(a little late, but it''s the thought that counts!)');
|
|
NL;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
NL;
|
|
Print('^3Happy Birthday, '+Caps(ThisUser.Name)+' !!!');
|
|
Print('^3You turned '+IntToStr(AgeUser(ThisUser.BirthDate))+' today!!');
|
|
NL;
|
|
END;
|
|
PauseScr(FALSE);
|
|
CLS;
|
|
END;
|
|
|
|
NL;
|
|
IF (General.AutoMInLogon) THEN
|
|
ReadAutoMsg;
|
|
NL;
|
|
|
|
IF (General.YourInfoInLogon) THEN
|
|
BEGIN
|
|
PrintF('YOURINFO');
|
|
NL;
|
|
END;
|
|
|
|
LIL := 0;
|
|
|
|
IF (General.BullInLogon) AND (NewBulletins) THEN
|
|
BEGIN
|
|
NL;
|
|
IF PYNQ(lRGLngStr(56,TRUE){FString.ShowBulletins},0,FALSE) THEN
|
|
Bulletins('')
|
|
ELSE
|
|
NL;
|
|
END;
|
|
|
|
IF (NOT (RVoting IN ThisUser.Flags)) THEN
|
|
BEGIN
|
|
Counter := UnVotedTopics;
|
|
IF (Counter > 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Prompt('^5You have not voted on ^9'+IntToStr(Counter)+'^5 voting '+Plural('question',Counter));
|
|
NL;
|
|
END;
|
|
END;
|
|
|
|
IF Exist(General.DataPath+'BATCHDL.DAT') THEN
|
|
BEGIN
|
|
Assign(BatchDLFile,General.DataPath+'BATCHDL.DAT');
|
|
Reset(BatchDLFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchDLFile)) DO
|
|
BEGIN
|
|
Seek(BatchDLFile,(RecNum - 1));
|
|
Read(BatchDLFile,BatchDL);
|
|
IF (BatchDL.BDLUserNum = UserNum) THEN
|
|
BEGIN
|
|
Inc(NumBatchDLFiles);
|
|
Inc(BatchDLTime,BatchDL.BDLTime);
|
|
Inc(BatchDLSize,BatchDL.BDLFSize);
|
|
Inc(BatchDLPoints,BatchDL.BDLPoints);
|
|
END;
|
|
Inc(RecNum);
|
|
END;
|
|
Close(BatchDLFile);
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
IF Exist(General.DataPath+'BATCHUL.DAT') THEN
|
|
BEGIN
|
|
Assign(BatchULFile,General.DataPath+'BATCHUL.DAT');
|
|
Reset(BatchULFile);
|
|
RecNum := 1;
|
|
WHILE (RecNum <= FileSize(BatchULFile)) DO
|
|
BEGIN
|
|
Seek(BatchULFile,(RecNum - 1));
|
|
Read(BatchULFile,BatchUL);
|
|
IF (BatchUL.BULUserNum = UserNum) THEN
|
|
Inc(NumBatchULFiles);
|
|
Inc(RecNum);
|
|
END;
|
|
Close(BatchULFile);
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
IF (NumBatchDLFiles > 0) AND (General.ForceBatchDL) THEN
|
|
REPEAT
|
|
NL;
|
|
Print('^4You must (^5D^4)ownload, (^5R^4)emove or (^5C^4)lear your batch queued files.');
|
|
NL;
|
|
Prt('Select option: ');
|
|
OneK(Cmd,'DRC',TRUE,TRUE);
|
|
CASE Cmd OF
|
|
'D' : BatchDownload;
|
|
'R' : RemoveBatchDLFiles;
|
|
'C' : ClearBatchDLQueue;
|
|
END;
|
|
UNTIL (NumBatchDLFiles = 0) OR (FileSysOp) OR (HangUp);
|
|
|
|
IF (NumBatchULFiles > 0) AND (General.ForceBatchUL) THEN
|
|
REPEAT
|
|
NL;
|
|
Print('^4You must (^5U^4)pload, (^5R^4)emove or (^5C^4)lear your batch queued files.');
|
|
NL;
|
|
Prt('Select option: ');
|
|
OneK(Cmd,'URC',TRUE,TRUE);
|
|
CASE Cmd OF
|
|
'U' : BatchUpload(FALSE,0);
|
|
'R' : RemoveBatchULFiles;
|
|
'C' : ClearBatchULQueue;
|
|
END;
|
|
UNTIL (NumBatchULFiles = 0) OR (FileSysOp) OR (HangUp);
|
|
|
|
BatchDLULInfo;
|
|
|
|
IF (LIL <> 0) THEN
|
|
PauseScr(FALSE);
|
|
|
|
NL;
|
|
Update_Screen;
|
|
END;
|
|
|
|
FindChopTime;
|
|
|
|
|
|
IF (SMW IN ThisUser.Flags) THEN
|
|
BEGIN
|
|
ReadShortMessage;
|
|
NL;
|
|
PauseScr(FALSE);
|
|
END;
|
|
|
|
IF ((Alert IN ThisUser.Flags) AND (SysOpAvailable)) THEN
|
|
ChatCall := TRUE;
|
|
|
|
IF (ThisUser.Waiting > 0) THEN
|
|
IF (RMsg IN ThisUser.Flags) THEN
|
|
ReadMail
|
|
ELSE
|
|
BEGIN
|
|
IF PYNQ('Read your private messages? ',0,TRUE) THEN
|
|
ReadMail;
|
|
END;
|
|
|
|
IF (General.PasswordChange > 0) THEN
|
|
IF ((DayNum(DateStr) - ThisUser.PasswordChanged) >= General.PasswordChange) THEN
|
|
BEGIN
|
|
PrintF('PWCHANGE');
|
|
IF (NoFile) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('You must select a new password every '+IntToStr(General.PasswordChange)+' days.');
|
|
NL;
|
|
END;
|
|
CStuff(9,3,ThisUser);
|
|
END;
|
|
|
|
FastLogon := FALSE;
|
|
END;
|
|
|
|
PROCEDURE LogoffMaint;
|
|
VAR
|
|
HistoryFile: FILE OF HistoryRecordType;
|
|
LastCallerFile: FILE OF LastCallerRec;
|
|
History: HistoryRecordType;
|
|
LastCaller: LastCallerRec;
|
|
Counter: Integer;
|
|
TotTimeOn: LongInt;
|
|
BEGIN
|
|
Com_Flush_Send;
|
|
|
|
LoadNode(ThisNode);
|
|
WITH NodeR DO
|
|
BEGIN
|
|
User := 0;
|
|
UserName := '';
|
|
CityState := '';
|
|
Sex := 'M';
|
|
Age := 0;
|
|
LogonTime := 0;
|
|
GroupChat := FALSE;
|
|
ActivityDesc := '';
|
|
Status := [NActive];
|
|
Room := 0;
|
|
Channel := 0;
|
|
FillChar(Invited,SizeOf(Invited),0);
|
|
FillChar(Booted,SizeOf(Booted),0);
|
|
FillChar(Forget,SizeOf(Forget),0);
|
|
END;
|
|
SaveNode(ThisNode);
|
|
|
|
IF (UserNum > 0) THEN
|
|
BEGIN
|
|
PurgeDir(TempDir+'ARC\',FALSE);
|
|
PurgeDir(TempDir+'QWK\',FALSE);
|
|
PurgeDir(TempDir+'UP\',FALSE);
|
|
PurgeDir(TempDir+'CD\',FALSE);
|
|
|
|
SLogging := TRUE;
|
|
|
|
IF (Trapping) THEN
|
|
BEGIN
|
|
IF (HungUp) THEN
|
|
BEGIN
|
|
WriteLn(TrapFile);
|
|
WriteLn(TrapFile,'NO CARRIER');
|
|
END;
|
|
Close(TrapFile);
|
|
Trapping := FALSE;
|
|
END;
|
|
|
|
TotTimeOn := ((GetPackDateTime - TimeOn) DIV 60);
|
|
|
|
ThisUser.LastOn := GetPackDateTime;
|
|
Inc(ThisUser.LoggedOn);
|
|
|
|
ThisUser.Illegal := 0;
|
|
ThisUser.TTimeOn := (ThisUser.TTimeOn + TotTimeOn);
|
|
ThisUser.TLToday := (NSL DIV 60);
|
|
|
|
IF (ChopTime <> 0) THEN
|
|
Inc(ThisUser.TLToday,(ChopTime DIV 60));
|
|
|
|
ThisUser.LastMsgArea := MsgArea;
|
|
ThisUser.LastFileArea := FileArea;
|
|
|
|
IF ((UserNum >= 1) AND (UserNum <= (MaxUsers - 1))) THEN
|
|
SaveURec(ThisUser,UserNum);
|
|
|
|
IF (HungUp) THEN
|
|
SL1('^7-= Hung Up =-');
|
|
|
|
SL1('^4Read: ^3'+IntToStr(PublicReadThisCall)+'^4 / Time on: ^3'+IntToStr(TotTimeOn));
|
|
|
|
END;
|
|
LastError := IOResult;
|
|
|
|
SL1('^3Logoff node '+IntToStr(ThisNode)+' ^5'+'['+Dat+']');
|
|
|
|
Assign(HistoryFile,General.DataPath+'HISTORY.DAT');
|
|
Reset(HistoryFile);
|
|
IF (IOResult = 2) THEN
|
|
BEGIN
|
|
ReWrite(HistoryFile);
|
|
FillChar(History,SizeOf(History),0);
|
|
History.Date := Date2PD(DateStr);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Seek(HistoryFile,(FileSize(HistoryFile) - 1));
|
|
Read(HistoryFile,History);
|
|
END;
|
|
Inc(History.Active,(GetPackDateTime - TimeOn) DIV 60);
|
|
IF (NOT LocalIOOnly) THEN
|
|
Inc(History.Callers);
|
|
IF (WasNewUser) THEN
|
|
Inc(History.NewUsers);
|
|
|
|
IF ((History.Posts + PublicPostsToday) < 2147483647) THEN
|
|
Inc(History.Posts,PublicPostsToday)
|
|
ELSE
|
|
History.Posts := 2147483647;
|
|
|
|
IF ((History.Email + PrivatePostsToday) < 2147483647) THEN
|
|
Inc(History.Email,PrivatePostsToday)
|
|
ELSE
|
|
History.Email := 2147483647;
|
|
|
|
IF ((History.FeedBack + FeedbackPostsToday) < 2147483647) THEN
|
|
Inc(History.FeedBack,FeedbackPostsToday)
|
|
ELSE
|
|
History.FeedBack := 2147483647;
|
|
|
|
IF ((History.Uploads + UploadsToday) < 2147483647) THEN
|
|
Inc(History.Uploads,UploadsToday)
|
|
ELSE
|
|
History.Uploads := 2147483647;
|
|
|
|
IF ((History.Downloads + DownloadsToday) < 2147483647) THEN
|
|
Inc(History.Downloads,DownloadsToday)
|
|
ELSE
|
|
History.Downloads := 2147483647;
|
|
|
|
IF ((History.UK + UploadKBytesToday) < 2147483647) THEN
|
|
Inc(History.UK,UploadKBytesToday)
|
|
ELSE
|
|
History.UK := 2147483647;
|
|
|
|
IF ((History.DK + DownloadKBytesToday) < 2147483647) THEN
|
|
Inc(History.DK,DownloadKBytesToday)
|
|
ELSE
|
|
History.DK := 2147483647;
|
|
|
|
IF (Exist(StartDir+'\CRITICAL.ERR')) THEN
|
|
BEGIN
|
|
Inc(History.Errors);
|
|
Kill(StartDir+'\CRITICAL.ERR');
|
|
END;
|
|
|
|
IF (ComPortSpeed <> 0) THEN
|
|
BEGIN
|
|
IF (ComportSpeed = 300) THEN
|
|
Inc(History.UserBaud[1])
|
|
ELSE IF (ComportSpeed = 600) THEN
|
|
Inc(History.UserBaud[2])
|
|
ELSE IF (ComportSpeed = 1200) THEN
|
|
Inc(History.UserBaud[3])
|
|
ELSE IF (ComportSpeed = 2400) THEN
|
|
Inc(History.UserBaud[4])
|
|
ELSE IF (ComportSpeed = 4800) THEN
|
|
Inc(History.UserBaud[5])
|
|
ELSE IF (ComportSpeed = 7200) THEN
|
|
Inc(History.UserBaud[6])
|
|
ELSE IF (ComportSpeed = 9600) THEN
|
|
Inc(History.UserBaud[7])
|
|
ELSE IF (ComportSpeed = 12000) THEN
|
|
Inc(History.UserBaud[8])
|
|
ELSE IF (ComportSpeed = 14400) THEN
|
|
Inc(History.UserBaud[9])
|
|
ELSE IF (ComportSpeed = 16800) THEN
|
|
Inc(History.UserBaud[10])
|
|
ELSE IF (ComportSpeed = 19200) THEN
|
|
Inc(History.UserBaud[11])
|
|
ELSE IF (ComportSpeed = 21600) THEN
|
|
Inc(History.UserBaud[12])
|
|
ELSE IF (ComportSpeed = 24000) THEN
|
|
Inc(History.UserBaud[13])
|
|
ELSE IF (ComportSpeed = 26400) THEN
|
|
Inc(History.UserBaud[14])
|
|
ELSE IF (ComportSpeed = 28800) THEN
|
|
Inc(History.UserBaud[15])
|
|
ELSE IF (ComportSpeed = 31200) THEN
|
|
Inc(History.UserBaud[16])
|
|
ELSE IF (ComportSpeed = 33600) THEN
|
|
Inc(History.UserBaud[17])
|
|
ELSE IF (ComportSpeed = 38400) THEN
|
|
Inc(History.UserBaud[18])
|
|
ELSE IF (ComportSpeed = 57600) THEN
|
|
Inc(History.UserBaud[19])
|
|
ELSE IF (ComportSpeed = 115200) THEN
|
|
Inc(History.UserBaud[20])
|
|
ELSE
|
|
Inc(History.UserBaud[0]);
|
|
END;
|
|
Seek(HistoryFile,(FileSize(HistoryFile) - 1));
|
|
Write(Historyfile,History);
|
|
Close(HistoryFile);
|
|
LastError := IOResult;
|
|
|
|
Assign(LastCallerFile,General.DataPath+'LASTON.DAT');
|
|
Reset(LastCallerFile);
|
|
IF (IOResult = 2) THEN
|
|
ReWrite(LastCallerFile);
|
|
FOR Counter := (FileSize(LastCallerFile) - 1) DOWNTO 0 DO
|
|
BEGIN
|
|
Seek(LastCallerFile,Counter);
|
|
Read(LastCallerFile,LastCaller);
|
|
IF (LastCaller.Node = ThisNode) AND (LastCaller.UserID = UserNum) THEN
|
|
WITH LastCaller DO
|
|
BEGIN
|
|
LogOffTime := GetPackDateTime;
|
|
Uploads := UploadsToday;
|
|
Downloads := DownloadsToday;
|
|
UK := UploadKBytesToday;
|
|
DK := DownloadKBytesToday;
|
|
MsgRead := PublicReadThisCall;
|
|
MsgPost := PublicPostsToday;
|
|
EmailSent := PrivatePostsToday;
|
|
FeedbackSent := FeedbackPostsToday;
|
|
Seek(LastCallerFile,Counter);
|
|
Write(LastCallerFile,LastCaller);
|
|
Break;
|
|
END;
|
|
END;
|
|
Close(LastCallerFile);
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
PROCEDURE DailyMaint;
|
|
VAR
|
|
LastCallerFile: FILE OF LastCallerRec;
|
|
HistoryFile: FILE OF HistoryRecordType;
|
|
ShortMsgFile: FILE OF ShortMessageRecordType;
|
|
F: Text;
|
|
History: HistoryRecordType;
|
|
ShortMsg: ShortMessageRecordType;
|
|
TempStr: AStr;
|
|
Counter,
|
|
Counter1: Integer;
|
|
BEGIN
|
|
|
|
IF (Date2PD(General.LastDate) <> Date2PD(DateStr)) THEN
|
|
BEGIN
|
|
|
|
General.LastDate := DateStr;
|
|
|
|
SaveGeneral(FALSE);
|
|
|
|
(* Test code only *)
|
|
IF (NOT InWFCMenu) THEN
|
|
SysOpLog('Daily maintenance ran from Caller Logon.')
|
|
ELSE
|
|
SysOpLog('Daily maintenance ran from Waiting For Caller.');
|
|
(* End test code *)
|
|
|
|
IF (NOT InWFCMenu) THEN
|
|
lStatus_Screen(100,'Updating data files ...',FALSE,TempStr);
|
|
|
|
(* Test *)
|
|
IF Exist(General.DataPath+'LASTON.DAT') THEN
|
|
Kill(General.DataPath+'LASTON.DAT');
|
|
|
|
Assign(LastCallerFile,General.DataPath+'LASTON.DAT');
|
|
ReWrite(LastCallerFile);
|
|
Close(LastCallerFile);
|
|
|
|
Assign(ShortMsgFile,General.DataPath+'SHORTMSG.DAT');
|
|
Reset(ShortMsgFile);
|
|
IF (IOResult = 0) THEN
|
|
BEGIN
|
|
IF (FileSize(ShortMsgFile) >= 1) THEN
|
|
BEGIN
|
|
Counter := 0;
|
|
Counter1 := 0;
|
|
WHILE (Counter <= (FileSize(ShortMsgFile) - 1)) DO
|
|
BEGIN
|
|
Seek(ShortMsgFile,Counter);
|
|
Read(ShortMsgFile,ShortMsg);
|
|
IF (ShortMsg.Destin <> -1) THEN
|
|
IF (Counter = Counter1) THEN
|
|
Inc(Counter1)
|
|
ELSE
|
|
BEGIN
|
|
Seek(ShortMsgFile,Counter1);
|
|
Write(ShortMsgFile,ShortMsg);
|
|
Inc(Counter1);
|
|
END;
|
|
Inc(Counter);
|
|
END;
|
|
Seek(ShortMsgFile,Counter1);
|
|
Truncate(ShortMsgFile);
|
|
END;
|
|
Close(ShortMsgFile);
|
|
END;
|
|
LastError := IOResult;
|
|
|
|
Assign(HistoryFile,General.DataPath+'HISTORY.DAT');
|
|
IF NOT Exist(General.DataPath+'HISTORY.DAT') THEN
|
|
ReWrite(HistoryFile)
|
|
ELSE
|
|
BEGIN
|
|
Reset(HistoryFile);
|
|
Seek(HistoryFile,(FileSize(HistoryFile) - 1));
|
|
Read(HistoryFile,History);
|
|
Inc(General.DaysOnline);
|
|
Inc(General.TotalCalls,History.Callers);
|
|
Inc(General.TotalUsage,History.Active);
|
|
Inc(General.TotalPosts,History.Posts);
|
|
Inc(General.TotalDloads,History.Downloads);
|
|
Inc(General.TotalUloads,History.Uploads);
|
|
END;
|
|
|
|
IF (History.Date <> Date2PD(DateStr)) THEN
|
|
BEGIN
|
|
IF Exist(General.LogsPath+'SYSOP'+IntToStr(General.BackSysOpLogs)+'.LOG') THEN
|
|
Kill(General.LogsPath+'SYSOP'+IntToStr(General.BackSysOpLogs)+'.LOG');
|
|
|
|
FOR Counter := (General.BackSysOpLogs - 1) DOWNTO 1 DO
|
|
IF (Exist(General.LogsPath+'SYSOP'+IntToStr(Counter)+'.LOG')) THEN
|
|
BEGIN
|
|
Assign(F,General.LogsPath+'SYSOP'+IntToStr(Counter)+'.LOG');
|
|
Rename(F,General.LogsPath+'SYSOP'+IntToStr(Counter + 1)+'.LOG');
|
|
END;
|
|
|
|
SL1('');
|
|
SL1('Total mins active..: '+IntToStr(History.Active));
|
|
SL1('Percent of activity: '+SQOutSp(CTP(History.Active,1440))+' ('+IntToStr(History.Callers)+' calls)');
|
|
SL1('New users..........: '+IntToStr(History.NewUsers));
|
|
SL1('Public posts.......: '+IntToStr(History.Posts));
|
|
SL1('Private mail sent..: '+IntToStr(History.Email));
|
|
SL1('FeedBack sent......: '+IntToStr(History.FeedBack));
|
|
SL1('Critical errors....: '+IntToStr(History.Errors));
|
|
SL1('Downloads today....: '+IntToStr(History.Downloads)+'-'+ConvertKB(History.DK,FALSE));
|
|
SL1('Uploads today......: '+IntToStr(History.Uploads)+'-'+ConvertKB(History.UK,FALSE));
|
|
|
|
FillChar(History,SizeOf(History),0);
|
|
History.Date := Date2PD(DateStr);
|
|
|
|
Seek(HistoryFile,FileSize(HistoryFile));
|
|
Write(HistoryFile,History);
|
|
Close(HistoryFile);
|
|
|
|
IF (General.MultiNode) AND Exist(TempDir+'TEMPLOG.'+IntToStr(ThisNode)) THEN
|
|
BEGIN
|
|
Assign(F,General.LogsPath+'SYSOP.LOG');
|
|
Append(F);
|
|
IF (IOResult = 2) THEN
|
|
ReWrite(F);
|
|
Reset(SysOpLogFile);
|
|
WHILE NOT EOF(SysOpLogFile) DO
|
|
BEGIN
|
|
ReadLn(SysOpLogFile,TempStr);
|
|
WriteLn(F,TempStr);
|
|
END;
|
|
Close(SysOpLogFile);
|
|
Close(F);
|
|
Erase(SysOpLogFile);
|
|
END;
|
|
|
|
Assign(SysOpLogFile,General.LogsPath+'SYSOP.LOG');
|
|
Rename(SysOpLogFile,General.LogsPath+'SYSOP1.LOG');
|
|
|
|
Assign(SysOpLogFile,General.LogsPath+'SYSOP.LOG');
|
|
ReWrite(SysOpLogFile);
|
|
Close(SysOpLogFile);
|
|
|
|
SL1(^M^J' Renegade SysOp Log for '+DateStr+^M^J);
|
|
|
|
IF (General.MultiNode) THEN
|
|
Assign(SysOpLogFile,TempDir+'TEMPLOG.'+IntToStr(ThisNode))
|
|
ELSE
|
|
Assign(SysOpLogFile,General.LogsPath+'SYSOP.LOG');
|
|
Append(SysOpLogFile);
|
|
IF (IOResult = 2) THEN
|
|
ReWrite(SysOpLogFile);
|
|
Close(SysOpLogFile);
|
|
END
|
|
ELSE
|
|
Close(HistoryFile);
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE UpdateGeneral;
|
|
VAR
|
|
HistoryFile: FILE OF HistoryRecordType;
|
|
History: HistoryRecordType;
|
|
Counter: LongInt;
|
|
BEGIN
|
|
Assign(HistoryFile,General.DataPath+'HISTORY.DAT');
|
|
Reset(HistoryFile);
|
|
IF (IOResult = 2) THEN
|
|
ReWrite(HistoryFile);
|
|
WITH General DO
|
|
BEGIN
|
|
DaysOnline := FileSize(HistoryFile);
|
|
TotalCalls := 0;
|
|
TotalUsage := 0;
|
|
TotalPosts := 0;
|
|
TotalDloads := 0;
|
|
TotalUloads := 0;
|
|
FOR Counter := 1 TO (FileSize(HistoryFile) - 1) DO
|
|
BEGIN
|
|
Read(HistoryFile,History);
|
|
Inc(TotalCalls,History.Callers);
|
|
Inc(TotalUsage,History.Active);
|
|
Inc(TotalPosts,History.Posts);
|
|
Inc(TotalDloads,History.Downloads);
|
|
Inc(TotalUloads,History.Uploads);
|
|
END;
|
|
IF (TotalUsage < 1) THEN
|
|
TotalUsage := 1;
|
|
IF (DaysOnline < 1) THEN
|
|
DaysOnline := 1;
|
|
END;
|
|
Close(HistoryFile);
|
|
LastError := IOResult;
|
|
SaveGeneral(FALSE);
|
|
IF (NOT InWFCMenu) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('System averages have been updated.');
|
|
PauseScr(FALSE);
|
|
END;
|
|
END;
|
|
|
|
END.
|