1417 lines
57 KiB
Plaintext
1417 lines
57 KiB
Plaintext
{$IFDEF WIN32}
|
|
{$I DEFINES.INC}
|
|
{$ENDIF}
|
|
|
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|
|
|
UNIT SysOp3;
|
|
|
|
INTERFACE
|
|
|
|
USES
|
|
Common;
|
|
|
|
PROCEDURE ShowUserInfo(DisplayType: Byte; UNum: Integer; CONST User: UserRecordType);
|
|
PROCEDURE UserEditor(UNum: Integer);
|
|
|
|
IMPLEMENTATION
|
|
|
|
USES
|
|
CUser,
|
|
Mail0,
|
|
Script,
|
|
ShortMsg,
|
|
SysOp2G,
|
|
SysOp7,
|
|
TimeFunc,
|
|
MiscUser;
|
|
|
|
FUNCTION DisplayTerminalStr(StatusFlags: StatusFlagSet; Flags: FlagSet): Str8;
|
|
VAR
|
|
TempS: Str8;
|
|
BEGIN
|
|
IF (AutoDetect IN StatusFlags) THEN
|
|
TempS := 'Auto'
|
|
ELSE IF (RIP IN StatusFlags) THEN
|
|
TempS := 'RIP'
|
|
ELSE IF (Avatar IN Flags) THEN
|
|
TempS := 'Avatar'
|
|
ELSE IF (ANSI IN Flags) THEN
|
|
TempS := 'Ansi'
|
|
ELSE IF (OKVT100) THEN
|
|
TempS := 'VT-100'
|
|
ELSE
|
|
TempS := 'None';
|
|
DisplayTerminalStr := PadLeftStr(TempS,8);
|
|
END;
|
|
|
|
PROCEDURE ShowUserInfo(DisplayType: Byte; UNum: Integer; CONST User: UserRecordType);
|
|
VAR
|
|
Counter: Byte;
|
|
|
|
PROCEDURE ShowUser(VAR Counter1: Byte);
|
|
VAR
|
|
S: AStr;
|
|
BEGIN
|
|
WITH User DO
|
|
CASE Counter1 OF
|
|
1 : BEGIN
|
|
IF (UNum = 0) THEN
|
|
S := '^5New User Configuration:'
|
|
ELSE
|
|
BEGIN
|
|
S := '^5User #'+IntToStr(UNum)+' of '+IntToStr(MaxUsers - 1);
|
|
IF NOT (OnNode(UNum) IN [0,ThisNode]) THEN
|
|
S := PadLeftStr(S,45)+'^8Note: ^3User is on node '+IntToStr(OnNode(UNum));
|
|
END;
|
|
S := S + #13#10;
|
|
END;
|
|
2 : S := '^1A. User Name : ^3'+PadLeftStr(Name,29)+'^1 L. Security : ^3'+IntToStr(SL);
|
|
3 : S := '^1B. Real Name : ^3'+PadLeftStr(RealName,29)+'^1 M. D Security: ^3'+IntToStr(DSL);
|
|
4 : S := '^1C. Address : ^3'+PadLeftStr(Street,29)+'^1 N. AR: ^3'+DisplayARFlags(AR,'3','1');
|
|
5 : S := '^1D. City/State: ^3'+PadLeftStr(CityState,29)+'^1 O. AC: ^3'+DisplayACFlags(Flags,'3','1');
|
|
6 : S := '^1E. Zip code : ^3'+PadLeftStr(ZipCode,29)+'^1 P. Sex/Age : ^3'+
|
|
Sex+IntToStr(AgeUser(BirthDate))+' ('+ToDate8(PD2Date(BirthDate))+')';
|
|
7 : S := '^1F. SysOp note: ^3'+PadLeftStr(Note,29)+'^1 R. Phone num : ^3'+Ph;
|
|
8 : S := '^1G. '+PadLeftStr(lRGLngStr(41,TRUE){FString.UserDefEd[1]},10)+': ^3'+PadLeftStr(UsrDefStr[1],29)+
|
|
'^1 T. Last/1st : ^3'+ToDate8(PD2Date(LastOn))+
|
|
' ('+ToDate8(PD2Date(FirstOn))+')';
|
|
9 : BEGIN
|
|
S := '^1H. '+PadLeftStr(lRGLngStr(42,TRUE){FString.UserDefEd[2]},10)+': ^3'+PadLeftStr(UsrDefStr[2],29)+
|
|
'^1 V. Locked out: '+AOnOff(LockedOut IN SFlags,'^7'+LockedFile+'.ASC','^3Inactive');
|
|
END;
|
|
10 : BEGIN
|
|
S := '^1I. '+PadLeftStr(lRGLngStr(43,TRUE){FString.UserDefEd[3]},10)+': ^3'+PadLeftStr(UsrDefStr[3],29)+
|
|
'^1 W. Password : [Not Shown]';
|
|
END;
|
|
11 : BEGIN
|
|
IF (Deleted IN SFlags) THEN
|
|
S := '^8'
|
|
ELSE
|
|
S := '^1';
|
|
S := S + '[DEL] ';
|
|
IF (TrapActivity IN SFlags) AND ((UNum <> UserNum) OR (UserNum = 1)) THEN
|
|
IF (TrapSeparate IN SFlags) THEN
|
|
S := S + '^8[TRP SEP] '
|
|
ELSE
|
|
S := S + '^8[TRP COM] '
|
|
ELSE
|
|
S := S + '^1[TRP OFF] ';
|
|
IF (LockedOut IN SFlags) THEN
|
|
S := S + '^8'
|
|
ELSE
|
|
S := S + '^1';
|
|
S := S + '[LOCK] ';
|
|
IF (Alert IN Flags) THEN
|
|
S := S + '^8'
|
|
ELSE
|
|
S := S + '^1';
|
|
S := S + '[ALRT] ';
|
|
S := '^1J. Status : ^3'+PadLeftStr(S,29)+'^1 X. Caller ID : ^3'+CallerID;
|
|
END;
|
|
12 : S := '^1K. QWK setup : ^3'+PadLeftStr(General.FileArcInfo[DefArcType].ext,29)+
|
|
'^1 Y. Start Menu: ^3'+IntToStr(UserStartMenu);
|
|
13 : S := '^1Z. Forgot PW : ^3'+ForgotPWAnswer+#13#10;
|
|
14 : S := '^11. Call records - TC: ^3'+PadLeftInt(LoggedOn,8)+
|
|
' ^1TT: ^3'+PadLeftInt(TTimeOn,8)+
|
|
' ^1CT: ^3'+PadLeftInt(OnToday,8)+
|
|
' ^1TL: ^3'+PadLeftInt(TLToday,8)+
|
|
' ^1TB: ^3'+IntToStr(TimeBank);
|
|
15 : S := '^12. Mail records - PB: ^3'+PadLeftInt(MsgPost,8)+
|
|
' ^1PV: ^3'+PadLeftInt(EmailSent,8)+
|
|
' ^1FB: ^3'+PadLeftInt(FeedBack,8)+
|
|
' ^1WT: ^3'+IntToStr(Waiting);
|
|
16 : S := '^13. File records - DL: ^3'+PadLeftStr(IntToStr(Downloads)+'-'+FormatNumber(DK)+'k',15)+
|
|
' ^1UL: ^3'+PadLeftStr(IntToStr(Uploads)+'-'+FormatNumber(UK)+'k',15)+
|
|
' ^1DT: ^3'+IntToStr(DLToday)+'-'+FormatNumber(DLKToday)+'k';
|
|
17 : S := ' ^1FP: ^3'+IntToStr(FilePoints);
|
|
18 : S := '^14. Pref records - EM: ^3'+DisplayTerminalStr(SFlags,Flags)+
|
|
' ^1CS: ^3'+PadLeftStr(ShowYesNo(CLSMsg IN SFlags),8)+
|
|
' ^1PS: ^3'+PadLeftStr(ShowYesNo(Pause IN Flags),8)+
|
|
' ^1CL: ^3'+PadLeftStr(ShowYesNo(Color IN Flags),8)+
|
|
' ^1ED: ^3'+AOnOff((FSEditor IN SFlags),'F/S','Reg');
|
|
19 : S := '^15. Subs records - CR: ^3'+PadLeftInt(lCredit,8)+
|
|
' ^1DB: ^3'+PadLeftInt(Debit,8)+
|
|
' ^1BL: ^3'+PadLeftInt(lCredit - Debit,8)+
|
|
' ^1ED: ^3'+AOnOff((Expiration > 0),ToDate8(PD2Date(Expiration)),'Never ')+
|
|
' ^1ET: ^3'+AOnOff(ExpireTo <> ' ',ExpireTo,'None');
|
|
END;
|
|
PrintACR(S);
|
|
Inc(Counter1);
|
|
END;
|
|
|
|
BEGIN
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
CLS;
|
|
Counter := 1;
|
|
CASE DisplayType OF
|
|
1 : WHILE (Counter <= 19) AND (NOT Abort) AND (NOT HangUp) DO
|
|
ShowUser(Counter);
|
|
2 : WHILE (Counter <= 5) AND (NOT Abort) AND (NOT HangUp) DO
|
|
ShowUser(Counter);
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE UserEditor(UNum: Integer);
|
|
TYPE
|
|
F_StatusFlagsRec = (FS_Deleted,FS_Trapping,FS_ChatBuffer,FS_LockedOut,FS_Alert,FS_SLogging);
|
|
CONST
|
|
AutoList: Boolean = TRUE;
|
|
UserInfoTyp: Byte = 1;
|
|
F_State: ARRAY [0..14] OF Boolean = (FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,
|
|
FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE);
|
|
F_GenText: STRING[40] = '';
|
|
F_ACS: STRING[20] = '';
|
|
F_SL1: Byte = 0;
|
|
F_SL2: Byte = 255;
|
|
F_DSL1: Byte = 0;
|
|
F_DSL2: Byte = 255;
|
|
F_AR: ARFlagSet = [];
|
|
F_AC: FlagSet = [];
|
|
F_Status: SET OF F_StatusFlagsRec = [];
|
|
F_LastOn1: LongInt = 0;
|
|
F_LastOn2: LongInt = $FFFFFFF;
|
|
F_FirstOn1: LongInt = 0;
|
|
F_FirstOn2: LongInt = $FFFFFFF;
|
|
F_NumCalls1: LongInt = 0;
|
|
F_NumCalls2: LongInt = 2147483647;
|
|
F_Age1: Byte = 0;
|
|
F_Age2: Byte = 255;
|
|
F_Gender: Char = 'M';
|
|
F_PostRatio1: LongInt = 0;
|
|
F_PostRatio2: LongInt = 2147483647;
|
|
F_DLKRatio1: LongInt = 0;
|
|
F_DLKRatio2: LongInt = 2147483647;
|
|
F_DLRatio1: LongInt = 0;
|
|
F_DLRatio2: LongInt = 2147483647;
|
|
VAR
|
|
User: UserRecordType;
|
|
TempStr: AStr;
|
|
Cmd: Char;
|
|
TempB,
|
|
Counter: Byte;
|
|
UNum1,
|
|
SaveUNum,
|
|
TempMaxUsers,
|
|
RecNumToList: Integer;
|
|
Changed,
|
|
Save,
|
|
Save1,
|
|
Ok: Boolean;
|
|
|
|
FUNCTION SearchType(SType: Byte): AStr;
|
|
BEGIN
|
|
CASE SType OF
|
|
0 : SearchType := 'General text';
|
|
1 : SearchType := 'Search ACS';
|
|
2 : SearchType := 'User SL';
|
|
3 : SearchType := 'User DSL';
|
|
4 : SearchType := 'User AR Flags';
|
|
5 : SearchType := 'User AC Flags';
|
|
6 : SearchType := 'User status';
|
|
7 : SearchType := 'Date since last on';
|
|
8 : SearchType := 'Date since first on';
|
|
9 : SearchType := 'Number of calls';
|
|
10 : SearchType := 'User age';
|
|
11 : SearchType := 'User gender';
|
|
12 : SearchType := '# 1/10''s call/post';
|
|
13 : SearchType := '#k DL/1k UL';
|
|
14 : SearchType := '# DLs/1 UL';
|
|
END;
|
|
END;
|
|
|
|
FUNCTION Find_FS: AStr;
|
|
VAR
|
|
FSF: F_StatusFlagsRec;
|
|
TempStr1: AStr;
|
|
BEGIN
|
|
TempStr1 := '';
|
|
FOR FSF := FS_Deleted TO FS_SLogging DO
|
|
IF (FSF IN F_Status) THEN
|
|
CASE FSF OF
|
|
FS_Deleted : TempStr1 := TempStr1 +'Deleted,';
|
|
FS_Trapping : TempStr1 := TempStr1 +'Trapping,';
|
|
FS_ChatBuffer: TempStr1 := TempStr1 +'Chat Buffering,';
|
|
FS_LockedOut : TempStr1 := TempStr1 +'Locked Out,';
|
|
FS_Alert : TempStr1 := TempStr1 +'Alert,';
|
|
FS_SLogging : TempStr1 := TempStr1 +'Sep. SysOp Log,';
|
|
END;
|
|
IF (TempStr1 <> '') THEN
|
|
TempStr1 := Copy(TempStr1,1,(Length(TempStr1) - 1))
|
|
ELSE
|
|
TempStr1 := 'None.';
|
|
Find_FS := TempStr1;
|
|
END;
|
|
|
|
PROCEDURE DisplaySearchOptions;
|
|
VAR
|
|
TempStr1: AStr;
|
|
Cmd1: Char;
|
|
Counter1: Byte;
|
|
BEGIN
|
|
Print('^5Search Criterea:^1');
|
|
NL;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
Counter1 := 0;
|
|
WHILE ((Counter1 <= 14) AND (NOT Abort) AND (NOT HangUp)) DO
|
|
BEGIN
|
|
CASE Counter1 OF
|
|
0..9 :
|
|
Cmd1 := Chr(Counter1 + 48);
|
|
10 : Cmd1 := 'A';
|
|
11 : Cmd1 := 'G';
|
|
12 : Cmd1 := 'P';
|
|
13 : Cmd1 := 'K';
|
|
14 : Cmd1 := 'N';
|
|
END;
|
|
Prompt('^1'+Cmd1+'. '+PadLeftStr(SearchType(Counter1),19)+': ');
|
|
TempStr1 := '';
|
|
IF (NOT F_State[Counter1]) THEN
|
|
TempStr1 := '^5<INACTIVE>'
|
|
ELSE
|
|
BEGIN
|
|
CASE Counter1 OF
|
|
0 : TempStr1 := '"'+F_GenText+'"';
|
|
1 : TempStr1 := '"'+F_ACS+'"';
|
|
2 : TempStr1 := IntToStr(F_SL1)+' SL ... '+IntToStr(F_SL2)+' SL';
|
|
3 : TempStr1 := IntToStr(F_DSL1)+' DSL ... '+IntToStr(F_DSL2)+' DSL';
|
|
4 : TempStr1 := DisplayARFlags(F_AR,'3','1');
|
|
5 : TempStr1 := DisplayACFlags(F_AC,'3','1');
|
|
6 : TempStr1 := Find_FS;
|
|
7 : TempStr1 := PD2Date(F_LastOn1)+' ... '+PD2Date(F_LastOn2);
|
|
8 : TempStr1 := PD2Date(F_FirstOn1)+' ... '+PD2Date(F_FirstOn2);
|
|
9 : TempStr1 := IntToStr(F_NumCalls1)+' calls ... '+IntToStr(F_NumCalls2)+' calls';
|
|
10 : TempStr1 := IntToStr(F_Age1)+' years ... '+IntToStr(F_Age2)+' years';
|
|
11 : TempStr1 := AOnOff(F_Gender = 'M','Male','Female');
|
|
12 : TempStr1 := IntToStr(F_PostRatio1)+' ... '+IntToStr(F_PostRatio2);
|
|
13 : TempStr1 := IntToStr(F_DLKRatio1)+' ... '+IntToStr(F_DLKRatio2);
|
|
14 : TempStr1 := IntToStr(F_DLRatio1)+' ... '+IntToStr(F_DLRatio2);
|
|
END;
|
|
UserColor(3);
|
|
END;
|
|
Print(TempStr1);
|
|
WKey;
|
|
Inc(Counter1);
|
|
END;
|
|
END;
|
|
|
|
FUNCTION OKUser(UNum1: Integer): Boolean;
|
|
VAR
|
|
FSF: F_StatusFlagsRec;
|
|
User1: UserRecordType;
|
|
Counter1: Byte;
|
|
TempL: LongInt;
|
|
Ok1: Boolean;
|
|
|
|
FUNCTION NoFindIt(TempStr1: AStr): Boolean;
|
|
BEGIN
|
|
NoFindIt := (Pos(AllCaps(F_GenText),AllCaps(TempStr1)) = 0);
|
|
END;
|
|
|
|
BEGIN
|
|
WITH User1 DO
|
|
BEGIN
|
|
LoadURec(User1,UNum1);
|
|
Ok1 := TRUE;
|
|
Counter1 := 0;
|
|
WHILE ((Counter1 <= 14) AND (Ok1)) DO
|
|
BEGIN
|
|
IF (F_State[Counter1]) THEN
|
|
CASE Counter1 OF
|
|
0 : IF ((NoFindIt(Name)) AND (NoFindIt(RealName)) AND
|
|
(NoFindIt(Street)) AND (NoFindIt(CityState)) AND
|
|
(NoFindIt(ZipCode)) AND (NoFindIt(UsrDefStr[1])) AND
|
|
(NoFindIt(Ph)) AND (NoFindIt(Note)) AND
|
|
(NoFindIt(UsrDefStr[2])) AND (NoFindIt(UsrDefStr[3]))) THEN
|
|
Ok1 := FALSE;
|
|
1 : IF (NOT AACS1(User1,UNum1,F_ACS)) THEN
|
|
Ok1 := FALSE;
|
|
2 : IF ((SL < F_SL1) OR (SL > F_SL2)) THEN
|
|
Ok1 := FALSE;
|
|
3 : IF ((DSL < F_DSL1) OR (DSL > F_DSL2)) THEN
|
|
Ok1 := FALSE;
|
|
4 : IF (NOT (AR >= F_AR)) THEN
|
|
Ok1 := FALSE;
|
|
5 : IF (NOT (Flags >= F_AC)) THEN
|
|
Ok1 := FALSE;
|
|
6 : FOR FSF := FS_Deleted TO FS_SLogging DO
|
|
IF (FSF IN F_Status) THEN
|
|
CASE FSF OF
|
|
FS_Deleted : IF NOT (Deleted IN User1.SFlags) THEN
|
|
Ok1 := FALSE;
|
|
FS_Trapping : IF NOT (TrapActivity IN User1.SFlags) THEN
|
|
Ok1 := FALSE;
|
|
FS_ChatBuffer : IF NOT (ChatAuto IN User1.SFlags) THEN
|
|
Ok1 := FALSE;
|
|
FS_LockedOut : IF NOT (LockedOut IN User1.SFlags) THEN
|
|
Ok1 := FALSE;
|
|
FS_Alert : IF NOT ((Alert IN Flags)) THEN
|
|
Ok1 := FALSE;
|
|
FS_SLogging : IF NOT (SLogSeparate IN User1.SFlags) THEN
|
|
Ok1 := FALSE;
|
|
END;
|
|
7 : IF ((LastOn < F_LastOn1) OR (LastOn > F_LastOn2)) THEN
|
|
Ok1 := FALSE;
|
|
8 : IF ((FirstOn < F_FirstOn1) OR (FirstOn > F_FirstOn2)) THEN
|
|
Ok1 := FALSE;
|
|
9 : IF ((LoggedOn < F_NumCalls1) OR (LoggedOn > F_NumCalls2)) THEN
|
|
Ok1 := FALSE;
|
|
10 : IF (((AgeUser(BirthDate) < F_Age1) OR (AgeUser(BirthDate) > F_Age2)) AND (AgeUser(BirthDate) <> 0)) THEN
|
|
Ok1 := FALSE;
|
|
11 : IF (Sex <> F_Gender) THEN
|
|
Ok1 := FALSE;
|
|
12 : BEGIN
|
|
IF (LoggedOn > 0) THEN
|
|
TempL := LoggedOn
|
|
ELSE
|
|
TempL := 1;
|
|
TempL := ((MsgPost DIV TempL) * 100);
|
|
IF ((TempL < F_PostRatio1) OR (TempL > F_PostRatio2)) THEN
|
|
Ok1 := FALSE;
|
|
END;
|
|
13 : BEGIN
|
|
IF (UK > 0) THEN
|
|
TempL := UK
|
|
ELSE
|
|
TempL := 1;
|
|
TempL := (DK DIV TempL);
|
|
IF ((TempL < F_DLKRatio1) OR (TempL > F_DLKRatio2)) THEN
|
|
Ok1 := FALSE;
|
|
END;
|
|
14 : BEGIN
|
|
IF (Uploads > 0) THEN
|
|
TempL := Uploads
|
|
ELSE
|
|
TempL := 1;
|
|
TempL := (Downloads DIV TempL);
|
|
IF ((TempL < F_DLRatio1) OR (TempL > F_DLRatio2)) THEN
|
|
Ok1 := FALSE;
|
|
END;
|
|
END;
|
|
Inc(Counter1);
|
|
END;
|
|
END;
|
|
OKUser := Ok1;
|
|
END;
|
|
|
|
PROCEDURE Search(i: Integer);
|
|
VAR
|
|
n,
|
|
TempMaxUsers: Integer;
|
|
BEGIN
|
|
Prompt('Searching ... ');
|
|
Reset(UserFile);
|
|
TempMaxUsers := (MaxUsers - 1);
|
|
n := UNum;
|
|
REPEAT
|
|
Inc(UNum,i);
|
|
IF (UNum < 1) THEN
|
|
UNum := TempMaxUsers;
|
|
IF (UNum > TempMaxUsers) THEN
|
|
UNum := 1;
|
|
UNTIL ((OKUser(UNum)) OR (UNum = n));
|
|
Close(UserFile);
|
|
END;
|
|
|
|
PROCEDURE Clear_F;
|
|
VAR
|
|
Counter1: Byte;
|
|
BEGIN
|
|
FOR Counter1 := 0 TO 14 DO
|
|
F_State[Counter1] := FALSE;
|
|
F_GenText := '';
|
|
F_ACS := '';
|
|
F_SL1 := 0;
|
|
F_SL2 := 255;
|
|
F_DSL1 := 0;
|
|
F_DSL2 := 255;
|
|
F_AR := [];
|
|
F_AC := [];
|
|
F_Status := [];
|
|
F_LastOn1 := 0;
|
|
F_LastOn2 := $FFFFFFF;
|
|
F_FirstOn1 := 0;
|
|
F_FirstOn2 := $FFFFFFF;
|
|
F_NumCalls1 := 0;
|
|
F_NumCalls2 := 2147483647;
|
|
F_Age1 := 0;
|
|
F_Age2 := 255;
|
|
F_Gender := 'M';
|
|
F_PostRatio1 := 0;
|
|
F_PostRatio2 := 2147483647;
|
|
F_DLKRatio1 := 0;
|
|
F_DLKRatio2 := 2147483647;
|
|
F_DLRatio1 := 0;
|
|
F_DLRatio2 := 2147483647;
|
|
END;
|
|
|
|
PROCEDURE UserSearch;
|
|
VAR
|
|
User1: UserRecordType;
|
|
FSF: F_StatusFlagsRec;
|
|
TempStr1: AStr;
|
|
Cmd1: Char;
|
|
SType,
|
|
UNum1,
|
|
UserCount: Integer;
|
|
Changed1: Boolean;
|
|
BEGIN
|
|
DisplaySearchOptions;
|
|
REPEAT
|
|
NL;
|
|
Prt('Change [^5?^4=^5Help^4]: ');
|
|
OneK(Cmd1,'Q0123456789AGPKNCLTU?'^M,TRUE,TRUE);
|
|
NL;
|
|
CASE Cmd1 OF
|
|
'0'..'9' :
|
|
SType := (Ord(Cmd1) - 48);
|
|
'A' : SType := 10;
|
|
'G' : SType := 11;
|
|
'P' : SType := 12;
|
|
'K' : SType := 13;
|
|
'N' : SType := 14;
|
|
ELSE
|
|
SType := -1;
|
|
END;
|
|
IF (SType <> -1) THEN
|
|
BEGIN
|
|
Prompt('^5[>^0 ');
|
|
IF (F_State[SType]) THEN
|
|
Print(SearchType(SType)+'^1')
|
|
ELSE
|
|
BEGIN
|
|
F_State[SType] := TRUE;
|
|
Print(SearchType(SType)+' is now *ON*^1');
|
|
END;
|
|
NL;
|
|
END;
|
|
CASE Cmd1 OF
|
|
'0' : BEGIN
|
|
Print('General text ["'+F_GenText+'"]');
|
|
Prt(': ');
|
|
MPL(40);
|
|
Input(TempStr1,40);
|
|
IF (TempStr1 <> '') THEN
|
|
F_GenText := TempStr1;
|
|
END;
|
|
'1' : BEGIN
|
|
Print('Search ACS ["'+F_ACS+'"]');
|
|
Prt(': ');
|
|
MPL(20);
|
|
InputL(TempStr1,20);
|
|
IF (TempStr1 <> '') THEN
|
|
F_ACS := TempStr1;
|
|
END;
|
|
'2' : BEGIN
|
|
InputByteWOC('Lower limit',F_SL1,[DisplayValue,NumbersOnly],0,255);
|
|
InputByteWOC('%LFUpper limit',F_SL2,[DisplayValue,NumbersOnly],(0 + F_SL1),255);
|
|
END;
|
|
'3' : BEGIN
|
|
InputByteWOC('Lower limit',F_DSL1,[DisplayValue,NumbersOnly],0,255);
|
|
InputByteWOC('%LFUpper limit',F_DSL2,[DisplayValue,NumbersOnly],(0 + F_DSL1),255);
|
|
END;
|
|
'4' : BEGIN
|
|
REPEAT
|
|
Prt('Toggle which AR flag? ('+DisplayArFlags(F_AR,'5','4')+'^4) [^5?^4=^5Help^4,^5<CR>^4=^5Quit^4]: ');
|
|
OneK(Cmd1,^M'ABCDEFGHIJKLMNOPQRSTUVWXYZ?',TRUE,TRUE);
|
|
IF (Cmd1 = '?') THEN
|
|
PrintF('ARFLAGS')
|
|
ELSE IF (Cmd1 <> ^M) THEN
|
|
ToggleARFlag(Cmd1,F_AR,Changed);
|
|
UNTIL ((Cmd1 = ^M) OR (HangUp));
|
|
Cmd1 := #0;
|
|
END;
|
|
'5' : BEGIN
|
|
REPEAT
|
|
Prt('Toggle which AC flag? ['+DisplayACFlags(F_AC,'5','4')+'] [?]Help: ');
|
|
OneK(Cmd1,^M'LCVUA*PEKM1234?',TRUE,TRUE);
|
|
IF (Cmd1 = '?') THEN
|
|
PrintF('ACFLAGS')
|
|
ELSE IF (Cmd1 <> ^M) THEN
|
|
ToggleACFlags(Cmd1,F_AC,Changed1);
|
|
UNTIL (Cmd1 = ^M) OR (HangUp);
|
|
Cmd1 := #0;
|
|
END;
|
|
'6' : BEGIN
|
|
REPEAT
|
|
Print('^4Current flags: ^3'+Find_FS);
|
|
NL;
|
|
Prt('Toggle which status flag? (^5?^4=^5Help^4): ');
|
|
OneK(Cmd1,'QACDLST? '^M,TRUE,TRUE);
|
|
CASE Cmd1 OF
|
|
'A' : FSF := FS_Alert;
|
|
'C' : FSF := FS_ChatBuffer;
|
|
'D' : FSF := FS_Deleted;
|
|
'L' : FSF := FS_LockedOut;
|
|
'S' : FSF := FS_SLogging;
|
|
'T' : FSF := FS_Trapping;
|
|
'?' : BEGIN
|
|
NL;
|
|
LCmds(15,3,'Alert','Chat-buffering');
|
|
LCmds(15,3,'Deleted','Locked-out');
|
|
LCmds(15,3,'Separate SysOp logging','Trapping');
|
|
END;
|
|
END;
|
|
IF (Cmd1 IN ['A','C','D','L','S','T']) THEN
|
|
IF (FSF IN F_Status) THEN
|
|
Exclude(F_Status,FSF)
|
|
ELSE
|
|
Include(F_Status,FSF);
|
|
UNTIL ((Cmd1 IN ['Q',' ',^M]) OR (HangUp));
|
|
Cmd1 := #0;
|
|
END;
|
|
'7' : BEGIN
|
|
Prt('Starting date: ');
|
|
MPL(10);
|
|
InputFormatted('',TempStr1,'##/##/####',TRUE);
|
|
F_LastOn1 := Date2PD(TempStr1);
|
|
NL;
|
|
Prt('Ending date: ');
|
|
MPL(10);
|
|
InputFormatted('',TempStr1,'##/##/####',TRUE);
|
|
F_LastOn2 := Date2PD(TempStr1);
|
|
END;
|
|
'8' : BEGIN
|
|
Prt('Starting date: ');
|
|
MPL(10);
|
|
InputFormatted('',TempStr1,'##/##/####',TRUE);
|
|
F_FirstOn1 := Date2PD(TempStr1);
|
|
NL;
|
|
Prt('Ending date: ');
|
|
MPL(10);
|
|
InputFormatted('',TempStr1,'##/##/####',TRUE);
|
|
F_FirstOn2 := Date2PD(TempStr1);
|
|
END;
|
|
'9' : BEGIN
|
|
InputLongIntWOC('%LFLower limit',F_NumCalls1,[DisplayValue,NumbersOnly],0,2147483647);
|
|
InputLongIntWOC('%LFUpper limit',F_NumCalls2,[DisplayValue,NumbersOnly],(0 + F_NumCalls1),2147483647);
|
|
END;
|
|
'A' : BEGIN
|
|
InputByteWOC('Lower limit',F_Age1,[DisplayValue,NumbersOnly],0,255);
|
|
InputByteWOC('%LFUpper limit',F_Age2,[displayValue,NumbersOnly],(0 + F_Age1),255);
|
|
END;
|
|
'G' : BEGIN
|
|
Prt('Gender ['+F_Gender+']: ');
|
|
OneK(Cmd1,^M'MF',TRUE,TRUE);
|
|
IF (Cmd1 IN ['F','M']) THEN
|
|
F_Gender := Cmd1;
|
|
END;
|
|
'P' : BEGIN
|
|
InputLongIntWOC('%LFLower limit',F_PostRatio1,[DisplayValue,NumbersOnly],0,2147483647);
|
|
InputLongIntWOC('%LFUpper limit',F_PostRatio2,[DisplayValue,NumbersOnly],(0 + F_PostRatio1),2147483647);
|
|
END;
|
|
'K' : BEGIN
|
|
InputLongIntWOC('%LFLower limit',F_DLKRatio1,[DisplayValue,NumbersOnly],0,2147483647);
|
|
InputLongIntWOC('%LFUpper limit',F_DLKRatio2,[DisplayValue,NumbersOnly],(0 + F_DLKRatio1),2147483647);
|
|
END;
|
|
'N' : BEGIN
|
|
InputLongIntWOC('%LFLower limit',F_DLRatio1,[DisplayValue,NumbersOnly],0,2147483647);
|
|
InputLongIntWOC('%LFUpper limit',F_DLRatio2,[DisplayValue,NumbersOnly],(0 + F_DLRatio1),2147483647);
|
|
END;
|
|
'C' : IF PYNQ('Are you sure? ',0,FALSE) THEN
|
|
Clear_F;
|
|
^M,'L' :
|
|
DisplaySearchOptions;
|
|
'T' : BEGIN
|
|
Prt('Which (0-9,A,G,P,K,N)? [Q]=Quit]: ');
|
|
OneK(Cmd1,'Q0123456789AGPKN'^M,TRUE,TRUE);
|
|
NL;
|
|
CASE Cmd1 OF
|
|
'0'..'9' :
|
|
SType := (Ord(Cmd1) - 48);
|
|
'A' : SType := 10;
|
|
'G' : SType := 11;
|
|
'P' : SType := 12;
|
|
'K' : SType := 13;
|
|
'N' : SType := 14;
|
|
ELSE
|
|
SType := -1;
|
|
END;
|
|
IF (SType <> -1) THEN
|
|
BEGIN
|
|
F_State[SType] := NOT F_State[SType];
|
|
Prompt('^5[>^0 '+SearchType(SType)+' is now *'+AonOff(F_State[SType],'ON','OFF')+'*^1');
|
|
NL;
|
|
END;
|
|
Cmd1 := #0;
|
|
END;
|
|
'U' : BEGIN
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
Reset(UserFile);
|
|
UserCount := 0;
|
|
TempMaxUsers := (MaxUsers - 1);
|
|
UNum1 := 1;
|
|
WHILE (UNum1 <= TempMaxUsers) AND (NOT Abort) AND (NOT HangUp) DO
|
|
BEGIN
|
|
IF (OKUser(UNum1)) THEN
|
|
BEGIN
|
|
LoadURec(User1,UNum1);
|
|
PrintACR('^3'+Caps(User1.Name)+' #'+IntToStr(UNum1));
|
|
Inc(UserCount);
|
|
END;
|
|
Inc(UNum1);
|
|
END;
|
|
Close(UserFile);
|
|
IF (NOT Abort) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7 ** ^5'+IntToStr(UserCount)+' Users.^1');
|
|
END;
|
|
END;
|
|
'?' : BEGIN
|
|
Print('^30-9,AGPKN^1: Change option');
|
|
LCmds(14,3,'List options','Toggle options on/off');
|
|
LCmds(14,3,'Clear options','User''s who match');
|
|
LCmds(14,3,'Quit','');
|
|
END;
|
|
END;
|
|
UNTIL (Cmd1 = 'Q') OR (HangUp);
|
|
END;
|
|
|
|
PROCEDURE KillUserMail;
|
|
VAR
|
|
User1: UserRecordType;
|
|
MHeader: MHeaderRec;
|
|
SaveReadMsgArea: Integer;
|
|
MsgNum: Word;
|
|
BEGIN
|
|
SaveReadMsgArea := ReadMsgArea;
|
|
InitMsgArea(-1);
|
|
Reset(MsgHdrF);
|
|
FOR MsgNum := 1 TO HiMsg DO
|
|
BEGIN
|
|
LoadHeader(MsgNum,MHeader);
|
|
IF (NOT (MDeleted IN MHeader.Status)) AND ((MHeader.MTO.UserNum = UNum) OR (MHeader.From.UserNum = UNum)) THEN
|
|
BEGIN
|
|
Include(MHeader.Status,MDeleted);
|
|
SaveHeader(MsgNum,MHeader);
|
|
LoadURec(User1,MHeader.MTO.UserNum);
|
|
IF (User1.Waiting > 0) THEN
|
|
Dec(User1.Waiting);
|
|
SaveURec(User1,MHeader.MTO.UserNum);
|
|
Reset(MsgHdrF);
|
|
END;
|
|
END;
|
|
Close(MsgHdrF);
|
|
InitMsgArea(SaveReadMsgArea);
|
|
END;
|
|
|
|
PROCEDURE KillUserVotes;
|
|
VAR
|
|
Counter1: Byte;
|
|
BEGIN
|
|
Assign(VotingFile,General.DataPath+'VOTING.DAT');
|
|
Reset(VotingFile);
|
|
IF (IOResult = 0) THEN
|
|
BEGIN
|
|
FOR Counter1 := 1 TO FileSize(VotingFile) DO
|
|
IF (User.Vote[Counter1] > 0) THEN
|
|
BEGIN
|
|
Seek(VotingFile,(Counter1 - 1));
|
|
Read(VotingFile,Topic);
|
|
Dec(Topic.Answers[User.Vote[Counter1]].NumVotedAnswer);
|
|
Dec(Topic.NumVotedQuestion);
|
|
Seek(VotingFile,(Counter1 - 1));
|
|
Write(VotingFile,Topic);
|
|
User.Vote[Counter1] := 0;
|
|
END;
|
|
Close(VotingFile);
|
|
END;
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
PROCEDURE ChangeRecords(On: Byte);
|
|
VAR
|
|
OneKCmds: AStr;
|
|
Cmd1: Char;
|
|
TempL1: LongInt;
|
|
BEGIN
|
|
WITH User DO
|
|
REPEAT
|
|
NL;
|
|
CASE on OF
|
|
1 : BEGIN
|
|
Print('^5Call records:^1');
|
|
NL;
|
|
Print('^11. Total calls : ^5'+IntToStr(LoggedOn));
|
|
Print('^12. Total time on : ^5'+IntToStr(TTimeOn));
|
|
Print('^13. Calls today : ^5'+IntToStr(OnToday));
|
|
Print('^14. Time left today: ^5'+IntToStr(TLToday));
|
|
Print('^15. Ill. logons : ^5'+IntToStr(Illegal));
|
|
Print('^16. Time Bank : ^5'+IntToStr(TimeBank));
|
|
NL;
|
|
Prt('Select: (1-6) [M]ail [F]ile [P]ref [S]ubs: ');
|
|
OneK(Cmd1,^M'123456MFPS',TRUE,TRUE);
|
|
END;
|
|
2 : BEGIN
|
|
Print('^5Mail records:^1');
|
|
NL;
|
|
Print('^11. Pub. posts : ^5'+IntToStr(MsgPost));
|
|
Print('^12. Priv. posts : ^5'+IntToStr(EmailSent));
|
|
Print('^13. Fback sent : ^5'+IntToStr(FeedBack));
|
|
Print('^14. Mail Waiting: ^5'+IntToStr(Waiting));
|
|
NL;
|
|
Prt('Select: (1-4) [C]all [F]ile [P]ref [S]ubs: ');
|
|
OneK(Cmd1,^M'1234CFPS',TRUE,TRUE);
|
|
END;
|
|
3 : BEGIN
|
|
Print('^5File records:^1');
|
|
NL;
|
|
Print('^11. # of DLs : ^5'+IntToStr(Downloads));
|
|
Print('^12. DL K : ^5'+FormatNumber(DK)+'k');
|
|
Print('^13. # of ULs : ^5'+IntToStr(Uploads));
|
|
Print('^14. UL K : ^5'+FormatNumber(UK)+'k');
|
|
Print('^15. # DLs today: ^5'+IntToStr(DLToday));
|
|
Print('^16. DL K today : ^5'+FormatNumber(DLKToday)+'k');
|
|
Print('^17. File Points: ^5'+FormatNumBer(FilePoints));
|
|
NL;
|
|
Prt('Select: (1-7) [C]all [M]ail [P]ref [S]ubs: ');
|
|
OneK(Cmd1,^M'1234567CMPS',TRUE,TRUE);
|
|
END;
|
|
4 : BEGIN
|
|
Print('^5Preference records:^1');
|
|
NL;
|
|
Print('^11. Emulation: ^5'+DisplayTerminalStr(SFlags,Flags));
|
|
Print('^12. Clr Scrn : ^5'+AOnOff((CLSMsg IN SFlags),'On','Off'));
|
|
Print('^13. Pause : ^5'+AOnOff((Pause IN Flags),'On','Off'));
|
|
Print('^14. Color : ^5'+AOnOff((Color IN Flags),'On','Off'));
|
|
Print('^15. Editor : ^5'+AOnOff((FSEditor IN SFlags),'F/S','Reg'));
|
|
NL;
|
|
Prt('Select (1-5) [C]all [M]ail [F]ile [S]ubs: ');
|
|
OneK(Cmd1,^M'12345CMFS',TRUE,TRUE);
|
|
END;
|
|
5 : BEGIN
|
|
Print('^5Subscription records:^1');
|
|
NL;
|
|
Print('^11. Credit : ^5'+IntToStr(lCredit));
|
|
Print('^12. Debit : ^5'+IntToStr(Debit));
|
|
Print('^13. Expires : ^5'+AOnOff(Expiration = 0,'Never',ToDate8(PD2Date(Expiration))));
|
|
Print('^1 Expire to: ^5'+AOnOff(ExpireTo = ' ','None',ExpireTo));
|
|
NL;
|
|
Prt('Select: (1-3) [C]all [M]ail [P]ref [F]ile: ');
|
|
OneK(Cmd1,^M'123CMPF',TRUE,TRUE);
|
|
END;
|
|
END;
|
|
CASE Cmd1 OF
|
|
'C' : on := 1;
|
|
'M' : on := 2;
|
|
'F' : on := 3;
|
|
'P' : on := 4;
|
|
'S' : on := 5;
|
|
'1'..'7' :
|
|
BEGIN
|
|
NL;
|
|
IF (on <> 4) THEN
|
|
BEGIN
|
|
IF (on <> 5) OR NOT (StrToInt(Cmd1) IN [3..4]) THEN
|
|
BEGIN
|
|
Prt('New value: ');
|
|
Input(TempStr,10);
|
|
TempL1 := StrToInt(TempStr);
|
|
END
|
|
ELSE
|
|
CASE StrToInt(Cmd1) OF
|
|
3 : IF (PYNQ('Reset expiration date & level? ',0,FALSE)) THEN
|
|
BEGIN
|
|
TempL1 := 0;
|
|
TempStr := ' ';
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
NL;
|
|
Prt('New expiration date: ');
|
|
MPL(10);
|
|
InputFormatted('',TempStr,'##/##/####',TRUE);
|
|
IF (TempStr <> '') THEN
|
|
TempL1 := Date2PD(TempStr)
|
|
ELSE
|
|
TempL1 := 0;
|
|
OneKCmds := '';
|
|
FOR Cmd1 := '!' TO '~' DO
|
|
IF (Cmd1 IN ValKeys) THEN
|
|
OneKCmds := OneKCmds + Cmd1;
|
|
NL;
|
|
Prt('Level to expire to (!-~) [Space=No Change]: ');
|
|
OneK1(Cmd1,^M' '+OneKCmds,TRUE,TRUE);
|
|
TempStr := Cmd1;
|
|
IF (TempL1 = 0) OR (TempStr = ' ') THEN
|
|
BEGIN
|
|
TempL1 := 0;
|
|
TempStr := ' ';
|
|
END;
|
|
Cmd1 := '3';
|
|
END;
|
|
END;
|
|
IF (TempStr <> '') THEN
|
|
CASE on OF
|
|
1 : CASE StrToInt(Cmd1) OF
|
|
1 : LoggedOn := TempL1;
|
|
2 : TTimeOn := TempL1;
|
|
3 : OnToday := TempL1;
|
|
4 : TLToday := TempL1;
|
|
5 : Illegal := TempL1;
|
|
6 : TimeBank := TempL1;
|
|
END;
|
|
2 : CASE StrToInt(Cmd1) OF
|
|
1 : MsgPost := TempL1;
|
|
2 : EmailSent := TempL1;
|
|
3 : FeedBack := TempL1;
|
|
4 : Waiting := TempL1;
|
|
END;
|
|
3 : CASE StrToInt(Cmd1) OF
|
|
1 : Downloads := TempL1;
|
|
2 : DK := TempL1;
|
|
3 : Uploads := TempL1;
|
|
4 : UK := TempL1;
|
|
5 : DLToday := TempL1;
|
|
6 : DLKToday := TempL1;
|
|
7 : FilePoints := TempL1;
|
|
END;
|
|
5 : CASE StrToInt(Cmd1) OF
|
|
1 : lCredit := TempL1;
|
|
2 : Debit := TempL1;
|
|
3 : BEGIN
|
|
Expiration := TempL1;
|
|
IF (TempStr[1] IN [' ','!'..'~']) THEN
|
|
ExpireTo := TempStr[1];
|
|
END;
|
|
END;
|
|
END;
|
|
END
|
|
ELSE
|
|
CASE StrToInt(Cmd1) OF
|
|
1 : CStuff(3,3,User);
|
|
2 : ToggleStatusFlag(CLSMsg,SFlags);
|
|
3 : ToggleACFlag(Pause,Flags);
|
|
4 : ToggleACFlag(Color,Flags);
|
|
5 : ToggleStatusFlag(FSEditor,SFlags);
|
|
END;
|
|
END;
|
|
END;
|
|
UNTIL (Cmd1 = ^M) OR (HangUp);
|
|
END;
|
|
|
|
BEGIN
|
|
IF ((UNum < 1) OR (UNum > (MaxUsers - 1))) THEN
|
|
Exit;
|
|
IF (UNum = UserNum) THEN
|
|
BEGIN
|
|
User := ThisUser;
|
|
SaveURec(User,UNum);
|
|
END;
|
|
LoadURec(User,UNum);
|
|
Clear_F;
|
|
SaveUNum := 0;
|
|
Save := FALSE;
|
|
REPEAT
|
|
Abort := FALSE;
|
|
IF (AutoList) OR (UNum <> SaveUNum) OR (Cmd = ^M) THEN
|
|
BEGIN
|
|
ShowUserInfo(UserInfoTyp,UNum,User);
|
|
SaveUNum := UNum;
|
|
END;
|
|
NL;
|
|
Prt('User editor [^5?^4=^5Help^4]: ');
|
|
OneK(Cmd,'Q?[]=${}*ABCDEFGHIJKLMNOPRSTUVWXYZ12345-+_;:\/^'^M,TRUE,TRUE);
|
|
IF (Cmd IN ['A','F','L'..'O','S'..'X','Z','/','{','}','-',';','^','?','<','\','=','_']) THEN
|
|
NL;
|
|
CASE Cmd OF
|
|
'?' : BEGIN
|
|
Abort := FALSE;
|
|
PrintACR('^5Editor Help');
|
|
NL;
|
|
LCmds3(21,3,';New list mode',':AutoList toggle','\Show sysop log');
|
|
LCmds3(21,3,'[Back one user',']Forward one user','=Reload old data');
|
|
LCmds3(21,3,'{Search backward','}Search forward','*Validate user');
|
|
LCmds3(21,3,'+Mailbox','UGoto user name/#','Search options');
|
|
LCmds3(21,3,'-New user answers','_Other Q. answers','^Delete user');
|
|
LCmds3(21,3,'/New user config','$Clear fields','');
|
|
NL;
|
|
PauseScr(FALSE);
|
|
Save := FALSE;
|
|
END;
|
|
'[',']','/','{','}','U','Q' :
|
|
BEGIN
|
|
IF (Save) THEN
|
|
BEGIN
|
|
SaveURec(User,UNum);
|
|
IF (UNum = UserNum) THEN
|
|
ThisUser := User;
|
|
Save := FALSE;
|
|
END;
|
|
CASE Cmd OF
|
|
'[' : BEGIN
|
|
Dec(UNum);
|
|
IF (UNum < 1) THEN
|
|
UNum := (MaxUsers - 1);
|
|
END;
|
|
']' : BEGIN
|
|
Inc(UNum);
|
|
IF (UNum > (MaxUsers - 1)) THEN
|
|
UNum := 1;
|
|
END;
|
|
'/' : UNum := 0;
|
|
'{' : Search(-1);
|
|
'}' : Search(1);
|
|
'U' : BEGIN
|
|
Print('Enter User Name, #, or partial search string.');
|
|
Prt(': ');
|
|
lFindUserWS(UNum1);
|
|
IF (UNum1 > 0) THEN
|
|
BEGIN
|
|
LoadURec(User,UNum1);
|
|
UNum := UNum1;
|
|
END;
|
|
END;
|
|
END;
|
|
LoadURec(User,UNum);
|
|
IF (UNum = UserNum) THEN
|
|
ThisUser := User;
|
|
END;
|
|
'=' : IF PYNQ('Reload old user data? ',0,FALSE) THEN
|
|
BEGIN
|
|
LoadURec(User,UNum);
|
|
IF (UNum = UserNum) THEN
|
|
ThisUser := User;
|
|
Save := FALSE;
|
|
Print('^7Old data reloaded.^1');
|
|
END;
|
|
'S','-','_',';',':','\' :
|
|
BEGIN
|
|
CASE Cmd OF
|
|
'S' : UserSearch;
|
|
'-' : BEGIN
|
|
ReadAsw(UNum,General.MiscPath+'NEWUSER');
|
|
PauseScr(FALSE);
|
|
END;
|
|
'_' : BEGIN
|
|
Prt('Print questionairre file: ');
|
|
MPL(8);
|
|
Input(TempStr,8);
|
|
NL;
|
|
ReadAsw(UNum,General.MiscPath+TempStr);
|
|
PauseScr(FALSE);
|
|
END;
|
|
';' : BEGIN
|
|
Prt('(L)ong or (S)hort list mode: ');
|
|
OneK(Cmd,'QSL '^M,TRUE,TRUE);
|
|
CASE Cmd OF
|
|
'S' : UserInfoTyp := 2;
|
|
'L' : UserInfoTyp := 1;
|
|
END;
|
|
Cmd := #0;
|
|
END;
|
|
':' : AutoList := NOT AutoList;
|
|
'\' : BEGIN
|
|
TempStr := General.LogsPath+'SLOG'+IntToStr(UNum)+'.LOG';
|
|
PrintF(TempStr);
|
|
IF (NoFile) THEN
|
|
Print('"'+TempStr+'": File not found.');
|
|
PauseScr(FALSE);
|
|
END;
|
|
END;
|
|
END;
|
|
'$','*','+','A','B','C','D','E','F','G','H','I','J','K','L','M',
|
|
'N','O','P','R','T','V','W','X','Y','Z','1','2','3','4','5','^' :
|
|
BEGIN
|
|
IF (((ThisUser.SL <= User.SL) OR (ThisUser.DSL <= User.DSL)) AND
|
|
(UserNum <> 1) AND (UserNum <> UNum)) THEN
|
|
BEGIN
|
|
SysOpLog('Tried to modify '+Caps(User.Name)+' #'+IntToStr(UNum));
|
|
Print('Access denied.');
|
|
NL;
|
|
PauseScr(FALSE);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Save1 := Save;
|
|
Save := TRUE;
|
|
CASE Cmd OF
|
|
'$' : BEGIN
|
|
REPEAT
|
|
NL;
|
|
Prt('Clear fields (^5A^4-^5J^4,^5Q^4=^5Quit^4,^5?^4=^5Help^4): ');
|
|
OneK(Cmd,'QABCDEFGHIJ?',TRUE,TRUE);
|
|
IF (Cmd = '?') THEN
|
|
NL;
|
|
CASE Cmd OF
|
|
'A' : User.RealName := User_String_Ask;
|
|
'B' : User.Street := User_String_Ask;
|
|
'C' : User.CityState := User_String_Ask;
|
|
'D' : User.ZipCode := User_String_Ask;
|
|
'E' : User.Birthdate := User_Date_Ask;
|
|
'F' : User.Ph := User_Phone_Ask;
|
|
'G' : User.UsrDefStr[1] := User_String_Ask;
|
|
'H' : User.UsrDefStr[2] := User_String_Ask;
|
|
'I' : User.UsrDefStr[3] := User_String_Ask;
|
|
'J' : User.ForgotPWAnswer := User_String_Ask;
|
|
'?' : BEGIN
|
|
LCmds(20,3,'AReal Name','BStreet');
|
|
LCmds(20,3,'CCity/State','DZip Code');
|
|
LCmds(20,3,'EBirth Date','FPhone');
|
|
LCmds(20,3,'GString 1','HString 2');
|
|
LCmds(20,3,'IString 3','JPW Answer');
|
|
END;
|
|
END;
|
|
UNTIL (Cmd = 'Q') OR (HangUp);
|
|
Cmd := #0;
|
|
END;
|
|
'*' : AutoVal(User,UNum);
|
|
'+' : CStuff(15,3,User);
|
|
'1'..'5' :
|
|
ChangeRecords(Ord(Cmd) - 48);
|
|
'A' : BEGIN
|
|
IF (Deleted IN User.SFlags) THEN
|
|
Print('Can''t rename deleted users.')
|
|
ELSE
|
|
BEGIN
|
|
Print('Enter new name.');
|
|
Prt(': ');
|
|
MPL((SizeOf(ThisUser.Name) - 1));
|
|
Input(TempStr,(SizeOf(ThisUser.Name) - 1));
|
|
UNum1 := SearchUser(TempStr,TRUE);
|
|
IF ((UNum1 = 0) OR (UNum1 = UNum)) AND (TempStr <> '') THEN
|
|
BEGIN
|
|
InsertIndex(User.Name,UNum,FALSE,TRUE);
|
|
User.Name := TempStr;
|
|
InsertIndex(User.Name,UNum,FALSE,FALSE);
|
|
Save := TRUE;
|
|
IF (UNum = UserNum) THEN
|
|
ThisUser.Name := TempStr;
|
|
END
|
|
ELSE
|
|
Print('Illegal Name.');
|
|
END;
|
|
END;
|
|
'B' : BEGIN
|
|
TempStr := User.RealName;
|
|
CStuff(10,3,User);
|
|
IF (User.RealName <> TempStr) THEN
|
|
BEGIN
|
|
InsertIndex(TempStr,UNum,TRUE,TRUE);
|
|
InsertIndex(User.RealName,UNum,TRUE,FALSE);
|
|
END;
|
|
END;
|
|
'C' : CStuff(1,3,User);
|
|
'D' : CStuff(4,3,User);
|
|
'E' : CStuff(14,3,User);
|
|
'F' : InputWN1('^1New SysOp note:%LF^4: ',User.Note,(SizeOf(User.Note) - 1),[ColorsAllowed],Next);
|
|
'G' : CStuff(5,3,User);
|
|
'H' : CStuff(6,3,User);
|
|
'I' : CStuff(13,3,User);
|
|
'J' : BEGIN
|
|
REPEAT
|
|
NL;
|
|
Print('^11. Trapping status: '+AOnOff((TrapActivity IN User.SFlags),
|
|
'^7'+AOnOff((TrapSeparate IN User.SFlags),
|
|
'Trapping to TRAP'+IntToStr(UNum)+'.LOG',
|
|
'Trapping to TRAP.LOG'),
|
|
'Off')+AOnOff(General.globaltrap,'^8 <GLOBAL>',''));
|
|
Print('^12. Auto-chat state: '+AOnOff((ChatAuto IN User.SFlags),
|
|
AOnOff((ChatSeparate IN User.SFlags),
|
|
'^7Output to CHAT'+IntToStr(UNum)+'.LOG',
|
|
'^7Output to CHAT.LOG'),'Off')+
|
|
AOnOff(General.autochatopen,'^8 <GLOBAL>',''));
|
|
Print('^13. SysOp Log state: '+AOnOff((SLogSeparate IN User.SFlags),
|
|
'^7Logging to SLOG'+IntToStr(UNum)+'.LOG',
|
|
'^3Normal output'));
|
|
Print('^14. Alert : '+AOnOff((Alert IN User.Flags),
|
|
'^7Alert',
|
|
'^3Normal'));
|
|
NL;
|
|
Prt('Select (1-4): ');
|
|
OneK(Cmd,^M'1234',TRUE,TRUE);
|
|
IF (Cmd <> ^M) THEN
|
|
NL;
|
|
CASE Cmd OF
|
|
'1' : BEGIN
|
|
IF PYNQ('Trap User activity? ['+ShowYesNo((TrapActivity IN User.SFlags))+']: ',
|
|
0,TrapActivity IN User.SFlags) THEN
|
|
Include(User.SFlags,TrapActivity)
|
|
ELSE
|
|
Exclude(User.SFlags,TrapActivity);
|
|
IF (TrapActivity IN User.SFlags) THEN
|
|
BEGIN
|
|
IF PYNQ('Log to separate file? ['+ShowYesNo(TrapSeparate IN User.SFlags)+']: ',
|
|
0,TrapSeparate IN User.SFlags) THEN
|
|
Include(User.SFlags,TrapSeparate)
|
|
ELSE
|
|
Exclude(User.SFlags,TrapSeparate);
|
|
END
|
|
ELSE
|
|
Exclude(User.SFlags,TrapSeparate);
|
|
END;
|
|
'2' : BEGIN
|
|
IF PYNQ('Auto-chat buffer open? ['+ShowYesNo(ChatAuto IN User.SFlags)+']: ',
|
|
0,ChatAuto IN User.SFlags) THEN
|
|
Include(User.SFlags,ChatAuto)
|
|
ELSE
|
|
Exclude(User.SFlags,ChatAuto);
|
|
IF (ChatAuto IN User.SFlags) THEN
|
|
BEGIN
|
|
IF PYNQ('Separate buffer file? ['+ShowYesNo(ChatSeparate IN User.SFlags)+']: ',
|
|
0,ChatSeparate IN User.SFlags) THEN
|
|
Include(User.SFlags,ChatSeparate)
|
|
ELSE
|
|
Exclude(User.SFlags,ChatSeparate);
|
|
END
|
|
ELSE
|
|
Exclude(User.SFlags,ChatSeparate);
|
|
END;
|
|
'3' : BEGIN
|
|
IF PYNQ('Output SysOp Log separately? ['+ShowYesNo(SLogSeparate IN User.SFlags)+']: ',
|
|
0,SLogSeparate IN User.SFlags) THEN
|
|
Include(User.SFlags,SLogSeparate)
|
|
ELSE
|
|
Exclude(User.SFlags,SLogSeparate);
|
|
END;
|
|
'4' : ToggleACFlag(Alert,User.Flags);
|
|
END;
|
|
UNTIL (Cmd = ^M) OR (HangUp);
|
|
Cmd := #0;
|
|
END;
|
|
'K' : CStuff(27,3,User);
|
|
'L' : BEGIN
|
|
TempB := User.SL;
|
|
InputByteWOC('Enter new SL',TempB,[NumbersOnly],0,255);
|
|
IF (TempB >= 0) AND (TempB <= 255) THEN
|
|
BEGIN
|
|
Ok := TRUE;
|
|
IF (TempB < ThisUser.SL) OR (UserNum = 1) THEN
|
|
BEGIN
|
|
IF (UserNum = UNum) AND (TempB < ThisUser.SL) THEN
|
|
BEGIN
|
|
NL;
|
|
IF NOT PYNQ('Lower your own SL level? ',0,FALSE) THEN
|
|
Ok := FALSE;
|
|
END;
|
|
IF (Ok) THEN
|
|
BEGIN
|
|
User.SL := TempB;
|
|
User.TLToday := (General.TimeAllow[User.SL] - User.TTimeOn);
|
|
END;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
NL;
|
|
Print('Access denied.'^G);
|
|
SysOpLog('Illegal SL edit attempt: '+Caps(User.Name)+' #'+IntToStr(UNum)+' to '+IntToStr(TempB));
|
|
END;
|
|
END;
|
|
END;
|
|
'M' : BEGIN
|
|
TempB := User.DSL;
|
|
InputByteWOC('Enter new DSL',TempB,[NumbersOnly],0,255);
|
|
IF (TempB >= 0) AND (TempB <= 255) THEN
|
|
BEGIN
|
|
Ok := TRUE;
|
|
IF (TempB < ThisUser.DSL) OR (UserNum = 1) THEN
|
|
BEGIN
|
|
IF (UserNum = UNum) AND (TempB < ThisUser.SL) THEN
|
|
BEGIN
|
|
NL;
|
|
IF NOT PYNQ('Lower your own DSL level? ',0,FALSE) THEN
|
|
Ok := FALSE;
|
|
END;
|
|
IF (Ok) THEN
|
|
User.DSL := TempB;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
NL;
|
|
Print('Access denied.'^G);
|
|
SysOpLog('Illegal DSL edit attempt: '+Caps(User.Name)+' #'+IntToStr(UNum)+
|
|
' to '+IntToStr(TempB));
|
|
END;
|
|
END;
|
|
END;
|
|
'N' : BEGIN
|
|
REPEAT
|
|
Prt('Toggle which AR flag? ('+DisplayARFlags(User.AR,'5','4')+'^4)'+
|
|
' [^5*^4=^5All^4,^5?^4=^5Help^4,^5<CR>^4=^5Quit^4]: ');
|
|
OneK(Cmd,^M'ABCDEFGHIJKLMNOPQRSTUVWXYZ*?',TRUE,TRUE);
|
|
IF (Cmd = '?') THEN
|
|
PrintF('ARFLAGS')
|
|
ELSE IF (Cmd <> ^M) THEN
|
|
BEGIN
|
|
IF (NOT (Cmd IN ThisUser.AR)) AND (NOT SysOp) THEN
|
|
BEGIN
|
|
Print('Access denied.'^G);
|
|
SysOpLog('Tried to give '+Caps(User.Name)+' #'+IntToStr(UNum)+' AR flag "'+Cmd+'"');
|
|
END
|
|
ELSE IF (Cmd IN ['A'..'Z']) THEN
|
|
ToggleARFlag(Cmd,User.AR,Changed)
|
|
ELSE IF (Cmd = '*') THEN
|
|
BEGIN
|
|
FOR Cmd := 'A' TO 'Z' DO
|
|
ToggleARFlag(Cmd,User.AR,Changed);
|
|
Cmd := '*';
|
|
END;
|
|
END;
|
|
UNTIL (Cmd = ^M) OR (HangUp);
|
|
Cmd := #0;
|
|
END;
|
|
'O' : BEGIN
|
|
REPEAT
|
|
Prt('Toggle which AC flag? ('+DisplayACFlags(User.Flags,'5','4')+'^4)'+
|
|
' [^5?^4=^5Help^4,^5<CR>^4=^5Quit^4]: ');
|
|
OneK(Cmd,^M'LCVUA*PEKM1234?',TRUE,TRUE);
|
|
IF (Cmd = '?') THEN
|
|
PrintF('ACFLAGS')
|
|
ELSE
|
|
BEGIN
|
|
IF (Cmd = '4') AND (NOT SysOp) THEN
|
|
BEGIN
|
|
Print('Access denied.'^G);
|
|
SysOpLog('Tried to change '+Caps(User.Name)+' #'+IntToStr(UNum)+' deletion status');
|
|
END
|
|
ELSE IF (Cmd <> ^M) THEN
|
|
ToggleACFlags(Cmd,User.Flags,Changed);
|
|
END;
|
|
UNTIL (Cmd = ^M) OR (HangUp);
|
|
Cmd := #0;
|
|
END;
|
|
'P' : BEGIN
|
|
CStuff(2,3,User);
|
|
CStuff(12,3,User);
|
|
END;
|
|
'R' : CStuff(8,3,User);
|
|
'T' : BEGIN
|
|
Print('New last on date (MM/DD/YYYY).');
|
|
Prt(': ');
|
|
MPL(10);
|
|
InputFormatted('',TempStr,'##/##/####',TRUE);
|
|
IF (TempStr <> '') THEN
|
|
User.LastOn := Date2PD(TempStr);
|
|
END;
|
|
'V' : BEGIN
|
|
IF (LockedOut IN User.SFlags) THEN
|
|
Exclude(User.SFlags,LockedOut)
|
|
ELSE
|
|
Include(User.SFlags,LockedOut);
|
|
IF (LockedOut IN User.SFlags) THEN
|
|
BEGIN
|
|
Print('User is now locked out.');
|
|
NL;
|
|
Print('Each time the user logs on from now on, a text file will');
|
|
Print('be displayed before user is terminated.');
|
|
NL;
|
|
Prt('Enter lockout filename: ');
|
|
MPL(8);
|
|
Input(TempStr,8);
|
|
IF (TempStr = '') THEN
|
|
Exclude(User.SFlags,LockedOut)
|
|
ELSE
|
|
BEGIN
|
|
User.LockedFile := TempStr;
|
|
SysOpLog('Locked '+Caps(User.Name)+' #'+IntToStr(UNum)+' out: Lockfile "'+TempStr+'"');
|
|
END;
|
|
END;
|
|
IF NOT (LockedOut IN User.SFlags) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('User is no longer locked out of system.');
|
|
END;
|
|
NL;
|
|
PauseScr(FALSE);
|
|
END;
|
|
'W' : BEGIN
|
|
Print('Enter new password.');
|
|
Prt(': ');
|
|
MPL(20);
|
|
Input(TempStr,20);
|
|
IF (TempStr <> '') THEN
|
|
User.PW := CRC32(TempStr);
|
|
END;
|
|
'X' : BEGIN
|
|
Print('Enter new caller ID string.');
|
|
Prt(': ');
|
|
MPL((SizeOf(User.CallerID) - 1));
|
|
Input(TempStr,(SizeOf(User.CallerID) - 1));
|
|
IF (TempStr <> '') THEN
|
|
User.CallerID := TempStr;
|
|
END;
|
|
'Y' : FindMenu('%LFEnter new start menu (^50^4=^5Default^4)',User.UserStartMenu,0,NumMenus,Changed);
|
|
'Z' : BEGIN
|
|
Print('Question:');
|
|
NL;
|
|
{Print(General.ForgotPWQuestion);}
|
|
Print(RGMainStr(6,TRUE));
|
|
NL;
|
|
Print('Enter new forgot password answer.');
|
|
Prt(': ');
|
|
MPL((SizeOf(User.ForgotPWAnswer) - 1));
|
|
Input(TempStr,(SizeOf(User.ForgotPWAnswer) - 1));
|
|
IF (TempStr <> '') THEN
|
|
User.ForgotPWAnswer := TempStr;
|
|
END;
|
|
'^' : IF (Deleted IN User.SFlags) THEN
|
|
BEGIN
|
|
Print('User is currently deleted.');
|
|
NL;
|
|
IF PYNQ('Restore this user? ',0,FALSE) THEN
|
|
BEGIN
|
|
InsertIndex(User.Name,UNum,FALSE,FALSE);
|
|
InsertIndex(User.RealName,UNum,TRUE,FALSE);
|
|
Inc(LTodayNumUsers);
|
|
SaveGeneral(TRUE);
|
|
Exclude(User.SFlags,Deleted);
|
|
END
|
|
ELSE
|
|
Save := Save1;
|
|
END
|
|
ELSE IF (FNoDeletion IN User.Flags) THEN
|
|
BEGIN
|
|
Print('Access denied - This user is protected from deletion.');
|
|
SysOpLog('* Attempt to delete user: '+Caps(User.Name)+' #'+IntToStr(UNum));
|
|
NL;
|
|
PauseScr(FALSE);
|
|
Save := Save1;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
NL;
|
|
IF PYNQ('*DELETE* this User? ',0,FALSE) THEN
|
|
BEGIN
|
|
IF NOT (Deleted IN User.SFlags) THEN
|
|
BEGIN
|
|
Save := TRUE;
|
|
Include(User.SFlags,Deleted);
|
|
InsertIndex(User.Name,UNum,FALSE,TRUE);
|
|
InsertIndex(User.RealName,UNum,TRUE,TRUE);
|
|
Dec(LTodayNumUsers);
|
|
SaveGeneral(TRUE);
|
|
SysOpLog('* Deleted User: '+Caps(User.Name)+' #'+IntToStr(UNum));
|
|
UNum1 := UserNum;
|
|
UserNum := UNum;
|
|
ReadShortMessage;
|
|
UserNum := UNum1;
|
|
User.Waiting := 0;
|
|
KillUserMail;
|
|
KillUserVotes;
|
|
END
|
|
ELSE
|
|
Save := Save1;
|
|
END;
|
|
END;
|
|
ELSE
|
|
Save := Save1;
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
IF (UNum = UserNum) THEN
|
|
BEGIN
|
|
ThisUser := User;
|
|
NewComptables;
|
|
END;
|
|
UNTIL (Cmd = 'Q') OR (HangUp);
|
|
Update_Screen;
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
END.
|