More work towards QWK networking
This commit is contained in:
parent
37c48d3182
commit
1fe5fbfd2d
|
@ -40,10 +40,9 @@ Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Ansi_MenuBox,
|
BBS_Records,
|
||||||
bbs_Core,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_Common,
|
BBS_Core,
|
||||||
bbs_dataBase,
|
|
||||||
MPL_Execute;
|
MPL_Execute;
|
||||||
|
|
||||||
Constructor TAnsiMenuHelp.Create;
|
Constructor TAnsiMenuHelp.Create;
|
||||||
|
|
|
@ -6,9 +6,8 @@ Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Types,
|
m_Types,
|
||||||
bbs_Ansi_MenuInput,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_Ansi_MenuInput;
|
||||||
bbs_Common;
|
|
||||||
|
|
||||||
Const
|
Const
|
||||||
FormMaxItems = 60;
|
FormMaxItems = 60;
|
||||||
|
@ -137,8 +136,9 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Core,
|
BBS_Common,
|
||||||
bbs_Ansi_MenuBox;
|
BBS_Core,
|
||||||
|
BBS_Ansi_MenuBox;
|
||||||
|
|
||||||
Constructor TAnsiMenuForm.Create;
|
Constructor TAnsiMenuForm.Create;
|
||||||
Begin
|
Begin
|
||||||
|
|
|
@ -11,11 +11,12 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
bbs_Ansi_MenuBox,
|
BBS_Common,
|
||||||
bbs_Ansi_MenuForm,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_cfg_Common;
|
BBS_Ansi_MenuForm,
|
||||||
|
BBS_Cfg_Common;
|
||||||
|
|
||||||
Procedure EditArchive (Var Arc: RecArchive);
|
Procedure EditArchive (Var Arc: RecArchive);
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -6,8 +6,7 @@ Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
BBS_Core,
|
BBS_Core,
|
||||||
BBS_Common,
|
BBS_Records;
|
||||||
bbs_dataBase;
|
|
||||||
|
|
||||||
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
||||||
Procedure AddExportByBase (Var MBase: RecMessageBase; Idx: LongInt);
|
Procedure AddExportByBase (Var MBase: RecMessageBase; Idx: LongInt);
|
||||||
|
@ -27,7 +26,9 @@ Uses
|
||||||
bbs_Ansi_MenuBox,
|
bbs_Ansi_MenuBox,
|
||||||
bbs_Ansi_MenuForm,
|
bbs_Ansi_MenuForm,
|
||||||
bbs_cfg_Common,
|
bbs_cfg_Common,
|
||||||
bbs_Cfg_MsgBase;
|
bbs_Cfg_MsgBase,
|
||||||
|
BBS_Common,
|
||||||
|
BBS_DataBase;
|
||||||
|
|
||||||
Function IsExportNode (Var MBase: RecMessageBase; Idx: LongInt) : Boolean;
|
Function IsExportNode (Var MBase: RecMessageBase; Idx: LongInt) : Boolean;
|
||||||
Var
|
Var
|
||||||
|
@ -239,7 +240,7 @@ Begin
|
||||||
NewIdx := Configuration_MessageBaseEditor(False);
|
NewIdx := Configuration_MessageBaseEditor(False);
|
||||||
|
|
||||||
If NewIdx <> -1 Then
|
If NewIdx <> -1 Then
|
||||||
If Session.Msgs.GetBaseByIndex(NewIdx, MBase) Then Begin
|
If GetMBaseByIndex(NewIdx, MBase) Then Begin
|
||||||
If MBase.EchoTag = '' Then
|
If MBase.EchoTag = '' Then
|
||||||
ShowMsgBox(0, 'Missing ECHOTAG for ' + strStripPipe(MBase.Name))
|
ShowMsgBox(0, 'Missing ECHOTAG for ' + strStripPipe(MBase.Name))
|
||||||
Else
|
Else
|
||||||
|
@ -248,7 +249,7 @@ Begin
|
||||||
End;
|
End;
|
||||||
'D' : If List.ListMax > 0 Then
|
'D' : If List.ListMax > 0 Then
|
||||||
If ShowMsgBox(1, 'Delete this entry?') Then
|
If ShowMsgBox(1, 'Delete this entry?') Then
|
||||||
If Session.Msgs.GetBaseByIndex (strS2I(strWordGet(1, List.List[List.Picked]^.Name, ' ')), MBase) Then Begin
|
If GetMBaseByIndex (strS2I(strWordGet(1, List.List[List.Picked]^.Name, ' ')), MBase) Then Begin
|
||||||
|
|
||||||
RemoveExportFromBase(MBase, Node.Index);
|
RemoveExportFromBase(MBase, Node.Index);
|
||||||
End;
|
End;
|
||||||
|
|
|
@ -12,11 +12,12 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
bbs_ansi_MenuBox,
|
BBS_Common,
|
||||||
bbs_ansi_MenuForm,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_cfg_Common;
|
BBS_Ansi_MenuForm,
|
||||||
|
BBS_Cfg_Common;
|
||||||
|
|
||||||
Procedure EditEvent (Var Event: RecEvent);
|
Procedure EditEvent (Var Event: RecEvent);
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -13,11 +13,12 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_QuickSort,
|
m_QuickSort,
|
||||||
bbs_Ansi_MenuBox,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_Ansi_MenuForm,
|
BBS_Ansi_MenuForm,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_DataBase,
|
BBS_DataBase,
|
||||||
bbs_cfg_Common;
|
BBS_Common,
|
||||||
|
BBS_Cfg_Common;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
RecFileBaseFile = File of RecFileBase;
|
RecFileBaseFile = File of RecFileBase;
|
||||||
|
|
|
@ -9,11 +9,12 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Ansi_MenuBox,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_Ansi_MenuForm,
|
BBS_Ansi_MenuForm,
|
||||||
bbs_cfg_Common,
|
BBS_Cfg_Common,
|
||||||
bbs_dataBase,
|
BBS_Records,
|
||||||
bbs_Common;
|
BBS_DataBase,
|
||||||
|
BBS_Common;
|
||||||
|
|
||||||
Procedure EditGroup (Var Group: RecGroup);
|
Procedure EditGroup (Var Group: RecGroup);
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -19,6 +19,7 @@ Uses
|
||||||
bbs_Ansi_MenuForm,
|
bbs_Ansi_MenuForm,
|
||||||
BBS_Core,
|
BBS_Core,
|
||||||
BBS_Common,
|
BBS_Common,
|
||||||
|
BBS_Records,
|
||||||
BBS_MenuData,
|
BBS_MenuData,
|
||||||
bbs_dataBase,
|
bbs_dataBase,
|
||||||
bbs_cfg_Theme,
|
bbs_cfg_Theme,
|
||||||
|
|
|
@ -18,8 +18,9 @@ Uses
|
||||||
bbs_Ansi_MenuForm,
|
bbs_Ansi_MenuForm,
|
||||||
bbs_Cfg_Common,
|
bbs_Cfg_Common,
|
||||||
bbs_Cfg_EchoMail,
|
bbs_Cfg_EchoMail,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase;
|
BBS_DataBase,
|
||||||
|
BBS_Common;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
RecMessageBaseFile = File of RecMessageBase;
|
RecMessageBaseFile = File of RecMessageBase;
|
||||||
|
|
|
@ -11,11 +11,12 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
bbs_ansi_MenuBox,
|
BBS_Common,
|
||||||
bbs_ansi_MenuForm,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_cfg_Common;
|
BBS_Ansi_MenuForm,
|
||||||
|
BBS_Cfg_Common;
|
||||||
|
|
||||||
Procedure EditProtocol (Var Prot: RecProtocol);
|
Procedure EditProtocol (Var Prot: RecProtocol);
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -11,11 +11,11 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
bbs_Ansi_MenuBox,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_Ansi_MenuForm,
|
BBS_Ansi_MenuForm,
|
||||||
bbs_Cfg_Common;
|
BBS_Cfg_Common;
|
||||||
|
|
||||||
Procedure EditLevel (Var Sec: RecSecurity);
|
Procedure EditLevel (Var Sec: RecSecurity);
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -26,10 +26,10 @@ Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
bbs_ansi_MenuBox,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_ansi_MenuForm;
|
BBS_Ansi_MenuForm;
|
||||||
|
|
||||||
Procedure Configuration_SysPaths;
|
Procedure Configuration_SysPaths;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -12,13 +12,14 @@ Uses
|
||||||
m_Types,
|
m_Types,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Ansi_MenuBox,
|
BBS_Ansi_MenuBox,
|
||||||
bbs_Ansi_MenuForm,
|
BBS_Ansi_MenuForm,
|
||||||
bbs_Ansi_MenuInput,
|
BBS_Ansi_MenuInput,
|
||||||
bbs_Core,
|
BBS_Core,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
bbs_Cfg_Common;
|
BBS_Common,
|
||||||
|
BBS_Cfg_Common;
|
||||||
|
|
||||||
(*
|
(*
|
||||||
Procedure CompileTheme (Var Theme: RecTheme);
|
Procedure CompileTheme (Var Theme: RecTheme);
|
||||||
|
|
|
@ -3,8 +3,7 @@ Unit bbs_Cfg_UserEdit;
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
bbs_Common,
|
BBS_Records;
|
||||||
bbs_dataBase;
|
|
||||||
|
|
||||||
Procedure Configuration_EditUser (Var U: RecUser);
|
Procedure Configuration_EditUser (Var U: RecUser);
|
||||||
Procedure Configuration_UserEditor;
|
Procedure Configuration_UserEditor;
|
||||||
|
@ -22,6 +21,8 @@ Uses
|
||||||
bbs_io,
|
bbs_io,
|
||||||
bbs_Core,
|
bbs_Core,
|
||||||
bbs_General,
|
bbs_General,
|
||||||
|
BBS_Common,
|
||||||
|
BBS_DataBase,
|
||||||
bbs_Cfg_SecLevel;
|
bbs_Cfg_SecLevel;
|
||||||
|
|
||||||
Procedure Configuration_EditUser (Var U: RecUser);
|
Procedure Configuration_EditUser (Var U: RecUser);
|
||||||
|
|
|
@ -18,7 +18,7 @@ Uses
|
||||||
m_Input,
|
m_Input,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_dataBase;
|
BBS_Records;
|
||||||
|
|
||||||
// This unit is very old (like 1994) and its functions need to be phased out
|
// This unit is very old (like 1994) and its functions need to be phased out
|
||||||
// This is the stuff that hasn't been worked into a class somewhere or
|
// This is the stuff that hasn't been worked into a class somewhere or
|
||||||
|
@ -26,7 +26,6 @@ Uses
|
||||||
|
|
||||||
Const
|
Const
|
||||||
WinConsoleTitle = mysSoftwareID + ' Node ';
|
WinConsoleTitle = mysSoftwareID + ' Node ';
|
||||||
CopyID = 'Copyright (C) ' + mysCopyYear + ' By James Coyle';
|
|
||||||
DateTypeStr : Array[1..4] of String[8] = ('MM/DD/YY', 'DD/MM/YY', 'YY/DD/MM', 'Ask ');
|
DateTypeStr : Array[1..4] of String[8] = ('MM/DD/YY', 'DD/MM/YY', 'YY/DD/MM', 'Ask ');
|
||||||
|
|
||||||
Var
|
Var
|
||||||
|
@ -36,7 +35,6 @@ Var
|
||||||
ConfigFile : File of RecConfig;
|
ConfigFile : File of RecConfig;
|
||||||
ChatFile : File of ChatRec;
|
ChatFile : File of ChatRec;
|
||||||
RoomFile : File of RoomRec;
|
RoomFile : File of RoomRec;
|
||||||
Chat : ChatRec;
|
|
||||||
Room : RoomRec;
|
Room : RoomRec;
|
||||||
LastOnFile : File of RecLastOn;
|
LastOnFile : File of RecLastOn;
|
||||||
LastOn : RecLastOn;
|
LastOn : RecLastOn;
|
||||||
|
@ -60,6 +58,7 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
DOS,
|
DOS,
|
||||||
bbs_Core,
|
bbs_Core,
|
||||||
|
BBS_DataBase,
|
||||||
{$IFNDEF UNIX}
|
{$IFNDEF UNIX}
|
||||||
bbs_SysOpChat,
|
bbs_SysOpChat,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
|
@ -13,8 +13,7 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_Pipe,
|
m_Pipe,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
bbs_dataBase,
|
BBS_Records,
|
||||||
// BBS_Common,
|
|
||||||
BBS_IO,
|
BBS_IO,
|
||||||
BBS_MsgBase,
|
BBS_MsgBase,
|
||||||
BBS_User,
|
BBS_User,
|
||||||
|
@ -40,6 +39,7 @@ Type
|
||||||
ThemeFile : File of RecTheme;
|
ThemeFile : File of RecTheme;
|
||||||
VoteFile : File of VoteRec;
|
VoteFile : File of VoteRec;
|
||||||
Vote : VoteRec;
|
Vote : VoteRec;
|
||||||
|
Chat : ChatRec;
|
||||||
CommHandle : LongInt;
|
CommHandle : LongInt;
|
||||||
ShutDown : Boolean;
|
ShutDown : Boolean;
|
||||||
TempPath : String;
|
TempPath : String;
|
||||||
|
@ -103,6 +103,9 @@ Var
|
||||||
|
|
||||||
Implementation
|
Implementation
|
||||||
|
|
||||||
|
Uses
|
||||||
|
BBS_DataBase;
|
||||||
|
|
||||||
Constructor TBBSCore.Create;
|
Constructor TBBSCore.Create;
|
||||||
Begin
|
Begin
|
||||||
Inherited Create;
|
Inherited Create;
|
||||||
|
|
|
@ -1,20 +1,14 @@
|
||||||
Unit bbs_dataBase;
|
Unit BBS_DataBase;
|
||||||
|
|
||||||
// This unit us a work in progress designed to move lower level functions
|
|
||||||
// away from session-tied objects and into a unit usable for external
|
|
||||||
// utilities. Keeping them procedural instead of object-based also has some
|
|
||||||
// additional smartlinking benefits in the long run.
|
|
||||||
|
|
||||||
// The drawback of a non-abstract object is that we cannot easily define
|
|
||||||
// alternate data sources such as a INI or SQL backend. Because of that,
|
|
||||||
// this MAY change in the future -- particularly if we can smartlink at the
|
|
||||||
// method level of classes in future FP releases.
|
|
||||||
|
|
||||||
{$I M_OPS.PAS}
|
{$I M_OPS.PAS}
|
||||||
|
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
{$I RECORDS.PAS}
|
Uses
|
||||||
|
BBS_Records,
|
||||||
|
BBS_MsgBase_ABS,
|
||||||
|
BBS_MsgBase_JAM,
|
||||||
|
BBS_MsgBase_Squish;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
bbsCfg : RecConfig;
|
bbsCfg : RecConfig;
|
||||||
|
@ -33,6 +27,7 @@ Function PutBaseConfiguration (Var TempCfg: RecConfig) : Boolean;
|
||||||
|
|
||||||
// MESSAGE BASE
|
// MESSAGE BASE
|
||||||
|
|
||||||
|
Function MBaseOpenCreate (Var Msg: PMsgBaseABS; Var Area: RecMessageBase; TP: String) : Boolean;
|
||||||
Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||||
Procedure GetMessageScan (UN: Cardinal; TempBase: RecMessageBase; Var TempScan: MScanRec);
|
Procedure GetMessageScan (UN: Cardinal; TempBase: RecMessageBase; Var TempScan: MScanRec);
|
||||||
Procedure PutMessageScan (UN: Cardinal; TempBase: RecMessageBase; TempScan: MScanRec);
|
Procedure PutMessageScan (UN: Cardinal; TempBase: RecMessageBase; TempScan: MScanRec);
|
||||||
|
@ -41,11 +36,16 @@ Procedure PutMessageScan (UN: Cardinal; TempBase: RecMessageBase; TempSca
|
||||||
|
|
||||||
Function GetTotalFiles (Var TempBase: RecFileBase) : LongInt;
|
Function GetTotalFiles (Var TempBase: RecFileBase) : LongInt;
|
||||||
|
|
||||||
|
// USER
|
||||||
|
|
||||||
|
Function IsThisUser (U: RecUser; Str: String) : Boolean;
|
||||||
|
|
||||||
Implementation
|
Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
DOS,
|
DOS,
|
||||||
m_FileIO;
|
m_FileIO,
|
||||||
|
m_Strings;
|
||||||
|
|
||||||
Function GetBaseConfiguration (UseEnv: Boolean; Var TempCfg: RecConfig) : Byte;
|
Function GetBaseConfiguration (UseEnv: Boolean; Var TempCfg: RecConfig) : Byte;
|
||||||
Var
|
Var
|
||||||
|
@ -168,6 +168,33 @@ Begin
|
||||||
Close (ScanFile);
|
Close (ScanFile);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Function MBaseOpenCreate (Var Msg: PMsgBaseABS; Var Area: RecMessageBase; TP: String) : Boolean;
|
||||||
|
Begin
|
||||||
|
Result := False;
|
||||||
|
|
||||||
|
Case Area.BaseType of
|
||||||
|
0 : Msg := New(PMsgBaseJAM, Init);
|
||||||
|
1 : Msg := New(PMsgBaseSquish, Init);
|
||||||
|
End;
|
||||||
|
|
||||||
|
Msg^.SetMsgPath (Area.Path + Area.FileName);
|
||||||
|
Msg^.SetTempFile (TP + 'msgbuf.');
|
||||||
|
|
||||||
|
If Not Msg^.OpenMsgBase Then
|
||||||
|
If Not Msg^.CreateMsgBase (Area.MaxMsgs, Area.MaxAge) Then Begin
|
||||||
|
Dispose (Msg, Done);
|
||||||
|
|
||||||
|
Exit;
|
||||||
|
End Else
|
||||||
|
If Not Msg^.OpenMsgBase Then Begin
|
||||||
|
Dispose (Msg, Done);
|
||||||
|
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Result := True;
|
||||||
|
End;
|
||||||
|
|
||||||
Function GetTotalFiles (Var TempBase: RecFileBase) : LongInt;
|
Function GetTotalFiles (Var TempBase: RecFileBase) : LongInt;
|
||||||
Begin
|
Begin
|
||||||
Result := 0;
|
Result := 0;
|
||||||
|
@ -180,6 +207,12 @@ Begin
|
||||||
Result := Result DIV SizeOf(RecFileList);
|
Result := Result DIV SizeOf(RecFileList);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Function IsThisUser (U: RecUser; Str: String) : Boolean;
|
||||||
|
Begin
|
||||||
|
Str := strUpper(Str);
|
||||||
|
Result := (strUpper(U.RealName) = Str) or (strUpper(U.Handle) = Str);
|
||||||
|
End;
|
||||||
|
|
||||||
Initialization
|
Initialization
|
||||||
|
|
||||||
bbsCfgStatus := GetBaseConfiguration(True, bbsCfg);
|
bbsCfgStatus := GetBaseConfiguration(True, bbsCfg);
|
||||||
|
|
|
@ -18,10 +18,11 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_Common,
|
||||||
bbs_Core,
|
BBS_DataBase,
|
||||||
bbs_User;
|
BBS_Core,
|
||||||
|
BBS_User;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
Ending : String[2] = #13#10;
|
Ending : String[2] = #13#10;
|
||||||
|
|
|
@ -6,7 +6,7 @@ Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_MsgBase_ANSI;
|
BBS_MsgBase_Ansi;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
fseMaxCutText = 60;
|
fseMaxCutText = 60;
|
||||||
|
@ -89,10 +89,9 @@ Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Core,
|
BBS_Records,
|
||||||
bbs_DataBase,
|
BBS_Core,
|
||||||
bbs_Common,
|
BBS_Ansi_MenuBox;
|
||||||
bbs_Ansi_MenuBox;
|
|
||||||
|
|
||||||
Constructor TEditorANSI.Create (Var O: Pointer; TemplateFile: String);
|
Constructor TEditorANSI.Create (Var O: Pointer; TemplateFile: String);
|
||||||
Begin
|
Begin
|
||||||
|
|
|
@ -12,11 +12,12 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_Common,
|
BBS_Common,
|
||||||
bbs_DataBase,
|
BBS_Records,
|
||||||
bbs_Core,
|
BBS_DataBase,
|
||||||
bbs_FileBase,
|
BBS_Core,
|
||||||
bbs_User;
|
BBS_FileBase,
|
||||||
|
BBS_User;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
CurLine : Integer;
|
CurLine : Integer;
|
||||||
|
|
|
@ -19,11 +19,12 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_Common,
|
||||||
bbs_General,
|
BBS_DataBase,
|
||||||
bbs_NodeInfo,
|
BBS_General,
|
||||||
bbs_Ansi_MenuBox,
|
BBS_NodeInfo,
|
||||||
|
BBS_Ansi_MenuBox,
|
||||||
AView,
|
AView,
|
||||||
{$IFDEF USEALTPROT}
|
{$IFDEF USEALTPROT}
|
||||||
m_Prot_Base,
|
m_Prot_Base,
|
||||||
|
|
|
@ -11,8 +11,8 @@ Uses
|
||||||
Windows,
|
Windows,
|
||||||
bbs_SysopChat,
|
bbs_SysopChat,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_database,
|
BBS_Common,
|
||||||
bbs_Edit_ANSI,
|
bbs_Edit_ANSI,
|
||||||
bbs_Edit_Line;
|
bbs_Edit_Line;
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_QuickSort,
|
m_QuickSort,
|
||||||
bbs_Core,
|
bbs_Core,
|
||||||
|
BBS_DataBase,
|
||||||
bbs_MsgBase_Ansi,
|
bbs_MsgBase_Ansi,
|
||||||
bbs_NodeInfo;
|
bbs_NodeInfo;
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,7 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_Term_Ansi,
|
m_Term_Ansi,
|
||||||
bbs_Common,
|
BBS_Records;
|
||||||
bbs_dataBase;
|
|
||||||
|
|
||||||
Const
|
Const
|
||||||
TBBSIOBufferSize = 4 * 1024 - 1;
|
TBBSIOBufferSize = 4 * 1024 - 1;
|
||||||
|
@ -119,7 +118,9 @@ Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
DOS,
|
DOS,
|
||||||
bbs_Core,
|
BBS_Core,
|
||||||
|
BBS_DataBase,
|
||||||
|
BBS_Common,
|
||||||
bbs_General,
|
bbs_General,
|
||||||
bbs_NodeInfo;
|
bbs_NodeInfo;
|
||||||
|
|
||||||
|
@ -602,7 +603,7 @@ Begin
|
||||||
'G' : LastMCIValue := strI2S(DaysAgo(TBBSCore(Core).User.ThisUser.Birthday, 1) DIV 365);
|
'G' : LastMCIValue := strI2S(DaysAgo(TBBSCore(Core).User.ThisUser.Birthday, 1) DIV 365);
|
||||||
'O' : AllowAbort := False;
|
'O' : AllowAbort := False;
|
||||||
'S' : LastMCIValue := OutON(TBBSCore(Core).User.ThisUser.SigUse);
|
'S' : LastMCIValue := OutON(TBBSCore(Core).User.ThisUser.SigUse);
|
||||||
'V' : LastMCIValue := OutYN(Chat.Available);
|
'V' : LastMCIValue := OutYN(Session.Chat.Available);
|
||||||
End;
|
End;
|
||||||
'B' : Case Code[2] of
|
'B' : Case Code[2] of
|
||||||
'D' : If TBBSCore(Core).LocalMode Then
|
'D' : If TBBSCore(Core).LocalMode Then
|
||||||
|
@ -656,7 +657,7 @@ Begin
|
||||||
FmtString := True;
|
FmtString := True;
|
||||||
FmtType := 12;
|
FmtType := 12;
|
||||||
End;
|
End;
|
||||||
'L' : LastMCIValue := OutON(Chat.Invisible);
|
'L' : LastMCIValue := OutON(Session.Chat.Invisible);
|
||||||
'S' : Begin
|
'S' : Begin
|
||||||
FmtString := True;
|
FmtString := True;
|
||||||
FmtType := 14;
|
FmtType := 14;
|
||||||
|
|
|
@ -6,7 +6,7 @@ Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_dataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
TMenuData = Class
|
TMenuData = Class
|
||||||
|
|
|
@ -5,8 +5,9 @@ Unit BBS_Menus;
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
|
BBS_Records,
|
||||||
BBS_Common,
|
BBS_Common,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
BBS_MenuData,
|
BBS_MenuData,
|
||||||
MPL_Execute;
|
MPL_Execute;
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ Interface
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_Common,
|
||||||
bbs_General,
|
bbs_General,
|
||||||
bbs_MsgBase_ABS,
|
bbs_MsgBase_ABS,
|
||||||
bbs_MsgBase_JAM,
|
bbs_MsgBase_JAM,
|
||||||
|
@ -35,12 +35,12 @@ Type
|
||||||
Destructor Destroy; Override;
|
Destructor Destroy; Override;
|
||||||
|
|
||||||
Function IsQuotedText (Str: String) : Boolean;
|
Function IsQuotedText (Str: String) : Boolean;
|
||||||
Function OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: RecMessageBase) : Boolean;
|
// Function OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: RecMessageBase) : Boolean;
|
||||||
Procedure AppendMessageText (Var Msg: PMsgBaseABS; Lines: Integer; ReplyID: String);
|
Procedure AppendMessageText (Var Msg: PMsgBaseABS; Lines: Integer; ReplyID: String);
|
||||||
Procedure AssignMessageData (Var Msg: PMsgBaseABS; Var TempBase: RecMessageBase);
|
Procedure AssignMessageData (Var Msg: PMsgBaseABS; Var TempBase: RecMessageBase);
|
||||||
Function GetBaseByNum (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
Function GetBaseByNum (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||||
Function GetBaseCompressed (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
Function GetBaseCompressed (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||||
Function GetBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
// Function GetBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||||
Function GetMessageStats (List, ShowPrompt, ShowYou: Boolean; Var ListPtr: LongInt; Var TempBase: RecMessageBase; NoFrom, NoRead: Boolean; Var Total, New, Yours: LongInt) : Boolean;
|
Function GetMessageStats (List, ShowPrompt, ShowYou: Boolean; Var ListPtr: LongInt; Var TempBase: RecMessageBase; NoFrom, NoRead: Boolean; Var Total, New, Yours: LongInt) : Boolean;
|
||||||
Procedure GetMailStats (Var Total, UnRead: LongInt);
|
Procedure GetMailStats (Var Total, UnRead: LongInt);
|
||||||
Function GetMatchedAddress (Orig, Dest: RecEchoMailAddr) : RecEchoMailAddr;
|
Function GetMatchedAddress (Orig, Dest: RecEchoMailAddr) : RecEchoMailAddr;
|
||||||
|
@ -80,6 +80,9 @@ Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
|
// BBS_Records,
|
||||||
|
// BBS_Common,
|
||||||
|
BBS_DataBase,
|
||||||
bbs_Core,
|
bbs_Core,
|
||||||
bbs_User,
|
bbs_User,
|
||||||
bbs_NodeInfo,
|
bbs_NodeInfo,
|
||||||
|
@ -303,6 +306,7 @@ Begin
|
||||||
Result := (Temp > 0) and (Temp < 5);
|
Result := (Temp > 0) and (Temp < 5);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
(*
|
||||||
Function TMsgBase.OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: RecMessageBase) : Boolean;
|
Function TMsgBase.OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: RecMessageBase) : Boolean;
|
||||||
Begin
|
Begin
|
||||||
Result := False;
|
Result := False;
|
||||||
|
@ -327,6 +331,7 @@ Begin
|
||||||
|
|
||||||
Result := True;
|
Result := True;
|
||||||
End;
|
End;
|
||||||
|
*)
|
||||||
|
|
||||||
Function TMsgBase.GetBaseByNum (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
Function TMsgBase.GetBaseByNum (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||||
Var
|
Var
|
||||||
|
@ -374,6 +379,7 @@ Begin
|
||||||
Result := Count = Num;
|
Result := Count = Num;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
(*
|
||||||
Function TMsgBase.GetBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
Function TMsgBase.GetBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||||
Var
|
Var
|
||||||
F : File;
|
F : File;
|
||||||
|
@ -395,6 +401,7 @@ Begin
|
||||||
|
|
||||||
Close (F);
|
Close (F);
|
||||||
End;
|
End;
|
||||||
|
*)
|
||||||
|
|
||||||
Function TMsgBase.GetTotalBases (Compressed: Boolean) : LongInt;
|
Function TMsgBase.GetTotalBases (Compressed: Boolean) : LongInt;
|
||||||
Var
|
Var
|
||||||
|
@ -429,7 +436,7 @@ Begin
|
||||||
|
|
||||||
If TempBase.Name = 'None' Then Exit;
|
If TempBase.Name = 'None' Then Exit;
|
||||||
|
|
||||||
If OpenCreateBase(TempMsg, TempBase) Then Begin
|
If MBaseOpenCreate(TempMsg, TempBase, Session.TempPath) Then Begin
|
||||||
Result := TempMsg^.NumberOfMsgs;
|
Result := TempMsg^.NumberOfMsgs;
|
||||||
|
|
||||||
TempMsg^.CloseMsgBase;
|
TempMsg^.CloseMsgBase;
|
||||||
|
@ -449,7 +456,7 @@ Begin
|
||||||
|
|
||||||
If TempBase.Name = 'None' Then Exit;
|
If TempBase.Name = 'None' Then Exit;
|
||||||
|
|
||||||
If OpenCreateBase(TempMsg, TempBase) Then Begin
|
If MBaseOpenCreate(TempMsg, TempBase, Session.TempPath) Then Begin
|
||||||
Total := TempMsg^.NumberOfMsgs;
|
Total := TempMsg^.NumberOfMsgs;
|
||||||
|
|
||||||
TempMsg^.SeekFirst(TempMsg^.GetLastRead(Session.User.UserNum) + 1);
|
TempMsg^.SeekFirst(TempMsg^.GetLastRead(Session.User.UserNum) + 1);
|
||||||
|
@ -550,7 +557,7 @@ Begin
|
||||||
Read (MBaseFile, TempBase);
|
Read (MBaseFile, TempBase);
|
||||||
Close (MBaseFile);
|
Close (MBaseFile);
|
||||||
|
|
||||||
If OpenCreateBase (MsgBase, TempBase) Then Begin
|
If MBaseOpenCreate (MsgBase, TempBase, Session.TempPath) Then Begin
|
||||||
MsgBase^.SeekFirst (1);
|
MsgBase^.SeekFirst (1);
|
||||||
|
|
||||||
While MsgBase^.SeekFound Do Begin
|
While MsgBase^.SeekFound Do Begin
|
||||||
|
@ -1404,7 +1411,7 @@ Begin
|
||||||
If Editor(Lines, ColumnValue[Session.Theme.ColumnSize] - 2, mysMaxMsgLines, False, fn_tplMsgEdit, Subj) Then Begin
|
If Editor(Lines, ColumnValue[Session.Theme.ColumnSize] - 2, mysMaxMsgLines, False, fn_tplMsgEdit, Subj) Then Begin
|
||||||
Session.io.OutFull (Session.GetPrompt(107));
|
Session.io.OutFull (Session.GetPrompt(107));
|
||||||
|
|
||||||
If Not OpenCreateBase(MsgNew, ReplyBase) Then Exit;
|
If Not MBaseOpenCreate(MsgNew, ReplyBase, Session.TempPath) Then Exit;
|
||||||
|
|
||||||
AssignMessageData(MsgNew, ReplyBase);
|
AssignMessageData(MsgNew, ReplyBase);
|
||||||
|
|
||||||
|
@ -1666,7 +1673,7 @@ Var
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(318));
|
Session.io.OutFullLn (Session.GetPrompt(318));
|
||||||
|
|
||||||
If Not OpenCreateBase(MsgNew, TempBase) Then Break;
|
If Not MBaseOpenCreate(MsgNew, TempBase, Session.TempPath) Then Break;
|
||||||
|
|
||||||
MsgNew^.StartNewMsg;
|
MsgNew^.StartNewMsg;
|
||||||
|
|
||||||
|
@ -3151,7 +3158,7 @@ Begin
|
||||||
{ notifications out to the sysop for various things (configurable) }
|
{ notifications out to the sysop for various things (configurable) }
|
||||||
{ also could be used in mass email rewrite and qwk .REP rewrite }
|
{ also could be used in mass email rewrite and qwk .REP rewrite }
|
||||||
|
|
||||||
If Not OpenCreateBase(MsgBase, MBase) Then Begin
|
If Not MBaseOpenCreate(MsgBase, MBase, Session.TempPath) Then Begin
|
||||||
MBase := Old;
|
MBase := Old;
|
||||||
Session.User.IgnoreGroup := SaveGroup;
|
Session.User.IgnoreGroup := SaveGroup;
|
||||||
|
|
||||||
|
@ -3238,7 +3245,7 @@ Begin
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If OpenCreateBase (MsgBase, MBase) Then Begin
|
If MBaseOpenCreate (MsgBase, MBase, Session.TempPath) Then Begin
|
||||||
MsgBase^.SeekFirst (1);
|
MsgBase^.SeekFirst (1);
|
||||||
|
|
||||||
While MsgBase^.SeekFound Do Begin
|
While MsgBase^.SeekFound Do Begin
|
||||||
|
@ -3289,6 +3296,7 @@ End;
|
||||||
Procedure TMsgBase.SetMessagePointers (ForceGlobal: Boolean);
|
Procedure TMsgBase.SetMessagePointers (ForceGlobal: Boolean);
|
||||||
Var
|
Var
|
||||||
NewDate : LongInt;
|
NewDate : LongInt;
|
||||||
|
TempBase : RecMessageBase;
|
||||||
|
|
||||||
Procedure UpdateBase;
|
Procedure UpdateBase;
|
||||||
Var
|
Var
|
||||||
|
@ -3296,12 +3304,12 @@ Var
|
||||||
Begin
|
Begin
|
||||||
Found := False;
|
Found := False;
|
||||||
|
|
||||||
Case MBase.BaseType of
|
Case TempBase.BaseType of
|
||||||
0 : MsgBase := New(PMsgBaseJAM, Init);
|
0 : MsgBase := New(PMsgBaseJAM, Init);
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
||||||
|
|
||||||
If MsgBase^.OpenMsgBase Then Begin
|
If MsgBase^.OpenMsgBase Then Begin
|
||||||
MsgBase^.SeekFirst(1);
|
MsgBase^.SeekFirst(1);
|
||||||
|
@ -3344,14 +3352,18 @@ Begin
|
||||||
|
|
||||||
If ForceGlobal Then Begin
|
If ForceGlobal Then Begin
|
||||||
ioReset (MBaseFile, SizeOf(RecMessageBase), fmRWDN);
|
ioReset (MBaseFile, SizeOf(RecMessageBase), fmRWDN);
|
||||||
ioRead (MBaseFile, MBase);
|
ioRead (MBaseFile, TempBase);
|
||||||
|
|
||||||
While Not Eof(MBaseFile) Do Begin
|
While Not Eof(MBaseFile) Do Begin
|
||||||
ioRead (MBaseFile, MBase);
|
ioRead (MBaseFile, TempBase);
|
||||||
|
|
||||||
UpdateBase;
|
UpdateBase;
|
||||||
End;
|
End;
|
||||||
End Else
|
End Else Begin
|
||||||
|
TempBase := MBase;
|
||||||
|
|
||||||
UpdateBase;
|
UpdateBase;
|
||||||
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBase.MessageNewScan (Data: String);
|
Procedure TMsgBase.MessageNewScan (Data: String);
|
||||||
|
@ -3844,7 +3856,7 @@ Begin
|
||||||
// 3) add autosig? if we cannot use the assignmsgdata things
|
// 3) add autosig? if we cannot use the assignmsgdata things
|
||||||
Result := False;
|
Result := False;
|
||||||
|
|
||||||
If Not OpenCreateBase(Msg, mArea) Then Exit;
|
If Not MBaseOpenCreate(Msg, mArea, Session.TempPath) Then Exit;
|
||||||
|
|
||||||
Msg^.StartNewMsg;
|
Msg^.StartNewMsg;
|
||||||
Msg^.SetLocal (True);
|
Msg^.SetLocal (True);
|
||||||
|
@ -4238,7 +4250,7 @@ Var
|
||||||
Begin
|
Begin
|
||||||
MsgAdded := 0;
|
MsgAdded := 0;
|
||||||
|
|
||||||
If Not OpenCreateBase(MsgBase, MBase) Then Exit;
|
If Not MBaseOpenCreate(MsgBase, MBase, Session.TempPath) Then Exit;
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(231));
|
Session.io.OutFull (Session.GetPrompt(231));
|
||||||
|
|
||||||
|
@ -4389,7 +4401,7 @@ Begin
|
||||||
|
|
||||||
FileMode := 66;
|
FileMode := 66;
|
||||||
Old := MBase;
|
Old := MBase;
|
||||||
Temp := strPadR('Produced By ' + mysSoftwareID + ' v' + mysVersion + '. ' + CopyID, 128, ' ');
|
Temp := strPadR('Produced By ' + mysSoftwareID + ' v' + mysVersion + '. ' + mysCopyNotice, 128, ' ');
|
||||||
|
|
||||||
Assign (DataFile, Session.TempPath + 'messages.dat');
|
Assign (DataFile, Session.TempPath + 'messages.dat');
|
||||||
ReWrite (DataFile, 1);
|
ReWrite (DataFile, 1);
|
||||||
|
@ -4484,13 +4496,14 @@ Begin
|
||||||
Dispose(MsgBase, Done);
|
Dispose(MsgBase, Done);
|
||||||
End;
|
End;
|
||||||
Close (QwkLRFile);
|
Close (QwkLRFile);
|
||||||
|
Close (MBaseFile);
|
||||||
End;
|
End;
|
||||||
End Else
|
End Else
|
||||||
Session.io.OutFullLn (Session.GetPrompt(228));
|
Session.io.OutFullLn (Session.GetPrompt(228));
|
||||||
|
|
||||||
Session.User.IgnoreGroup := False;
|
Session.User.IgnoreGroup := False;
|
||||||
|
|
||||||
Close (MBaseFile);
|
// Close (MBaseFile);
|
||||||
|
|
||||||
MBase := Old;
|
MBase := Old;
|
||||||
|
|
||||||
|
@ -4521,7 +4534,7 @@ Var
|
||||||
Begin
|
Begin
|
||||||
OldBase := MBase;
|
OldBase := MBase;
|
||||||
|
|
||||||
If GetBaseByIndex(Idx, MBase) Then Begin
|
If GetMBaseByIndex(Idx, MBase) Then Begin
|
||||||
GetMessageScan;
|
GetMessageScan;
|
||||||
|
|
||||||
MScan.QwkScan := Mode;
|
MScan.QwkScan := Mode;
|
||||||
|
@ -4580,9 +4593,9 @@ Begin
|
||||||
|
|
||||||
QwkBlock[0] := #7;
|
QwkBlock[0] := #7;
|
||||||
|
|
||||||
If GetBaseByIndex(strS2I(QwkBlock), TempBase) Then Begin
|
If GetMBaseByIndex(strS2I(QwkBlock), TempBase) Then Begin
|
||||||
|
|
||||||
If OpenCreateBase(MsgBase, TempBase) Then Begin
|
If MBaseOpenCreate(MsgBase, TempBase, Session.TempPath) Then Begin
|
||||||
|
|
||||||
AssignMessageData(MsgBase, TempBase);
|
AssignMessageData(MsgBase, TempBase);
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ Unit BBS_MsgBase_ABS;
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
bbs_dataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
MsgMailType = (mmtNormal, mmtEchoMail, mmtNetMail);
|
MsgMailType = (mmtNormal, mmtEchoMail, mmtNetMail);
|
||||||
|
|
|
@ -6,8 +6,7 @@ Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
BBS_Common,
|
BBS_Records;
|
||||||
bbs_dataBase;
|
|
||||||
|
|
||||||
Type
|
Type
|
||||||
RecAnsiBufferChar = Record
|
RecAnsiBufferChar = Record
|
||||||
|
|
|
@ -11,9 +11,9 @@ Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_Common,
|
||||||
bbs_MsgBase_ABS;
|
BBS_MsgBase_ABS;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
JamIdxBufSize = 200;
|
JamIdxBufSize = 200;
|
||||||
|
|
|
@ -1,19 +1,13 @@
|
||||||
Unit bbs_MsgBase_QWK;
|
Unit bbs_MsgBase_QWK;
|
||||||
|
|
||||||
// networking notes:
|
|
||||||
// no control files
|
|
||||||
// no file list
|
|
||||||
// no index files
|
|
||||||
// extended = selectable by user's setting
|
|
||||||
// archive = selectable by user's setting
|
|
||||||
|
|
||||||
{$I M_OPS.PAS}
|
{$I M_OPS.PAS}
|
||||||
|
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_DataBase;
|
BBS_Records,
|
||||||
|
BBS_DataBase;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
QWK_EOL = #13#10;
|
QWK_EOL = #13#10;
|
||||||
|
@ -49,25 +43,28 @@ Type
|
||||||
End;
|
End;
|
||||||
|
|
||||||
TQWKEngine_HasAccess = Function (AcsStr: String) : Boolean;
|
TQWKEngine_HasAccess = Function (AcsStr: String) : Boolean;
|
||||||
|
TQWKEngine_Status = Procedure (Sender: Pointer; State: Byte);
|
||||||
|
|
||||||
TQWKEngine = Class
|
TQWKEngine = Class
|
||||||
|
StatusUpdate : TQWKEngine_Status;
|
||||||
|
HasAccess : TQWKEngine_HasAccess;
|
||||||
IsExtended : Boolean;
|
IsExtended : Boolean;
|
||||||
IsNetworked : Boolean;
|
IsNetworked : Boolean;
|
||||||
WorkPath : String;
|
WorkPath : String;
|
||||||
PacketID : String;
|
PacketID : String;
|
||||||
UserRecord : RecUser;
|
UserRecord : RecUser;
|
||||||
UserNumber : Cardinal;
|
UserNumber : Cardinal;
|
||||||
HasAccess : TQWKEngine_HasAccess;
|
TotalMessages : LongInt;
|
||||||
TotalMessages : Cardinal;
|
TotalBases : LongInt;
|
||||||
TotalBases : Cardinal;
|
|
||||||
RepOK : LongInt;
|
RepOK : LongInt;
|
||||||
RepFailed : LongInt;
|
RepFailed : LongInt;
|
||||||
RepBaseAdd : LongInt;
|
RepBaseAdd : LongInt;
|
||||||
RepBaseDel : LongInt;
|
RepBaseDel : LongInt;
|
||||||
DataFile : TFileBuffer;
|
DataFile : TFileBuffer;
|
||||||
|
MBase : RecMessageBase;
|
||||||
|
|
||||||
Constructor Create (QwkPath, QwkID: String; UN: Cardinal; UR: RecUser);
|
Constructor Create (QwkPath, QwkID: String; UN: Cardinal; UR: RecUser);
|
||||||
Procedure LONG2MSB (Index : LongInt; Var MS : BSingle);
|
Procedure LONG2MSB (Index: LongInt; Var MS: BSingle);
|
||||||
Procedure WriteDOORID;
|
Procedure WriteDOORID;
|
||||||
Procedure WriteTOREADEREXT;
|
Procedure WriteTOREADEREXT;
|
||||||
Procedure WriteCONTROLDAT;
|
Procedure WriteCONTROLDAT;
|
||||||
|
@ -80,7 +77,10 @@ Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_DateTime;
|
m_DateTime,
|
||||||
|
BBS_MsgBase_ABS,
|
||||||
|
BBS_MsgBase_JAM,
|
||||||
|
BBS_MsgBase_Squish;
|
||||||
|
|
||||||
Constructor TQWKEngine.Create (QwkPath, QwkID: String; UN: Cardinal; UR: RecUser);
|
Constructor TQWKEngine.Create (QwkPath, QwkID: String; UN: Cardinal; UR: RecUser);
|
||||||
Begin
|
Begin
|
||||||
|
@ -208,7 +208,7 @@ Begin
|
||||||
Write (TempFile, QWK_EOL);
|
Write (TempFile, QWK_EOL);
|
||||||
Write (TempFile, QWK_EOL);
|
Write (TempFile, QWK_EOL);
|
||||||
Write (TempFile, bbsCfg.SysopName + QWK_EOL);
|
Write (TempFile, bbsCfg.SysopName + QWK_EOL);
|
||||||
Write (TempFile, '0,' + bbsCfg.qwkBBSID + QWK_EOL);
|
Write (TempFile, '0,' + PacketID + QWK_EOL);
|
||||||
Write (TempFile, DateDos2Str(CurDateDos, 1), ',', TimeDos2Str(CurDateDos, 0) + QWK_EOL);
|
Write (TempFile, DateDos2Str(CurDateDos, 1), ',', TimeDos2Str(CurDateDos, 0) + QWK_EOL);
|
||||||
Write (TempFile, strUpper(UserRecord.Handle) + QWK_EOL);
|
Write (TempFile, strUpper(UserRecord.Handle) + QWK_EOL);
|
||||||
Write (TempFile, QWK_EOL);
|
Write (TempFile, QWK_EOL);
|
||||||
|
@ -254,6 +254,7 @@ Var
|
||||||
LastRead : LongInt;
|
LastRead : LongInt;
|
||||||
QwkIndex : LongInt;
|
QwkIndex : LongInt;
|
||||||
TooBig : Boolean;
|
TooBig : Boolean;
|
||||||
|
MsgBase : PMsgBaseABS;
|
||||||
|
|
||||||
Procedure DoString (Str: String);
|
Procedure DoString (Str: String);
|
||||||
Var
|
Var
|
||||||
|
@ -275,7 +276,7 @@ Var
|
||||||
Begin
|
Begin
|
||||||
MsgAdded := 0;
|
MsgAdded := 0;
|
||||||
|
|
||||||
If Not OpenCreateBase(MsgBase, MBase) Then Exit;
|
If Not MBaseOpenCreate(MsgBase, MBase, WorkPath) Then Exit;
|
||||||
|
|
||||||
LastRead := MsgBase^.GetLastRead(UserNumber) + 1;
|
LastRead := MsgBase^.GetLastRead(UserNumber) + 1;
|
||||||
|
|
||||||
|
@ -285,24 +286,24 @@ Begin
|
||||||
|
|
||||||
If Not IsNetworked Then
|
If Not IsNetworked Then
|
||||||
If ((bbsCfg.QwkMaxBase > 0) and (MsgAdded = bbsCfg.QwkMaxBase)) or
|
If ((bbsCfg.QwkMaxBase > 0) and (MsgAdded = bbsCfg.QwkMaxBase)) or
|
||||||
((bbsCfg.QwkMaxPacket > 0) and (TotalMsgs = bbsCfg.QwkMaxPacket)) Then Break;
|
((bbsCfg.QwkMaxPacket > 0) and (TotalMessages = bbsCfg.QwkMaxPacket)) Then Break;
|
||||||
|
|
||||||
MsgBase^.MsgStartUp;
|
MsgBase^.MsgStartUp;
|
||||||
|
|
||||||
If MsgBase^.IsPriv And Not Session.User.IsThisUser(MsgBase^.GetTo) Then Begin
|
If MsgBase^.IsPriv And Not IsThisUser(UserRecord, MsgBase^.GetTo) Then Begin
|
||||||
MsgBase^.SeekNext;
|
MsgBase^.SeekNext;
|
||||||
|
|
||||||
Continue;
|
Continue;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Inc (MsgAdded);
|
Inc (MsgAdded);
|
||||||
Inc (TotalMsgs);
|
Inc (TotalMessages);
|
||||||
|
|
||||||
LastRead := MsgBase^.GetMsgNum;
|
LastRead := MsgBase^.GetMsgNum;
|
||||||
Chunks := 0;
|
Chunks := 0;
|
||||||
BufStr := '';
|
BufStr := '';
|
||||||
TooBig := False;
|
TooBig := False;
|
||||||
QwkIndex := FileSize(DataFile) DIV 128 + 1;
|
QwkIndex := DataFile.FileSizeRaw DIV 128 + 1;
|
||||||
|
|
||||||
MsgBase^.MsgTxtStartUp;
|
MsgBase^.MsgTxtStartUp;
|
||||||
|
|
||||||
|
@ -335,6 +336,7 @@ Begin
|
||||||
' ' +
|
' ' +
|
||||||
' ';
|
' ';
|
||||||
|
|
||||||
|
If Not IsNetworked Then Begin
|
||||||
If MsgAdded = 1 Then Begin
|
If MsgAdded = 1 Then Begin
|
||||||
Assign (NdxFile, WorkPath + strPadL(strI2S(MBase.Index), 3, '0') + '.ndx');
|
Assign (NdxFile, WorkPath + strPadL(strI2S(MBase.Index), 3, '0') + '.ndx');
|
||||||
ReWrite (NdxFile);
|
ReWrite (NdxFile);
|
||||||
|
@ -342,6 +344,7 @@ Begin
|
||||||
|
|
||||||
LONG2MSB (QwkIndex, NdxHdr.MsgPos);
|
LONG2MSB (QwkIndex, NdxHdr.MsgPos);
|
||||||
Write (NdxFile, NdxHdr);
|
Write (NdxFile, NdxHdr);
|
||||||
|
End;
|
||||||
|
|
||||||
DataFile.WriteBlock (Header[1], 128);
|
DataFile.WriteBlock (Header[1], 128);
|
||||||
|
|
||||||
|
@ -386,9 +389,11 @@ Begin
|
||||||
MsgBase^.SeekNext;
|
MsgBase^.SeekNext;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If MsgAdded > 0 Then Close (NdxFile);
|
If Not IsNetworked And (MsgAdded > 0) Then
|
||||||
|
Close (NdxFile);
|
||||||
|
|
||||||
MsgBase^.CloseMsgBase;
|
MsgBase^.CloseMsgBase;
|
||||||
|
|
||||||
Dispose (MsgBase, Done);
|
Dispose (MsgBase, Done);
|
||||||
|
|
||||||
Result := LastRead;
|
Result := LastRead;
|
||||||
|
@ -400,7 +405,6 @@ Var
|
||||||
QwkLR : QwkLRRec;
|
QwkLR : QwkLRRec;
|
||||||
QwkLRFile : File of QwkLRRec;
|
QwkLRFile : File of QwkLRRec;
|
||||||
MBaseFile : File;
|
MBaseFile : File;
|
||||||
MBase : RecMessageBase;
|
|
||||||
MScan : MScanRec;
|
MScan : MScanRec;
|
||||||
Begin
|
Begin
|
||||||
DataFile := TFileBuffer.Create(4 * 1024);
|
DataFile := TFileBuffer.Create(4 * 1024);
|
||||||
|
@ -432,6 +436,8 @@ Begin
|
||||||
GetMessageScan (UserNumber, MBase, MScan);
|
GetMessageScan (UserNumber, MBase, MScan);
|
||||||
|
|
||||||
If MScan.QwkScan > 0 Then Begin
|
If MScan.QwkScan > 0 Then Begin
|
||||||
|
Inc (TotalBases);
|
||||||
|
|
||||||
QwkLR.Base := FilePos(MBaseFile);
|
QwkLR.Base := FilePos(MBaseFile);
|
||||||
QwkLR.Pos := WriteMSGDAT;
|
QwkLR.Pos := WriteMSGDAT;
|
||||||
|
|
||||||
|
@ -460,520 +466,3 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
End.
|
End.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Function TMsgBase.WriteMSGDAT (Extended: Boolean) : LongInt;
|
|
||||||
Var
|
|
||||||
DataFile : File;
|
|
||||||
NdxFile : File of QwkNdxHdr;
|
|
||||||
NdxHdr : QwkNdxHdr;
|
|
||||||
Header : String[128];
|
|
||||||
Chunks : Word;
|
|
||||||
BufStr : String[128];
|
|
||||||
MsgAdded : Integer;
|
|
||||||
LastRead : LongInt;
|
|
||||||
QwkIndex : LongInt;
|
|
||||||
TooBig : Boolean;
|
|
||||||
|
|
||||||
Procedure DoString (Str: String);
|
|
||||||
Var
|
|
||||||
Count : SmallInt;
|
|
||||||
Begin
|
|
||||||
For Count := 1 to Length(Str) Do Begin
|
|
||||||
BufStr := BufStr + Str[Count];
|
|
||||||
|
|
||||||
If BufStr[0] = #128 Then Begin
|
|
||||||
BlockWrite (DataFile, BufStr[1], 128);
|
|
||||||
|
|
||||||
BufStr := '';
|
|
||||||
End;
|
|
||||||
End;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Var
|
|
||||||
TempStr : String;
|
|
||||||
Begin
|
|
||||||
MsgAdded := 0;
|
|
||||||
|
|
||||||
If Not OpenCreateBase(MsgBase, MBase) Then Exit;
|
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(231));
|
|
||||||
|
|
||||||
Assign (DataFile, Session.TempPath + 'messages.dat');
|
|
||||||
Reset (DataFile, 1);
|
|
||||||
Seek (DataFile, FileSize(DataFile));
|
|
||||||
|
|
||||||
LastRead := MsgBase^.GetLastRead(Session.User.UserNum) + 1;
|
|
||||||
|
|
||||||
MsgBase^.SeekFirst (LastRead);
|
|
||||||
|
|
||||||
While MsgBase^.SeekFound Do Begin
|
|
||||||
If ((bbsCfg.QwkMaxBase > 0) and (MsgAdded = bbsCfg.QwkMaxBase)) or
|
|
||||||
((bbsCfg.QwkMaxPacket > 0) and (TotalMsgs = bbsCfg.QwkMaxPacket)) Then Break;
|
|
||||||
|
|
||||||
MsgBase^.MsgStartUp;
|
|
||||||
|
|
||||||
If MsgBase^.IsPriv And Not Session.User.IsThisUser(MsgBase^.GetTo) Then Begin
|
|
||||||
MsgBase^.SeekNext;
|
|
||||||
|
|
||||||
Continue;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Inc (MsgAdded);
|
|
||||||
Inc (TotalMsgs);
|
|
||||||
|
|
||||||
LastRead := MsgBase^.GetMsgNum;
|
|
||||||
Chunks := 0;
|
|
||||||
BufStr := '';
|
|
||||||
TooBig := False;
|
|
||||||
QwkIndex := FileSize(DataFile) DIV 128 + 1;
|
|
||||||
|
|
||||||
MsgBase^.MsgTxtStartUp;
|
|
||||||
|
|
||||||
While Not MsgBase^.EOM Do Begin
|
|
||||||
TempStr := MsgBase^.GetString(79);
|
|
||||||
|
|
||||||
If TempStr[1] = #1 Then Continue;
|
|
||||||
|
|
||||||
Inc (Chunks, Length(TempStr));
|
|
||||||
End;
|
|
||||||
|
|
||||||
If Chunks MOD 128 = 0 Then
|
|
||||||
Chunks := Chunks DIV 128 + 1
|
|
||||||
Else
|
|
||||||
Chunks := Chunks DIV 128 + 2;
|
|
||||||
|
|
||||||
Header :=
|
|
||||||
' ' +
|
|
||||||
strPadR(strI2S(MsgBase^.GetMsgNum), 7, ' ') +
|
|
||||||
MsgBase^.GetDate +
|
|
||||||
MsgBase^.GetTime +
|
|
||||||
strPadR(strUpper(MsgBase^.GetTo), 25, ' ') +
|
|
||||||
strPadR(strUpper(MsgBase^.GetFrom), 25, ' ') +
|
|
||||||
strPadR(strUpper(MsgBase^.GetSubj), 25, ' ') +
|
|
||||||
strPadR('', 12, ' ') +
|
|
||||||
strPadR(strI2S(MsgBase^.GetRefer), 8, ' ') +
|
|
||||||
strPadR(strI2S(Chunks), 6, ' ') +
|
|
||||||
#255 +
|
|
||||||
' ' +
|
|
||||||
' ' +
|
|
||||||
' ';
|
|
||||||
|
|
||||||
If MsgAdded = 1 Then Begin
|
|
||||||
Assign (NdxFile, Session.TempPath + strPadL(strI2S(MBase.Index), 3, '0') + '.ndx');
|
|
||||||
ReWrite (NdxFile);
|
|
||||||
End;
|
|
||||||
|
|
||||||
LONG2MSB (QwkIndex, NdxHdr.MsgPos);
|
|
||||||
Write (NdxFile, NdxHdr);
|
|
||||||
BlockWrite (DataFile, Header[1], 128);
|
|
||||||
|
|
||||||
If Extended Then Begin
|
|
||||||
If Length(MsgBase^.GetFrom) > 25 Then Begin
|
|
||||||
DoString('From: ' + MsgBase^.GetFrom + #227);
|
|
||||||
|
|
||||||
TooBig := True;
|
|
||||||
End;
|
|
||||||
|
|
||||||
If Length(MsgBase^.GetTo) > 25 Then Begin
|
|
||||||
DoString('To: ' + MsgBase^.GetTo + #227);
|
|
||||||
|
|
||||||
TooBig := True;
|
|
||||||
End;
|
|
||||||
|
|
||||||
If Length(MsgBase^.GetSubj) > 25 Then Begin
|
|
||||||
DoString('Subject: ' + MsgBase^.GetSubj + #227);
|
|
||||||
|
|
||||||
TooBig := True;
|
|
||||||
End;
|
|
||||||
|
|
||||||
If TooBig Then DoString(#227);
|
|
||||||
End;
|
|
||||||
|
|
||||||
MsgBase^.MsgTxtStartUp;
|
|
||||||
|
|
||||||
While Not MsgBase^.EOM Do Begin
|
|
||||||
TempStr := MsgBase^.GetString(79) + #227;
|
|
||||||
|
|
||||||
If TempStr[1] = #1 Then Continue;
|
|
||||||
|
|
||||||
DoString (TempStr);
|
|
||||||
End;
|
|
||||||
|
|
||||||
If BufStr <> '' Then Begin
|
|
||||||
BufStr := strPadR (BufStr, 128, ' ');
|
|
||||||
|
|
||||||
BlockWrite (DataFile, BufStr[1], 128);
|
|
||||||
End;
|
|
||||||
|
|
||||||
MsgBase^.SeekNext;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Close (DataFile);
|
|
||||||
|
|
||||||
If MsgAdded > 0 Then Close (NdxFile);
|
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := strI2S(MBase.Index);
|
|
||||||
Session.io.PromptInfo[2] := MBase.Name;
|
|
||||||
Session.io.PromptInfo[3] := MBase.QwkName;
|
|
||||||
Session.io.PromptInfo[4] := strI2S(MsgBase^.NumberOfMsgs);
|
|
||||||
Session.io.PromptInfo[5] := strI2S(MsgAdded);
|
|
||||||
|
|
||||||
MsgBase^.CloseMsgBase;
|
|
||||||
Dispose (MsgBase, Done);
|
|
||||||
|
|
||||||
Session.io.OutBS (Screen.CursorX, True);
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(232));
|
|
||||||
|
|
||||||
Result := LastRead;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Procedure TMsgBase.DownloadQWK (Extended: Boolean; Data: String);
|
|
||||||
Type
|
|
||||||
QwkLRRec = Record
|
|
||||||
Base : Word;
|
|
||||||
Pos : LongInt;
|
|
||||||
End;
|
|
||||||
Var
|
|
||||||
Old : RecMessageBase;
|
|
||||||
DataFile : File;
|
|
||||||
Temp : String;
|
|
||||||
QwkLR : QwkLRRec;
|
|
||||||
QwkLRFile : File of QwkLRRec;
|
|
||||||
Begin
|
|
||||||
If Session.User.ThisUser.QwkFiles Then
|
|
||||||
Session.FileBase.ExportFileList(True, True);
|
|
||||||
|
|
||||||
FileMode := 66;
|
|
||||||
Old := MBase;
|
|
||||||
Temp := strPadR('Produced By ' + mysSoftwareID + ' v' + mysVersion + '. ' + CopyID, 128, ' ');
|
|
||||||
|
|
||||||
Assign (DataFile, Session.TempPath + 'messages.dat');
|
|
||||||
ReWrite (DataFile, 1);
|
|
||||||
BlockWrite (DataFile, Temp[1], 128);
|
|
||||||
Close (DataFile);
|
|
||||||
|
|
||||||
Assign (QwkLRFile, Session.TempPath + 'qlr.dat');
|
|
||||||
ReWrite (QwkLRFile);
|
|
||||||
Reset (MBaseFile);
|
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(230));
|
|
||||||
|
|
||||||
TotalMsgs := 0;
|
|
||||||
TotalConf := 0;
|
|
||||||
|
|
||||||
Session.User.IgnoreGroup := Pos('/ALLGROUP', strUpper(Data)) > 0;
|
|
||||||
|
|
||||||
While Not Eof(MBaseFile) Do Begin
|
|
||||||
Read (MBaseFile, MBase);
|
|
||||||
|
|
||||||
If Session.User.Access(MBase.ReadACS) Then Begin
|
|
||||||
Inc (TotalConf);
|
|
||||||
|
|
||||||
GetMessageScan;
|
|
||||||
|
|
||||||
If MScan.QwkScan > 0 Then Begin
|
|
||||||
QwkLR.Base := FilePos(MBaseFile);
|
|
||||||
QwkLR.Pos := WriteMsgDAT(Extended);
|
|
||||||
|
|
||||||
Write (QwkLRFile, QwkLR);
|
|
||||||
End;
|
|
||||||
End;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Close (QwkLRFile);
|
|
||||||
|
|
||||||
WriteControlDAT (Extended);
|
|
||||||
WriteDOORID (Extended);
|
|
||||||
|
|
||||||
If Extended Then WriteTOREADEREXT;
|
|
||||||
|
|
||||||
If TotalMsgs > 0 Then Begin
|
|
||||||
Session.io.PromptInfo[1] := strI2S(TotalMsgs);
|
|
||||||
Session.io.PromptInfo[2] := strI2S(TotalConf);
|
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(233));
|
|
||||||
|
|
||||||
Temp := bbsCfg.qwkBBSID + '.qwk';
|
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(234));
|
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := Temp;
|
|
||||||
|
|
||||||
If FileExist(bbsCfg.QwkWelcome) Then FileCopy(bbsCfg.qwkWelcome, Session.TempPath + JustFile(bbsCfg.qwkWelcome));
|
|
||||||
If FileExist(bbsCfg.QwkNews) Then FileCopy(bbsCfg.qwkNews, Session.TempPath + JustFile(bbsCfg.qwkNews));
|
|
||||||
If FileExist(bbsCfg.QwkGoodbye) Then FileCopy(bbsCfg.qwkGoodbye, Session.TempPath + JustFile(bbsCfg.qwkGoodbye));
|
|
||||||
|
|
||||||
// Session.SystemLog('DEBUG: Archiving QWK packet');
|
|
||||||
|
|
||||||
If Session.LocalMode Then Begin
|
|
||||||
FileErase (bbsCfg.QWKPath + Temp);
|
|
||||||
|
|
||||||
Session.FileBase.ExecuteArchive (bbsCfg.QWKPath + Temp, Session.User.ThisUser.Archive, Session.TempPath + '*', 1);
|
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(235));
|
|
||||||
End Else Begin
|
|
||||||
Session.FileBase.ExecuteArchive (Session.TempPath + Temp, Session.User.ThisUser.Archive, Session.TempPath + '*', 1);
|
|
||||||
Session.FileBase.SendFile (Session.TempPath + Temp);
|
|
||||||
End;
|
|
||||||
|
|
||||||
If Session.io.GetYN (Session.GetPrompt(236), True) Then Begin
|
|
||||||
Reset (MBaseFile);
|
|
||||||
Reset (QwkLRFile);
|
|
||||||
|
|
||||||
While Not Eof(QwkLRFile) Do Begin
|
|
||||||
Read (QwkLRFile, QwkLR);
|
|
||||||
Seek (MBaseFile, QwkLR.Base - 1);
|
|
||||||
Read (MBaseFile, MBase);
|
|
||||||
|
|
||||||
Case MBase.BaseType of
|
|
||||||
0 : MsgBase := New(PMsgBaseJAM, Init);
|
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
|
||||||
End;
|
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
|
||||||
|
|
||||||
If MsgBase^.OpenMsgBase Then Begin
|
|
||||||
MsgBase^.SetLastRead (Session.User.UserNum, QwkLR.Pos);
|
|
||||||
MsgBase^.CloseMsgBase;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Dispose(MsgBase, Done);
|
|
||||||
End;
|
|
||||||
Close (QwkLRFile);
|
|
||||||
End;
|
|
||||||
End Else
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(228));
|
|
||||||
|
|
||||||
Session.User.IgnoreGroup := False;
|
|
||||||
|
|
||||||
Close (MBaseFile);
|
|
||||||
|
|
||||||
MBase := Old;
|
|
||||||
|
|
||||||
DirClean (Session.TempPath, '');
|
|
||||||
End;
|
|
||||||
|
|
||||||
Procedure TMsgBase.UploadREP;
|
|
||||||
Var
|
|
||||||
DataFile : File;
|
|
||||||
TempBase : RecMessageBase;
|
|
||||||
OldBase : RecMessageBase;
|
|
||||||
QwkHeader : QwkDATHdr;
|
|
||||||
QwkBlock : String[128];
|
|
||||||
Line : String;
|
|
||||||
A : SmallInt;
|
|
||||||
B : SmallInt;
|
|
||||||
Chunks : SmallInt;
|
|
||||||
LineCount : SmallInt;
|
|
||||||
IsControl : Boolean;
|
|
||||||
GotControl : Boolean;
|
|
||||||
ExtFile : Text;
|
|
||||||
StatOK : LongInt = 0;
|
|
||||||
StatFailed : LongInt = 0;
|
|
||||||
StatBaseAdd : LongInt = 0;
|
|
||||||
StatBaseDel : LongInt = 0;
|
|
||||||
|
|
||||||
Procedure QwkControl (Idx: LongInt; Mode: Byte);
|
|
||||||
Begin
|
|
||||||
OldBase := MBase;
|
|
||||||
|
|
||||||
If GetBaseByIndex(Idx, MBase) Then Begin
|
|
||||||
GetMessageScan;
|
|
||||||
|
|
||||||
MScan.QwkScan := Mode;
|
|
||||||
|
|
||||||
If Mode = 0 Then Inc (StatBaseDel);
|
|
||||||
If Mode = 1 Then Inc (StatBaseAdd);
|
|
||||||
|
|
||||||
SetMessageScan;
|
|
||||||
End;
|
|
||||||
|
|
||||||
MBase := OldBase;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Begin
|
|
||||||
If Session.LocalMode Then
|
|
||||||
Session.FileBase.ExecuteArchive (bbsCfg.QWKPath + bbsCfg.qwkBBSID + '.rep', Session.User.ThisUser.Archive, '*', 2)
|
|
||||||
Else Begin
|
|
||||||
If Session.FileBase.SelectProtocol(True, False) = 'Q' Then Exit;
|
|
||||||
|
|
||||||
Session.FileBase.ExecuteProtocol(1, Session.TempPath + bbsCfg.qwkBBSID + '.rep');
|
|
||||||
|
|
||||||
If Not Session.FileBase.DszSearch(bbsCfg.qwkBBSID + '.rep') Then Begin
|
|
||||||
Session.io.PromptInfo[1] := bbsCfg.qwkBBSID + '.rep';
|
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(84));
|
|
||||||
|
|
||||||
Exit;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Session.FileBase.ExecuteArchive (Session.TempPath + bbsCfg.qwkBBSID + '.rep', Session.User.ThisUser.Archive, '*', 2)
|
|
||||||
End;
|
|
||||||
|
|
||||||
Assign (DataFile, FileFind(Session.TempPath + bbsCfg.qwkBBSID + '.msg'));
|
|
||||||
|
|
||||||
If Not ioReset(DataFile, 1, fmRWDN) Then Begin
|
|
||||||
Session.io.OutFull (Session.GetPrompt(238));
|
|
||||||
DirClean (Session.TempPath, '');
|
|
||||||
Exit;
|
|
||||||
End;
|
|
||||||
|
|
||||||
BlockRead (DataFile, QwkBlock[1], 128);
|
|
||||||
QwkBlock[0] := #128;
|
|
||||||
|
|
||||||
If Pos(strUpper(bbsCfg.qwkBBSID), strUpper(QwkBlock)) = 0 Then Begin
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(239));
|
|
||||||
Close (DataFile);
|
|
||||||
DirClean(Session.TempPath, '');
|
|
||||||
Exit;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(240));
|
|
||||||
|
|
||||||
While Not Eof(DataFile) Do Begin
|
|
||||||
BlockRead (DataFile, QwkHeader, SizeOf(QwkHeader));
|
|
||||||
Move (QwkHeader.MsgNum, QwkBlock[1], 7);
|
|
||||||
|
|
||||||
QwkBlock[0] := #7;
|
|
||||||
|
|
||||||
If GetBaseByIndex(strS2I(QwkBlock), TempBase) Then Begin
|
|
||||||
|
|
||||||
If OpenCreateBase(MsgBase, TempBase) Then Begin
|
|
||||||
|
|
||||||
AssignMessageData(MsgBase, TempBase);
|
|
||||||
|
|
||||||
QwkBlock[0] := #25;
|
|
||||||
Move (QwkHeader.UpTo, QwkBlock[1], 25);
|
|
||||||
MsgBase^.SetTo(strStripR(QwkBlock, ' '));
|
|
||||||
|
|
||||||
Move (QwkHeader.Subject, QwkBlock[1], 25);
|
|
||||||
MsgBase^.SetSubj(strStripR(QwkBlock, ' '));
|
|
||||||
|
|
||||||
Move (QwkHeader.ReferNum, QwkBlock[1], 6);
|
|
||||||
QwkBlock[0] := #6;
|
|
||||||
MsgBase^.SetRefer(strS2I(strStripR(QwkBlock, ' ')));
|
|
||||||
|
|
||||||
Move(QwkHeader.NumChunk, QwkBlock[1], 6);
|
|
||||||
|
|
||||||
Chunks := strS2I(QwkBlock) - 1;
|
|
||||||
Line := '';
|
|
||||||
LineCount := 0;
|
|
||||||
IsControl := MsgBase^.GetTo = qwkControlName;
|
|
||||||
GotControl := False;
|
|
||||||
|
|
||||||
If IsControl And ((MsgBase^.GetSubj = 'ADD') or (MsgBase^.GetSubj = 'DROP')) Then
|
|
||||||
QwkControl (TempBase.Index, Ord(MsgBase^.GetSubj = 'ADD'));
|
|
||||||
|
|
||||||
For A := 1 to Chunks Do Begin
|
|
||||||
BlockRead (DataFile, QwkBlock[1], 128);
|
|
||||||
|
|
||||||
QwkBlock[0] := #128;
|
|
||||||
QwkBlock := strStripR(QwkBlock, ' ');
|
|
||||||
|
|
||||||
For B := 1 to Length(QwkBlock) Do Begin
|
|
||||||
If QwkBlock[B] = #227 Then Begin
|
|
||||||
Inc (LineCount);
|
|
||||||
|
|
||||||
If (LineCount < 4) and (Copy(Line, 1, 5) = 'From:') Then
|
|
||||||
GotControl := True
|
|
||||||
// Mystic uses the username of the person who uploaded the
|
|
||||||
// reply package, based on the alias/realname setting of the
|
|
||||||
// base itself. This prevents people from spoofing "From"
|
|
||||||
// fields.
|
|
||||||
// If QWK networking will need to allow this of course
|
|
||||||
Else
|
|
||||||
If (LineCount < 4) and (Copy(Line, 1, 3) = 'To:') Then Begin
|
|
||||||
MsgBase^.SetTo(strStripB(Copy(Line, 4, Length(Line)), ' '));
|
|
||||||
GotControl := True;
|
|
||||||
End Else
|
|
||||||
If (LineCount < 4) and (Copy(Line, 1, 8) = 'Subject:') Then Begin
|
|
||||||
MsgBase^.SetSubj(strStripB(Copy(Line, 9, Length(Line)), ' '));
|
|
||||||
GotControl := True;
|
|
||||||
End Else
|
|
||||||
If GotControl And (Line = '') Then
|
|
||||||
GotControl := False
|
|
||||||
Else
|
|
||||||
MsgBase^.DoStringLn(Line);
|
|
||||||
|
|
||||||
Line := '';
|
|
||||||
End Else
|
|
||||||
Line := Line + QwkBlock[B];
|
|
||||||
End;
|
|
||||||
End;
|
|
||||||
|
|
||||||
If Line <> '' Then MsgBase^.DoStringLn(Line);
|
|
||||||
|
|
||||||
If TempBase.NetType > 0 Then Begin
|
|
||||||
MsgBase^.DoStringLn (#13 + '--- ' + mysSoftwareID + '/QWK v' + mysVersion + ' (' + OSID + ')');
|
|
||||||
MsgBase^.DoStringLn (' * Origin: ' + ResolveOrigin(TempBase) + ' (' + strAddr2Str(MsgBase^.GetOrigAddr) + ')');
|
|
||||||
End;
|
|
||||||
|
|
||||||
If Not IsControl Then Begin
|
|
||||||
MsgBase^.WriteMsg;
|
|
||||||
|
|
||||||
Inc (StatOK);
|
|
||||||
Inc (Session.User.ThisUser.Posts);
|
|
||||||
Inc (Session.HistoryPosts);
|
|
||||||
End;
|
|
||||||
|
|
||||||
MsgBase^.CloseMsgBase;
|
|
||||||
|
|
||||||
Dispose (MsgBase, Done);
|
|
||||||
End Else
|
|
||||||
Inc (StatFailed);
|
|
||||||
End Else
|
|
||||||
Inc (StatFailed);
|
|
||||||
End;
|
|
||||||
|
|
||||||
Close (DataFile);
|
|
||||||
|
|
||||||
Assign (ExtFile, FileFind(Session.TempPath + 'todoor.ext'));
|
|
||||||
{$I-} Reset (ExtFile); {$I+}
|
|
||||||
|
|
||||||
If IoResult = 0 Then Begin
|
|
||||||
While Not Eof(ExtFile) Do Begin
|
|
||||||
ReadLn (ExtFile, Line);
|
|
||||||
|
|
||||||
If strWordGet(1, Line, ' ') = 'AREA' Then Begin
|
|
||||||
QwkBlock := strWordGet(3, Line, ' ');
|
|
||||||
|
|
||||||
If Pos('a', QwkBlock) > 0 Then QwkControl(strS2I(strWordGet(2, Line, ' ')), 1);
|
|
||||||
If Pos('D', QwkBlock) > 0 Then QwkControl(strS2I(strWordGet(2, Line, ' ')), 0);
|
|
||||||
End;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Close (ExtFile);
|
|
||||||
End;
|
|
||||||
|
|
||||||
DirClean (Session.TempPath, '');
|
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := strI2S(StatOK);
|
|
||||||
Session.io.PromptInfo[2] := strI2S(StatFailed);
|
|
||||||
Session.io.PromptInfo[3] := strI2S(StatBaseAdd);
|
|
||||||
Session.io.PromptInfo[4] := strI2S(StatBaseDel);
|
|
||||||
|
|
||||||
Session.io.OutFullLn(Session.GetPrompt(503));
|
|
||||||
End;
|
|
||||||
|
|
||||||
End.
|
|
||||||
|
|
||||||
// need one of these for the file list compiler now too which MAYBE can be
|
|
||||||
// used in MUTIL also. lets template and build that out first.. then...
|
|
||||||
// create and upload QWK/REP packets without relying on BBS specific stuff
|
|
||||||
|
|
||||||
Type
|
|
||||||
TMsgBaseQWK = Class
|
|
||||||
User : RecUser;
|
|
||||||
Extended : Boolean;
|
|
||||||
|
|
||||||
Constructor Create (UD: RecUser; Ext: Boolean);
|
|
||||||
Function CreatePacket : Boolean;
|
|
||||||
Function ProcessReply (bbsid, temppath, usernum, var user, forcefrom ): Boolean;
|
|
||||||
Destructor Destroy; Override;
|
|
||||||
End;
|
|
||||||
|
|
|
@ -5,9 +5,8 @@ Unit BBS_MsgBase_Squish;
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
BBS_MsgBase_Abs,
|
BBS_Records,
|
||||||
BBS_Common,
|
BBS_MsgBase_ABS,
|
||||||
bbs_dataBase,
|
|
||||||
DOS;
|
DOS;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
|
|
|
@ -12,11 +12,12 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_NodeInfo,
|
BBS_Records,
|
||||||
bbs_Common,
|
BBS_DataBase,
|
||||||
bbs_dataBase,
|
BBS_Common,
|
||||||
bbs_User,
|
BBS_NodeInfo,
|
||||||
bbs_Core;
|
BBS_User,
|
||||||
|
BBS_Core;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
ChatSize : Integer;
|
ChatSize : Integer;
|
||||||
|
@ -59,12 +60,12 @@ Begin
|
||||||
Read (RoomFile, Room);
|
Read (RoomFile, Room);
|
||||||
Close (RoomFile);
|
Close (RoomFile);
|
||||||
|
|
||||||
Chat.Room := R;
|
Session.Chat.Room := R;
|
||||||
CurRoom := R;
|
CurRoom := R;
|
||||||
|
|
||||||
Assign (CF, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat');
|
Assign (CF, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat');
|
||||||
Reset (CF);
|
Reset (CF);
|
||||||
Write (CF, Chat);
|
Write (CF, Session.Chat);
|
||||||
Close (CF);
|
Close (CF);
|
||||||
|
|
||||||
Send_Node_Message (5, strI2S(Session.NodeNum) + ';' + 'Now chatting in channel ' + strI2S(CurRoom), 0); //++lang
|
Send_Node_Message (5, strI2S(Session.NodeNum) + ';' + 'Now chatting in channel ' + strI2S(CurRoom), 0); //++lang
|
||||||
|
@ -367,13 +368,13 @@ Begin
|
||||||
|
|
||||||
Set_Node_Action (Session.GetPrompt(347));
|
Set_Node_Action (Session.GetPrompt(347));
|
||||||
|
|
||||||
Avail := Chat.Available;
|
Avail := Session.Chat.Available;
|
||||||
Chat.InChat := True;
|
Session.Chat.InChat := True;
|
||||||
Chat.Available := False;
|
Session.Chat.Available := False;
|
||||||
|
|
||||||
Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat');
|
Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat');
|
||||||
Reset (ChatFile);
|
Reset (ChatFile);
|
||||||
Write (ChatFile, Chat);
|
Write (ChatFile, Session.Chat);
|
||||||
Close (ChatFile);
|
Close (ChatFile);
|
||||||
|
|
||||||
FileErase(Session.TempPath + 'chat.tmp');
|
FileErase(Session.TempPath + 'chat.tmp');
|
||||||
|
@ -478,14 +479,14 @@ Begin
|
||||||
|
|
||||||
Session.io.GetKeyCallBack := NIL;
|
Session.io.GetKeyCallBack := NIL;
|
||||||
|
|
||||||
Chat.InChat := False;
|
Session.Chat.InChat := False;
|
||||||
Chat.Available := Avail;
|
Session.Chat.Available := Avail;
|
||||||
|
|
||||||
Session.AllowMessages := True;
|
Session.AllowMessages := True;
|
||||||
|
|
||||||
Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat');
|
Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat');
|
||||||
Reset (ChatFile);
|
Reset (ChatFile);
|
||||||
Write (ChatFile, Chat);
|
Write (ChatFile, Session.Chat);
|
||||||
Close (ChatFile);
|
Close (ChatFile);
|
||||||
|
|
||||||
FileErase(Session.TempPath + 'chat.tmp');
|
FileErase(Session.TempPath + 'chat.tmp');
|
||||||
|
|
|
@ -5,8 +5,7 @@ Unit bbs_NodeInfo;
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
bbs_Common,
|
BBS_Records;
|
||||||
bbs_dataBase;
|
|
||||||
|
|
||||||
Function GetChatRecord (Node: Byte; Var Chat: ChatRec) : Boolean;
|
Function GetChatRecord (Node: Byte; Var Chat: ChatRec) : Boolean;
|
||||||
Function IsUserOnline (UserName: String) : Word;
|
Function IsUserOnline (UserName: String) : Word;
|
||||||
|
@ -22,9 +21,11 @@ Uses
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_Core,
|
BBS_DataBase,
|
||||||
bbs_User,
|
BBS_Common,
|
||||||
bbs_UserChat;
|
BBS_Core,
|
||||||
|
BBS_User,
|
||||||
|
BBS_UserChat;
|
||||||
|
|
||||||
Function GetChatRecord (Node: Byte; Var Chat: ChatRec) : Boolean;
|
Function GetChatRecord (Node: Byte; Var Chat: ChatRec) : Boolean;
|
||||||
Begin
|
Begin
|
||||||
|
@ -62,25 +63,26 @@ Begin
|
||||||
ReWrite (ChatFile);
|
ReWrite (ChatFile);
|
||||||
|
|
||||||
If Action <> '' Then Begin
|
If Action <> '' Then Begin
|
||||||
Chat.Active := True;
|
Session.Chat.Active := True;
|
||||||
Chat.Name := Session.User.ThisUser.Handle;
|
Session.Chat.Name := Session.User.ThisUser.Handle;
|
||||||
Chat.Location := Session.User.ThisUser.City;
|
Session.Chat.Location := Session.User.ThisUser.City;
|
||||||
Chat.Action := Action;
|
Session.Chat.Action := Action;
|
||||||
Chat.Gender := Session.User.ThisUser.Gender;
|
Session.Chat.Gender := Session.User.ThisUser.Gender;
|
||||||
Chat.Age := DaysAgo(Session.User.ThisUser.Birthday, 1) DIV 365;
|
Session.Chat.Age := DaysAgo(Session.User.ThisUser.Birthday, 1) DIV 365;
|
||||||
|
|
||||||
If Session.LocalMode Then
|
If Session.LocalMode Then
|
||||||
Chat.Baud := 'LOCAL' {++lang}
|
Session.Chat.Baud := 'LOCAL' {++lang}
|
||||||
Else
|
Else
|
||||||
Chat.Baud := 'TELNET'; {++lang}
|
Session.Chat.Baud := 'TELNET'; {++lang}
|
||||||
End Else Begin
|
End Else Begin
|
||||||
Chat.Active := False;
|
Session.Chat.Active := False;
|
||||||
Chat.Invisible := False;
|
Session.Chat.Invisible := False;
|
||||||
Chat.Available := False;
|
Session.Chat.Available := False;
|
||||||
Chat.Age := 0;
|
Session.Chat.Age := 0;
|
||||||
Chat.Gender := '?';
|
Session.Chat.Gender := '?';
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Write (ChatFile, Chat);
|
Write (ChatFile, Session.Chat);
|
||||||
Close (ChatFile);
|
Close (ChatFile);
|
||||||
|
|
||||||
{$IFDEF WINDOWS}
|
{$IFDEF WINDOWS}
|
||||||
|
|
|
@ -6,7 +6,8 @@ Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
BBS_Common,
|
BBS_Common,
|
||||||
bbs_DataBase;
|
BBS_Records,
|
||||||
|
BBS_DataBase;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
RecNodeSearch = Record
|
RecNodeSearch = Record
|
||||||
|
|
|
@ -8,14 +8,15 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
bbs_Common,
|
BBS_Records,
|
||||||
bbs_dataBase,
|
BBS_DataBase,
|
||||||
bbs_General,
|
BBS_Common,
|
||||||
bbs_MsgBase,
|
BBS_General,
|
||||||
bbs_FileBase,
|
BBS_MsgBase,
|
||||||
bbs_Menus,
|
BBS_FileBase,
|
||||||
bbs_NodeInfo,
|
BBS_Menus,
|
||||||
mpl_Execute;
|
BBS_NodeInfo,
|
||||||
|
MPL_Execute;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
TBBSUser = Class
|
TBBSUser = Class
|
||||||
|
@ -74,7 +75,7 @@ Type
|
||||||
Implementation
|
Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
bbs_Core;
|
BBS_Core;
|
||||||
|
|
||||||
Constructor TBBSUser.Create (Var Owner: Pointer);
|
Constructor TBBSUser.Create (Var Owner: Pointer);
|
||||||
Begin
|
Begin
|
||||||
|
@ -166,8 +167,8 @@ Var
|
||||||
'M' : Res := strS2I(Data) < strS2I(Copy(TimeDos2Str(CurDateDos, 0), 4, 2));
|
'M' : Res := strS2I(Data) < strS2I(Copy(TimeDos2Str(CurDateDos, 0), 4, 2));
|
||||||
'N' : Res := strS2I(Data) = Session.NodeNum;
|
'N' : Res := strS2I(Data) = Session.NodeNum;
|
||||||
'O' : Case Data[1] of
|
'O' : Case Data[1] of
|
||||||
'A' : Res := Chat.Available;
|
'A' : Res := Session.Chat.Available;
|
||||||
'I' : Res := Chat.Invisible;
|
'I' : Res := Session.Chat.Invisible;
|
||||||
'K' : Res := AcsOkFlag;
|
'K' : Res := AcsOkFlag;
|
||||||
'M' : Begin
|
'M' : Begin
|
||||||
Res := Access(Session.Msgs.MBase.SysopACS);
|
Res := Access(Session.Msgs.MBase.SysopACS);
|
||||||
|
@ -1026,9 +1027,11 @@ Begin
|
||||||
Write (UserFile, ThisUser);
|
Write (UserFile, ThisUser);
|
||||||
Close (UserFile);
|
Close (UserFile);
|
||||||
|
|
||||||
Reset (ConfigFile);
|
PutBaseConfiguration(bbsCfg);
|
||||||
Write (ConfigFile, bbsCfg);
|
|
||||||
Close (ConfigFile);
|
// Reset (ConfigFile);
|
||||||
|
// Write (ConfigFile, bbsCfg);
|
||||||
|
// Close (ConfigFile);
|
||||||
|
|
||||||
Session.SystemLog ('Created Account: ' + ThisUser.Handle);
|
Session.SystemLog ('Created Account: ' + ThisUser.Handle);
|
||||||
|
|
||||||
|
@ -1056,14 +1059,14 @@ Begin
|
||||||
|
|
||||||
{$IFDEF LOGGING} Session.SystemLog('Logon3'); {$ENDIF}
|
{$IFDEF LOGGING} Session.SystemLog('Logon3'); {$ENDIF}
|
||||||
|
|
||||||
Chat.Available := True;
|
Session.Chat.Available := True;
|
||||||
|
|
||||||
If Access(bbsCfg.AcsInvisLogin) Then
|
If Access(bbsCfg.AcsInvisLogin) Then
|
||||||
Chat.Invisible := Session.io.GetYN(Session.GetPrompt(308), False);
|
Session.Chat.Invisible := Session.io.GetYN(Session.GetPrompt(308), False);
|
||||||
|
|
||||||
{ update last caller information }
|
{ update last caller information }
|
||||||
|
|
||||||
If Not Session.LocalMode And Not Chat.Invisible And (ThisUser.Flags AND UserNoLastCall = 0) Then Begin
|
If Not Session.LocalMode And Not Session.Chat.Invisible And (ThisUser.Flags AND UserNoLastCall = 0) Then Begin
|
||||||
Reset (LastOnFile);
|
Reset (LastOnFile);
|
||||||
|
|
||||||
If FileSize(LastOnFile) >= 10 Then
|
If FileSize(LastOnFile) >= 10 Then
|
||||||
|
@ -1262,7 +1265,7 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Session.io.OutFullLn ('|CL' + mysSoftwareID + ' v' + mysVersion + ' for ' + OSID + ' Node |ND');
|
Session.io.OutFullLn ('|CL' + mysSoftwareID + ' v' + mysVersion + ' for ' + OSID + ' Node |ND');
|
||||||
Session.io.OutFullLn (CopyID);
|
Session.io.OutFullLn (mysCopyNotice);
|
||||||
|
|
||||||
If bbsCfg.DefTermMode = 0 Then
|
If bbsCfg.DefTermMode = 0 Then
|
||||||
GetGraphics
|
GetGraphics
|
||||||
|
@ -1426,11 +1429,11 @@ Begin
|
||||||
Session.LoadThemeData(Data);
|
Session.LoadThemeData(Data);
|
||||||
15 : GetEditor(True);
|
15 : GetEditor(True);
|
||||||
16 : If Access(bbsCfg.AcsInvisLogin) Then Begin
|
16 : If Access(bbsCfg.AcsInvisLogin) Then Begin
|
||||||
Chat.Invisible := Not Chat.Invisible;
|
Session.Chat.Invisible := Not Session.Chat.Invisible;
|
||||||
Set_Node_Action (Chat.Action);
|
Set_Node_Action (Session.Chat.Action);
|
||||||
End;
|
End;
|
||||||
17 : GetFileList(True);
|
17 : GetFileList(True);
|
||||||
18 : Chat.Available := Not Chat.Available;
|
18 : Session.Chat.Available := Not Session.Chat.Available;
|
||||||
19 : GetHotKeys(True);
|
19 : GetHotKeys(True);
|
||||||
20 : GetMsgList(True);
|
20 : GetMsgList(True);
|
||||||
21 : ThisUser.UseLBIndex := Not ThisUser.UseLBIndex;
|
21 : ThisUser.UseLBIndex := Not ThisUser.UseLBIndex;
|
||||||
|
|
|
@ -13,10 +13,10 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
bbs_Core,
|
BBS_Records,
|
||||||
bbs_Common,
|
BBS_DataBase,
|
||||||
bbs_dataBase,
|
BBS_Core,
|
||||||
bbs_NodeInfo;
|
BBS_NodeInfo;
|
||||||
|
|
||||||
Procedure PageUserForChat;
|
Procedure PageUserForChat;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -542,6 +542,8 @@ Begin
|
||||||
|
|
||||||
Console.SetWindowTitle(WinTitle);
|
Console.SetWindowTitle(WinTitle);
|
||||||
|
|
||||||
|
// process command lines here and exit
|
||||||
|
|
||||||
If Not ServerStartup Then Begin
|
If Not ServerStartup Then Begin
|
||||||
Console.ClearScreen;
|
Console.ClearScreen;
|
||||||
Console.WriteLine('ERROR: No servers are configured as active.');
|
Console.WriteLine('ERROR: No servers are configured as active.');
|
||||||
|
|
|
@ -691,6 +691,9 @@ Var
|
||||||
Res : LongInt;
|
Res : LongInt;
|
||||||
Begin
|
Begin
|
||||||
If LoggedIn Then Begin
|
If LoggedIn Then Begin
|
||||||
|
// if name = bbsid.qwk or if user is network and name is userid.qwk then
|
||||||
|
// send file here
|
||||||
|
// else do the normal stuff
|
||||||
TempPos := FindDirectory(TempBase);
|
TempPos := FindDirectory(TempBase);
|
||||||
|
|
||||||
If TempPos = -1 Then Begin
|
If TempPos = -1 Then Begin
|
||||||
|
|
|
@ -7,7 +7,8 @@ Interface
|
||||||
Uses
|
Uses
|
||||||
DOS,
|
DOS,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
bbs_dataBase,
|
BBS_Records,
|
||||||
|
BBS_DataBase,
|
||||||
BBS_Common;
|
BBS_Common;
|
||||||
|
|
||||||
{$I MPL_TYPES.PAS}
|
{$I MPL_TYPES.PAS}
|
||||||
|
|
|
@ -33,6 +33,7 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_IniReader,
|
m_IniReader,
|
||||||
|
BBS_Records,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
mUtil_ImportNA,
|
mUtil_ImportNA,
|
||||||
|
|
|
@ -14,7 +14,7 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
TotalFiles : Cardinal = 0;
|
TotalFiles : Cardinal = 0;
|
||||||
|
|
|
@ -8,7 +8,7 @@ Uses
|
||||||
m_Output,
|
m_Output,
|
||||||
m_IniReader,
|
m_IniReader,
|
||||||
mutil_Status,
|
mutil_Status,
|
||||||
bbs_DataBase,
|
bbs_Records,
|
||||||
bbs_MsgBase_Abs,
|
bbs_MsgBase_Abs,
|
||||||
bbs_MsgBase_Squish,
|
bbs_MsgBase_Squish,
|
||||||
bbs_MsgBase_JAM;
|
bbs_MsgBase_JAM;
|
||||||
|
|
|
@ -9,7 +9,7 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
bbs_DataBase,
|
BBS_Records,
|
||||||
mUtil_Common;
|
mUtil_Common;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
|
|
|
@ -17,10 +17,10 @@ Uses
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
mUtil_EchoCore,
|
mUtil_EchoCore,
|
||||||
bbs_DataBase,
|
BBS_Records,
|
||||||
bbs_MsgBase_ABS,
|
BBS_MsgBase_ABS,
|
||||||
bbs_MsgBase_JAM,
|
BBS_MsgBase_JAM,
|
||||||
bbs_MsgBase_Squish;
|
BBS_MsgBase_Squish;
|
||||||
|
|
||||||
Procedure AddToFLOQueue (FloName, PacketFN: String);
|
Procedure AddToFLOQueue (FloName, PacketFN: String);
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -13,7 +13,7 @@ Implementation
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Function ProcessedByAreaFix (Var PKT: TPKTReader) : Boolean;
|
Function ProcessedByAreaFix (Var PKT: TPKTReader) : Boolean;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -13,7 +13,7 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
AView,
|
AView,
|
||||||
bbs_DataBase,
|
BBS_Records,
|
||||||
BBS_MsgBase_ABS,
|
BBS_MsgBase_ABS,
|
||||||
BBS_MsgBase_JAM,
|
BBS_MsgBase_JAM,
|
||||||
BBS_MsgBase_Squish,
|
BBS_MsgBase_Squish,
|
||||||
|
|
|
@ -14,7 +14,7 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Procedure uImportFileBone;
|
Procedure uImportFileBone;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -14,7 +14,7 @@ Uses
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Procedure uImportFilesBBS;
|
Procedure uImportFilesBBS;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -14,7 +14,7 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Procedure uImportMessageBases;
|
Procedure uImportMessageBases;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -12,7 +12,7 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Procedure uImportNA;
|
Procedure uImportNA;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -11,10 +11,10 @@ Implementation
|
||||||
Uses
|
Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
m_Strings,
|
m_Strings,
|
||||||
|
BBS_Records,
|
||||||
|
BBS_Common,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status;
|
||||||
bbs_Common,
|
|
||||||
bbs_DataBase;
|
|
||||||
|
|
||||||
Procedure uPostMessages;
|
Procedure uPostMessages;
|
||||||
Const
|
Const
|
||||||
|
|
|
@ -13,7 +13,7 @@ Uses
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase,
|
bbs_Records,
|
||||||
bbs_MsgBase_ABS,
|
bbs_MsgBase_ABS,
|
||||||
bbs_MsgBase_JAM,
|
bbs_MsgBase_JAM,
|
||||||
bbs_MsgBase_Squish;
|
bbs_MsgBase_Squish;
|
||||||
|
|
|
@ -14,7 +14,7 @@ Uses
|
||||||
m_FileIO,
|
m_FileIO,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
TopListType = (TopCall, TopPost, TopDL, TopUL, TopPCR);
|
TopListType = (TopCall, TopPost, TopDL, TopUL, TopPCR);
|
||||||
|
|
|
@ -13,7 +13,7 @@ Uses
|
||||||
m_DateTime,
|
m_DateTime,
|
||||||
mUtil_Common,
|
mUtil_Common,
|
||||||
mUtil_Status,
|
mUtil_Status,
|
||||||
bbs_DataBase;
|
BBS_Records;
|
||||||
|
|
||||||
Procedure uMassUpload;
|
Procedure uMassUpload;
|
||||||
Var
|
Var
|
||||||
|
|
|
@ -41,6 +41,7 @@ Uses
|
||||||
m_Output,
|
m_Output,
|
||||||
m_Input,
|
m_Input,
|
||||||
m_Pipe,
|
m_Pipe,
|
||||||
|
BBS_Records,
|
||||||
bbs_Common,
|
bbs_Common,
|
||||||
bbs_DataBase,
|
bbs_DataBase,
|
||||||
bbs_Core,
|
bbs_Core,
|
||||||
|
|
|
@ -22,9 +22,10 @@
|
||||||
|
|
||||||
Const
|
Const
|
||||||
mysSoftwareID = 'Mystic BBS';
|
mysSoftwareID = 'Mystic BBS';
|
||||||
mysCopyYear = '1997-2013'; // its been a long time!
|
mysCopyYear = '1997-2013';
|
||||||
mysVersion = '1.10 A37'; // current version
|
mysVersion = '1.10 A37';
|
||||||
mysDataChanged = '1.10 A11'; // version of last records change
|
mysDataChanged = '1.10 A11';
|
||||||
|
mysCopyNotice = 'Copyright (C) ' + mysCopyYear + ' By James Coyle';
|
||||||
|
|
||||||
{$IFDEF WIN32}
|
{$IFDEF WIN32}
|
||||||
PathChar = '\';
|
PathChar = '\';
|
||||||
|
|
|
@ -37,6 +37,11 @@ BUGS AND POSSIBLE ISSUES
|
||||||
FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
|
- externalize qwk and file list compiler class. qwk for mystic/mis filelist
|
||||||
|
for mystic/mutil. add compiler templates, file include, and new vs all
|
||||||
|
generation for all.
|
||||||
|
- abstract ansi browser to be used for ansi archive viewer and sysop file
|
||||||
|
manager (as well as the ANSI gallery).
|
||||||
- when mutil is tossing a packet and auto creates an area figure out if there
|
- when mutil is tossing a packet and auto creates an area figure out if there
|
||||||
can be a way to automatically create the uplink back to the originating
|
can be a way to automatically create the uplink back to the originating
|
||||||
node.
|
node.
|
||||||
|
@ -49,7 +54,6 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
way which i think is the best approach actually.
|
way which i think is the best approach actually.
|
||||||
- ESC moves back in ANSI gallery only exits if dir = root?
|
- ESC moves back in ANSI gallery only exits if dir = root?
|
||||||
- Color, boxtype, and input configuration for configuration
|
- Color, boxtype, and input configuration for configuration
|
||||||
- Toggle base scan settings Select [A]ll, [D]eselect All
|
|
||||||
- global file editor like msg base
|
- global file editor like msg base
|
||||||
- redo voting booth externalize user storage and allow unlimited questions
|
- redo voting booth externalize user storage and allow unlimited questions
|
||||||
plus maybe categories. or at least up it to like 50 questions or
|
plus maybe categories. or at least up it to like 50 questions or
|
||||||
|
@ -64,7 +68,6 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
- Echomail export saves last scanned pointers
|
- Echomail export saves last scanned pointers
|
||||||
- Echomail export support for netmail routing
|
- Echomail export support for netmail routing
|
||||||
- FileFix / TIC
|
- FileFix / TIC
|
||||||
- Add "Add Export To" to global msgbase editor. Also Del Export?
|
|
||||||
! Use NetReply in RecMB also Reply to another base?
|
! Use NetReply in RecMB also Reply to another base?
|
||||||
- QWK put/get per individual users via FTP
|
- QWK put/get per individual users via FTP
|
||||||
- EXCLUDE from all files list. important.
|
- EXCLUDE from all files list. important.
|
||||||
|
@ -78,10 +81,6 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
- MUTILs new DIR import of msg bases could have optional config to reference
|
- MUTILs new DIR import of msg bases could have optional config to reference
|
||||||
a series of .NA files to get the name/description of bases.
|
a series of .NA files to get the name/description of bases.
|
||||||
- QWK via email
|
- QWK via email
|
||||||
- Either add Public/Private fusion type message base or allow reply via
|
|
||||||
email or netmail option.
|
|
||||||
- mUTIL scans MSGS directory and auto-creates anything that has data files
|
|
||||||
not related to a BBS message base.. uses a template
|
|
||||||
- Blind upload for single file upload (also message upload)
|
- Blind upload for single file upload (also message upload)
|
||||||
- Email validation
|
- Email validation
|
||||||
- Recode FCHECK into MUTIL, but also add the option to phsyically delete the
|
- Recode FCHECK into MUTIL, but also add the option to phsyically delete the
|
||||||
|
@ -91,8 +90,8 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
- Outbound telnet feature
|
- Outbound telnet feature
|
||||||
- Add "PREVIEW" option to message editors
|
- Add "PREVIEW" option to message editors
|
||||||
- Finish Threaded message reader
|
- Finish Threaded message reader
|
||||||
|
- Gallows Pole MPL
|
||||||
- Add "high roller/smack talk" into BlackJack
|
- Add "high roller/smack talk" into BlackJack
|
||||||
- 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.
|
||||||
- ANSI post-processor for message uploads via FSE
|
- ANSI post-processor for message uploads via FSE
|
||||||
|
@ -131,7 +130,6 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
- ANSI message upload post processor option: Auto/Disabled/Ask
|
- ANSI message upload post processor option: Auto/Disabled/Ask
|
||||||
- Finish optional user prompts
|
- Finish optional user prompts
|
||||||
- MCI code for FS ansi viewer?
|
- MCI code for FS ansi viewer?
|
||||||
- MCI code for # of files in current file area
|
|
||||||
- Redo random ANSI system to use A-Z instead of 1-9 can have upgrade util
|
- Redo random ANSI system to use A-Z instead of 1-9 can have upgrade util
|
||||||
rename them automatically.
|
rename them automatically.
|
||||||
- LastOn revamp make sure its not global and new stuff is populated
|
- LastOn revamp make sure its not global and new stuff is populated
|
||||||
|
@ -279,8 +277,6 @@ ReplaceLine
|
||||||
- Needs additional research
|
- Needs additional research
|
||||||
! POSSIBLE removal of local console in Windows and STDIO usage in Linux
|
! POSSIBLE removal of local console in Windows and STDIO usage in Linux
|
||||||
^ Massive performance increase possible here as well as:
|
^ Massive performance increase possible here as well as:
|
||||||
! POSSIBLE FTN tosser.
|
|
||||||
! POSSIBLE FTN mailer (transx, FTP, binkP)
|
|
||||||
! MIS event system (possible 1.10)
|
! MIS event system (possible 1.10)
|
||||||
! Password reset via email (possible 1.10)
|
! Password reset via email (possible 1.10)
|
||||||
! Email verification system (for access upgrades) (possible 1.10)
|
! Email verification system (for access upgrades) (possible 1.10)
|
||||||
|
@ -290,4 +286,59 @@ ReplaceLine
|
||||||
- Rewrite of MBBSWEB or integrated HTML server? still need a good designer
|
- Rewrite of MBBSWEB or integrated HTML server? still need a good designer
|
||||||
that actually will put a lot of time into it
|
that actually will put a lot of time into it
|
||||||
- Rewrite of ANSI template system (.ini files or mystic2 format?)
|
- Rewrite of ANSI template system (.ini files or mystic2 format?)
|
||||||
! Revamp logging system and add additional logging to MIS
|
|
||||||
|
=================================================
|
||||||
|
|
||||||
|
CODE RESTRUCTURE naming (possibly remove mystic_ prefix):
|
||||||
|
|
||||||
|
mystic
|
||||||
|
mystic_records
|
||||||
|
mystic_common (called db now)
|
||||||
|
mystic_server_binkp
|
||||||
|
mystic_server_telnet
|
||||||
|
mystic_server_ftp
|
||||||
|
mystic_server_pop3
|
||||||
|
mystic_server
|
||||||
|
mystic_client
|
||||||
|
mystic_client_smtp
|
||||||
|
mystic_server_events
|
||||||
|
mystic_cmd_server
|
||||||
|
mystic_cmd_fidopoll
|
||||||
|
mystic_cmd_terminal
|
||||||
|
mystic_class_binkp
|
||||||
|
mystic_class_qwk
|
||||||
|
mystic_class_menudata
|
||||||
|
mystic_class_msgbase
|
||||||
|
mystic_class_msgbase_jam
|
||||||
|
mystic_class_msgbase_squish
|
||||||
|
mystic_class_arcview
|
||||||
|
mystic_class_arcview_zip
|
||||||
|
mystic_class_arcview_rar
|
||||||
|
mystic_class_nodelist
|
||||||
|
mystic_class_logging (on-the-fly log rolling, trimming, etc)
|
||||||
|
mystic_config_filearea
|
||||||
|
mystic_ansi_intro
|
||||||
|
mystic_ansi_monitor
|
||||||
|
mystic_ansi_terminal
|
||||||
|
mystic_bbs_core
|
||||||
|
mystic_bbs_msgbase
|
||||||
|
mystic_bbs_filebase
|
||||||
|
mystic_bbs_general
|
||||||
|
mystic_bbs_doors
|
||||||
|
mystic_bbs_user
|
||||||
|
mystic_bbs_nodechat
|
||||||
|
mystic_bbs_userchat
|
||||||
|
mystic_bbs_sysopchat
|
||||||
|
mystic_bbs_ansibox
|
||||||
|
mystic_bbs_ansimenu
|
||||||
|
mystic_bbs_ansihelp
|
||||||
|
mystic_bbs_ansiinput
|
||||||
|
mystic_bbs_ansidir
|
||||||
|
mystic_bbs_lineedit
|
||||||
|
mystic_bbs_fulledit
|
||||||
|
mystic_bbs_menus
|
||||||
|
mystic_bbs_io
|
||||||
|
mystic_bbs_mplexecute
|
||||||
|
mystic_bbs_mpltypes
|
||||||
|
mystic_bbs_mplcommon
|
||||||
|
mystic_bbs_mplcompile
|
||||||
|
|
|
@ -3588,4 +3588,7 @@
|
||||||
wants to update their current base, and will instead force the update for
|
wants to update their current base, and will instead force the update for
|
||||||
all message bases.
|
all message bases.
|
||||||
|
|
||||||
|
! Mystic was changing the user's message base to the last base processed
|
||||||
|
when globally resetting the new message scan date.
|
||||||
|
|
||||||
<ALPHA 37 RELEASED>
|
<ALPHA 37 RELEASED>
|
||||||
|
|
Loading…
Reference in New Issue