mysticbbs/mystic/bbs_cfg_common.pas

98 lines
2.1 KiB
ObjectPascal

Unit bbs_cfg_Common;
{$I M_OPS.PAS}
Interface
Uses
bbs_Ansi_MenuBox;
Const
cfgCommandList = 'Press / for command list';
Function GetCommandOption (StartY: Byte; CmdStr: String) : Char;
Function GetSortRange (List: TAnsiMenuList; Var First, Last: Word) : Boolean;
Implementation
Uses
m_Strings,
m_QuickSort,
bbs_ansi_MenuForm;
Function GetCommandOption (StartY: Byte; CmdStr: String) : Char;
Var
Box : TAnsiMenuBox;
Form : TAnsiMenuForm;
Count : Byte;
Cmds : Byte;
CmdData : Array[1..10] of Record
Key : Char;
Desc : String[18];
End;
Begin
Cmds := 0;
While Pos('|', CmdStr) > 0 Do Begin
Inc (Cmds);
CmdData[Cmds].Key := CmdStr[1];
CmdData[Cmds].Desc := Copy(CmdStr, 3, Pos('|', CmdStr) - 3);
Delete (CmdStr, 1, Pos('|', Cmdstr));
End;
Box := TAnsiMenuBox.Create;
Form := TAnsiMenuForm.Create;
Form.HelpSize := 0;
Box.Open (30, StartY, 51, StartY + Cmds + 1);
For Count := 1 to Cmds Do
Form.AddNone (CmdData[Count].Key, ' ' + CmdData[Count].Key + ' ' + CmdData[Count].Desc, 31, StartY + Count, 31, StartY + Count, 20, '');
Result := Form.Execute;
Form.Free;
Box.Close;
Box.Free;
End;
Function GetSortRange (List: TAnsiMenuList; Var First, Last: Word) : Boolean;
Var
Count : Word;
Str : String;
Tagged : Boolean;
Begin
First := 0;
Last := 0;
Result := False;
For Count := 1 to List.ListMax Do Begin
List.Get (Count, Str, Tagged);
If Tagged Then Begin
If First = 0 Then First := Count Else
If Last > 0 Then Break;
End Else
If (First > 0) and (Last = 0) Then Last := Count - 1;
End;
If (First > 0) and (Last = 0) Then Last := List.ListMax - 1;
If First = 0 Then Begin
ShowMsgBox (0, 'Use TAB to tag a range first');
Exit;
End;
If Last - First > mdlMaxSortSize Then Begin
ShowMsgBox(0, 'Cannot sort more than ' + strI2S(mdlMaxSortSize) + ' items');
Exit;
End;
Result := True;
End;
End.