Too much stuff to list

This commit is contained in:
mysticbbs 2013-02-26 07:45:01 -05:00
parent a416312104
commit 3b41411d22
19 changed files with 586 additions and 202 deletions

View File

@ -30,7 +30,7 @@ Type
End; End;
Const Const
Num_Cmds = 99; Num_Cmds = 100;
MenuCmds : Array[1..Num_Cmds] of CmdRec = ( MenuCmds : Array[1..Num_Cmds] of CmdRec = (
// AUTOSIG MENU COMMANDS // AUTOSIG MENU COMMANDS
( Name: 'AE'; Desc: 'Autosig editor' ), ( Name: 'AE'; Desc: 'Autosig editor' ),
@ -138,6 +138,7 @@ Const
// OTHER MENU COMMANDS // OTHER MENU COMMANDS
( Name: '-D'; Desc: 'Set access flags (set 2)' ), ( Name: '-D'; Desc: 'Set access flags (set 2)' ),
( Name: '-F'; Desc: 'Set access flags (set 1)' ), ( Name: '-F'; Desc: 'Set access flags (set 1)' ),
( Name: '-G'; Desc: 'Show generated menu' ),
( Name: '-I'; Desc: 'Set menu timer' ), ( Name: '-I'; Desc: 'Set menu timer' ),
( Name: '-K'; Desc: 'Add keys to input buffer' ), ( Name: '-K'; Desc: 'Add keys to input buffer' ),
( Name: '-N'; Desc: 'Ask Yes/No (default No)' ), ( Name: '-N'; Desc: 'Ask Yes/No (default No)' ),
@ -473,13 +474,13 @@ Begin
Form.AddStr ('D', ' Description' , 9, 7, 24, 7, 13, 30, 30, @Menu.Info.Description, Topic + 'Description of menu'); Form.AddStr ('D', ' Description' , 9, 7, 24, 7, 13, 30, 30, @Menu.Info.Description, Topic + 'Description of menu');
Form.AddStr ('A', ' Access' , 14, 8, 24, 8, 8, 30, 30, @Menu.Info.Access, Topic + 'Security requirements to access this menu'); Form.AddStr ('A', ' Access' , 14, 8, 24, 8, 8, 30, 30, @Menu.Info.Access, Topic + 'Security requirements to access this menu');
Form.AddStr ('B', ' Fallback' , 12, 9, 24, 9, 10, 20, 20, @Menu.Info.Fallback, Topic + 'Menu loaded if user has no access (Blank/Last)'); Form.AddStr ('B', ' Fallback' , 12, 9, 24, 9, 10, 20, 20, @Menu.Info.Fallback, Topic + 'Menu loaded if user has no access (Blank/Last)');
Form.AddTog ('T', ' Menu Type' , 11, 10, 24, 10, 11, 13, 0, 2, 'Standard Lightbar Lightbar/Grid', @Menu.Info.MenuType, Topic + 'Type of menu'); Form.AddTog ('T', ' Menu Type' , 11, 10, 24, 10, 11, 15, 0, 3, 'Standard Lightbar Lightbar/Grid Lightbar/Prompt', @Menu.Info.MenuType, Topic + 'Type of menu');
Form.AddTog ('I', ' Input Type' , 10, 11, 24, 11, 12, 12, 0, 2, 'User_Defined HotKey LongKey', @Menu.Info.InputType, Topic + 'Input type for this menu'); Form.AddTog ('I', ' Input Type' , 10, 11, 24, 11, 12, 12, 0, 2, 'User_Defined HotKey LongKey', @Menu.Info.InputType, Topic + 'Input type for this menu');
Form.AddTog ('C', ' Input Chars' , 9, 12, 24, 12, 13, 9, 0, 2, 'Uppercase Lowercase Hidden', @Menu.Info.CharType, Topic + 'Input format display'); Form.AddTog ('C', ' Input Chars' , 9, 12, 24, 12, 13, 9, 0, 2, 'Uppercase Lowercase Hidden', @Menu.Info.CharType, Topic + 'Input format display');
Form.AddBol ('G', ' Use Global' , 10, 13, 24, 13, 12, 3, @Menu.Info.Global, Topic + 'Include global menu options in this menu?'); Form.AddBol ('G', ' Use Global' , 10, 13, 24, 13, 12, 3, @Menu.Info.Global, Topic + 'Include global menu options in this menu?');
Form.AddStr ('N', ' Node Status' , 9, 14, 24, 14, 13, 30, 30, @Menu.Info.NodeStatus, Topic + 'Node/User status set when this menu is loaded'); Form.AddStr ('N', ' Node Status' , 9, 14, 24, 14, 13, 30, 30, @Menu.Info.NodeStatus, Topic + 'Node/User status set when this menu is loaded');
Form.AddStr ('F', ' Display File', 8, 15, 24, 15, 14, 20, 20, @Menu.Info.DispFile, Topic + 'Display file shown instead of generated menu'); Form.AddStr ('F', ' Display File', 8, 15, 24, 15, 14, 20, 20, @Menu.Info.DispFile, Topic + 'Display file shown instead of generated menu');
Form.AddTog ('L', ' Display Cols', 8, 16, 24, 16, 14, 1, 1, 4, '1 2 3 4', @Menu.Info.DispCols, Topic + 'Number of columns in generated menu'); Form.AddTog ('L', ' Display Cols', 8, 16, 24, 16, 14, 1, 0, 4, '0 1 2 3 4', @Menu.Info.DispCols, Topic + 'Number of columns in generated menu');
Form.AddPipe ('H', ' Menu Header' , 9, 17, 24, 17, 13, 50, 160, @Menu.Info.Header, Topic + 'Menu header displayed in generated menu'); Form.AddPipe ('H', ' Menu Header' , 9, 17, 24, 17, 13, 50, 160, @Menu.Info.Header, Topic + 'Menu header displayed in generated menu');
Form.AddPipe ('P', ' Menu Prompt' , 9, 18, 24, 18, 13, 50, 160, @Menu.Info.Footer, Topic + 'Menu prompt displayed in generated menu'); Form.AddPipe ('P', ' Menu Prompt' , 9, 18, 24, 18, 13, 50, 160, @Menu.Info.Footer, Topic + 'Menu prompt displayed in generated menu');
Form.AddByte ('X', ' X' , 19, 19, 24, 19, 3, 2, 0, 80, @Menu.Info.DoneX, Topic + 'Locate to X coordinate after lightbar menu'); Form.AddByte ('X', ' X' , 19, 19, 24, 19, 3, 2, 0, 80, @Menu.Info.DoneX, Topic + 'Locate to X coordinate after lightbar menu');

View File

@ -132,7 +132,7 @@ Begin
Form.AddWord ('C', ' Password Change', 18, 9, 37, 9, 17, 5, 0, 65535, @Config.PWChange, Topic + 'Days before forcing PW change (0/Disabled)'); Form.AddWord ('C', ' Password Change', 18, 9, 37, 9, 17, 5, 0, 65535, @Config.PWChange, Topic + 'Days before forcing PW change (0/Disabled)');
Form.AddBol ('I', ' Password Inquiry', 17, 10, 37, 10, 18, 3, @Config.PWInquiry, Topic + 'Allow password inquiry e-mails?'); Form.AddBol ('I', ' Password Inquiry', 17, 10, 37, 10, 18, 3, @Config.PWInquiry, Topic + 'Allow password inquiry e-mails?');
Form.AddByte ('W', ' Password Attempts', 16, 11, 37, 11, 19, 2, 1, 99, @Config.PWAttempts, Topic + 'Max Password attempts'); Form.AddByte ('W', ' Password Attempts', 16, 11, 37, 11, 19, 2, 1, 99, @Config.PWAttempts, Topic + 'Max Password attempts');
Form.AddTog ('O', ' Start Code Page', 18, 12, 37, 12, 17, 5, 0, 1, 'CP437 UTF-8', @Config.StartCodePage, Topic + 'Logging in user''s code page');
Form.AddBol ('U', ' Use Matrix Login', 17, 13, 37, 13, 18, 3, @Config.UseMatrix, Topic + 'Use Matrix login menu?'); Form.AddBol ('U', ' Use Matrix Login', 17, 13, 37, 13, 18, 3, @Config.UseMatrix, Topic + 'Use Matrix login menu?');
Form.AddStr ('M', ' Matrix Menu', 22, 14, 37, 14, 13, 20, 20, @Config.MatrixMenu, Topic + 'Matrix menu file name'); Form.AddStr ('M', ' Matrix Menu', 22, 14, 37, 14, 13, 20, 20, @Config.MatrixMenu, Topic + 'Matrix menu file name');
Form.AddPass ('P', ' Matrix Password', 18, 15, 37, 15, 17, 15, 15, @Config.MatrixPW, Topic + 'Matrix password to login (Blank/Disabled)'); Form.AddPass ('P', ' Matrix Password', 18, 15, 37, 15, 17, 15, 15, @Config.MatrixPW, Topic + 'Matrix password to login (Blank/Disabled)');

View File

@ -150,6 +150,7 @@ Begin
Form.AddBol ('X', ' Msg Index' , 7, 11, 23, 11, 14, 3, @U.UseLBIndex, Topic + 'Start reading at message index'); Form.AddBol ('X', ' Msg Index' , 7, 11, 23, 11, 14, 3, @U.UseLBIndex, Topic + 'Start reading at message index');
Form.AddBol ('I', ' Mail Index' , 7, 12, 23, 12, 14, 3, @U.UseLBMIdx, Topic + 'Start reading email at message index'); Form.AddBol ('I', ' Mail Index' , 7, 12, 23, 12, 14, 3, @U.UseLBMIdx, Topic + 'Start reading email at message index');
Form.AddTog ('N', ' Node Chat' , 7, 13, 23, 13, 14, 8, 0, 1, 'Standard Full', @U.UseFullChat, Topic + 'User''s node chat type'); Form.AddTog ('N', ' Node Chat' , 7, 13, 23, 13, 14, 8, 0, 1, 'Standard Full', @U.UseFullChat, Topic + 'User''s node chat type');
Form.AddTog ('C', ' Code Page' , 7, 14, 23, 14, 14, 5, 0, 1, 'CP437 UTF-8', @U.CodePage, Topic + 'User''s character translation');
End; End;
4 : Begin 4 : Begin
Form.Clear; Form.Clear;

View File

@ -1646,7 +1646,7 @@ End;
Procedure TFileBase.FileGroupChange (Ops: String; FirstBase, Intro: Boolean); Procedure TFileBase.FileGroupChange (Ops: String; FirstBase, Intro: Boolean);
Var Var
A : Word; Count : Word;
Total : Word; Total : Word;
tGroup : recGroup; tGroup : recGroup;
tFBase : RecFileBase; tFBase : RecFileBase;
@ -1659,16 +1659,16 @@ Begin
If (Ops = '+') or (Ops = '-') Then Begin If (Ops = '+') or (Ops = '-') Then Begin
Reset (FGroupFile); Reset (FGroupFile);
A := Session.User.ThisUser.LastFGroup - 1; Count := Session.User.ThisUser.LastFGroup - 1;
Repeat Repeat
Case Ops[1] of Case Ops[1] of
'+' : Inc(A); '+' : Inc(Count);
'-' : Dec(A); '-' : Dec(Count);
End; End;
{$I-} {$I-}
Seek (FGroupFile, A); Seek (FGroupFile, Count);
Read (FGroupFile, FGroup); Read (FGroupFile, FGroup);
{$I+} {$I+}
@ -1771,9 +1771,11 @@ Begin
Else Begin Else Begin
Session.io.OutFull (Session.GetPrompt(217)); Session.io.OutFull (Session.GetPrompt(217));
A := strS2I(Session.io.GetInput(4, 4, 11, '')); Session.io.OneKeyRange(#13 + 'Q', 1, Total);
If (A > 0) and (A <= Total) Then Begin Count := Session.io.RangeValue;
If (Count > 0) and (Count <= Total) Then Begin
Total := 0; Total := 0;
Reset (FGroupFile); Reset (FGroupFile);
@ -1781,7 +1783,7 @@ Begin
Repeat Repeat
Read (FGroupFile, FGroup); Read (FGroupFile, FGroup);
If Not FGroup.Hidden And Session.User.Access(FGroup.ACS) Then Inc(Total); If Not FGroup.Hidden And Session.User.Access(FGroup.ACS) Then Inc(Total);
If A = Total Then Break; If Count = Total Then Break;
Until False; Until False;
Session.User.ThisUser.LastFGroup := FilePos(FGroupFile); Session.User.ThisUser.LastFGroup := FilePos(FGroupFile);
@ -1858,7 +1860,6 @@ Var
A : Word; A : Word;
Total : Word; Total : Word;
Old : RecFileBase; Old : RecFileBase;
Str : String[5];
Compress : Boolean; Compress : Boolean;
Begin Begin
Old := FBase; Old := FBase;
@ -1929,16 +1930,17 @@ Begin
Repeat Repeat
Session.io.OutFull (Session.GetPrompt(36)); Session.io.OutFull (Session.GetPrompt(36));
Str := Session.io.GetInput(5, 5, 12, ''); Case Session.io.OneKeyRange(#13 + '?Q', 1, Total) of
'?': Begin
If Str = '?' Then Begin
Compress := Config.FCompress; Compress := Config.FCompress;
Total := ListFileAreas(Compress); Total := ListFileAreas(Compress);
End Else End;
Else
Break; Break;
End;
Until False; Until False;
A := strS2I(Str); A := Session.io.RangeValue;
If (A > 0) and (A <= Total) Then Begin If (A > 0) and (A <= Total) Then Begin
Reset (FBaseFile); Reset (FBaseFile);
@ -2611,93 +2613,39 @@ Var
Procedure Ascii_List; Procedure Ascii_List;
Var Var
A : LongInt; A : LongInt;
B : LongInt;
okSave : Byte; okSave : Byte;
Keys : String[20]; Keys : String[20];
Files : Cardinal;
Procedure FlagFile (Number: Integer);
Var
Count1 : Integer;
Count2 : Integer;
Begin Begin
ListType := 0; If Not Session.User.Access(FBase.DLACS) Then
strListFormat := Session.GetPrompt(42);
strDesc := Session.GetPrompt(43);
strExtDesc := Session.GetPrompt(45);
strUploader := Session.GetPrompt(437);
NextPage;
DrawPage;
If Not Found Then Exit;
Result := 2;
Keys := #13 + 'FNPQV';
If Session.User.Access(FBase.SysopACS) Then Keys := Keys + 'E';
Repeat
Session.io.OutFull (Session.GetPrompt(44));
Case Session.io.OneKey(Keys, True) of
'E' : Begin
DoEditor;
DrawPage;
End;
#13,
'N' : If LastPage Then
Break
Else Begin
NextPage;
DrawPage;
End;
'P' : Begin
PrevPage;
If CurPage = 1 Then
TopDesc := 0;
DrawPage;
End;
'Q' : Begin
Result := 1;
Break;
End;
'V' : Begin
Session.io.OutFull (Session.GetPrompt(358));
A := strS2I(Session.io.GetInput(2, 2, 12, ''));
If (A > 0) and (A <= ListSize) Then
If Not ArchiveView (FBase.Path + List[A].FileName) Then
Session.io.OutFullLn(Session.GetPrompt(191));
DrawPage;
End;
'F' : If Not Session.User.Access(FBase.DLACS) Then
Session.io.OutFullLn (Session.GetPrompt(224)) Session.io.OutFullLn (Session.GetPrompt(224))
Else Begin Else Begin
Repeat
If BatchNum = mysMaxBatchQueue Then Begin If BatchNum = mysMaxBatchQueue Then Begin
Session.io.OutFullLn (Session.GetPrompt(46)); Session.io.OutFullLn (Session.GetPrompt(46));
Break; Exit;
End; End;
Session.io.OutFull (Session.GetPrompt(357)); If (Number < 1) or (Number > ListSize) Then Exit;
A := strS2I(Session.io.GetInput(2, 2, 12, ''));
If (A < 1) or (A > ListSize) Then Break;
okSave := 0; okSave := 0;
Seek (FDirFile, List[A].RecPos); Seek (FDirFile, List[Number].RecPos);
Read (FDirFile, FDir); Read (FDirFile, FDir);
For A := 1 to BatchNum Do For Count1 := 1 to BatchNum Do
If FDir.FileName = Batch[A].FileName Then Begin If FDir.FileName = Batch[Count1].FileName Then Begin
Session.io.PromptInfo[1] := FDir.FileName; Session.io.PromptInfo[1] := FDir.FileName;
Session.io.PromptInfo[2] := strComma(Batch[A].Size); Session.io.PromptInfo[2] := strComma(Batch[Count1].Size);
Session.io.OutFullLn (Session.GetPrompt(54)); Session.io.OutFullLn (Session.GetPrompt(54));
For B := A to BatchNum Do For Count2 := Count1 to BatchNum Do
Batch[B] := Batch[B + 1]; Batch[Count2] := Batch[Count2 + 1];
Dec (BatchNum); Dec (BatchNum);
@ -2728,6 +2676,86 @@ Var
Else Else
Batch[BatchNum].Area := FilePos(FBaseFile); Batch[BatchNum].Area := FilePos(FBaseFile);
End; End;
End;
End;
Begin
ListType := 0;
Files := FileSize(FDirFile);
strListFormat := Session.GetPrompt(42);
strDesc := Session.GetPrompt(43);
strExtDesc := Session.GetPrompt(45);
strUploader := Session.GetPrompt(437);
NextPage;
DrawPage;
If Not Found Then Exit;
Result := 2;
Keys := #13 + 'FNPQV';
If Session.User.Access(FBase.SysopACS) Then Keys := Keys + 'E';
Repeat
Session.io.PromptInfo[1] := strI2S(Files);
Session.io.PromptInfo[2] := strI2S(BotPage);
Session.io.OutFull (Session.GetPrompt(44));
Case Session.io.OneKeyRange(Keys, 1, ListSize) of
#00 : Begin
FlagFile(Session.io.RangeValue);
DrawPage;
Continue;
End;
'E' : Begin
DoEditor;
DrawPage;
End;
#13,
'N' : If LastPage Then
Break
Else Begin
NextPage;
DrawPage;
End;
'P' : Begin
PrevPage;
If CurPage = 1 Then
TopDesc := 0;
DrawPage;
End;
'Q' : Begin
Result := 1;
Break;
End;
'V' : Begin
Session.io.OutFull (Session.GetPrompt(358));
Session.io.OneKeyRange('Q' + #13, 1, ListSize);
A := Session.io.RangeValue;
If (A > 0) and (A <= ListSize) Then
If Not ArchiveView (FBase.Path + List[A].FileName) Then
Session.io.OutFullLn(Session.GetPrompt(191));
DrawPage;
End;
'F' : Begin
Repeat
Session.io.OutFull (Session.GetPrompt(357));
Case Session.io.OneKeyRange('Q' + #13, 1, ListSize) of
#00 : FlagFile(Session.io.RangeValue);
'Q',
#13 : Break;
End;
Until False; Until False;
DrawPage; DrawPage;

View File

@ -4,7 +4,7 @@ Unit BBS_IO;
Interface Interface
{.$DEFINE UTF8} {.$DEFINE USEUTF8}
Uses Uses
{$IFDEF WINDOWS} {$IFDEF WINDOWS}
@ -122,56 +122,7 @@ Uses
bbs_General, bbs_General,
bbs_NodeInfo; bbs_NodeInfo;
Constructor TBBSIO.Create (Var Owner: Pointer); {$IFDEF USEUTF8}
Begin
Core := Owner;
FmtString := False;
FmtLen := 0;
FmtType := 0;
InMacro := False;
InMacroPos := 0;
InMacroStr := '';
AllowPause := False;
AllowMCI := True;
LocalInput := False;
AllowArrow := False;
IsArrow := False;
UseInField := True;
UseInLimit := False;
UseInSize := False;
InLimit := 0;
InSize := 0;
NoFile := False;
Graphics := 1;
PausePtr := 1;
LastMCIValue := '';
InputPos := 0;
GetKeyCallBack := NIL;
FillChar(OutBuffer, SizeOf(OutBuffer), 0);
OutBufPos := 0;
{$IFDEF WINDOWS}
If Not TBBSCore(Core).LocalMode Then
SocketEvent := WSACreateEvent;
{$ENDIF}
Term := TTermAnsi.Create(Screen);
End;
Destructor TBBSIO.Destroy;
Begin
{$IFDEF WINDOWS}
If Not TBBSCore(Core).LocalMode Then WSACloseEvent(SocketEvent);
{$ENDIF}
Term.Free;
Inherited Destroy;
End;
{$IFDEF UTF8}
Function UTF8Encode(Ch : LongInt) : String; Function UTF8Encode(Ch : LongInt) : String;
Const Const
CP437_Map : Array[0..255] of LongInt = ( CP437_Map : Array[0..255] of LongInt = (
@ -245,10 +196,59 @@ Begin
Result := ' '; Result := ' ';
End; End;
{$ENDIF}
Constructor TBBSIO.Create (Var Owner: Pointer);
Begin
Core := Owner;
FmtString := False;
FmtLen := 0;
FmtType := 0;
InMacro := False;
InMacroPos := 0;
InMacroStr := '';
AllowPause := False;
AllowMCI := True;
LocalInput := False;
AllowArrow := False;
IsArrow := False;
UseInField := True;
UseInLimit := False;
UseInSize := False;
InLimit := 0;
InSize := 0;
NoFile := False;
Graphics := 1;
PausePtr := 1;
LastMCIValue := '';
InputPos := 0;
GetKeyCallBack := NIL;
FillChar(OutBuffer, SizeOf(OutBuffer), 0);
OutBufPos := 0;
{$IFDEF WINDOWS}
If Not TBBSCore(Core).LocalMode Then
SocketEvent := WSACreateEvent;
{$ENDIF}
Term := TTermAnsi.Create(Screen);
End;
Destructor TBBSIO.Destroy;
Begin
{$IFDEF WINDOWS}
If Not TBBSCore(Core).LocalMode Then WSACloseEvent(SocketEvent);
{$ENDIF}
Term.Free;
Inherited Destroy;
End;
{$IFDEF USEUTF8}
Procedure TBBSIO.BufAddChar (Ch: Char); Procedure TBBSIO.BufAddChar (Ch: Char);
Const
ConvertUTF8 : Boolean = True;
Var Var
S : String; S : String;
C : Byte; C : Byte;
@ -257,7 +257,7 @@ Begin
Term.Process(Ch); Term.Process(Ch);
{$ENDIF} {$ENDIF}
If ConvertUTF8 Then Begin If Session.User.ThisUser.CodePage = 1 Then Begin
S := UTF8Encode(LongInt(Ch)); S := UTF8Encode(LongInt(Ch));
For C := 1 to Length(S) Do Begin For C := 1 to Length(S) Do Begin
@ -286,13 +286,13 @@ End;
{$ELSE} {$ELSE}
Procedure TBBSIO.BufAddChar (Ch: Char); Procedure TBBSIO.BufAddChar (Ch: Char);
Begin Begin
Term.Process(Ch);
OutBuffer[OutBufPos] := Ch; OutBuffer[OutBufPos] := Ch;
Inc (OutBufPos); Inc (OutBufPos);
If OutBufPos = TBBSIOBufferSize Then BufFlush; If OutBufPos = TBBSIOBufferSize Then BufFlush;
Term.Process(Ch);
End; End;
{$ENDIF} {$ENDIF}
@ -1622,14 +1622,24 @@ Function TBBSIO.OneKeyRange (Str: String; Lo, Hi: LongInt) : Char;
Var Var
Ch : Char; Ch : Char;
CurStr : String = ''; CurStr : String = '';
LoStr : String[10];
HiStr : String[10]; HiStr : String[10];
Field : Byte;
xPos : Byte;
Begin Begin
PurgeInputBuffer; PurgeInputBuffer;
RangeValue := -1; RangeValue := -1;
LoStr := strI2S(Lo);
HiStr := strI2S(Hi); HiStr := strI2S(Hi);
Field := Length(strI2S(Hi));
xPos := Screen.CursorX;
If UseInField and (Graphics = 1) Then Begin
AnsiColor (TBBSCore(Core).Theme.FieldColor2);
BufAddStr (strRep(Session.Theme.FieldChar, Field));
AnsiColor (TBBSCore(Core).Theme.FieldColor1);
AnsiMoveX (xPos);
End Else
UseInField := False;
Repeat Repeat
Ch := UpCase(GetKey); Ch := UpCase(GetKey);
@ -1637,39 +1647,46 @@ Begin
If (Pos(Ch, Str) > 0) and (CurStr = '') Then Begin If (Pos(Ch, Str) > 0) and (CurStr = '') Then Begin
Result := Ch; Result := Ch;
OutRawLn(Ch); OutRaw(Ch);
Exit; Break
End Else End Else
Case Ch of Case Ch of
#08 : If CurStr <> '' Then Begin #08 : If CurStr <> '' Then Begin
Dec (CurStr[0]); Dec (CurStr[0]);
OutRaw (#08#32#08);
If UseInField Then AnsiColor(TBBSCore(Core).Theme.FieldColor2);
BufAddStr (#8 + Session.Theme.FieldChar + #8);
If UseInField Then AnsiColor(TBBSCore(Core).Theme.FieldColor1);
End; End;
#13 : If CurStr <> '' Then Begin #13 : If CurStr <> '' Then Begin
RangeValue := strS2I(CurStr); RangeValue := strS2I(CurStr);
Result := #0; Result := #0;
OutRawLn(''); Break;
End Else
Exit; If Pos(#13, Str) > 0 Then Begin
Result := #13;
Break;
End; End;
'0'.. '0'..
'9' : If (strS2I(CurStr + Ch) >= Lo) and (strS2I(CurStr + Ch) <= Hi) Then Begin '9' : If (strS2I(CurStr + Ch) >= Lo) and (strS2I(CurStr + Ch) <= Hi) Then Begin
CurStr := CurStr + Ch; CurStr := CurStr + Ch;
If Length(CurStr) = Length(HiStr) Then Begin If Length(CurStr) = Length(HiStr) Then Begin
OutRawLn(Ch); OutRaw(Ch);
RangeValue := strS2I(CurStr); RangeValue := strS2I(CurStr);
Result := #0; Result := #0;
Exit; Break;
End Else End Else
OutRaw (Ch); OutRaw (Ch);
End; End;
End; End;
Until False; Until False;
OutFullLn ('|16');
End; End;
Function TBBSIO.GetInput (Field, Max, Mode: Byte; Default: String) : String; Function TBBSIO.GetInput (Field, Max, Mode: Byte; Default: String) : String;

View File

@ -39,9 +39,10 @@ Type
Function SpecialKey (Str: String) : Boolean; Function SpecialKey (Str: String) : Boolean;
Function MenuGetKey : Char; Function MenuGetKey : Char;
Function ShowMenu : Boolean; Function ShowMenu : Boolean;
Procedure GenerateMenu; Procedure GenerateMenu (Cols: Integer; Cmd: Boolean);
Procedure DoStandardMenu; Procedure DoStandardMenu;
Procedure DoLightBarMenu; Procedure DoLightBarMenu;
Procedure DoLBPromptMenu;
End; End;
Implementation Implementation
@ -139,6 +140,7 @@ Begin
'-' : Case Cmd[2] of '-' : Case Cmd[2] of
'D' : ToggleAccessFlags(CmdData, Session.User.ThisUser.AF2); 'D' : ToggleAccessFlags(CmdData, Session.User.ThisUser.AF2);
'F' : ToggleAccessFlags(CmdData, Session.User.ThisUser.AF1); 'F' : ToggleAccessFlags(CmdData, Session.User.ThisUser.AF1);
'G' : GenerateMenu(strS2I(CmdData), True);
'I' : TimerCount := strS2I(CmdData); 'I' : TimerCount := strS2I(CmdData);
'N' : Session.User.AcsOkFlag := Session.io.GetYN(CmdData, False); 'N' : Session.User.AcsOkFlag := Session.io.GetYN(CmdData, False);
'P' : Session.User.AcsOkFlag := Session.io.GetPW(Copy(CmdData, 1, Pos(';', CmdData) - 1), Session.GetPrompt(417), 'P' : Session.User.AcsOkFlag := Session.io.GetPW(Copy(CmdData, 1, Pos(';', CmdData) - 1), Session.GetPrompt(417),
@ -433,7 +435,7 @@ Begin
(Str = 'TIMER'); (Str = 'TIMER');
End; End;
Procedure TMenuEngine.GenerateMenu; Procedure TMenuEngine.GenerateMenu (Cols: Integer; Cmd: Boolean);
Var Var
Format : Byte; Format : Byte;
Listed : Word; Listed : Word;
@ -445,8 +447,11 @@ Begin
Data.Item[Count]^.TimerShow := True; Data.Item[Count]^.TimerShow := True;
End; End;
If ShowMenu Then Begin If (Cols < 0) or (Cols > 4) Then
Case Data.Info.DispCols of Cols := Data.Info.DispCols;
If ShowMenu And (Cols > 0) Then Begin
Case Cols of
1 : Format := 79; 1 : Format := 79;
2 : Format := 39; 2 : Format := 39;
3 : Format := 26; 3 : Format := 26;
@ -467,11 +472,11 @@ Begin
Then Continue; Then Continue;
If Data.Item[Count]^.HotKey = 'LINEFEED' Then Begin If Data.Item[Count]^.HotKey = 'LINEFEED' Then Begin
If Listed MOD Data.Info.DispCols <> 0 Then Session.io.OutRawLn(''); If Listed MOD Cols <> 0 Then Session.io.OutRawLn('');
Session.io.OutFullLn(Data.Item[Count]^.Text); Session.io.OutFullLn(Data.Item[Count]^.Text);
While Listed Mod Data.Info.DispCols <> 0 Do Inc(Listed); While Listed Mod Cols <> 0 Do Inc(Listed);
End Else Begin End Else Begin
Inc (Listed); Inc (Listed);
@ -483,21 +488,23 @@ Begin
While Screen.CursorX < Format Do While Screen.CursorX < Format Do
Session.io.BufAddChar(' '); Session.io.BufAddChar(' ');
If Listed MOD Data.Info.DispCols = 0 Then If Listed MOD Cols = 0 Then
TBBSCore(Owner).io.OutFullLn (''); TBBSCore(Owner).io.OutFullLn ('');
End; End;
End; End;
If Listed MOD Data.Info.DispCols <> 0 Then If Listed MOD Cols <> 0 Then
TBBSCore(Owner).io.OutFullLn (''); TBBSCore(Owner).io.OutFullLn ('');
TBBSCore(Owner).io.BufFlush; TBBSCore(Owner).io.BufFlush;
End; End;
If Not Cmd Then Begin
If ExecuteByHotKey('AFTER', 0) = 2 Then Exit; If ExecuteByHotKey('AFTER', 0) = 2 Then Exit;
If Data.Info.Footer <> '' Then If Data.Info.Footer <> '' Then
TBBSCore(Owner).io.OutFull(Data.Info.Footer); TBBSCore(Owner).io.OutFull(Data.Info.Footer);
End;
TBBSCore(Owner).io.BufFlush; TBBSCore(Owner).io.BufFlush;
End; End;
@ -542,7 +549,7 @@ Begin
If Not ViewOnly Then If Not ViewOnly Then
If ExecuteByHotKey('EVERY', 0) = 2 Then Exit; If ExecuteByHotKey('EVERY', 0) = 2 Then Exit;
If ReDraw Then GenerateMenu; If ReDraw Then GenerateMenu(-1, False);
TBBSCore(Owner).io.AllowArrow := True; TBBSCore(Owner).io.AllowArrow := True;
@ -626,6 +633,226 @@ Begin
End; End;
End; End;
Procedure TMenuEngine.DoLBPromptMenu;
Var
CurItem : Word = 0;
ItemX : Byte = 1;
ItemY : Byte = 1;
MaxLBSize : Byte = 1;
MaxDESize : Byte = 1;
Procedure FindNextItem;
Var
SavedItem : Integer;
Wrapped : Boolean = False;
Begin
SavedItem := CurItem;
Repeat
Inc (CurItem);
If (CurItem = SavedItem) and Wrapped Then
Break
Else
If (CurItem > Data.NumItems) Then Begin
CurItem := 1;
If Wrapped Then Break;
CurItem := 1;
Wrapped := True;
End;
If Not SpecialKey(Data.Item[CurItem]^.HotKey) Then
If TBBSCore(Owner).User.Access(Data.Item[CurItem]^.Access) Then Break;
Until False;
End;
Procedure FindPrevItem;
Var
SavedItem : Integer;
Wrapped : Boolean = False;
Begin
SavedItem := CurItem;
Repeat
Dec (CurItem);
If (CurItem = SavedItem) and Wrapped Then
Break
Else
If (CurItem < 1) Then Begin
CurItem := Data.NumItems;
If Wrapped Then Break;
CurItem := Data.NumItems;
Wrapped := True;
End;
If Not SpecialKey(Data.Item[CurItem]^.HotKey) Then
If TBBSCore(Owner).User.Access(Data.Item[CurItem]^.Access) Then Break;
Until False;
End;
Function FindByKey (Str: String) : Boolean;
Var
SavedItem : Integer;
Wrapped : Boolean = False;
Begin
SavedItem := CurItem;
Result := False;
Repeat
Inc (CurItem);
If (CurItem = SavedItem) and Wrapped Then
Break
Else
If (CurItem > Data.NumItems) Then Begin
CurItem := 1;
If Wrapped Then Begin
CurItem := SavedItem;
Break;
End;
CurItem := 1;
Wrapped := True;
End;
If (Length(Data.Item[CurItem]^.HotKey) >= Length(Str)) And (strUpper(Copy(Data.Item[CurItem]^.HotKey, 1, Length(Str))) = Str) And Not SpecialKey(Data.Item[CurItem]^.HotKey) And TBBSCore(Owner).User.Access(Data.Item[CurItem]^.Access) Then Begin
Result := True;
Break;
End;
Until False;
If (Length(Data.Item[CurItem]^.HotKey) >= Length(Str)) And (strUpper(Copy(Data.Item[CurItem]^.HotKey, 1, Length(Str))) = Str) And Not SpecialKey(Data.Item[CurItem]^.HotKey) And TBBSCore(Owner).User.Access(Data.Item[CurItem]^.Access) Then
Result := True;
End;
Procedure DrawItem;
Begin
If ItemY >= Session.User.ThisUser.ScreenSize {24} Then Begin
Session.io.OutRawLn('');
//ItemY := Session.User.ThisUser.ScreenSize - 1;
Dec (ItemY);
End;
If Data.Item[CurItem]^.TextLo <> '' Then Begin
IF Data.Item[CurItem]^.X <> 0 Then
Session.io.AnsiGotoXY (Data.Item[CurItem]^.X, ItemY + 1)
Else
Session.io.AnsiGotoXY (ItemX, ItemY + 1);
Session.io.OutFull(Data.Item[CurItem]^.TextLo);
If Screen.CursorX > MaxDESize Then
MaxDESize := Screen.CursorX;
While Screen.CursorX < MaxDESize Do
Session.io.OutRaw(' ');
End;
Session.io.AnsiGotoXY (ItemX, ItemY);
Session.io.OutFull (Data.Item[CurItem]^.TextHi);
If Screen.CursorX > MaxLBSize Then
MaxLBSize := Screen.CursorX;
While Screen.CursorX < MaxLBSize Do
Session.io.OutRaw(' ');
End;
Var
HotKey : String;
Ch : Char;
Begin
While Not TBBSCore(Owner).ShutDown Do Begin
If Not ViewOnly Then
If ExecuteByHotKey('EVERY', 0) = 2 Then Exit;
If ReDraw Then GenerateMenu(-1, False);
ItemX := Screen.CursorX;
ItemY := Screen.CursorY;
TBBSCore(Owner).io.AllowArrow := True;
If SetAction Then
If Data.Info.NodeStatus <> '' Then
Set_Node_Action(Data.Info.NodeStatus)
Else
Set_Node_Action(TBBSCore(Owner).GetPrompt(346));
HotKey := '';
If CurItem = 0 Then FindNextItem;
DrawItem;
While Not TBBSCore(Owner).ShutDown Do Begin
Ch := MenuGetKey;
If TBBSCore(Owner).ShutDown Then Exit;
If UseTimer And (Ch = #02) Then Begin
If TimerReload Then Exit;
If ReDraw Then Break;
End;
If Session.io.IsArrow Then Begin
Case Ch of
#72,
#75 : Begin
FindPrevItem;
DrawItem;
End;
#77,
#80 : Begin
FindNextItem;
DrawItem;
End;
End;
End Else Begin
Case Ch of
#13 : Begin
HotKey := Data.Item[CurItem]^.HotKey;
Break;
End;
#32..
#126: Begin
HotKey := HotKey + UpCase(Ch);
If Not FindByKey(HotKey) Then Begin
HotKey := UpCase(Ch);
If Not FindByKey(HotKey) Then
HotKey := '';
End;
DrawItem;
If (HotKey <> '') And (HotKey = Data.Item[CurItem]^.HotKey) And UseHotKeys Then
Break;
End;
End;
End;
End;
Session.io.OutFullLn('|CR');
If ViewOnly Then Exit;
If Not TBBSCore(Owner).ShutDown Then
If ExecuteByHotKey(HotKey, 0) = 2 Then
Exit;
End;
End;
Function TMenuEngine.MenuGetKey : Char; Function TMenuEngine.MenuGetKey : Char;
Var Var
LastSec : LongInt; LastSec : LongInt;
@ -1034,6 +1261,10 @@ Begin
DoLightBarMenu DoLightBarMenu
Else Else
DoStandardMenu; DoStandardMenu;
3 : If TBBSCore(Owner).io.Graphics > 0 Then
DoLBPromptMenu
Else
DoStandardMenu;
End; End;
Exit; Exit;
@ -1099,6 +1330,10 @@ Begin
DoLightBarMenu DoLightBarMenu
Else Else
DoStandardMenu; DoStandardMenu;
3 : If TBBSCore(Owner).io.Graphics > 0 Then
DoLBPromptMenu
Else
DoStandardMenu;
End; End;
End; End;

View File

@ -388,7 +388,6 @@ Var
Count : LongInt; Count : LongInt;
Total : Word; Total : Word;
Old : RecMessageBase; Old : RecMessageBase;
Str : String[5];
Compress : Boolean; Compress : Boolean;
Begin Begin
Compress := Config.MCompress; Compress := Config.MCompress;
@ -471,16 +470,17 @@ Begin
Repeat Repeat
Session.io.OutFull (Session.GetPrompt(102)); Session.io.OutFull (Session.GetPrompt(102));
Str := Session.io.GetInput(5, 5, 12, ''); Case Session.io.OneKeyRange(#13 + '?Q', 1, Total) of
'?': Begin
If Str = '?' Then Begin
Compress := Config.MCompress; Compress := Config.MCompress;
Total := ListAreas(Compress); Total := ListAreas(Compress);
End Else End;
Else
Break; Break;
End;
Until False; Until False;
Count := strS2I(Str); Count := Session.io.RangeValue;
If (Count > 0) and (Count <= Total) Then Begin If (Count > 0) and (Count <= Total) Then Begin
Reset (MBaseFile); Reset (MBaseFile);
@ -671,7 +671,7 @@ End;
Procedure TMsgBase.MessageGroupChange (Ops : String; FirstBase, Intro : Boolean); Procedure TMsgBase.MessageGroupChange (Ops : String; FirstBase, Intro : Boolean);
Var Var
A : Word; Count : Word;
Total : Word; Total : Word;
tGroup : RecGroup; tGroup : RecGroup;
tMBase : RecMessageBase; tMBase : RecMessageBase;
@ -684,16 +684,16 @@ Begin
If (Ops = '+') or (Ops = '-') Then Begin If (Ops = '+') or (Ops = '-') Then Begin
Reset (GroupFile); Reset (GroupFile);
A := Session.User.ThisUser.LastMGroup - 1; Count := Session.User.ThisUser.LastMGroup - 1;
Repeat Repeat
Case Ops[1] of Case Ops[1] of
'+' : Inc(A); '+' : Inc(Count);
'-' : Dec(A); '-' : Dec(Count);
End; End;
{$I-} {$I-}
Seek (GroupFile, A); Seek (GroupFile, Count);
Read (GroupFile, Group); Read (GroupFile, Group);
{$I+} {$I+}
@ -804,9 +804,11 @@ Begin
Else Begin Else Begin
Session.io.OutFull (Session.GetPrompt(177)); Session.io.OutFull (Session.GetPrompt(177));
A := strS2I(Session.io.GetInput(5, 5, 11, '')); Session.io.OneKeyRange(#13 + 'Q', 1, Total);
If (A > 0) and (A <= Total) Then Begin Count := Session.io.RangeValue;
If (Count > 0) and (Count <= Total) Then Begin
Total := 0; Total := 0;
Reset (GroupFile); Reset (GroupFile);
@ -816,7 +818,7 @@ Begin
If Not Group.Hidden And Session.User.Access(Group.ACS) Then Inc(Total); If Not Group.Hidden And Session.User.Access(Group.ACS) Then Inc(Total);
If A = Total Then Break; If Count = Total Then Break;
Until False; Until False;
Session.User.ThisUser.LastMGroup := FilePos(GroupFile); Session.User.ThisUser.LastMGroup := FilePos(GroupFile);
@ -2273,6 +2275,9 @@ Var
MsgBase^.SeekFirst(A); MsgBase^.SeekFirst(A);
MsgBase^.MsgStartup; MsgBase^.MsgStartup;
Session.io.PromptInfo[1] := strI2S(MsgBase^.GetMsgNum);
Session.io.PromptInfo[2] := strI2S(MsgBase^.GetHighMsgNum);
End; End;
'M' : Begin 'M' : Begin
If MoveMessage(False) Then If MoveMessage(False) Then
@ -2428,7 +2433,9 @@ Begin
Session.io.OutFull (Session.GetPrompt(338)); Session.io.OutFull (Session.GetPrompt(338));
MsgNum := strS2I(Session.io.GetInput(6, 6, 12, '')); Session.io.OneKeyRange(#13, 1, MsgBase^.GetHighMsgNum);
MsgNum := Session.io.RangeValue;
End; End;
Set_Node_Action (Session.GetPrompt(348)); Set_Node_Action (Session.GetPrompt(348));

View File

@ -125,7 +125,6 @@ Var
ToNode : Byte; ToNode : Byte;
A, B, C : Byte; A, B, C : Byte;
Temp : ChatRec; Temp : ChatRec;
Str : String[3];
NodeMsgFile : File of NodeMsgRec; NodeMsgFile : File of NodeMsgRec;
NodeMsg : NodeMsgRec; NodeMsg : NodeMsgRec;
SkipCurrent : Boolean = False; SkipCurrent : Boolean = False;
@ -133,11 +132,15 @@ Begin
If Data = '' Then Begin If Data = '' Then Begin
Repeat Repeat
Session.io.OutFull (Session.GetPrompt(146)); Session.io.OutFull (Session.GetPrompt(146));
Str := Session.io.GetInput(3, 3, 12, '');
If Str = '?' Then WhosOnline Else Break; Case Session.io.OneKeyRange('?Q', 1, Config.INetTNNodes) of
#00 : Break;
'?' : WhosOnline;
'Q' : Break;
End;
Until False; Until False;
ToNode := strS2I(Str); ToNode := Session.io.RangeValue;
If (ToNode < 0) or (ToNode > Config.INetTNNodes) Then Begin If (ToNode < 0) or (ToNode > Config.INetTNNodes) Then Begin
Session.io.OutFullLn (Session.GetPrompt(147)); Session.io.OutFullLn (Session.GetPrompt(147));

View File

@ -108,6 +108,7 @@ Begin
ThisUser.LastMGroup := Config.StartMGroup; ThisUser.LastMGroup := Config.StartMGroup;
ThisUser.UseLBQuote := True; ThisUser.UseLBQuote := True;
ThisUser.UseFulLChat := True; ThisUser.UseFulLChat := True;
ThisUser.CodePage := Config.StartCodePage;
IgnoreGroup := False; IgnoreGroup := False;
InChat := False; InChat := False;
@ -1193,11 +1194,11 @@ Begin
Halt(0); Halt(0);
End; End;
// Session.io.AnsiClear; //Session.io.OutFullLn('|CL|CR' + strPadC(mysSoftwareID + ' BBS Version ' + mysVersion + ' for ' + OSID, 79, ' '));
// Session.io.OutFullLn('|CR' + strPadC(mysSoftwareID + ' BBS v' + mysVersion + ' [' + OSID + '] : Node |ND', 79, ' '));
//Session.io.OutFullLn(strPadC(CopyID, 79, ' ')); //Session.io.OutFullLn(strPadC(CopyID, 79, ' '));
//Session.io.OutFullLn('|CR' + strPadC(mysWebSite, 79, ' '));
Session.io.OutFullLn ('|CL' + mysSoftwareID + ' BBS v' + mysVersion + ' [' + OSID + '] : Node |ND'); Session.io.OutFullLn ('|CL' + mysSoftwareID + ' BBS Version ' + mysVersion + ' for ' + OSID + ' : Node |ND');
Session.io.OutFullLn (CopyID); Session.io.OutFullLn (CopyID);
If Config.DefTermMode = 0 Then If Config.DefTermMode = 0 Then

View File

@ -19,7 +19,6 @@ Uses
Procedure PageUserForChat; Procedure PageUserForChat;
Var Var
Str : String;
ToNode : Byte; ToNode : Byte;
ReqType : Byte = 8; ReqType : Byte = 8;
TempChat : ChatRec; TempChat : ChatRec;
@ -27,13 +26,14 @@ Begin
Repeat Repeat
Session.io.OutFull (Session.GetPrompt(479)); Session.io.OutFull (Session.GetPrompt(479));
Str := Session.io.GetInput(3, 3, 12, ''); Case Session.io.OneKeyRange('Q?', 1, Config.INetTNNodes) of
#00 : Break;
If Str = '?' Then WhosOnline Else 'Q' : Exit;
If Str = 'Q' Then Exit Else Break; '?' : WhosOnline;
End;
Until False; Until False;
ToNode := strS2I(Str); ToNode := Session.io.RangeValue;
If (Not GetChatRecord(ToNode, TempChat)) or (ToNode = Session.NodeNum) or If (Not GetChatRecord(ToNode, TempChat)) or (ToNode = Session.NodeNum) or
(Not TempChat.Active) or (Not TempChat.Available) Then Begin (Not TempChat.Active) or (Not TempChat.Available) Then Begin

View File

@ -107,6 +107,7 @@
; &1 = size, &2 = date, &3 = DLs, &4 = desc, &5 = uploader ; &1 = size, &2 = date, &3 = DLs, &4 = desc, &5 = uploader
043 |07|$D29 |&4 043 |07|$D29 |&4
; File listing pause prompt ; File listing pause prompt
; &1 = total files &1 = current file
044 |CR|01[|10þ|01] |09Pause: |01(|07N|01)|09ext, |01(|07P|01)|09rev, |01(|07F|01)|09lag, |01(|07V|01)|09iew, or |01(|07Q|01)|09uit? |07 044 |CR|01[|10þ|01] |09Pause: |01(|07N|01)|09ext, |01(|07P|01)|09rev, |01(|07F|01)|09lag, |01(|07V|01)|09iew, or |01(|07Q|01)|09uit? |07
; Standard file list, ext desc: &4 = description ; Standard file list, ext desc: &4 = description
045 |07|$D29 |&4 045 |07|$D29 |&4

View File

@ -1,5 +1,5 @@
// ==================================================================== // ====================================================================
// Mystic BBS Software Copyright 1997-2012 By James Coyle // Mystic BBS Software Copyright 1997-2013 By James Coyle
// ==================================================================== // ====================================================================
// //
// This file is part of Mystic BBS. // This file is part of Mystic BBS.

View File

@ -1,5 +1,5 @@
// ==================================================================== // ====================================================================
// Mystic BBS Software Copyright 1997-2012 By James Coyle // Mystic BBS Software Copyright 1997-2013 By James Coyle
// ==================================================================== // ====================================================================
// //
// This file is part of Mystic BBS. // This file is part of Mystic BBS.

View File

@ -1,5 +1,5 @@
// ==================================================================== // ====================================================================
// Mystic BBS Software Copyright 1997-2012 By James Coyle // Mystic BBS Software Copyright 1997-2013 By James Coyle
// ==================================================================== // ====================================================================
// //
// This file is part of Mystic BBS. // This file is part of Mystic BBS.

View File

@ -1,7 +1,7 @@
Program MUTIL; Program MUTIL;
// ==================================================================== // ====================================================================
// Mystic BBS Software Copyright 1997-2012 By James Coyle // Mystic BBS Software Copyright 1997-2013 By James Coyle
// ==================================================================== // ====================================================================
// //
// This file is part of Mystic BBS. // This file is part of Mystic BBS.

View File

@ -1,5 +1,5 @@
// ==================================================================== // ====================================================================
// Mystic BBS Software Copyright 1997-2012 By James Coyle // Mystic BBS Software Copyright 1997-2013 By James Coyle
// ==================================================================== // ====================================================================
// //
// This file is part of Mystic BBS. // This file is part of Mystic BBS.

View File

@ -1,5 +1,5 @@
// ==================================================================== // ====================================================================
// Mystic BBS Software Copyright 1997-2012 By James Coyle // Mystic BBS Software Copyright 1997-2013 By James Coyle
// ==================================================================== // ====================================================================
// //
// This file is part of Mystic BBS. // This file is part of Mystic BBS.

View File

@ -1,6 +1,6 @@
{ {
=========================================================================== ===========================================================================
Mystic BBS Software Copyright (C) 1997-2012 By James Coyle Mystic BBS Software Copyright (C) 1997-2013 By James Coyle
=========================================================================== ===========================================================================
File | RECORDS.PAS File | RECORDS.PAS
Desc | This file holds the data file records for all data files used Desc | This file holds the data file records for all data files used
@ -22,8 +22,9 @@
Const Const
mysSoftwareID = 'Mystic'; // no idea mysSoftwareID = 'Mystic'; // no idea
mysCopyYear = '1997-2012'; // its been a long time! mysCopyYear = '1997-2013'; // its been a long time!
mysVersion = '1.10 A25'; // current version mysWebsite = 'sourceforge.net/projects/mysticbbs';
mysVersion = '1.10 A26'; // current version
mysDataChanged = '1.10 A11'; // version of last records change mysDataChanged = '1.10 A11'; // version of last records change
{$IFDEF WIN32} {$IFDEF WIN32}
@ -278,7 +279,8 @@ Type
// UNSORTED // UNSORTED
inetTNHidden : Boolean; inetTNHidden : Boolean;
ThemeOnStart : Boolean; ThemeOnStart : Boolean;
Reserved : Array[1..844] of Char; StartCodePage : Byte;
Reserved : Array[1..843] of Char;
End; End;
Const Const
@ -357,7 +359,8 @@ Type
UseFullChat : Boolean; { use full screen teleconference } UseFullChat : Boolean; { use full screen teleconference }
Credits : LongInt; Credits : LongInt;
Protocol : Char; Protocol : Char;
Reserved : Array[1..389] of Byte; CodePage : Byte; // 0 = CP437, 1 = UTF8
Reserved : Array[1..388] of Byte;
End; End;
// day of week // day of week

View File

@ -2431,3 +2431,90 @@
a message number on the prompt to automatically jump to that message. a message number on the prompt to automatically jump to that message.
<ALPHA 25 RELEASED> <ALPHA 25 RELEASED>
! After doing a list of message in the standard message reader, the
current message number on the prompt will no longer show the wrong
message number.
+ Added two MCI codes to prompt #44: &1 total files in base &2 last listed
file number.
+ In a standard generated menu you can now set the "display columns" to
zero which will cause the generated menu to only show the menu prompt.
+ Added new menu command: -G. This command shows the currently loaded
internally generated menu. The optional data field will determine the
number of display columns to use to format the menu. The -G command does
not display the menu prompt or execute "EVERY" menu commands.
+ Added a new menu type that can be created in the menu editor. You can
now set a "Lightbar/Prompt" type menu, which will allow you to create
menus similar to the old Searchlight style with a lightbar prompt. Users
can scroll through commands with the arrow keys or also search by simply
typing in letters. Our version supports commands with hotkeys that
contain more than one character among other things that Searchlight
didn't do.
If the user has hotkeys enabled, or the menu forces hotkeys, the command
will be executed as soon as a match of a hotkey is inputted from the user.
If the user has hotkeys disabled, or the menu forces longkeys, then the
user will always have to press enter to execute the selected command.
Each menu item is created similar to a standard type menu, with the the
following changes:
1. The "Lightbar Hi" text contains the look of the selected lightbar
command. The location prompt will be generated where the cursor
is after the menu prompt is displayed.
2. The "Lightbar Lo" text contains the description that will be
displayed below the currently selected command. If this is blank
the extended description will not be used.
The description will automatically be aligned below the lightbar
command, unless the "X" value of the command is defined. If the X
is not equal to 0, Mystic will print the description at that X
column instead.
A new menu has been included with the default installation called
testlbprompt.mnu. Please use this to experiment with these types of
menus if it interests you.
+ The smart input used by the standard message base reader to jump between
messages now creates an input field according to the selected theme. You
can of course turn it off for specific prompts using the IF MCI code if
you don't like it.
+ The message base change command now uses the smart input function for
input while prompting to select a message base.
+ The message group change command now uses the smart input function for
input while prompting to select a message group.
+ The file base change command now uses the smart input function for input
while prompting to select a file base.
+ The file group change command now uses the smart input function for input
while prompting to select a file group.
+ Rewrote the file tagging system in the standard file listing. The old
way still works, by pressing F to flag a file. However, you can now
just type in the file number to add or remove a file from your batch
queue without every pressing the F key.
+ The F flag command now uses smart input when prompting for the file number
to add/remove from queue (in standard file listing)
+ The V view command now uses smart input when prompting for the file number
to view in the standard file listing.
+ Sending a node message will now use the smart input function when
prompting for the node number.
+ Paging a user for user/user chat now uses the smart input function.
+ When selecting "Forward" reading, Mystic now uses the smart input
function to prompt for the message start number.
<ALPHA 26 RELEASED>