1030 lines
24 KiB
Plaintext
1030 lines
24 KiB
Plaintext
{$IFDEF WIN32}
|
|
{$I DEFINES.INC}
|
|
{$ENDIF}
|
|
|
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|
|
|
UNIT CUser;
|
|
|
|
INTERFACE
|
|
|
|
USES
|
|
Common;
|
|
|
|
PROCEDURE CStuff(Which,How: Byte; VAR User: UserRecordType);
|
|
|
|
IMPLEMENTATION
|
|
|
|
USES
|
|
Dos,
|
|
Archive1,
|
|
TimeFunc,
|
|
MiscUser;
|
|
|
|
VAR
|
|
CallFromArea: Integer;
|
|
|
|
PROCEDURE CStuff(Which,How: Byte; VAR User: UserRecordType);
|
|
VAR
|
|
Try: Byte;
|
|
Done,
|
|
Done1: Boolean;
|
|
|
|
PROCEDURE FindArea;
|
|
VAR
|
|
Cmd: Char;
|
|
BEGIN
|
|
Print('Are you calling from:');
|
|
NL;
|
|
Print('(1) United States');
|
|
Print('(2) Canada');
|
|
Print('(3) Other country');
|
|
NL;
|
|
Prt('Select (1-3): ');
|
|
OneK(Cmd,'123',TRUE,TRUE);
|
|
CallFromArea := (Ord(Cmd) - 48);
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE ConfigureQWK;
|
|
VAR
|
|
ArcExt: Str3;
|
|
AType: Byte;
|
|
BEGIN
|
|
IF (User.DefArcType < 1) OR (User.DefArcType > MaxArcs) THEN
|
|
User.DefArcType := 1;
|
|
Print('Current archive type: ^5'+General.FileArcInfo[User.DefArcType].Ext);
|
|
NL;
|
|
REPEAT
|
|
Prt('Archive type to use? (?=List): ');
|
|
MPL(3);
|
|
Input(ArcExt,3);
|
|
IF (ArcExt = '?') THEN
|
|
BEGIN
|
|
NL;
|
|
ListArcTypes;
|
|
NL;
|
|
END;
|
|
UNTIL (ArcExt <> '?') OR (HangUp);
|
|
IF (StrToInt(ArcExt) <> 0) THEN
|
|
AType := StrToInt(ArcExt)
|
|
ELSE
|
|
AType := ArcType('F.'+ArcExt);
|
|
IF (AType > 0) AND (AType < MaxArcs) THEN
|
|
User.DefArcType := AType;
|
|
Done1 := TRUE;
|
|
NL;
|
|
User.GetOwnQWK := PYNQ('Do you want your own replies in your QWK packet? ',0,FALSE);
|
|
NL;
|
|
User.ScanFilesQWK := PYNQ('Would you like a new files listing in your QWK packet? ',0,FALSE);
|
|
NL;
|
|
User.PrivateQWK := PYNQ('Do you want your private mail in your QWK packet? ',0,FALSE);
|
|
NL;
|
|
END;
|
|
|
|
PROCEDURE DoAddress;
|
|
VAR
|
|
TempStreet: Str30;
|
|
BEGIN
|
|
Print('Enter your street address:');
|
|
Prt(': ');
|
|
MPL((SizeOf(User.Street) - 1));
|
|
IF (How = 3) THEN
|
|
InputL(TempStreet,(SizeOf(User.Street) - 1))
|
|
ELSE
|
|
InputCaps(TempStreet,(SizeOf(User.Street) - 1));
|
|
IF (TempStreet <> '') THEN
|
|
BEGIN
|
|
IF (How = 2) THEN
|
|
SysOpLog('Changed address from '+User.Street+' to '+TempStreet);
|
|
User.Street := TempStreet;
|
|
Done1 := TRUE;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DoAge;
|
|
VAR
|
|
TempDate: Str10;
|
|
TempDay,
|
|
TempMonth,
|
|
TempYear,
|
|
CurYear: Word;
|
|
Redo: Boolean;
|
|
BEGIN
|
|
GetYear(CurYear);
|
|
IF (How = 1) AND (IEMSIRec.BDate <> '') THEN
|
|
BEGIN
|
|
Buf := IEMSIRec.BDate;
|
|
IEMSIRec.BDate := '';
|
|
END;
|
|
REPEAT
|
|
Redo := False;
|
|
Print('Enter your date of birth (mm/dd/yyyy):');
|
|
Prt(': ');
|
|
InputFormatted('',TempDate,'##/##/####',(How = 3));
|
|
IF (TempDate <> '') THEN
|
|
BEGIN
|
|
TempMonth := StrToInt(Copy(TempDate,1,2));
|
|
TempDay := StrToInt(Copy(TempDate,4,2));
|
|
TempYear := StrToInt(Copy(TempDate,7,4));
|
|
IF (TempMonth = 0) OR (TempDay = 0) OR (TempYear = 0) THEN
|
|
ReDo := TRUE;
|
|
IF (TempMonth > 12) THEN
|
|
Redo := TRUE;
|
|
IF (TempMonth IN [1,3,5,7,8,10,12]) AND (TempDay > 31) THEN
|
|
Redo := TRUE;
|
|
IF (TempMonth IN [4,6,9,11]) AND (TempDay > 30) THEN
|
|
Redo := TRUE;
|
|
IF (TempMonth = 2) AND ((TempYear MOD 4) <> 0) AND (TempDay > 28) THEN
|
|
Redo := TRUE;
|
|
IF (TempMonth = 2) AND ((TempYear MOD 4) = 0) AND (TempDay > 29) THEN
|
|
Redo := TRUE;
|
|
IF (TempYear >= CurYear) THEN
|
|
Redo := TRUE;
|
|
IF (TempYear < (CurYear - 100)) THEN
|
|
Redo := TRUE;
|
|
IF (Redo) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7You entered an invalid date of birth!^1');
|
|
NL;
|
|
END;
|
|
END;
|
|
UNTIL (NOT Redo) OR (HangUp);
|
|
IF (TempDate <> '') THEN
|
|
BEGIN
|
|
IF (How = 2) THEN
|
|
SysOpLog('Changed birthdate from '+PD2Date(User.BirthDate)+' to '+TempDate);
|
|
User.BirthDate := Date2PD(TempDate);
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE DoCityState;
|
|
VAR
|
|
s,
|
|
s1,
|
|
s2: AStr;
|
|
BEGIN
|
|
CASE How OF
|
|
2 : FindArea;
|
|
3 : CallFromArea := 1;
|
|
END;
|
|
IF (CallFromArea <> 3) THEN
|
|
BEGIN
|
|
IF (How = 3) THEN
|
|
BEGIN
|
|
Print('Enter new city & state abbreviation:');
|
|
Prt(': ');
|
|
MPL((SizeOf(User.CityState) - 1));
|
|
InputL(s,(SizeOf(User.CityState) - 1));
|
|
IF (s <> '') THEN
|
|
User.CityState := s;
|
|
Done1 := TRUE;
|
|
Exit;
|
|
END;
|
|
|
|
Print('Enter only your city:');
|
|
Prt(': ');
|
|
MPL(((SizeOf(User.CityState) - 1) - 4));
|
|
InputCaps(s,((SizeOf(User.CityState) - 1) - 4));
|
|
IF (Pos(',',s) <> 0) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7Enter only your city name.^1');
|
|
Exit;
|
|
END;
|
|
NL;
|
|
IF (Length(s) < 3) THEN
|
|
Exit;
|
|
Prompt('Enter your '+AOnOff((CallFromArea = 1),'state','province')+' abbreviation: ');
|
|
MPL(2);
|
|
Input(s1,2);
|
|
User.CityState := s+', '+s1;
|
|
Done1 := TRUE;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Print('First enter your city name only:');
|
|
Prt(': ');
|
|
MPL(26);
|
|
InputCaps(s1,26);
|
|
IF (Length(s1) < 2) THEN
|
|
Exit;
|
|
NL;
|
|
Print('Now enter your country name:');
|
|
Prt(': ');
|
|
MPL(26);
|
|
InputCaps(s2,26);
|
|
IF (Length(s2) < 2) THEN
|
|
Exit;
|
|
s := s1+', '+s2;
|
|
IF (Length(s) > 30) THEN
|
|
BEGIN
|
|
Print('^7Max total Length is 30 characters!^1');
|
|
Exit;
|
|
END;
|
|
IF (How = 2) AND (User.CityState <> s) THEN
|
|
SysOpLog('Changed city/state from '+User.CityState+' to '+s);
|
|
User.CityState := s;
|
|
Done1 := TRUE;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DoUserDef(QuestionNum: Byte);
|
|
VAR
|
|
UserDefQues: STRING[80];
|
|
s: Str35;
|
|
BEGIN
|
|
CASE QuestionNum OF
|
|
1 : UserDefQues := lRGLngStr(38,TRUE); {'Is ALL of your information REAL & CORRECT? (Yes/No)'}
|
|
2 : UserDefQues := lRGLngStr(39,TRUE); {'Do you run a Telnet BBS? (If so, type in address below)'}
|
|
3 : UserDefQues := lRGLngStr(40,TRUE); {'What BBS or Web Site did you hear about this BBS? (Specific Please)'}
|
|
END;
|
|
IF (UserDefQues = '') THEN
|
|
BEGIN
|
|
User.UsrDefStr[QuestionNum] := '';
|
|
Done1 := TRUE;
|
|
Exit;
|
|
END;
|
|
Print(UserDefQues);
|
|
Prt(': ');
|
|
MPL((SizeOf(User.UsrDefStr[QuestionNum]) - 1));
|
|
InputL(s,(SizeOf(User.UsrDefStr[QuestionNum]) - 1));
|
|
IF (s <> '') THEN
|
|
BEGIN
|
|
User.UsrDefStr[QuestionNum] := s;
|
|
Done1 := TRUE;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DoName;
|
|
VAR
|
|
TextFile: Text;
|
|
s,
|
|
s1,
|
|
s2: AStr;
|
|
UNum: Integer;
|
|
BEGIN
|
|
IF (How = 1) THEN
|
|
IF (General.AllowAlias) AND (IEMSIRec.Handle <> '') THEN
|
|
BEGIN
|
|
Buf := IEMSIRec.Handle;
|
|
IEMSIRec.Handle := '';
|
|
END
|
|
ELSE IF (IEMSIRec.UserName <> '') THEN
|
|
BEGIN
|
|
Buf := IEMSIRec.UserName;
|
|
IEMSIRec.UserName := '';
|
|
END;
|
|
IF (General.AllowAlias) THEN
|
|
BEGIN
|
|
Print('Enter your handle, or your real first & last');
|
|
Print('names if you don''t want to use one.')
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Print('Enter your first & last Name.');
|
|
Print('Handles are not allowed.');
|
|
END;
|
|
Prt(': ');
|
|
MPL((SizeOf(User.Name) - 1));
|
|
Input(s,(SizeOf(User.Name) -1));
|
|
Done1 := FALSE;
|
|
WHILE (s[1] IN [' ','0'..'9']) AND (Length(s) > 0) do
|
|
Delete(s,1,1);
|
|
WHILE (s[Length(s)] = ' ') do
|
|
Dec(s[0]);
|
|
IF ((Pos(' ',s) = 0) AND (How <> 3) AND NOT (General.AllowAlias)) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('Enter your first and last Name!');
|
|
s := '';
|
|
END;
|
|
IF (s <> '') THEN
|
|
BEGIN
|
|
Done1 := TRUE;
|
|
UNum := SearchUser(s,TRUE);
|
|
IF (UNum > 0) AND (UNum <> UserNum) THEN
|
|
BEGIN
|
|
Done1 := FALSE;
|
|
NL;
|
|
Print('^7That name is in use.^1');
|
|
END;
|
|
END;
|
|
Assign(TextFile,General.MiscPath+'TRASHCAN.TXT');
|
|
Reset(TextFile);
|
|
IF (IOResult = 0) THEN
|
|
BEGIN
|
|
s2 := ' '+s+' ';
|
|
WHILE NOT EOF(TextFile) do
|
|
BEGIN
|
|
ReadLn(TextFile,s1);
|
|
IF (s1[Length(s1)] = #1) THEN
|
|
s1[Length(s1)] := ' '
|
|
ELSE
|
|
s1 := s1 + ' ';
|
|
s1 := ' ' + s1;
|
|
S1 := AllCaps(S1);
|
|
IF (Pos(s1,s2) <> 0) THEN
|
|
Done1 := FALSE;
|
|
END;
|
|
Close(TextFile);
|
|
LastError := IOResult;
|
|
END;
|
|
IF (NOT Done1) AND (NOT HangUp) THEN
|
|
BEGIN
|
|
NL;
|
|
Print(^G'^7Sorry, can''t use that name.^1');
|
|
Inc(Try);
|
|
sl1('Unacceptable Name : '+s);
|
|
END;
|
|
IF (Try >= 3) AND (How = 1) THEN
|
|
HangUp := TRUE;
|
|
|
|
IF ((Done) AND (How = 1) AND (NOT General.AllowAlias)) THEN
|
|
User.RealName := Caps(s);
|
|
|
|
IF (Done1) THEN
|
|
BEGIN
|
|
IF (How = 2) AND (UserNum > -1) THEN { Don't do index on unregged users! }
|
|
BEGIN
|
|
SysOpLog('Changed name from '+User.Name+' to '+s);
|
|
InsertIndex(User.Name,UserNum,FALSE,TRUE);
|
|
User.Name := s;
|
|
InsertIndex(User.Name,UserNum,FALSE,FALSE);
|
|
END
|
|
ELSE
|
|
User.Name := s;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DoPhone;
|
|
VAR
|
|
TempPhone: AStr;
|
|
BEGIN
|
|
CASE How OF
|
|
1 : BEGIN
|
|
IF (IEMSIRec.Ph <> '') THEN
|
|
BEGIN
|
|
Buf := IEMSIRec.Ph;
|
|
IEMSIRec.Ph := '';
|
|
END;
|
|
END;
|
|
2 : FindArea;
|
|
3 : CallFromArea := 1;
|
|
END;
|
|
Print('Enter your phone number:');
|
|
Prt(': ');
|
|
IF (((How = 1) AND (CallFromArea = 3)) OR (How = 3)) THEN
|
|
BEGIN
|
|
MPL(12);
|
|
Input(TempPhone,12);
|
|
IF (Length(TempPhone) > 5) THEN
|
|
BEGIN
|
|
User.Ph := TempPhone;
|
|
Done1 := TRUE;
|
|
END;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
InputFormatted('',TempPhone,'(###)###-####',FALSE);
|
|
TempPhone[5] := '-';
|
|
TempPhone := Copy(TempPhone,2,(Length(TempPhone) - 1));
|
|
IF (How = 2) AND (User.Ph <> TempPhone) THEN
|
|
SysOpLog('Changed phone from '+User.Ph+' to '+TempPhone);
|
|
User.Ph := TempPhone;
|
|
Done1 := TRUE;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DoPW;
|
|
VAR
|
|
s,
|
|
s2: STRING[20];
|
|
SavePW: LongInt;
|
|
BEGIN
|
|
IF (How = 1) AND (IEMSIRec.PW <> '') THEN
|
|
BEGIN
|
|
Buf := IEMSIRec.PW;
|
|
IEMSIRec.PW := '';
|
|
END;
|
|
SavePW := User.PW;
|
|
IF (How = 2) THEN
|
|
BEGIN
|
|
Print('^5Enter your current password:');
|
|
NL;
|
|
Prompt('Password: ^5');
|
|
GetPassword(s,20);
|
|
IF (CRC32(s) <> User.PW) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('Wrong!');
|
|
NL;
|
|
Exit;
|
|
END;
|
|
END;
|
|
REPEAT
|
|
REPEAT
|
|
Print('Enter your desired password for future access.');
|
|
Print('It should be 4 to 20 characters in length.');
|
|
NL;
|
|
Prompt('Password: ');
|
|
MPL(20);
|
|
GetPassword(s,20);
|
|
NL;
|
|
IF (Length(s) < 4) THEN
|
|
BEGIN
|
|
Print('^7Must be at least 4 characters long!^1');
|
|
NL;
|
|
END
|
|
ELSE IF (Length(s) > 20) THEN
|
|
BEGIN
|
|
Print('^7Must be no more than 20 characters long.^1');
|
|
NL;
|
|
END
|
|
ELSE IF (How = 3) AND (CRC32(s) = SavePW) THEN
|
|
BEGIN
|
|
Print('^7Must be different from your old password!^1');
|
|
NL;
|
|
s := '';
|
|
END
|
|
ELSE IF (s = ThisUser.Name) OR (s = ThisUser.RealName) THEN
|
|
BEGIN
|
|
Print('^7You cannot use that password!^1');
|
|
NL;
|
|
s := '';
|
|
END;
|
|
UNTIL (((Length(s) > 3) AND (Length(s) < 21)) OR (HangUp));
|
|
Print('Enter your password again for verification:');
|
|
NL;
|
|
Prompt('Password: ');
|
|
MPL(20);
|
|
GetPassword(s2,20);
|
|
IF (s2 <> s) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7Passwords do not match!^1');
|
|
NL;
|
|
END;
|
|
UNTIL ((s2 = s) OR (HangUp));
|
|
IF (HangUp) AND (How = 3) THEN
|
|
User.PW := SavePW
|
|
ELSE
|
|
User.PW := CRC32(s);
|
|
User.PasswordChanged := DayNum(DateStr);
|
|
IF (How = 2) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('Password changed.');
|
|
SysOpLog('Changed password.');
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE DoForgotPW;
|
|
VAR
|
|
s: AStr;
|
|
BEGIN
|
|
IF (How IN [1..2]) THEN
|
|
BEGIN
|
|
REPEAT
|
|
s := '';
|
|
Print('This question will be asked should you ever forget your password.');
|
|
NL;
|
|
Print(General.forgotpwquestion);
|
|
Prt(': ');
|
|
MPL(40);
|
|
Input(s,40);
|
|
UNTIL (s <> '') OR (HangUp);
|
|
User.ForgotPWAnswer := s;
|
|
Done1 := TRUE;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DoRealName;
|
|
VAR
|
|
TempRealName: AStr;
|
|
UNum: Integer;
|
|
BEGIN
|
|
IF (How = 1) THEN
|
|
IF (NOT General.AllowAlias) THEN
|
|
BEGIN
|
|
User.RealName := Caps(User.Name);
|
|
Done1 := TRUE;
|
|
Exit;
|
|
END
|
|
ELSE IF (IEMSIRec.UserName <> '') THEN
|
|
BEGIN
|
|
Buf := IEMSIRec.UserName;
|
|
IEMSIRec.UserName := '';
|
|
END;
|
|
Print('Enter your real first & last name:');
|
|
Prt(': ');
|
|
MPL((SizeOf(User.RealName) - 1));
|
|
IF (How = 3) THEN
|
|
InputL(TempRealName,(SizeOf(User.RealName) - 1))
|
|
ELSE
|
|
InputCaps(TempRealName,(SizeOf(User.RealName) - 1));
|
|
WHILE (TempRealName[1] IN [' ','0'..'9']) AND (Length(TempRealName) > 0) do
|
|
Delete(TempRealName,1,1);
|
|
WHILE (TempRealName[Length(TempRealName)] = ' ') do
|
|
Dec(TempRealName[0]);
|
|
IF (Pos(' ',TempRealName) = 0) AND (How <> 3) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('Enter your first and last name!');
|
|
TempRealName := '';
|
|
END;
|
|
IF (TempRealName <> '') THEN
|
|
BEGIN
|
|
Done1 := TRUE;
|
|
UNum := SearchUser(TempRealName,TRUE);
|
|
IF (UNum > 0) AND (UNum <> UserNum) THEN
|
|
BEGIN
|
|
Done1 := FALSE;
|
|
NL;
|
|
Print('^7That name is in use.^1');
|
|
END;
|
|
END;
|
|
IF (Done1) THEN
|
|
BEGIN
|
|
IF (How = 2) AND (UserNum > -1) THEN { don't do index on unregged users! }
|
|
BEGIN
|
|
SysOpLog('Changed real name from '+User.RealName+' to '+TempRealName);
|
|
InsertIndex(User.RealName,UserNum,TRUE,TRUE);
|
|
User.RealName := TempRealName;
|
|
InsertIndex(User.RealName,UserNum,TRUE,FALSE);
|
|
END
|
|
ELSE
|
|
User.RealName := TempRealName;
|
|
Done1 := TRUE;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE DoScreen;
|
|
BEGIN
|
|
InputByteWOC('How wide is your screen',User.LineLen,[DisplayValue,NumbersOnly],32,132);
|
|
InputByteWOC('%LFHow many lines per page',User.PageLen,[DisplayValue,NumbersOnly],4,50);
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE DoSex;
|
|
VAR
|
|
Cmd: Char;
|
|
BEGIN
|
|
IF (How = 3) THEN
|
|
BEGIN
|
|
Prt('New gender (M,F): ');
|
|
OneK(Cmd,'MF '^M,TRUE,TRUE);
|
|
IF (Cmd IN ['M','F']) THEN
|
|
User.Sex := Cmd;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
User.Sex := #0;
|
|
Prt('Your gender (M,F)? ');
|
|
OneK(User.Sex,'MF',TRUE,TRUE);
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE DoZIPCode;
|
|
VAR
|
|
TempZipCode: Str10;
|
|
BEGIN
|
|
IF (How = 3) THEN
|
|
BEGIN
|
|
FindArea;
|
|
NL;
|
|
END;
|
|
CASE CallFromArea OF
|
|
1 : BEGIN
|
|
Print('Enter your zipcode (#####-####):');
|
|
Prt(': ');
|
|
InputFormatted('',TempZipCode,'#####-####',(How = 3));
|
|
IF (TempZipCode <> '') THEN
|
|
User.ZipCode := TempZipCode;
|
|
Done1 := TRUE;
|
|
END;
|
|
2 : BEGIN
|
|
Print('Enter your postal code (LNLNLN format)');
|
|
Prt(': ');
|
|
InputFormatted('',TempZipCode,'@#@#@#',(How = 3));
|
|
IF (TempZipCode <> '') THEN
|
|
User.ZipCode := TempZipCode;
|
|
Done1 := TRUE
|
|
END;
|
|
3 : BEGIN
|
|
Print('Enter your postal code:');
|
|
Prt(': ');
|
|
MPL((SizeOf(User.ZipCode) - 1));
|
|
Input(TempZipCode,(SizeOf(User.ZipCode) - 1));
|
|
IF (Length(TempZipCode) > 2) THEN
|
|
BEGIN
|
|
User.ZipCode := TempZipCode;
|
|
Done1 := TRUE;
|
|
END;
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE ForwardMail;
|
|
VAR
|
|
User1: UserRecordType;
|
|
Unum: Integer;
|
|
BEGIN
|
|
NL;
|
|
Print('^5If you forward your mail, all email sent to your account^1');
|
|
Print('^5will be redirected to that person.^1');
|
|
NL;
|
|
Print('Enter User Number, Name, or Partial Search String.');
|
|
Prt(': ');
|
|
lFindUserWS(UNum);
|
|
IF (UNum < 1) OR (UNum > (MaxUsers - 1)) THEN
|
|
User.ForUsr := 0
|
|
ELSE
|
|
BEGIN
|
|
LoadURec(User1,UNum);
|
|
IF (User.Name = User1.Name) OR (LockedOut IN User1.SFlags) OR
|
|
(Deleted IN User1.SFlags) OR (NoMail IN User1.Flags) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('^7You can not forward mail to that user!^1');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
User.ForUsr := UNum;
|
|
NL;
|
|
Print('Forwarding mail to: ^5'+Caps(User1.Name)+' #'+IntToStr(UNum)+'^1');
|
|
SysOpLog('Forwarding mail to: ^5'+Caps(User1.Name)+' #'+IntToStr(UNum));
|
|
END;
|
|
END;
|
|
IF (How = 3) THEN
|
|
PauseSCr(FALSE);
|
|
END;
|
|
|
|
PROCEDURE MailBox;
|
|
BEGIN
|
|
IF (NoMail IN User.Flags) THEN
|
|
BEGIN
|
|
Exclude(User.Flags,NoMail);
|
|
Print('Mail box is now open.');
|
|
IF (How = 3) THEN
|
|
PauseScr(FALSE);
|
|
SysOpLog('Mail box is now open.');
|
|
END
|
|
ELSE IF (User.ForUsr <> 0) THEN
|
|
BEGIN
|
|
User.ForUsr := 0;
|
|
Print('Mail is no longer being forwarded.');
|
|
IF (How = 3) THEN
|
|
PauseSCr(FALSE);
|
|
SysOpLog('Mail forwarding ended.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF PYNQ('Do you want to close your mail box? ',0,FALSE) THEN
|
|
BEGIN
|
|
Include(User.Flags,NoMail);
|
|
NL;
|
|
Print('Mail box is now closed.');
|
|
IF (How = 3) THEN
|
|
PauseSCr(FALSE);
|
|
SysOpLog('Mail box is now closed.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
NL;
|
|
IF PYNQ('Do you want to forward your mail? ',0,FALSE) THEN
|
|
ForwardMail;
|
|
END;
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_ANSI;
|
|
VAR
|
|
Cmd: Char;
|
|
BEGIN
|
|
PrintF('TERMINAL');
|
|
Print('Which terminal emulation do you support?');
|
|
NL;
|
|
Print('(1) None');
|
|
Print('(2) ANSI');
|
|
Print('(3) Avatar');
|
|
Print('(4) VT-100');
|
|
Print('(5) RIP Graphics');
|
|
NL;
|
|
Prt('Select (1-5): ');
|
|
OneK(Cmd,'12345',TRUE,TRUE);
|
|
Exclude(User.Flags,ANSI);
|
|
Exclude(User.Flags,Avatar);
|
|
Exclude(User.Flags,VT100);
|
|
Exclude(User.SFlags,RIP);
|
|
CASE Cmd OF
|
|
'2' : Include(User.Flags,ANSI);
|
|
'3' : BEGIN
|
|
Include(User.Flags,Avatar);
|
|
NL;
|
|
IF PYNQ('Does your terminal program support ANSI fallback? ',0,TRUE) THEN
|
|
Include(User.Flags,ANSI);
|
|
END;
|
|
'4' : Include(User.Flags,VT100);
|
|
'5' : BEGIN
|
|
Include(User.Flags,ANSI);
|
|
Include(User.SFlags,RIP);
|
|
END;
|
|
END;
|
|
IF (ANSI IN User.Flags) OR (Avatar IN User.Flags) OR (VT100 IN User.Flags) THEN
|
|
Include(User.SFlags,FSEditor)
|
|
ELSE
|
|
Exclude(User.SFlags,FSEditor);
|
|
NL;
|
|
IF (PYNQ('Would you like this to be auto-detected in the future? ',0,TRUE)) THEN
|
|
Include(User.SFlags,AutoDetect)
|
|
ELSE
|
|
Exclude(User.SFlags,AutoDetect);
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_Color;
|
|
BEGIN
|
|
IF (Color IN User.Flags) THEN
|
|
BEGIN
|
|
Exclude(User.Flags,Color);
|
|
Print('ANSI Color disabled.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(User.Flags,Color);
|
|
Print('ANSI Color enabled.');
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_Pause;
|
|
BEGIN
|
|
IF (Pause IN User.Flags) THEN
|
|
BEGIN
|
|
Exclude(User.Flags,Pause);
|
|
Print('Pause on screen disabled');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(User.Flags,Pause);
|
|
Print('Pause on screen enabled');
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_Editor;
|
|
BEGIN
|
|
Done1 := TRUE;
|
|
IF (NOT (ANSI IN User.Flags)) AND (NOT (Avatar IN User.Flags)) THEN
|
|
BEGIN
|
|
Print('You must use ANSI to use the full screen editor.');
|
|
Exclude(User.SFlags,FSEditor);
|
|
Exit;
|
|
END;
|
|
IF (FSEditor IN User.SFlags) THEN
|
|
BEGIN
|
|
Exclude(User.SFlags,FSEditor);
|
|
Print('Full screen editor disabled.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(User.SFlags,FSEditor);
|
|
Print('Full screen editor enabled.');
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE Toggle_Input;
|
|
BEGIN
|
|
IF (HotKey IN User.Flags) THEN
|
|
BEGIN
|
|
Exclude(User.Flags,HotKey);
|
|
Print('Full line input.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(User.Flags,HotKey);
|
|
Print('Hot key input.');
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_CLSMsg;
|
|
BEGIN
|
|
IF (CLSMsg IN User.SFlags) THEN
|
|
BEGIN
|
|
Exclude(User.SFlags,CLSMsg);
|
|
Print('Screen clearing off.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(User.SFlags,CLSMsg);
|
|
Print('Screen clearing on.');
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_Expert;
|
|
BEGIN
|
|
IF (Novice IN User.Flags) THEN
|
|
BEGIN
|
|
Exclude(User.Flags,Novice);
|
|
CurHelpLevel := 1;
|
|
Print('Expert mode on.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(User.Flags,Novice);
|
|
CurHelpLevel := 2;
|
|
Print('Expert mode off.');
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_File_Area_LightBar;
|
|
BEGIN
|
|
IF (NOT General.UseFileAreaLightBar) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('File area lightbar support is not available.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF (FileAreaLightBar IN ThisUser.SFlags) THEN
|
|
BEGIN
|
|
Exclude(ThisUser.SFlags,FileAreaLightBar);
|
|
Print('File area lightbar support is now off.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(ThisUser.SFlags,FileAreaLightBar);
|
|
Print('File area lightbar support is now on.');
|
|
END;
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE Toggle_Message_Area_LightBar;
|
|
BEGIN
|
|
IF (NOT General.UseMsgAreaLightBar) THEN
|
|
BEGIN
|
|
NL;
|
|
Print('Message area lightbar support is not available.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF (MsgAreaLightBar IN ThisUser.SFlags) THEN
|
|
BEGIN
|
|
Exclude(ThisUser.SFlags,MsgAreaLightBar);
|
|
Print('Message area lightbar support is now off.');
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
Include(ThisUser.SFlags,MsgAreaLightBar);
|
|
Print('Message area lightbar support is now on.');
|
|
END;
|
|
END;
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE CHColors;
|
|
VAR
|
|
AScheme: SchemeRec;
|
|
i,
|
|
Onlin: SmallInt;
|
|
BEGIN
|
|
Reset(SchemeFile);
|
|
CLS;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
PrintACR('Available Color schemes:');
|
|
NL;
|
|
i := 1;
|
|
Onlin := 0;
|
|
Seek(SchemeFile,0);
|
|
WHILE (FilePos(SchemeFile) < FileSize(SchemeFile)) AND (NOT Abort) AND (NOT HangUp) do
|
|
BEGIN
|
|
Read(SchemeFile,AScheme);
|
|
Inc(Onlin);
|
|
Prompt(PadLeftInt(i,2)+'. ^3'+PadLeftStr(AScheme.Description,35));
|
|
IF (OnLin = 2) THEN
|
|
BEGIN
|
|
NL;
|
|
Onlin := 0;
|
|
END;
|
|
WKey;
|
|
Inc(i);
|
|
END;
|
|
Abort := FALSE;
|
|
Next := FALSE;
|
|
NL;
|
|
InputIntegerWOC('%LFSelect a color scheme',i,[NumbersOnly],1,FileSize(SchemeFile));
|
|
IF (i >= 1) AND (i <= FileSize(SchemeFile)) THEN
|
|
BEGIN
|
|
ThisUser.ColorScheme := i;
|
|
Seek(SchemeFile,(i - 1));
|
|
Read(SchemeFile,Scheme);
|
|
Done1 := TRUE;
|
|
END;
|
|
Close(SchemeFile);
|
|
LastError := IOResult;
|
|
END;
|
|
|
|
PROCEDURE CheckWantPause;
|
|
BEGIN
|
|
IF PYNQ('Pause after each screen? ',0,TRUE) THEN
|
|
Include(User.Flags,Pause)
|
|
ELSE
|
|
Exclude(User.Flags,Pause);
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE CheckWantInput;
|
|
BEGIN
|
|
IF PYNQ('Do you want to use Hot Keys? ',0,TRUE) THEN
|
|
Include(User.Flags,HotKey)
|
|
ELSE
|
|
Exclude(User.Flags,HotKey);
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE CheckWantExpert;
|
|
BEGIN
|
|
IF PYNQ('Do you want to be in expert mode? ',0,FALSE) THEN
|
|
Exclude(User.Flags,Novice)
|
|
ELSE
|
|
Include(User.Flags,Novice);
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE CheckWantCLSMsg;
|
|
BEGIN
|
|
IF PYNQ('Clear screen before each message read? ',0,TRUE) THEN
|
|
Include(User.SFlags,CLSMsg)
|
|
ELSE
|
|
Exclude(User.SFlags,CLSMsg);
|
|
Done1 := TRUE;
|
|
END;
|
|
|
|
PROCEDURE WW(www: Byte);
|
|
BEGIN
|
|
NL;
|
|
CASE www OF
|
|
1 : DoAddress;
|
|
2 : DoAge;
|
|
3 : Toggle_ANSI;
|
|
4 : DoCityState;
|
|
5 : DoUserDef(1);
|
|
6 : DoUserDef(2);
|
|
7 : DoName;
|
|
8 : DoPhone;
|
|
9 : DoPW;
|
|
10 : DoRealName;
|
|
11 : DoScreen;
|
|
12 : DoSex;
|
|
13 : DoUserDef(3);
|
|
14 : DoZIPCode;
|
|
15 : MailBox;
|
|
16 : Toggle_ANSI;
|
|
17 : Toggle_Color;
|
|
18 : Toggle_Pause;
|
|
19 : Toggle_Input;
|
|
20 : Toggle_CLSMsg;
|
|
21 : CHColors;
|
|
22 : Toggle_Expert;
|
|
23 : FindArea;
|
|
24 : CheckWantPause;
|
|
25 : CheckWantInput;
|
|
26 : Toggle_Editor;
|
|
27 : ConfigureQWK;
|
|
28 : CheckWantExpert;
|
|
29 : CheckWantCLSMsg;
|
|
30 : DoForgotPW;
|
|
31 : Toggle_File_Area_LightBar;
|
|
32 : Toggle_Message_Area_LightBar;
|
|
END;
|
|
END;
|
|
|
|
BEGIN
|
|
Try := 0;
|
|
Done1 := FALSE;
|
|
CASE How OF
|
|
1 : REPEAT
|
|
WW(Which)
|
|
UNTIL (Done1) OR (HangUp);
|
|
2,3 :
|
|
BEGIN
|
|
WW(Which);
|
|
IF (NOT Done1) THEN
|
|
Print('Function aborted!');
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
END.
|