Renegade-1.19/SOURCE/MENUS.PAS

1072 lines
30 KiB
Plaintext

{$IFDEF WIN32}
{$I DEFINES.INC}
{$ENDIF}
{$A+,B-,D+,E-,F+,I-,L+,N-,O-,R-,S+,V-}
UNIT Menus;
INTERFACE
USES
Common,
MyIO;
PROCEDURE AutoExecCmd(AutoCmd: AStr);
PROCEDURE MenuExec;
PROCEDURE LoadMenuPW;
PROCEDURE MainMenuHandle(VAR Cmd: AStr);
PROCEDURE FCmd(CONST Cmd: AStr; VAR CmdToExec: Byte; VAR CmdExists,CmdNotHid: Boolean);
PROCEDURE DoMenuExec(Cmd: AStr; VAR NewMenuCmd: AStr);
PROCEDURE DoMenuCommand(VAR Done: Boolean;
Cmd,
MenuOption: AStr;
VAR NewMenuCmd: AStr;
NodeActivityDesc: AStr);
IMPLEMENTATION
USES
Arcview,
Archive1,
Archive2,
Archive3,
Automsg,
BBSList,
Boot,
Bulletin,
CUser,
Doors,
Email,
Events,
File0,
File1,
File2,
File3,
File5,
File6,
File7,
File8,
File9,
File10,
File11,
File12,
File13,
File14,
Mail0,
Mail1,
Mail2,
Mail3,
Mail4,
Menus2,
Menus3,
MiscUser,
MsgPack,
Multnode,
OffLine,
Script,
Stats,
LineChat,
Sysop1,
Sysop2,
SysOp2G,
Sysop3,
Sysop4,
SysOp5,
Sysop6,
Sysop7,
Sysop8,
Sysop9,
Sysop10,
Sysop11,
SysOp12,
TimeBank,
TimeFunc,
Vote,
OneLiner;
(*
I := 1;
Newmenucmd := '';
while ((I <= Noc) and (Newmenucmd = '') ) do
begin
if (Menucommand^[I].Ckeys = 'FIRSTCMD') then
begin
if (Aacs(Menucommand^[I].Acs)) then
begin
Newmenucmd := 'FIRSTCMD';
Domenuexec(Cmd,Newmenucmd);
end;
end;
inc(I);
end;
*)
PROCEDURE AutoExecCmd(AutoCmd: AStr);
VAR
NewMenuCmd: AStr;
Counter: Byte;
Done: Boolean;
BEGIN
NewMenuCmd := '';
Done := FALSE;
Counter := 1;
WHILE (Counter <= NumCmds) AND (NewMenuCmd = '') AND (NOT Done) AND (NOT HangUp) DO
BEGIN
IF (MemCmd^[Counter].Ckeys = AutoCmd) then
IF (AACS(MemCmd^[Counter].ACS)) THEN
BEGIN
NewMenuCmd := AutoCmd;
DoMenuCommand(Done,
MemCmd^[Counter].CmdKeys,
MemCmd^[Counter].Options,
NewMenuCmd,
MemCmd^[Counter].NodeActivityDesc);
END;
Inc(Counter);
END;
END;
PROCEDURE MenuExec;
VAR
Cmd,
NewMenuCmd: AStr;
Done: Boolean;
BEGIN
MainMenuHandle(Cmd);
IF ((Copy(Cmd,1,2) = '\\') AND (SysOp)) THEN
BEGIN
DoMenuCommand(Done,Copy(Cmd,1,2),Copy(Cmd,3,Length(Cmd) - 2),NewMenuCmd,'Activating SysOp Cmd');
IF (NewMenuCmd <> '') THEN
Cmd := NewMenuCmd
ELSE
Cmd := '';
END;
NewMenuCmd := '';
REPEAT
DoMenuExec(Cmd,NewMenuCmd)
UNTIL (NewMenuCmd = '') OR (HangUp);
END;
PROCEDURE CheckHelpLevel;
BEGIN
IF (MemMenu.ForceHelpLevel <> 0) THEN
CurHelpLevel := MemMenu.ForceHelpLevel
ELSE IF (Novice IN ThisUser.Flags) OR (OkRIP) THEN
CurHelpLevel := 2
ELSE
CurHelpLevel := 1;
END;
PROCEDURE LoadMenuPW;
VAR
s: Str20;
NACC: Boolean;
BEGIN
LoadMenu;
NACC := FALSE;
IF (NOT AACS(MemMenu.ACS)) OR (MemMenu.Password <> '') THEN
BEGIN
NACC := TRUE;
IF (MemMenu.Password <> '') THEN
BEGIN
NL;
Prt('Password: ');
GetPassword(s,20);
IF (s = MemMenu.Password) THEN
NACC := FALSE;
END;
IF (NACC) THEN
BEGIN
PrintF('NOACCESS');
IF (NoFile) THEN
BEGIN
NL;
Print('Access denied.');
PauseScr(FALSE);
END;
CurMenu := FallBackMenu;
LoadMenu;
END;
END;
IF (NOT NACC) THEN
CheckHelpLevel;
END;
PROCEDURE CheckForceLevel;
BEGIN
IF (CurHelpLevel < MemMenu.ForceHelpLevel) THEN
CurHelpLevel := MemMenu.ForceHelpLevel;
END;
PROCEDURE GetCmd(VAR Cmd: AStr);
VAR
S1,
SS,
SaveSS,
SHas0,
SHas1: AStr;
C: Char;
CmdToExec,
Counter,
SaveCurrentColor: Byte;
Key: Word;
GotCmd,
Has0,
Has1,
Has2: Boolean;
BEGIN
Cmd := '';
IF (Buf <> '') THEN
IF (Buf[1] = '`') THEN
BEGIN
Buf := Copy(Buf,2,(Length(Buf) - 1));
Counter := Pos('`',Buf);
IF (Counter <> 0) THEN
BEGIN
Cmd := AllCaps(Copy(Buf,1,(Counter - 1)));
Buf := Copy(Buf,(Counter + 1),(Length(Buf) - Counter));
NL;
Exit;
END;
END;
SHas0 := '?';
SHas1 := '';
Has0 := FALSE;
Has1 := FALSE;
Has2 := FALSE;
FOR CmdToExec := 1 TO NumCmds DO
IF ((CmdToExec <= (NumCmds - GlobalCmds)) OR NOT (NoGlobalUsed IN MemMenu.MenuFlags)) THEN
IF (AACS(MemCmd^[CmdToExec].ACS)) THEN
IF (MemCmd^[CmdToExec].CKeys[0] = #1) THEN
BEGIN
Has0 := TRUE;
SHas0 := SHas0 + MemCmd^[CmdToExec].CKeys;
END
ELSE IF ((MemCmd^[CmdToExec].CKeys[1] = '/') AND (MemCmd^[CmdToExec].CKeys[0] = #2)) THEN
BEGIN
Has1 := TRUE;
SHas1 := SHas1 + MemCmd^[CmdToExec].CKeys[2];
END
ELSE
Has2 := TRUE;
SaveCurrentColor := CurrentColor;
GotCmd := FALSE;
SS := '';
IF (Trapping) THEN
Flush(TrapFile);
IF (NOT (HotKey IN ThisUser.Flags)) OR (ForceLine IN MemMenu.MenuFlags) THEN
InputMain(Cmd,60,[UpperOnly,NoLineFeed])
ELSE
BEGIN
REPEAT
Key := GetKey;
IF (Key = F_UP) OR (Key = F_DOWN) OR (Key = F_LEFT) OR (Key = F_RIGHT) THEN
BEGIN
CASE Key OF
F_UP : IF (Pos(#255,MenuKeys) > 0) THEN
BEGIN
Cmd := 'UP_ARROW';
GotCmd := TRUE;
Exit;
END;
F_DOWN :
IF (Pos(#254,MenuKeys) > 0) THEN
BEGIN
Cmd := 'DOWN_ARROW';
GotCmd := TRUE;
Exit;
END;
F_LEFT :
IF (Pos(#253,MenuKeys) > 0) THEN
BEGIN
Cmd := 'LEFT_ARROW';
GotCmd := TRUE;
Exit;
END;
F_RIGHT :
IF (Pos(#252,MenuKeys) > 0) THEN
BEGIN
Cmd := 'RIGHT_ARROW';
GotCmd := TRUE;
Exit;
END;
END;
END;
C := UpCase(Char(Key));
SaveSS := SS;
IF (SS = '') THEN
BEGIN
IF (C = #13) THEN
GotCmd := TRUE;
IF ((C = '/') AND ((Has1) OR (Has2) OR (SysOp))) THEN
SS := '/';
IF (((FQArea) OR (RQArea) OR (MQArea) OR (VQArea)) AND (C IN ['0'..'9'])) THEN
BEGIN
SS := C;
IF (RQArea) AND (HiMsg <= 9) THEN
GotCmd := TRUE
ELSE IF (FQArea) AND (NumFileAreas <= 9) THEN
GotCmd := TRUE
ELSE IF (MQArea) AND (NumMsgAreas <= 9) THEN
GotCmd := TRUE
ELSE IF (VQArea) AND (GetTopics <= 9) THEN
GotCmd := TRUE;
END
ELSE IF (Pos(C,SHas0) <> 0) THEN
BEGIN
GotCmd := TRUE;
SS := C;
END;
END
ELSE IF (SS = '/') THEN
BEGIN
IF (C = ^H) THEN
SS := '';
IF ((C = '/') AND ((Has2) OR (SysOp))) THEN
SS := SS + '/';
IF ((Pos(C,SHas1) <> 0) AND (Has1)) THEN
BEGIN
GotCmd := TRUE;
SS := SS + C;
END;
END
ELSE IF (Copy(SS,1,2) = '//') THEN
BEGIN
IF (C = #13) THEN
GotCmd := TRUE
ELSE IF (C = ^H) THEN
Dec(SS[0])
ELSE IF (C = ^X) THEN
BEGIN
FOR Counter := 1 TO (Length(SS) - 2) DO
BackSpace;
SS := '//';
SaveSS := SS;
END
ELSE IF ((Length(SS) < 62) AND (C >= #32) AND (C <= #127)) THEN
SS := SS + C;
END
ELSE IF ((Length(SS) >= 1) AND (SS[1] IN ['0'..'9']) AND ((FQArea) OR (RQArea) OR (MQArea) OR (VQArea))) THEN
BEGIN
IF (C = ^H) THEN
Dec(SS[0]);
IF (C = #13) THEN
GotCmd := TRUE;
IF (C IN ['0'..'9']) THEN
BEGIN
SS := SS + C;
IF (VQArea) AND (Length(SS) = Length(IntToStr(GetTopics))) THEN
GotCmd := TRUE
ELSE IF (RQArea) AND (Length(SS) = Length(IntToStr(HiMsg))) THEN
GotCmd := TRUE
ELSE IF (MQArea) AND (Length(SS) = Length(IntToStr(NumMsgAreas))) THEN
GotCmd := TRUE
ELSE IF (FQArea) AND (Length(SS) = Length(IntToStr(NumFileAreas))) THEN
GotCmd := TRUE;
END;
END;
IF ((Length(SS) = 1) AND (Length(SaveSS) = 2)) THEN
SetC(SaveCurrentColor);
IF (SaveSS <> SS) AND (NOT (NoMenuPrompt IN MemMenu.MenuFlags)) THEN
BEGIN
IF (Length(SS) > Length(SaveSS)) THEN
Prompt(SS[Length(SS)]);
IF (Length(SS) < Length(SaveSS)) THEN
BackSpace;
END;
IF ((NOT (SS[1] IN ['0'..'9'])) AND ((Length(SS) = 2) AND (Length(SaveSS) = 1))) THEN
UserColor(6);
UNTIL ((GotCmd) OR (HangUp));
CursorOn(TRUE);
UserColor(1);
IF (Copy(SS,1,2) = '//') THEN
SS := Copy(SS,3,(Length(SS) - 2));
Cmd := SS;
END;
(* Test *)
IF (CurMenu <> General.FileListingMenu) THEN
NL;
IF (Pos(';',Cmd) <> 0) THEN
IF (Copy(Cmd,1,2) <> '\\') THEN
BEGIN
IF (HotKey IN ThisUser.Flags) THEN
BEGIN
S1 := Copy(Cmd,2,(Length(Cmd) - 1));
IF (Copy(S1,1,1) = '/') THEN
Cmd := Copy(S1,1,2)
ELSE
Cmd := S1[1];
S1 := Copy(S1,(Length(Cmd) + 1),(Length(S1) - Length(Cmd)));
END
ELSE
BEGIN
S1 := Copy(Cmd,(Pos(';',Cmd) + 1),(Length(Cmd) - Pos(';',Cmd)));
Cmd := Copy(Cmd,1,(Pos(';',Cmd) - 1));
END;
WHILE (Pos(';',S1) <> 0) DO
S1[Pos(';',S1)] := ^M;
Buf := S1;
END;
END;
PROCEDURE MainMenuHandle(VAR Cmd: AStr);
VAR
NewArea: Integer;
BEGIN
TLeft;
CheckForceLevel;
IF ((ForcePause IN MemMenu.MenuFlags) AND (CurHelpLevel > 1) AND (LastCommandGood)) THEN
PauseScr(FALSE);
LastCommandGood := FALSE;
MenuAborted := FALSE;
Abort := FALSE;
ShowThisMenu;
AutoExecCmd('EVERYTIME');
IF (General.MultiNode) THEN
Check_Status;
IF ((NOT (NoMenuPrompt IN MemMenu.MenuFlags)) AND (NOT MenuAborted)) AND NOT
(OKAnsi AND (NoGenericAnsi IN MemMenu.MenuFlags) AND NOT (OkAvatar OR OKRIP)) AND NOT
(OkAvatar AND (NoGenericAvatar IN MemMenu.MenuFlags) AND NOT OkRIP) AND NOT
(OkRIP AND (NoGenericRIP IN MemMenu.MenuFlags)) THEN
BEGIN
IF (CurMenu <> General.FileListingMenu) THEN
NL;
IF (AutoTime IN MemMenu.MenuFlags) THEN
Print('^3[Time Left:'+CTim(NSL)+']');
Prompt(MemMenu.MenuPrompt);
END;
TempPause := (Pause IN ThisUser.Flags);
GetCmd(Cmd);
IF (Cmd = '') AND (Pos(#13,MenuKeys) > 0) THEN
Cmd := 'ENTER';
IF (Cmd = '?') THEN
BEGIN
Cmd := '';
Inc(CurHelpLevel);
IF (CurHelpLevel > 3) THEN
CurHelpLevel := 3;
END
ELSE
CheckHelpLevel;
CheckForceLevel;
IF (FQArea) OR (MQArea) OR (VQArea) OR (RQArea) THEN
BEGIN
NewArea := StrToInt(Cmd);
IF ((NewArea <> 0) OR (Cmd[1] = '0')) THEN
BEGIN
IF (FQArea) AND (NewArea >= 1) AND (NewArea <= NumFileAreas) THEN
ChangeFileArea(CompFileArea(NewArea,1))
ELSE IF (MQArea) AND (NewArea >= 1) AND (NewArea <= NumMsgAreas) THEN
ChangeMsgArea(CompMsgArea(NewArea,1))
ELSE IF (VQArea) AND (NewArea >= 1) AND (NewArea <= NumVotes) THEN
VoteOne(NewArea)
ELSE IF (RQArea) AND (NewArea >= 1) AND (NewArea <= HiMsg) THEN
IF NOT (MAForceRead IN MemMsgArea.MAFlags) OR (NewArea <= Msg_On) THEN
BEGIN
Msg_On := (NewArea - 1);
TReadPrompt := 18;
END
ELSE
Print('You must read all of the messages in this area.');
Cmd := '';
END;
END;
END;
PROCEDURE FCmd(CONST Cmd: AStr; VAR CmdToExec: Byte; VAR CmdExists,CmdNotHid: Boolean);
VAR
Done: Boolean;
BEGIN
Done := FALSE;
REPEAT
Inc(CmdToExec);
IF (CmdToExec <= NumCmds) AND (Cmd = MemCmd^[CmdToExec].CKeys) THEN
BEGIN
CmdExists := TRUE;
IF (OkSecurity(CmdToExec,CmdNotHid)) THEN
Done := TRUE;
END;
IF ((CmdToExec > (NumCmds - GlobalCmds)) AND (NoGlobalUsed IN MemMenu.MenuFlags)) THEN
BEGIN
CmdToExec := 0;
CmdExists := FALSE;
Done := TRUE;
END;
UNTIL (CmdToExec > NumCmds) OR (Done) OR (HangUp);
IF (CmdToExec > NumCmds) THEN
CmdToExec := 0;
END;
PROCEDURE DoMenuExec(Cmd: AStr; VAR NewMenuCmd: AStr);
VAR
CmdToExec: Byte;
CmdACS,
CmdNotHid,
CmdExists,
Done: Boolean;
BEGIN
IF (NewMenuCmd <> '') THEN
BEGIN
Cmd := NewMenuCmd;
NewMenuCmd := '';
END;
CmdACS := FALSE;
CmdExists := FALSE;
CmdNotHid := FALSE;
Done := FALSE;
CmdToExec := 0;
REPEAT
FCmd(Cmd,CmdToExec,CmdExists,CmdNotHid);
IF (CmdToExec <> 0) THEN
BEGIN
CmdACS := TRUE;
DoMenuCommand(Done,
MemCmd^[CmdToExec].CmdKeys,
MemCmd^[CmdToExec].Options,
NewMenuCmd,
MemCmd^[CmdToExec].NodeActivityDesc);
END;
UNTIL ((CmdToExec = 0) OR (Done) OR (HangUp));
IF (NOT Done) AND (Cmd <> '') THEN
IF ((NOT CmdACS) AND (Cmd <> '')) THEN
BEGIN
NL;
IF ((CmdNotHid) AND (CmdExists)) THEN
Print('Insufficient clearence for this command.')
ELSE
Print('Invalid command.');
END;
END;
PROCEDURE DoMenuCommand(VAR Done: Boolean;
Cmd,
MenuOption: AStr;
VAR NewMenuCmd: AStr;
NodeActivityDesc: AStr);
VAR
MHeader: MHeaderRec;
TempStr: AStr;
SaveMenu: Byte;
NoCmd: Boolean;
BEGIN
NewMenuToLoad := FALSE;
NewMenuCmd := '';
NoCmd := FALSE;
Abort := FALSE;
LastCommandOvr := FALSE;
IF ((Cmd[1] + Cmd[2]) <> 'NW') THEN
Update_Node(NodeActivityDesc,TRUE);
CASE Cmd[1] OF
'$' : CASE Cmd[2] OF
'D' : Deposit;
'W' : Withdraw;
'+' : Inc(ThisUser.lCredit,StrToInt(MenuOption));
'-' : Inc(ThisUser.Debit,StrToInt(MenuOption));
ELSE
NoCmd := TRUE;
END;
'/' : CASE Cmd[2] OF
'F': BEGIN
MCIAllowed := FALSE;
PrintF(MCI(MenuOption));
MCIAllowed := TRUE;
END;
ELSE
NoCmd := TRUE;
END;
'-' : CASE Cmd[2] OF
'C' : lStatus_Screen(100,MenuOption,FALSE,MenuOption);
'F' : PrintF(MCI(MenuOption));
'L' : Prompt(MenuOption);
'Q' : ReadQ(General.MiscPath+MenuOption);
'R' : ReadASW1(MenuOption);
'S' : SysOpLog(MCI(MenuOption));
';' : BEGIN
TempStr := MenuOption;
WHILE (Pos(';',TempStr) > 0) DO
TempStr[Pos(';',TempStr)] := ^M;
Buf := TempStr;
END;
'$' : IF (SemiCmd(MenuOption,1) <> '') THEN
BEGIN
IF (SemiCmd(MenuOption,2) = '') THEN
Prt(': ')
ELSE
Prt(SemiCmd(MenuOption,2));
GetPassword(TempStr,20);
IF (TempStr <> SemiCmd(MenuOption,1)) THEN
BEGIN
Done := TRUE;
IF (SemiCmd(MenuOption,3) <> '') THEN
Print(SemiCmd(MenuOption,3));
END;
END;
'Y' : IF (SemiCmd(MenuOption,1) <> '') AND NOT (PYNQ(SemiCmd(MenuOption,1),0,FALSE)) THEN
BEGIN
Done := TRUE;
IF (SemiCmd(MenuOption,2) <> '') THEN
Print(SemiCmd(MenuOption,2));
END;
'N' : IF (SemiCmd(MenuOption,1) <> '') AND (PYNQ(SemiCmd(MenuOption,1),0,FALSE)) THEN
BEGIN
Done := TRUE;
IF (SemiCmd(MenuOption,2) <> '') THEN
Print(SemiCmd(MenuOption,2));
END;
'^','/','\' :
DoChangeMenu(Done,NewMenuCmd,Cmd[2],MenuOption);
ELSE
NoCmd := TRUE;
END;
'1' : CASE Cmd[2] OF
'L' : DoOneLiners;
END;
'A' : CASE Cmd[2] OF
'A','C','M','T' :
DoArcCommand(Cmd[2]);
'E' : ExtractToTemp;
'G' : UserArchive;
'R' : ReZipStuff;
ELSE
NoCmd := TRUE;
END;
'B' : CASE Cmd[2] OF
'?' : BatchDLULInfo;
'C' : IF (UpCase(MenuOption[1]) = 'U') THEN
ClearBatchULQueue
ELSE
ClearBatchDLQueue;
'D' : BatchDownload;
'L' : IF (UpCase(MenuOption[1]) = 'U') THEN
ListBatchULFiles
ELSE
ListBatchDLFiles;
'R' : IF (UpCase(MenuOption[1]) = 'U') THEN
RemoveBatchULFiles
ELSE
RemoveBatchDLFiles;
'U' : BatchUpload(FALSE,0);
ELSE
NoCmd := TRUE;
END;
'D' : CASE Cmd[2] OF
'P','C','D','G','S','W','-','3' :
DoDoorFunc(Cmd[2],MenuOption);
ELSE
NoCmd := TRUE;
END;
'F' : CASE Cmd[2] OF
'A' : FileAreaChange(Done,MenuOption);
'B' : DownloadFile(MenuOption,[lIsAddDLBatch]);
'C' : CheckFilesBBS;
'D' : DownloadFile(MenuOption,[]);
'F' : SearchFileDescriptions;
'L' : ListFileSpec(MenuOption);
'N' : NewFilesScanSearchType(MenuOption);
'P' : SetFileAreaNewScanDate;
'S' : SearchFileSpec;
'U' : UploadFile;
'V' : ViewDirInternalArchive;
'Z' : ToggleFileAreaScanFlags;
'@' : CreateTempDir;
'#' : BEGIN
NL;
Print('Enter the number of a file area to change to.');
IF (Novice IN ThisUser.Flags) THEN
PauseScr(FALSE);
END;
ELSE
NoCmd := TRUE;
END;
'H' : CASE Cmd[2] OF
'C' : IF PYNQ(MenuOption,0,FALSE) THEN
BEGIN
CLS;
PrintF('LOGOFF');
HangUp := TRUE;
HungUp := FALSE;
END;
'I' : HangUp := TRUE;
'M' : BEGIN
NL;
Print(MenuOption);
HangUp := TRUE;
END;
ELSE
NoCmd := TRUE;
END;
'L' : CASE Cmd[2] OF
'1' : TFilePrompt := 1;
'2' : TFilePrompt := 2;
'3' : TFilePrompt := 3;
'4' : TFilePrompt := 4;
'5' : TFilePrompt := 5;
'6' : TFilePrompt := 6;
'7' : TFilePrompt := 7;
'8' : TFilePrompt := 8;
ELSE
NoCmd := TRUE;
END;
'M' : CASE Cmd[2] OF
'A' : MessageAreaChange(Done,MenuOption);
'E' : SSMail(MenuOption);
'K' : ShowEMail;
'L' : SMail(TRUE);
'M' : ReadMail;
'N' : StartNewScan(MenuOption);
'P' : IF (ReadMsgArea = -1) THEN
BEGIN
NL;
Print('^7This option is not available when reading private messages!^1');
END
ELSE
BEGIN
IF (MAPrivate IN MemMsgArea.MAFlags) THEN
BEGIN
NL;
Post(-1,MHeader.From,PYNQ('Is this to be a private message? ',0,FALSE))
END
ELSE
Post(-1,MHeader.From,FALSE);
END;
'R' : ReadAllMessages(MenuOption);
'S' : BEGIN
Abort := FALSE;
Next := FALSE;
ScanMessages(MsgArea,FALSE,MenuOption);
END;
'U' : BEGIN
LoadMsgArea(MsgArea);
UList(MemMsgArea.ACS);
END;
'Y' : ScanYours;
'Z' : ToggleMsgAreaScanFlags;
'#' : BEGIN
NL;
Print('Enter the number of a message area to change to.');
IF (Novice IN ThisUser.Flags) THEN
PauseScr(FALSE);
END;
ELSE
NoCmd := TRUE;
END;
'N' : CASE Cmd[2] OF
'A' : ToggleChatAvailability;
'D' : Dump_Node;
'O' : BEGIN
LListNodes;
IF (Novice IN ThisUser.Flags) THEN
PauseScr(FALSE);
END;
'P' : Page_User;
'G' : MultiLine_Chat;
'S' : LSend_Message(MenuOption);
'T' : IF AACS(General.Invisible) THEN
BEGIN
IsInvisible := NOT IsInvisible;
LoadNode(ThisNode);
IF (IsInvisible) THEN
Include(NodeR.Status,NInvisible)
ELSE
Exclude(NodeR.Status,NInvisible);
SaveNode(ThisNode);
NL;
Print('Invisible mode is now '+ShowOnOff(IsInvisible));
END;
(* Consider deleting this cmd *)
'W' : BEGIN
LoadNode(ThisNode);
NodeR.ActivityDesc := MenuOption;
SaveNode(ThisNode);
END;
ELSE
NoCmd := TRUE;
END;
'O' : CASE Cmd[2] OF
'1','2' :
TShuttleLogon := Ord(Cmd[2]) - 48;
'A' : AutoValidationCmd(MenuOption);
'B' : GetUserStats(MenuOption);
'C' : RequestSysOpChat(MenuOption);
'F' : ChangeARFlags(MenuOption);
'G' : ChangeACFlags(MenuOption);
'L' : BEGIN
IF (Pos(';',MenuOption) > 0) THEN
BEGIN
MenuOption := Copy(MenuOption,Pos(';',MenuOption) + 1,(Length(MenuOption)) - (Pos(';',MenuOption)));
TempStr := Copy(MenuOption,1,(Pos(';',MenuOption) - 1));
END
ELSE
TempStr := '0';
TodaysCallers(StrToInt(TempStr),MenuOption);
END;
'P' : CStuff(StrToInt(MenuOption),2,ThisUser);
'R' : ChangeConference(MenuOption);
'S' : Bulletins(MenuOption);
'U' : UList(MenuOption);
ELSE
NoCmd := TRUE;
END;
'Q' : CASE Cmd[2] OF
'Q' : RGQuote(MenuOption);
ELSE
NoCmd := TRUE;
END;
'R' : CASE Cmd[2] OF
'#' : BEGIN
NL;
Print('Enter the number of a message to read it.');
END;
'A' : TReadPrompt := 1;
'-' : IF (Msg_On > 1) THEN
TReadPrompt := 2
ELSE
BEGIN
NL;
Print('You are already at the first message.');
END;
'M' : TReadPrompt := 3;
'X' : TReadPrompt := 4;
'E' : TReadPrompt := 5;
'R' : TReadPrompt := 6;
'I' : IF (NOT (MAForceRead IN MemMsgArea.MAFlags)) OR (CoSysOp) THEN
TReadPrompt := 7
ELSE
Print('You must read all of the messages in this area.');
'B' : TReadPrompt := 8;
'F' : TReadPrompt := 9;
'C' : TReadPrompt := 10;
'D' : TReadPrompt := 11;
'H' : TReadPrompt := 12;
'G' : IF (NOT (MAForceRead IN MemMsgArea.MAFlags)) OR (CoSysOp) THEN
TReadPrompt := 13
ELSE
Print('^7You must read all of the messages in this area!^1');
'Q' : IF (NOT (MAForceRead IN MemMsgArea.MAFlags)) OR (CoSysOp) THEN
TReadPrompt := 14
ELSE
Print('^7You must read all of the messages in this area!^1');
'L' : TReadPrompt := 15;
'U' : TReadPrompt := 16;
'T' : TReadPrompt := 17;
'N' : TReadPrompt := 18;
'S' : TReadPrompt := 19;
'V' : TReadPrompt := 20;
'J' : TReadPrompt := 21;
ELSE
NoCmd := TRUE;
END;
'U' : CASE Cmd[2] OF
'A' : ReplyAutoMsg;
'R' : ReadAutoMsg;
'W' : WriteAutoMsg;
ELSE
NoCmd := TRUE;
END;
'V' : CASE Cmd[2] OF
'#' : BEGIN
NL;
Print('Enter the number of the topic to vote on.');
IF (Novice IN ThisUser.Flags) THEN
PauseScr(FALSE);
END;
'A' : AddTopic;
'L' : ListTopics(TRUE);
'R' : Results(FALSE);
'T' : TrackUser;
'U' : Results(TRUE);
'V' : VoteAll;
ELSE
NoCmd := TRUE;
END;
'T' : CASE Cmd[2] OF
'A' : BBSList_Add;
'E' : BBSList_Edit;
'D' : BBSList_Delete;
'V' : BBSList_View;
'X' : BBSList_xView;
ELSE
NoCmd := TRUE;
END;
'!' : CASE Cmd[2] OF
'P' : SetMessageAreaNewScanDate;
'D' : DownloadPacket;
'U' : UploadPacket(FALSE);
ELSE
NoCmd := TRUE;
END;
'*' : CASE Cmd[2] OF
'=' : ShowCmds(MenuOption);
'B' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Message Area Editor');
MessageAreaEditor;
END;
'C' : IF (CheckPW) THEN
ChangeUser;
'D' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Entered Dos Emulator');
MiniDOS;
END;
'E' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Event Editor');
EventEditor;
END;
'F' : IF (CheckPW) THEN
BEGIN
SysOpLog('* File Area Editor');
FileAreaEditor;
END;
'V' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Vote Editor');
VotingEditor;
END;
'L' : IF (CheckPW) THEN
ShowLogs;
'N' : TEdit1;
'P' : IF (CheckPW) THEN
BEGIN
SysOpLog('* System Configuration Editor');
SystemConfigurationEditor;
END;
'R' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Conference Editor');
ConferenceEditor;
END;
'T' : IF (CheckPW) THEN
BEGIN
mem[Seg0040:$0017] := mem[Seg0040:$0017] XOR 16;
IF (SysOpAvailable) THEN
BEGIN
SysOpLog('* Turned on chat availablity');
END
ELSE
BEGIN
SysOpLog('* Turned off chat availablity');
END;
END;
'U' : IF (CheckPW) THEN
BEGIN
SysOpLog('* User Editor');
UserEditor(UserNum);
END;
'X' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Protocol Editor');
ProtocolEditor;
END;
'Z' : BEGIN
SysOpLog('* History Editor');
HistoryEditor;
END;
'1' : BEGIN
SysOpLog('* Edited Files');
EditFiles;
END;
'2' : BEGIN
SysOpLog('* Sorted Files');
Sort;
END;
'3' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Read Private Messages');
ReadAllMessages('');
END;
'4' : IF (MenuOption = '') THEN
Do_Unlisted_Download
ELSE
UnlistedDownload(MenuOption);
'5' : BEGIN
SysOpLog('* Rechecked files');
ReCheck;
END;
'6' : IF (CheckPW) THEN
UploadAll;
'7' : ValidateFiles;
'8' : AddGIFSpecs;
'9' : PackMessageAreas;
'#' : IF (CheckPW) THEN
BEGIN
SysOpLog('* Menu Editor');
SaveMenu := CurMenu;
MenuEditor;
CurMenu := SaveMenu;
LoadMenu;
END;
'$' : DirF(TRUE);
'%' : DirF(FALSE);
ELSE
NoCmd := TRUE;
END;
ELSE
NoCmd := TRUE;
END;
LastCommandGood := NOT NoCmd;
IF (LastCommandOvr) THEN
LastCommandGood := FALSE;
IF (NoCmd) THEN
IF (CoSysOp) THEN
BEGIN
TempStr := 'Invalid command keys: '+Cmd[1]+Cmd[2]+' '+Cmd;
NL;
Print(TempStr);
SysOpLog(TempStr);
END;
IF ((Cmd[1] + Cmd[2]) <> 'NW') THEN
Update_Node('',FALSE);
IF (NewMenuToLoad) THEN
BEGIN
LoadMenuPW;
LastCommandGood := FALSE;
IF (NewMenuCmd = '') THEN
AutoExecCmd('FIRSTCMD');
END;
END;
END.