Alpha 20 dev begins

This commit is contained in:
mysticbbs 2012-09-22 17:38:56 -04:00
parent 222bc9a5fa
commit 9b0339662e
16 changed files with 144 additions and 66 deletions

View File

@ -4806,3 +4806,33 @@
! Fixed a bug that could corrupt a message and/or crash when editing a ! Fixed a bug that could corrupt a message and/or crash when editing a
message with a lot of lines. message with a lot of lines.
+ New option: "Ask Theme" in the General Settings. If this is set to true
Mystic will prompt the user to select a theme after the graphics are
detected upon each connection.
+ Added new MPL function: Real2Str this takes a string and decimal place
value. Example:
Var
R : Real;
Begin
R := 1234.1234;
WriteLn (Real2Str(R, 2)); // Will print 1234.12
End
+ The GE menu command (edit user settings) option 14 (select theme) can now
have a section option which specifies the base filename of a theme. For
example, if the theme filename is "english" you can do:
Menu command: GE
Data: 14 english
This will cause the theme to be selected automatically, without prompting
the user for anything. If a second parameter is not supplied, the user
will be prompted to select a theme.
+ Copy/Paste is now added/fixed for menu commands and menu execution lists
in the new menu editor.
+ NodeSpy in Windows now uses OS named pipes instead of Disk I/O.

View File

@ -314,6 +314,8 @@ Var
List : TAnsiMenuList; List : TAnsiMenuList;
Form : TAnsiMenuForm; Form : TAnsiMenuForm;
Topic : String; Topic : String;
CopyCmd : RecMenuCmd;
HasCopy : Boolean = False;
Procedure MakeList; Procedure MakeList;
Var Var
@ -400,7 +402,18 @@ Begin
List.Open (2, 15, 79, 21); List.Open (2, 15, 79, 21);
Case List.ExitCode of Case List.ExitCode of
'/' : Case GetCommandOption(10, 'I-Insert|D-Delete|') of '/' : Case GetCommandOption(10, 'I-Insert|D-Delete|C-Copy|P-Paste|') of
'C' : If List.Picked <> List.ListMax Then Begin
CopyCmd := Menu.Item[Num]^.CmdData[List.Picked]^;
HasCopy := True;
End;
'P' : If HasCopy Then Begin
Menu.InsertCommand(Num, List.Picked);
Menu.Item[Num]^.CmdData[List.Picked]^ := CopyCmd;
Changed := True;
End;
'I' : Begin 'I' : Begin
Menu.InsertCommand(Num, List.Picked); Menu.InsertCommand(Num, List.Picked);
Changed := True; Changed := True;

View File

@ -77,9 +77,9 @@ Begin
Box := TAnsiMenuBox.Create; Box := TAnsiMenuBox.Create;
Form := TAnsiMenuForm.Create; Form := TAnsiMenuForm.Create;
Box.Open (5, 5, 75, 17); Box.Open (5, 5, 75, 18);
VerticalLine (24, 7, 15); VerticalLine (24, 7, 16);
VerticalLine (67, 7, 12); VerticalLine (67, 7, 12);
Form.AddStr ('B', ' BBS Name', 14, 7, 26, 7, 10, 25, 30, @Config.BBSName, Topic); Form.AddStr ('B', ' BBS Name', 14, 7, 26, 7, 10, 25, 30, @Config.BBSName, Topic);
@ -90,7 +90,8 @@ Begin
Form.AddStr ('F', ' Feedback To', 11, 12, 26, 12, 13, 25, 30, @Config.FeedbackTo, Topic); Form.AddStr ('F', ' Feedback To', 11, 12, 26, 12, 13, 25, 30, @Config.FeedbackTo, Topic);
Form.AddStr ('A', ' Start Menu', 12, 13, 26, 13, 12, 20, 20, @Config.DefStartMenu, Topic); Form.AddStr ('A', ' Start Menu', 12, 13, 26, 13, 12, 20, 20, @Config.DefStartMenu, Topic);
Form.AddStr ('H', ' Theme', 17, 14, 26, 14, 7, 20, 20, @Config.DefThemeFile, Topic); Form.AddStr ('H', ' Theme', 17, 14, 26, 14, 7, 20, 20, @Config.DefThemeFile, Topic);
Form.AddTog ('E', ' Terminal', 14, 15, 26, 15, 10, 10, 0, 3, 'Ask Detect Detect/Ask ANSI', @Config.DefTermMode, Topic); Form.AddBol ('K', ' Ask Theme', 13, 15, 26, 15, 11, 3, @Config.ThemeOnStart, Topic + 'Ask theme each connection');
Form.AddTog ('E', ' Terminal', 14, 16, 26, 16, 10, 10, 0, 3, 'Ask Detect Detect/Ask ANSI', @Config.DefTermMode, Topic);
Form.AddBol ('L', ' Chat Logging', 53, 7, 69, 7, 14, 3, @Config.ChatLogging, Topic); Form.AddBol ('L', ' Chat Logging', 53, 7, 69, 7, 14, 3, @Config.ChatLogging, Topic);
Form.AddByte ('R', ' Hours Start', 54, 8, 69, 8, 13, 2, 0, 24, @Config.ChatStart, Topic); Form.AddByte ('R', ' Hours Start', 54, 8, 69, 8, 13, 2, 0, 24, @Config.ChatStart, Topic);

View File

@ -356,26 +356,28 @@ Begin
End; End;
Function TBBSCore.LoadThemeData (Str: String) : Boolean; Function TBBSCore.LoadThemeData (Str: String) : Boolean;
Var
TempTheme : RecTheme;
Begin Begin
Result := False; Result := False;
Reset (ThemeFile); Reset (ThemeFile);
While Not Eof(ThemeFile) Do Begin While Not Eof(ThemeFile) Do Begin
Read (ThemeFile, Theme); Read (ThemeFile, TempTheme);
{$IFDEF FS_SENSITIVE} {$IFDEF FS_SENSITIVE}
If Theme.FileName = Str Then Begin If TempTheme.FileName = Str Then Begin
{$ELSE} {$ELSE}
If strUpper(Theme.FileName) = strUpper(Str) Then Begin If strUpper(TempTheme.FileName) = strUpper(Str) Then Begin
{$ENDIF} {$ENDIF}
If Not FileExist(Config.DataPath + Theme.FileName + '.thm') Then Break; If Not FileExist(Config.DataPath + TempTheme.FileName + '.thm') Then Break;
{$I-} Close (PromptFile); {$I+} {$I-} Close (PromptFile); {$I+}
If IoResult <> 0 Then; If IoResult <> 0 Then;
Assign (PromptFile, Config.DataPath + Theme.FileName + '.thm'); Assign (PromptFile, Config.DataPath + TempTheme.FileName + '.thm');
Result := ioReset(PromptFile, SizeOf(RecPrompt), fmRWDN); Result := ioReset(PromptFile, SizeOf(RecPrompt), fmRWDN);
@ -384,6 +386,8 @@ Begin
End; End;
Close (ThemeFile); Close (ThemeFile);
If Result Then Theme := TempTheme;
End; End;
End. End.

View File

@ -1926,7 +1926,7 @@ Begin
While Input.KeyPressed Do Input.ReadKey; While Input.KeyPressed Do Input.ReadKey;
{$ENDIF} {$ENDIF}
{$IFDEF WINDOWS} {$IFDEF WINDOWS}
If Not TBBSCore(Core).LocalMode Then TBBSCore(Core).Client.PurgeInputData; If Not TBBSCore(Core).LocalMode Then TBBSCore(Core).Client.PurgeInputData(True);
{$ENDIF} {$ENDIF}
End; End;

View File

@ -190,7 +190,7 @@ Begin
'1' : ShowBBSHistory(strS2I(CmdData)); '1' : ShowBBSHistory(strS2I(CmdData));
'A' : View_Directory(CmdData, 0); 'A' : View_Directory(CmdData, 0);
'D' : Session.io.OutFile (CmdData, True, 0); 'D' : Session.io.OutFile (CmdData, True, 0);
'E' : Session.User.Edit_User_Settings(strS2I(CmdData)); 'E' : Session.User.EditUserSettings(CmdData);
'H', 'H',
'I' : Begin 'I' : Begin
If Cmd[2] = 'H' Then Begin If Cmd[2] = 'H' Then Begin
@ -304,7 +304,7 @@ Begin
Session.io.OutFile('newuser', True, 0); Session.io.OutFile('newuser', True, 0);
If Session.io.GetYN(Session.GetPrompt(269), True) Then Begin If Session.io.GetYN(Session.GetPrompt(269), True) Then Begin
Session.User.CreateNewUser(''); Session.User.CreateNewUser('');
Session.User.User_Logon2; Session.User.UserLogon2;
MenuName := Config.MatrixMenu; MenuName := Config.MatrixMenu;
Result := True; Result := True;

View File

@ -980,11 +980,11 @@ Begin
TempStr := WrapData + ' ' + TempStr; TempStr := WrapData + ' ' + TempStr;
End; End;
strWrap (TempStr, WrapData, 74); strWrap (TempStr, WrapData, 75);
WriteLn (QuoteFile, Initials + Copy(TempStr, 1, 74)); WriteLn (QuoteFile, Initials + Copy(TempStr, 1, 75));
End Else End Else
WriteLn (QuoteFile, Initials + Copy(TempStr, 1, 74)); WriteLn (QuoteFile, Initials + Copy(TempStr, 1, 75));
End; End;
Close (QuoteFile); Close (QuoteFile);

View File

@ -61,12 +61,12 @@ Type
Procedure GetOption1 (Edit: Boolean); Procedure GetOption1 (Edit: Boolean);
Procedure GetOption2 (Edit: Boolean); Procedure GetOption2 (Edit: Boolean);
Procedure GetOption3 (Edit: Boolean); Procedure GetOption3 (Edit: Boolean);
Procedure GetLanguage; Procedure GetTheme;
Procedure User_Logon (Var UN, PW, MPE : String); Procedure UserLogon1 (Var UN, PW, MPE : String);
Procedure User_Logon2; Procedure UserLogon2;
Procedure User_Logon3; Procedure UserLogon3;
Procedure CreateNewUser (DefName: String); Procedure CreateNewUser (DefName: String);
Procedure Edit_User_Settings (What: Byte); Procedure EditUserSettings (Data: String);
Function Check_Trash (Name: String) : Boolean; Function Check_Trash (Name: String) : Boolean;
End; End;
@ -428,7 +428,7 @@ Begin
If Session.LocalMode Then If Session.LocalMode Then
Session.io.Graphics := 1 Session.io.Graphics := 1
Else Begin Else Begin
Session.Client.PurgeInputData; Session.Client.PurgeInputData(True);
Session.io.OutRaw (#27 + '[6n'); Session.io.OutRaw (#27 + '[6n');
Session.io.BufFlush; Session.io.BufFlush;
@ -440,7 +440,7 @@ Begin
End; End;
End; End;
Session.Client.PurgeInputData; Session.Client.PurgeInputData(True);
End; End;
Session.io.OutFullLn (Session.GetPrompt(259)); Session.io.OutFullLn (Session.GetPrompt(259));
@ -801,7 +801,7 @@ Begin
End; End;
End; End;
Procedure TBBSUser.GetLanguage; Procedure TBBSUser.GetTheme;
Var Var
Old : RecTheme; Old : RecTheme;
T : Byte; T : Byte;
@ -883,7 +883,7 @@ Begin
If strUpper(DefName) = 'NEW' Then DefName := ''; If strUpper(DefName) = 'NEW' Then DefName := '';
With Config Do Begin With Config Do Begin
If AskTheme Then GetLanguage Else ThisUser.Theme := DefThemeFile; If AskTheme Then GetTheme Else ThisUser.Theme := DefThemeFile;
If AskAlias Then GetAlias(False, DefName); If AskAlias Then GetAlias(False, DefName);
If AskRealName Then GetRealName(False); If AskRealName Then GetRealName(False);
If AskStreet Then GetAddress(False); If AskStreet Then GetAddress(False);
@ -991,7 +991,7 @@ Begin
Session.Msgs.PostTextFile('sysletter.txt;0;' + Config.SysopName + ';' + Config.SysopName + ';New account created', True); Session.Msgs.PostTextFile('sysletter.txt;0;' + Config.SysopName + ';' + Config.SysopName + ';New account created', True);
End; End;
Procedure TBBSUser.User_Logon3; Procedure TBBSUser.UserLogon3;
Var Var
Count : Byte; Count : Byte;
Ch : Char; Ch : Char;
@ -1069,7 +1069,7 @@ Begin
{ END forced voting check } { END forced voting check }
End; End;
Procedure TBBSUser.User_Logon2; Procedure TBBSUser.UserLogon2;
Begin Begin
{$IFDEF LOGGING} Session.SystemLog('Logon2'); {$ENDIF} {$IFDEF LOGGING} Session.SystemLog('Logon2'); {$ENDIF}
@ -1170,7 +1170,7 @@ Begin
{$ENDIF} {$ENDIF}
End; End;
Procedure TBBSUser.User_Logon (Var UN, PW, MPE : String); Procedure TBBSUser.UserLogon1 (Var UN, PW, MPE : String);
Var Var
A : Integer; A : Integer;
Count : Byte; Count : Byte;
@ -1193,7 +1193,11 @@ Begin
Halt(0); Halt(0);
End; End;
Session.io.OutFullLn ('|CL' + mysSoftwareID + ' BBS v' + mysVersion + ' (' + OSID + ') Node |ND'); // Session.io.AnsiClear;
// Session.io.OutFullLn('|CR' + strPadC(mysSoftwareID + ' BBS v' + mysVersion + ' [' + OSID + '] : Node |ND', 79, ' '));
// Session.io.OutFullLn(strPadC(CopyID, 79, ' '));
Session.io.OutFullLn ('|CL' + mysSoftwareID + ' BBS v' + mysVersion + ' [' + OSID + '] : Node |ND');
Session.io.OutFullLn (CopyID); Session.io.OutFullLn (CopyID);
If Config.DefTermMode = 0 Then If Config.DefTermMode = 0 Then
@ -1206,6 +1210,8 @@ Begin
If (Session.io.Graphics = 0) and (Config.DefTermMode = 2) Then GetGraphics; If (Session.io.Graphics = 0) and (Config.DefTermMode = 2) Then GetGraphics;
End; End;
If Config.ThemeOnStart Then GetTheme;
If FileExist(Config.ScriptPath + 'startup.mpx') Then If FileExist(Config.ScriptPath + 'startup.mpx') Then
ExecuteMPL(NIL, 'startup'); ExecuteMPL(NIL, 'startup');
@ -1256,8 +1262,8 @@ Begin
If Session.io.GetYN(Session.GetPrompt(1), False) Then Begin If Session.io.GetYN(Session.GetPrompt(1), False) Then Begin
CreateNewUser(ThisUser.Handle); CreateNewUser(ThisUser.Handle);
User_Logon2; UserLogon2;
User_Logon3; UserLogon3;
Exit; Exit;
End; End;
@ -1291,17 +1297,26 @@ Begin
ThisUser.Theme := Config.DefThemeFile; ThisUser.Theme := Config.DefThemeFile;
End; End;
User_Logon2; UserLogon2;
If MPE <> '' Then Begin If MPE <> '' Then Begin
ExecuteMPL(NIL, MPE); ExecuteMPL(NIL, MPE);
Halt; Halt;
End Else End Else
User_Logon3; UserLogon3;
End; End;
Procedure TBBSUser.Edit_User_Settings (What: Byte); Procedure TBBSUser.EditUserSettings (Data: String);
Var
What : Byte;
Begin Begin
What := strS2I(strWordGet(1, Data, ' '));
If strWordCount(Data, ' ') > 1 Then
Data := strStripB(Copy(Data, strWordPos(2, Data, ' '), 255), ' ')
Else
Data := '';
Case What of Case What of
1 : GetAddress(True); 1 : GetAddress(True);
2 : GetCityState(True); 2 : GetCityState(True);
@ -1322,7 +1337,10 @@ Begin
11 : GetPassword(True); 11 : GetPassword(True);
12 : GetRealName(True); 12 : GetRealName(True);
13 : GetAlias(True, ''); 13 : GetAlias(True, '');
14 : GetLanguage; 14 : If Data = '' Then
GetTheme
Else
Session.LoadThemeData(Data);
15 : GetEditor(True); 15 : GetEditor(True);
16 : If Access(Config.AcsInvisLogin) Then Begin 16 : If Access(Config.AcsInvisLogin) Then Begin
Chat.Invisible := Not Chat.Invisible; Chat.Invisible := Not Chat.Invisible;

View File

@ -328,17 +328,17 @@
180 |CR|PA 180 |CR|PA
; nodechat text: &1 = user name ; nodechat text: &1 = user name
181 |07<|15|&1|07> |07 181 |07<|15|&1|07> |07
; Language select header ; Theme select header
182 |CR|14Available languages:|CR 182 |CR|14Available themes:|CR
; Language select format: ; Theme select format:
; &1 = language number &2 = language description ; &1 = Theme number &2 = Theme description
183 |15|$R03|&1|14|&2 183 |10|&1 |08..... |07|&2
; Language select footer ; Theme select footer
184 |CR|09Select language: |XX 184 |CR|09Select your theme |01[|10Enter|01/|10Default|01]: |09
; Language file does not exist ; Theme file does not exist
185 |CR|12Language file does not exist. 185 |CR|12Theme file does not exist.
; Displayed if user's language does not exist. ; Displayed if user's theme does not exist.
186 |CR|12Selected language not available. Using default language.|CR|PA 186 |CR|12Selected theme not available. Using default theme.|CR|PA
; new user: use full screen node chat? ; new user: use full screen node chat?
187 |CR|12Use full screen node chat? |11 187 |CR|12Use full screen node chat? |11
; One Liner header ; One Liner header

View File

@ -245,6 +245,7 @@ Begin
AddProc ({$IFDEF MPLPARSER} 'fillchar', {$ENDIF} '*lc', iNone); // 90 AddProc ({$IFDEF MPLPARSER} 'fillchar', {$ENDIF} '*lc', iNone); // 90
AddProc ({$IFDEF MPLPARSER} 'fwriterec', {$ENDIF} 'Fx', iNone); // 91 AddProc ({$IFDEF MPLPARSER} 'fwriterec', {$ENDIF} 'Fx', iNone); // 91
AddProc ({$IFDEF MPLPARSER} 'freadrec', {$ENDIF} 'Fx', iNone); // 92 AddProc ({$IFDEF MPLPARSER} 'freadrec', {$ENDIF} 'Fx', iNone); // 92
AddProc ({$IFDEF MPLPARSER} 'real2str', {$ENDIF} 'rb', iString); // 93;
IW := 500; // BEGIN BBS-SPECIFIC STUFF IW := 500; // BEGIN BBS-SPECIFIC STUFF

View File

@ -1767,6 +1767,10 @@ Begin
BlockRead (File(Pointer(Param[1].vData)^), VarData[Param[2].vID]^.Data^, VarData[Param[2].vID]^.DataSize); BlockRead (File(Pointer(Param[1].vData)^), VarData[Param[2].vID]^.Data^, VarData[Param[2].vID]^.DataSize);
IoError := IoResult; IoError := IoResult;
End; End;
93 : Begin
TempStr := strR2S(Param[1].R, Param[2].B);
Store (TempStr, 256);
End;
500 : Begin 500 : Begin
TempStr := Session.io.GetInput(Param[1].B, Param[2].B, Param[3].B, Param[4].S); TempStr := Session.io.GetInput(Param[1].B, Param[2].B, Param[3].B, Param[4].S);
Store (TempStr, 256); Store (TempStr, 256);

View File

@ -77,7 +77,7 @@ Type
); );
Const Const
mplVer = '11C'; mplVer = '11D';
mplVersion = '[MPX ' + mplVer +']' + #26; mplVersion = '[MPX ' + mplVer +']' + #26;
mplVerLength = 10; mplVerLength = 10;
mplExtSource = '.mps'; mplExtSource = '.mps';

View File

@ -465,7 +465,7 @@ Begin
Set_Node_Action (Session.GetPrompt(345)); Set_Node_Action (Session.GetPrompt(345));
Session.User.User_Logon (UserName, Password, Script); Session.User.UserLogon1 (UserName, Password, Script);
If Session.TimeOffset > 0 Then If Session.TimeOffset > 0 Then
Session.TimeSaved := Session.User.ThisUser.TimeLeft; Session.TimeSaved := Session.User.ThisUser.TimeLeft;

View File

@ -496,7 +496,7 @@ Procedure SnoopNode (Node: Byte);
Var Var
Pipe : TPipe; Pipe : TPipe;
Buffer : Array[1..4 * 1024] of Char; Buffer : Array[1..4 * 1024] of Char;
BufRead : LongInt; BufRead : LongWord;
Update : LongInt; Update : LongInt;
Procedure DrawStatus; Procedure DrawStatus;
@ -534,7 +534,7 @@ Begin
Pipe := TPipe.Create(Config.DataPath, True, Node); Pipe := TPipe.Create(Config.DataPath, True, Node);
If Not Pipe.ConnectPipe(1500) Then Begin If Not Pipe.ConnectPipe(800) Then Begin
ShowMsgBox (0, 'Unable to establish a session. Try again'); ShowMsgBox (0, 'Unable to establish a session. Try again');
Pipe.Free; Pipe.Free;
Exit; Exit;
@ -546,17 +546,18 @@ Begin
DrawStatus; DrawStatus;
Screen.TextAttr := 7;
Screen.ClearScreen;
Update := TimerSet(UpdateNode); Update := TimerSet(UpdateNode);
While Pipe.Connected Do Begin While Pipe.Connected Do Begin
Pipe.ReadFromPipe(Buffer, SizeOf(Buffer), BufRead); Pipe.ReadFromPipe(Buffer, SizeOf(Buffer), BufRead);
Case BufRead of If BufRead = 0 Then
-1 : Break; WaitMS(200)
0 : WaitMS(200);
Else Else
Term.ProcessBuf(Buffer, BufRead); Term.ProcessBuf(Buffer, BufRead);
End;
If Keyboard.KeyPressed Then If Keyboard.KeyPressed Then
Case Keyboard.ReadKey of Case Keyboard.ReadKey of
@ -609,7 +610,8 @@ Begin
Screen.TextAttr := 7; Screen.TextAttr := 7;
Screen.ClearScreen; Screen.ClearScreen;
Screen.WriteStr ('Connecting to 127.0.0.1... ');
Screen.WriteStr ('Telnet to 127.0.0.1... ');
Client := TIOSocket.Create; Client := TIOSocket.Create;
@ -865,7 +867,7 @@ Begin
Repeat Repeat
If Keyboard.KeyWait(1000) Then If Keyboard.KeyWait(1000) Then
Case Keyboard.ReadKey of Case UpCase(Keyboard.ReadKey) of
#00 : Case Keyboard.ReadKey of #00 : Case Keyboard.ReadKey of
#71 : Begin #71 : Begin
TopPage := 1; TopPage := 1;
@ -925,6 +927,14 @@ Begin
FullReDraw; FullReDraw;
End; End;
#27 : Break; #27 : Break;
'G' : If ShowMsgBox(1, 'Kill Ghost on Node ' + strI2S(NodeInfo[CurNode]^.Node)) Then Begin
FileErase(Config.DataPath + 'chat' + strI2S(NodeInfo[CurNode]^.Node) + '.dat');
UpdateOnlineStatus;
DrawNodes;
NodeTimer := TimerSet(UpdateNode);
End;
End; End;
If TimerUp(NodeTimer) Then Begin If TimerUp(NodeTimer) Then Begin

View File

@ -23,7 +23,7 @@
Const Const
mysSoftwareID = 'Mystic'; // no idea mysSoftwareID = 'Mystic'; // no idea
mysCopyYear = '1997-2012'; // its been a long time! mysCopyYear = '1997-2012'; // its been a long time!
mysVersion = '1.10 A19'; // current version mysVersion = '1.10 A20'; // current version
mysDataChanged = '1.10 A11'; // version of last records change mysDataChanged = '1.10 A11'; // version of last records change
{$IFDEF WIN32} {$IFDEF WIN32}
@ -271,7 +271,8 @@ Type
inetNNTPTimeOut : Word; inetNNTPTimeOut : Word;
// UNSORTED // UNSORTED
inetTNHidden : Boolean; inetTNHidden : Boolean;
Reserved : Array[1..845] of Char; ThemeOnStart : Boolean;
Reserved : Array[1..844] of Char;
End; End;
Const Const

View File

@ -15,15 +15,12 @@ BUGS AND POSSIBLE ISSUES
functions. functions.
! RAR internal viewer does not work with files that have embedded comments ! RAR internal viewer does not work with files that have embedded comments
! Test midnight rollovers for time (flag for user to be immune to timecheck) ! Test midnight rollovers for time (flag for user to be immune to timecheck)
! Validate that "groupX.ans" and "fgroupX.ans" actually work.
! Test NNTP with Thunderbird specifically FUBAR dates on messages.
FUTURE / IDEAS / WORK IN PROGRESS / NOTES FUTURE / IDEAS / WORK IN PROGRESS / NOTES
========================================= =========================================
- Auto wrapping of quotes before the FS editor gets to it.
- Finish Threaded message reader - Finish Threaded message reader
- Add "high roller Smack talk" into BlackJack - Add "high roller/smack talk" into BlackJack
- Add better MIS logging per server (connect, refuse, blocked, etc) - Add better MIS logging per server (connect, refuse, blocked, etc)
- BBS email autoforwarded to Internet email - BBS email autoforwarded to Internet email
- Ability to send internet email to people from within the BBS. - Ability to send internet email to people from within the BBS.
@ -36,7 +33,6 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
- MCI code to show how many files are in current filebase - MCI code to show how many files are in current filebase
- Online ANSI file viewer (integrate with art gallery) - Online ANSI file viewer (integrate with art gallery)
- Online text editor / ansi editor? - Online text editor / ansi editor?
- Better theme selection (menu command option to select theme)
- Externalize remaining prompt data (msg flags, etc) - Externalize remaining prompt data (msg flags, etc)
- File comments and rating system - File comments and rating system
- Integrate eventual online ANSI help system into configuration utilities - Integrate eventual online ANSI help system into configuration utilities