Renegade-1.19/SOURCE/CUSER.PAS

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.