Updates
This commit is contained in:
parent
dcf2911fa1
commit
f8a6bd6cb4
|
@ -70,7 +70,6 @@ Type
|
||||||
Private
|
Private
|
||||||
Procedure EditPercentBar (Var Bar: RecPercent);
|
Procedure EditPercentBar (Var Bar: RecPercent);
|
||||||
Function GetColorAttr (C: Byte) : Byte;
|
Function GetColorAttr (C: Byte) : Byte;
|
||||||
Function DrawAccessFlags (Var Flags: TMenuFormFlagsRec) : String;
|
|
||||||
Procedure EditAccessFlags (Var Flags: TMenuFormFlagsRec);
|
Procedure EditAccessFlags (Var Flags: TMenuFormFlagsRec);
|
||||||
Procedure AddBasic (HK: Char; D: String; X, Y, FX, FY, DS, FS, MS: Byte; I: FormItemType; P: Pointer; H: String);
|
Procedure AddBasic (HK: Char; D: String; X, Y, FX, FY, DS, FS, MS: Byte; I: FormItemType; P: Pointer; H: String);
|
||||||
Procedure BarON;
|
Procedure BarON;
|
||||||
|
@ -221,19 +220,6 @@ Begin
|
||||||
Box.Free;
|
Box.Free;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TAnsiMenuForm.DrawAccessFlags (Var Flags: TMenuFormFlagsRec) : String;
|
|
||||||
Var
|
|
||||||
Str : String;
|
|
||||||
Ch : Char;
|
|
||||||
Begin
|
|
||||||
Str := '';
|
|
||||||
|
|
||||||
For Ch := 'A' to 'Z' Do
|
|
||||||
If Ord(Ch) - 64 in Flags Then Str := Str + Ch Else Str := Str + '-';
|
|
||||||
|
|
||||||
Result := Str;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Procedure TAnsiMenuForm.EditAccessFlags (Var Flags: TMenuFormFlagsRec);
|
Procedure TAnsiMenuForm.EditAccessFlags (Var Flags: TMenuFormFlagsRec);
|
||||||
Var
|
Var
|
||||||
Box : TAnsiMenuBox;
|
Box : TAnsiMenuBox;
|
||||||
|
@ -552,7 +538,7 @@ Begin
|
||||||
ItemByte : WriteXY (FieldX, FieldY, cData, strPadR(strI2S(B^), FieldSize, ' '));
|
ItemByte : WriteXY (FieldX, FieldY, cData, strPadR(strI2S(B^), FieldSize, ' '));
|
||||||
ItemWord : WriteXY (FieldX, FieldY, cData, strPadR(strI2S(W^), FieldSize, ' '));
|
ItemWord : WriteXY (FieldX, FieldY, cData, strPadR(strI2S(W^), FieldSize, ' '));
|
||||||
ItemLong : WriteXY (FieldX, FieldY, cData, strPadR(strI2S(L^), FieldSize, ' '));
|
ItemLong : WriteXY (FieldX, FieldY, cData, strPadR(strI2S(L^), FieldSize, ' '));
|
||||||
ItemToggle : WriteXY (FieldX, FieldY, cData, StrPadR(strWordGet(B^ + 1 - MinNum, Toggle, ' '), FieldSize, ' '));
|
ItemToggle : WriteXY (FieldX, FieldY, cData, StrPadR(strReplace(strWordGet(B^ + 1 - MinNum, Toggle, ' '), '_', ' '), FieldSize, ' '));
|
||||||
ItemChar : WriteXY (FieldX, FieldY, cData, C^);
|
ItemChar : WriteXY (FieldX, FieldY, cData, C^);
|
||||||
ItemAttr : WriteXY (FieldX, FieldY, B^, ' Sample ');
|
ItemAttr : WriteXY (FieldX, FieldY, B^, ' Sample ');
|
||||||
ItemFlags : WriteXY (FieldX, FieldY, cData, DrawAccessFlags(F^));
|
ItemFlags : WriteXY (FieldX, FieldY, cData, DrawAccessFlags(F^));
|
||||||
|
|
|
@ -30,7 +30,7 @@ Type
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
Num_Cmds = 101;
|
Num_Cmds = 102;
|
||||||
MenuCmds : Array[1..Num_Cmds] of CmdRec = (
|
MenuCmds : Array[1..Num_Cmds] of CmdRec = (
|
||||||
// AUTOSIG MENU COMMANDS
|
// AUTOSIG MENU COMMANDS
|
||||||
( Name: 'AE'; Desc: 'Autosig editor' ),
|
( Name: 'AE'; Desc: 'Autosig editor' ),
|
||||||
|
@ -145,6 +145,7 @@ Const
|
||||||
( Name: '-N'; Desc: 'Ask Yes/No (default No)' ),
|
( Name: '-N'; Desc: 'Ask Yes/No (default No)' ),
|
||||||
( Name: '-P'; Desc: 'Prompt for a password' ),
|
( Name: '-P'; Desc: 'Prompt for a password' ),
|
||||||
( Name: '-S'; Desc: 'Add text to Sysop log' ),
|
( Name: '-S'; Desc: 'Add text to Sysop log' ),
|
||||||
|
( Name: '-R'; Desc: 'Reset OK ACS flags' ),
|
||||||
( Name: '-Y'; Desc: 'Ask Yes/No (default Yes)' ),
|
( Name: '-Y'; Desc: 'Ask Yes/No (default Yes)' ),
|
||||||
|
|
||||||
// SYSOP/EDITORS MENU COMMANDS
|
// SYSOP/EDITORS MENU COMMANDS
|
||||||
|
|
|
@ -691,11 +691,11 @@ 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);
|
||||||
|
|
||||||
Box.Header := ' Theme Edit ';
|
Box.Header := ' Theme Edit ';
|
||||||
|
|
||||||
VerticalLine (23, 7, 15);
|
VerticalLine (23, 7, 16);
|
||||||
|
|
||||||
Form.AddStr ('F', ' File Name' , 12, 7, 25, 7, 11, 20, 20, @Theme.FileName, Topic + 'Root theme filename');
|
Form.AddStr ('F', ' File Name' , 12, 7, 25, 7, 11, 20, 20, @Theme.FileName, Topic + 'Root theme filename');
|
||||||
Form.AddStr ('D', ' Description' , 10, 8, 25, 8, 13, 30, 40, @Theme.Desc, Topic + 'Theme description');
|
Form.AddStr ('D', ' Description' , 10, 8, 25, 8, 13, 30, 40, @Theme.Desc, Topic + 'Theme description');
|
||||||
|
@ -706,6 +706,7 @@ Begin
|
||||||
Form.AddBits ('F', ' Allow Fallback' , 7, 13, 25, 13, 16, ThmFallback, @Theme.Flags, Topic + 'Allow fallback to default paths?');
|
Form.AddBits ('F', ' Allow Fallback' , 7, 13, 25, 13, 16, ThmFallback, @Theme.Flags, Topic + 'Allow fallback to default paths?');
|
||||||
Form.AddBits ('C', ' Allow ASCII' , 10, 14, 25, 14, 13, ThmAllowASCII, @Theme.Flags, Topic + 'Allow ASCII users to use this theme?');
|
Form.AddBits ('C', ' Allow ASCII' , 10, 14, 25, 14, 13, ThmAllowASCII, @Theme.Flags, Topic + 'Allow ASCII users to use this theme?');
|
||||||
Form.AddBits ('N', ' Allow ANSI' , 11, 15, 25, 15, 12, ThmAllowANSI, @Theme.Flags, Topic + 'Allow ANSI users to use this theme?');
|
Form.AddBits ('N', ' Allow ANSI' , 11, 15, 25, 15, 12, ThmAllowANSI, @Theme.Flags, Topic + 'Allow ANSI users to use this theme?');
|
||||||
|
Form.AddTog ('O', ' Column Size' , 10, 16, 25, 16, 13, 9, 0, 1, '80_Column 40_Column', @Theme.ColumnSize, Topic + 'Column size of this theme');
|
||||||
|
|
||||||
Form.AddNone ('1', ' 1: Prompts' , 57, 7, 57, 7, 17, Topic + 'Edit prompts for this theme');
|
Form.AddNone ('1', ' 1: Prompts' , 57, 7, 57, 7, 17, Topic + 'Edit prompts for this theme');
|
||||||
Form.AddNone ('2', ' 2: Options' , 57, 8, 57, 8, 17, Topic + 'Edit general options for this theme');
|
Form.AddNone ('2', ' 2: Options' , 57, 8, 57, 8, 17, Topic + 'Edit general options for this theme');
|
||||||
|
|
|
@ -335,6 +335,8 @@ Begin
|
||||||
|
|
||||||
Configuration_EditUser (Session.User.ThisUser);
|
Configuration_EditUser (Session.User.ThisUser);
|
||||||
|
|
||||||
|
Screen.WriteXY (1, 24, 7, strRep(' ', 80));
|
||||||
|
|
||||||
Session.InUserEdit := False;
|
Session.InUserEdit := False;
|
||||||
Session.LocalMode := SavedLocal;
|
Session.LocalMode := SavedLocal;
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ Uses
|
||||||
|
|
||||||
Const
|
Const
|
||||||
WinConsoleTitle = mysSoftwareID + ' Node ';
|
WinConsoleTitle = mysSoftwareID + ' Node ';
|
||||||
CopyID = 'Copyright (C) ' + mysCopyYear + ' By James Coyle. All Rights Reserved.';
|
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
|
||||||
|
@ -44,6 +44,7 @@ Var
|
||||||
Config : RecConfig;
|
Config : RecConfig;
|
||||||
StatusPtr : Byte = 1;
|
StatusPtr : Byte = 1;
|
||||||
|
|
||||||
|
Function DrawAccessFlags (Var Flags: AccessFlagType) : String;
|
||||||
Procedure KillRecord (Var dFile; RecNum: LongInt; RecSize: Word);
|
Procedure KillRecord (Var dFile; RecNum: LongInt; RecSize: Word);
|
||||||
Procedure AddRecord (var dFile; RecNum: LongInt; RecSize: Word);
|
Procedure AddRecord (var dFile; RecNum: LongInt; RecSize: Word);
|
||||||
Function Bool_Search (Mask: String; Str: String) : Boolean;
|
Function Bool_Search (Mask: String; Str: String) : Boolean;
|
||||||
|
@ -68,6 +69,19 @@ Uses
|
||||||
bbs_General,
|
bbs_General,
|
||||||
MPL_Execute;
|
MPL_Execute;
|
||||||
|
|
||||||
|
Function DrawAccessFlags (Var Flags: AccessFlagType) : String;
|
||||||
|
Var
|
||||||
|
Ch : Char;
|
||||||
|
Begin
|
||||||
|
Result := '';
|
||||||
|
|
||||||
|
For Ch := 'A' to 'Z' Do
|
||||||
|
If Ord(Ch) - 64 in Flags Then
|
||||||
|
Result := Result + Ch
|
||||||
|
Else
|
||||||
|
Result := Result + '-';
|
||||||
|
End;
|
||||||
|
|
||||||
Procedure AddRecord (var dFile; RecNum: LongInt; RecSize: Word);
|
Procedure AddRecord (var dFile; RecNum: LongInt; RecSize: Word);
|
||||||
Var
|
Var
|
||||||
F : File Absolute dFile;
|
F : File Absolute dFile;
|
||||||
|
@ -239,58 +253,36 @@ End;
|
||||||
|
|
||||||
{$IFNDEF UNIX}
|
{$IFNDEF UNIX}
|
||||||
Procedure UpdateStatusLine (Mode: Byte; Str: String);
|
Procedure UpdateStatusLine (Mode: Byte; Str: String);
|
||||||
|
|
||||||
Function DrawAccessFlags (Var Flags : AccessFlagType) : String;
|
|
||||||
Var
|
|
||||||
S : String;
|
|
||||||
Ch : Char;
|
|
||||||
Begin
|
|
||||||
S := '';
|
|
||||||
|
|
||||||
For Ch := 'A' to 'Z' Do
|
|
||||||
If Ord(Ch) - 64 in Flags Then S := S + Ch Else S := S + '-';
|
|
||||||
|
|
||||||
Result := S;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Begin
|
Begin
|
||||||
If Not Config.UseStatusBar Then Exit;
|
If Not Config.UseStatusBar Then Exit;
|
||||||
|
|
||||||
Screen.SetWindow (1, 1, 80, 25, False);
|
Screen.SetWindow (1, 1, 80, 25, False);
|
||||||
|
|
||||||
Case Mode of
|
Case Mode of
|
||||||
0 : Screen.WriteXY (1, 25, 120, strPadC(Str, 80, ' '));
|
0 : Screen.WriteXY (1, 25, Config.StatusColor3, strPadC(Str, 80, ' '));
|
||||||
1 : Begin
|
1 : Begin
|
||||||
Screen.WriteXY ( 1, 25, 112, ' [Alias] [Baud] [Sec] [Time] ');
|
Screen.WriteXY ( 1, 25, Config.StatusColor1, ' Alias ' + strRep(' ', 35) + 'Age SecLevel TimeLeft ');
|
||||||
Screen.WriteXY (10, 25, 112, Session.User.ThisUser.Handle);
|
Screen.WriteXY ( 8, 25, Config.StatusColor2, Session.User.ThisUser.Handle);
|
||||||
Screen.WriteXY (48, 25, 112, strI2S(Session.Baud));
|
Screen.WriteXY (47, 25, Config.StatusColor2, Session.User.ThisUser.Gender + '/' + strI2S(DaysAgo(Session.User.ThisUser.Birthday, 1) DIV 365));
|
||||||
Screen.WriteXY (63, 25, 112, strI2S(Session.User.ThisUser.Security));
|
Screen.WriteXY (62, 25, Config.StatusColor2, strI2S(Session.User.ThisUser.Security));
|
||||||
Screen.WriteXY (76, 25, 112, strI2S(Session.TimeLeft));
|
Screen.WriteXY (76, 25, Config.StatusColor2, strI2S(Session.TimeLeft));
|
||||||
End;
|
End;
|
||||||
2 : Begin
|
2 : Begin
|
||||||
Screen.WriteXY ( 1, 25, 112, ' [Name] [Flag1] ');
|
Screen.WriteXY ( 1, 25, Config.StatusColor1, ' Email ' + strRep(' ', 35) + ' Location ' + strRep(' ', 27) + ' ');
|
||||||
Screen.WriteXY ( 9, 25, 112, Session.User.ThisUser.RealName);
|
Screen.WriteXY ( 8, 25, Config.StatusColor2, strPadR(Session.User.ThisUser.Email, 36, ' '));
|
||||||
Screen.WriteXY (48, 25, 112, DrawAccessFlags(Session.User.ThisUser.AF1));
|
Screen.WriteXY (53, 25, Config.StatusColor2, strPadR(Session.User.ThisUser.City, 27, ' '));
|
||||||
End;
|
End;
|
||||||
3 : Begin
|
3 : Begin
|
||||||
Screen.WriteXY ( 1, 25, 112, ' [Address] ');
|
Screen.WriteXY ( 1, 25, Config.StatusColor1, ' IP ' + strRep(' ', 19) + ' Host ' + strRep(' ', 49) + ' ');
|
||||||
Screen.WriteXY (12, 25, 112, Session.User.ThisUser.Address);
|
Screen.WriteXY ( 5, 25, Config.StatusColor2, Session.UserIPInfo);
|
||||||
Screen.WriteXY (43, 25, 112, Session.User.ThisUser.City);
|
Screen.WriteXY (31, 25, Config.StatusColor2, strPadR(Session.UserHostInfo, 49, ' '));
|
||||||
Screen.WriteXY (69, 25, 112, Session.User.ThisUser.ZipCode);
|
|
||||||
End;
|
End;
|
||||||
4 : Begin
|
4 : Begin
|
||||||
Screen.WriteXY ( 1, 25, 112, ' [BDay] [Sex] [Home PH] [Data PH] ');
|
Screen.WriteXY ( 1, 25, Config.StatusColor1, ' Flags 1 ' + strRep(' ', 35) + ' Flags 2 ');
|
||||||
Screen.WriteXY ( 9, 25, 112, DateDos2Str(Session.User.ThisUser.Birthday, Session.User.ThisUser.DateType));
|
Screen.WriteXY (10, 25, Config.StatusColor2, DrawAccessFlags(Session.User.ThisUser.AF1));
|
||||||
Screen.WriteXY (25, 25, 112, Session.User.ThisUser.Gender);
|
Screen.WriteXY (54, 25, Config.StatusColor2, DrawAccessFlags(Session.User.ThisUser.AF2));
|
||||||
Screen.WriteXY (39, 25, 112, Session.User.ThisUser.HomePhone);
|
|
||||||
Screen.WriteXY (65, 25, 112, Session.User.ThisUser.DataPhone);
|
|
||||||
End;
|
End;
|
||||||
5 : Begin
|
5 : Screen.WriteXY (1, 25, Config.StatusColor3, ' ALTS/C Chat ALTE Edit ALTH Hangup ALT+/- Time ALTB Info ALTT Bar ALTV Screen ');
|
||||||
Screen.WriteXY ( 1, 25, 112, ' [Email] [Flag2] ');
|
|
||||||
Screen.WriteXY (10, 25, 112, Session.User.ThisUser.Email);
|
|
||||||
Screen.WriteXY (54, 25, 112, DrawAccessFlags(Session.User.ThisUser.AF2));
|
|
||||||
End;
|
|
||||||
6 : Screen.WriteXY ( 1, 25, 112, ' ALT (C)hat (S)plit (E)dit (H)angup (J) DOS (U)pgrade (B) Status Bar ');
|
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Screen.SetWindow (1, 1, 80, 24, False);
|
Screen.SetWindow (1, 1, 80, 24, False);
|
||||||
|
@ -323,7 +315,7 @@ Begin
|
||||||
Else
|
Else
|
||||||
Session.io.LocalScreenEnable;
|
Session.io.LocalScreenEnable;
|
||||||
{B} #48 : Begin
|
{B} #48 : Begin
|
||||||
If StatusPtr < 6 Then
|
If StatusPtr < 5 Then
|
||||||
Inc (StatusPtr)
|
Inc (StatusPtr)
|
||||||
Else
|
Else
|
||||||
StatusPtr := 1;
|
StatusPtr := 1;
|
||||||
|
|
|
@ -29,55 +29,59 @@ Type
|
||||||
{$IFNDEF UNIX}
|
{$IFNDEF UNIX}
|
||||||
Client : TIOBase;
|
Client : TIOBase;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
User : TBBSUser;
|
User : TBBSUser;
|
||||||
Msgs : TMsgBase;
|
Msgs : TMsgBase;
|
||||||
FileBase : TFileBase;
|
FileBase : TFileBase;
|
||||||
Menu : TMenuEngine;
|
Menu : TMenuEngine;
|
||||||
IO : TBBSIO;
|
IO : TBBSIO;
|
||||||
Pipe : TPipe;
|
Pipe : TPipe;
|
||||||
EventFile : File of EventRec;
|
EventFile : File of EventRec;
|
||||||
ThemeFile : File of RecTheme;
|
ThemeFile : File of RecTheme;
|
||||||
VoteFile : File of VoteRec;
|
VoteFile : File of VoteRec;
|
||||||
Vote : VoteRec;
|
Vote : VoteRec;
|
||||||
CommHandle : LongInt;
|
CommHandle : LongInt;
|
||||||
ShutDown : Boolean;
|
ShutDown : Boolean;
|
||||||
TempPath : String;
|
TempPath : String;
|
||||||
Event : EventRec;
|
Event : EventRec;
|
||||||
NextEvent : EventRec;
|
NextEvent : EventRec;
|
||||||
Theme : RecTheme;
|
Theme : RecTheme;
|
||||||
LocalMode : Boolean;
|
LocalMode : Boolean;
|
||||||
Baud : LongInt;
|
Baud : LongInt;
|
||||||
ExitLevel : Byte;
|
ExitLevel : Byte;
|
||||||
EventWarn : Boolean;
|
EventWarn : Boolean;
|
||||||
EventExit : Boolean;
|
EventExit : Boolean;
|
||||||
EventRunAfter : Boolean;
|
EventRunAfter : Boolean;
|
||||||
NodeNum : Byte;
|
NodeNum : Byte;
|
||||||
TimerStart : Integer;
|
TimerStart : Integer;
|
||||||
TimerEnd : Integer;
|
TimerEnd : Integer;
|
||||||
LastTimeLeft : Integer;
|
LastTimeLeft : Integer;
|
||||||
TimeOut : LongInt;
|
TimeOut : LongInt;
|
||||||
UserHostInfo : String[50];
|
UserLoginName : String[30];
|
||||||
UserIPInfo : String[15];
|
UserLoginPW : String[15];
|
||||||
CheckTimeOut : Boolean;
|
UserHostInfo : String[50];
|
||||||
TimeOffset : Word;
|
UserIPInfo : String[15];
|
||||||
TimeSaved : Word;
|
CheckTimeOut : Boolean;
|
||||||
TimerOn : Boolean;
|
TimeOffset : Word;
|
||||||
TimeChecked : Boolean;
|
TimeSaved : Word;
|
||||||
ConfigMode : Boolean;
|
TimerOn : Boolean;
|
||||||
InUserEdit : Boolean;
|
TimeChecked : Boolean;
|
||||||
AllowMessages : Boolean;
|
ConfigMode : Boolean;
|
||||||
InMessage : Boolean;
|
InUserEdit : Boolean;
|
||||||
MessageCheck : Byte;
|
AllowMessages : Boolean;
|
||||||
HistoryFile : File of RecHistory;
|
InMessage : Boolean;
|
||||||
HistoryEmails : Word;
|
MessageCheck : Byte;
|
||||||
HistoryPosts : Word;
|
HistoryFile : File of RecHistory;
|
||||||
HistoryDLs : Word;
|
HistoryEmails : Word;
|
||||||
HistoryDLKB : LongInt;
|
HistoryPosts : Word;
|
||||||
HistoryULs : Word;
|
HistoryDLs : Word;
|
||||||
HistoryULKB : LongInt;
|
HistoryDLKB : LongInt;
|
||||||
HistoryHour : SmallInt;
|
HistoryULs : Word;
|
||||||
PromptFile : File of RecPrompt;
|
HistoryULKB : LongInt;
|
||||||
Prompt : RecPrompt;
|
HistoryHour : SmallInt;
|
||||||
|
PromptFile : File of RecPrompt;
|
||||||
|
Prompt : RecPrompt;
|
||||||
|
LastScanHadNew : Boolean;
|
||||||
|
LastScanHadYou : Boolean;
|
||||||
|
|
||||||
Constructor Create;
|
Constructor Create;
|
||||||
Destructor Destroy; Override;
|
Destructor Destroy; Override;
|
||||||
|
@ -118,6 +122,8 @@ Begin
|
||||||
EventExit := False;
|
EventExit := False;
|
||||||
EventRunAfter := False;
|
EventRunAfter := False;
|
||||||
NodeNum := 0;
|
NodeNum := 0;
|
||||||
|
UserLoginName := '';
|
||||||
|
UserLoginPW := '';
|
||||||
UserHostInfo := '';
|
UserHostInfo := '';
|
||||||
UserIPInfo := '';
|
UserIPInfo := '';
|
||||||
CheckTimeOut := True;
|
CheckTimeOut := True;
|
||||||
|
|
|
@ -834,7 +834,7 @@ Begin
|
||||||
#77 : If CurX <= RowSize Then Inc(CurX);
|
#77 : If CurX <= RowSize Then Inc(CurX);
|
||||||
#73 : PageUp;
|
#73 : PageUp;
|
||||||
#81 : PageDown;
|
#81 : PageDown;
|
||||||
#83 : DoDelete;
|
#83 : DoDelete;
|
||||||
End;
|
End;
|
||||||
End Else
|
End Else
|
||||||
Case Ch of
|
Case Ch of
|
||||||
|
|
|
@ -475,6 +475,7 @@ Begin
|
||||||
Start := strS2I(Session.io.GetInput(3, 3, 11, ''));
|
Start := strS2I(Session.io.GetInput(3, 3, 11, ''));
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(160));
|
Session.io.OutFull (Session.GetPrompt(160));
|
||||||
|
|
||||||
Finish := strS2I(Session.io.GetInput(3, 3, 11, ''));
|
Finish := strS2I(Session.io.GetInput(3, 3, 11, ''));
|
||||||
|
|
||||||
If (Start > 0) and (Start <= NumLines) and (Finish <= NumLines) Then Begin
|
If (Start > 0) and (Start <= NumLines) and (Finish <= NumLines) Then Begin
|
||||||
|
|
|
@ -87,9 +87,12 @@ Function LineEditor (Var Lines : Integer; MaxLen: Byte; MaxLine: Integer; TEdit,
|
||||||
Begin
|
Begin
|
||||||
Done := False;
|
Done := False;
|
||||||
Save := False;
|
Save := False;
|
||||||
|
|
||||||
Repeat
|
Repeat
|
||||||
Session.io.OutFull (Session.GetPrompt(166));
|
Session.io.OutFull (Session.GetPrompt(166));
|
||||||
|
|
||||||
Ch := Session.io.OneKey ('?ACQRSU', True);
|
Ch := Session.io.OneKey ('?ACQRSU', True);
|
||||||
|
|
||||||
Case Ch of
|
Case Ch of
|
||||||
'?' : Session.io.OutFullLn (Session.GetPrompt(167));
|
'?' : Session.io.OutFullLn (Session.GetPrompt(167));
|
||||||
'A' : If Forced Then Begin
|
'A' : If Forced Then Begin
|
||||||
|
@ -144,9 +147,13 @@ Function LineEditor (Var Lines : Integer; MaxLen: Byte; MaxLine: Integer; TEdit,
|
||||||
Dec(Session.Msgs.MsgText[CurLine][0]);
|
Dec(Session.Msgs.MsgText[CurLine][0]);
|
||||||
End Else If CurLine > 1 Then Begin
|
End Else If CurLine > 1 Then Begin
|
||||||
Dec(CurLine);
|
Dec(CurLine);
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := strI2S(CurLine);
|
Session.io.PromptInfo[1] := strI2S(CurLine);
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(165));
|
Session.io.OutFullLn (Session.GetPrompt(165));
|
||||||
|
|
||||||
Session.io.OutRaw (Session.Msgs.MsgText[CurLine]);
|
Session.io.OutRaw (Session.Msgs.MsgText[CurLine]);
|
||||||
|
|
||||||
If Session.Msgs.MsgText[CurLine] <> '' Then Begin
|
If Session.Msgs.MsgText[CurLine] <> '' Then Begin
|
||||||
Session.io.OutBS(1, True);
|
Session.io.OutBS(1, True);
|
||||||
Dec(Session.Msgs.MsgText[CurLine][0]);
|
Dec(Session.Msgs.MsgText[CurLine][0]);
|
||||||
|
@ -155,6 +162,7 @@ Function LineEditor (Var Lines : Integer; MaxLen: Byte; MaxLine: Integer; TEdit,
|
||||||
#13 : Begin
|
#13 : Begin
|
||||||
If CurLine < MaxLine Then Begin
|
If CurLine < MaxLine Then Begin
|
||||||
Inc(CurLine);
|
Inc(CurLine);
|
||||||
|
|
||||||
Session.io.OutRaw (#13#10);
|
Session.io.OutRaw (#13#10);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
@ -163,15 +171,18 @@ Function LineEditor (Var Lines : Integer; MaxLen: Byte; MaxLine: Integer; TEdit,
|
||||||
Commands;
|
Commands;
|
||||||
If (Not Save) and (Not Done) Then FullReDraw;
|
If (Not Save) and (Not Done) Then FullReDraw;
|
||||||
End Else
|
End Else
|
||||||
If Ch in [#32..#254] Then Begin
|
If Ch in [#32..#254] Then Begin
|
||||||
If Length(Session.Msgs.MsgText[Curline]) < MaxLen Then Begin
|
If Length(Session.Msgs.MsgText[Curline]) < MaxLen Then Begin
|
||||||
Session.Msgs.MsgText[CurLine] := Session.Msgs.MsgText[CurLine] + Ch;
|
Session.Msgs.MsgText[CurLine] := Session.Msgs.MsgText[CurLine] + Ch;
|
||||||
|
|
||||||
Session.io.BufAddChar (Ch);
|
Session.io.BufAddChar (Ch);
|
||||||
End;
|
End;
|
||||||
If (Length(Session.Msgs.MsgText[CurLine]) > MaxLen-1) and (CurLine < MaxLine) Then Begin
|
If (Length(Session.Msgs.MsgText[CurLine]) > MaxLen-1) and (CurLine < MaxLine) Then Begin
|
||||||
strWrap (Session.Msgs.MsgText[CurLine], Session.Msgs.MsgText[Succ(CurLine)], MaxLen);
|
strWrap (Session.Msgs.MsgText[CurLine], Session.Msgs.MsgText[Succ(CurLine)], MaxLen);
|
||||||
Inc(CurLine);
|
|
||||||
Session.io.OutBS (Length(Session.Msgs.MsgText[CurLine]), True);
|
Inc (CurLine);
|
||||||
|
|
||||||
|
Session.io.OutBS (Length(Session.Msgs.MsgText[CurLine]), True);
|
||||||
Session.io.OutRawLn ('');
|
Session.io.OutRawLn ('');
|
||||||
Session.io.OutRaw (Session.Msgs.MsgText[CurLine]);
|
Session.io.OutRaw (Session.Msgs.MsgText[CurLine]);
|
||||||
End;
|
End;
|
||||||
|
@ -196,7 +207,7 @@ Begin
|
||||||
GetText;
|
GetText;
|
||||||
|
|
||||||
If Save Then Begin
|
If Save Then Begin
|
||||||
Lines := CurLine - 1;
|
Lines := CurLine - 1;
|
||||||
LineEditor := True;
|
LineEditor := True;
|
||||||
End Else
|
End Else
|
||||||
LineEditor := False;
|
LineEditor := False;
|
||||||
|
|
|
@ -637,11 +637,13 @@ Begin
|
||||||
If Not Session.io.GetYN (Session.GetPrompt(275), True) Then Exit;
|
If Not Session.io.GetYN (Session.GetPrompt(275), True) Then Exit;
|
||||||
|
|
||||||
Reset (Session.VoteFile);
|
Reset (Session.VoteFile);
|
||||||
|
|
||||||
If FileSize (Session.VoteFile) = mysMaxVoteQuestion Then Begin
|
If FileSize (Session.VoteFile) = mysMaxVoteQuestion Then Begin
|
||||||
Close (Session.VoteFile);
|
Close (Session.VoteFile);
|
||||||
Session.io.OutFull (Session.GetPrompt(276));
|
Session.io.OutFull (Session.GetPrompt(276));
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Close (Session.VoteFile);
|
Close (Session.VoteFile);
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(277));
|
Session.io.OutFull (Session.GetPrompt(277));
|
||||||
|
@ -657,11 +659,14 @@ Begin
|
||||||
Session.io.PromptInfo[1] := strI2S(A);
|
Session.io.PromptInfo[1] := strI2S(A);
|
||||||
Session.io.OutFull (Session.GetPrompt(279));
|
Session.io.OutFull (Session.GetPrompt(279));
|
||||||
Session.Vote.Answer[A].Text := Session.io.GetInput(40, 40, 11, '');
|
Session.Vote.Answer[A].Text := Session.io.GetInput(40, 40, 11, '');
|
||||||
|
|
||||||
If Session.Vote.Answer[A].Text = '' Then Begin
|
If Session.Vote.Answer[A].Text = '' Then Begin
|
||||||
Dec (A);
|
Dec (A);
|
||||||
Break;
|
Break;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Session.Vote.Answer[A].Votes := 0;
|
Session.Vote.Answer[A].Votes := 0;
|
||||||
|
|
||||||
Inc(A);
|
Inc(A);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -697,10 +702,13 @@ Begin
|
||||||
|
|
||||||
While Not Eof(Session.VoteFile) Do Begin
|
While Not Eof(Session.VoteFile) Do Begin
|
||||||
Read (Session.VoteFile, Session.Vote);
|
Read (Session.VoteFile, Session.Vote);
|
||||||
|
|
||||||
If Session.User.Access(Session.Vote.ACS) Then Begin
|
If Session.User.Access(Session.Vote.ACS) Then Begin
|
||||||
Inc (Total);
|
Inc (Total);
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := strI2S(Total);
|
Session.io.PromptInfo[1] := strI2S(Total);
|
||||||
Session.io.PromptInfo[2] := Session.Vote.Question;
|
Session.io.PromptInfo[2] := Session.Vote.Question;
|
||||||
|
|
||||||
If Session.User.ThisUser.Vote[FilePos(Session.VoteFile)] = 0 Then
|
If Session.User.ThisUser.Vote[FilePos(Session.VoteFile)] = 0 Then
|
||||||
Session.io.PromptInfo[3] := '*' //++lang
|
Session.io.PromptInfo[3] := '*' //++lang
|
||||||
Else
|
Else
|
||||||
|
@ -708,9 +716,11 @@ Begin
|
||||||
Session.io.OutFullLn (Session.GetPrompt(242));
|
Session.io.OutFullLn (Session.GetPrompt(242));
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Close (Session.VoteFile);
|
Close (Session.VoteFile);
|
||||||
|
|
||||||
If Total = 0 Then Session.io.OutFullLn (Session.GetPrompt(243));
|
If Total = 0 Then Session.io.OutFullLn (Session.GetPrompt(243));
|
||||||
|
|
||||||
Voting_List := Total;
|
Voting_List := Total;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -727,6 +737,7 @@ Begin
|
||||||
Close (Session.VoteFile);
|
Close (Session.VoteFile);
|
||||||
End Else Begin
|
End Else Begin
|
||||||
A := Voting_List;
|
A := Voting_List;
|
||||||
|
|
||||||
If A = 0 Then Exit;
|
If A = 0 Then Exit;
|
||||||
|
|
||||||
Repeat
|
Repeat
|
||||||
|
@ -748,11 +759,14 @@ Begin
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := Session.Vote.Question;
|
Session.io.PromptInfo[1] := Session.Vote.Question;
|
||||||
Session.io.PromptInfo[2] := strI2S(Session.Vote.Votes);
|
Session.io.PromptInfo[2] := strI2S(Session.Vote.Votes);
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(249));
|
Session.io.OutFullLn (Session.GetPrompt(249));
|
||||||
|
|
||||||
For A := 1 to Session.Vote.AnsNum Do Begin
|
For A := 1 to Session.Vote.AnsNum Do Begin
|
||||||
Session.io.PromptInfo[1] := strI2S(A);
|
Session.io.PromptInfo[1] := strI2S(A);
|
||||||
Session.io.PromptInfo[2] := Session.Vote.Answer[A].Text;
|
Session.io.PromptInfo[2] := Session.Vote.Answer[A].Text;
|
||||||
Session.io.PromptInfo[3] := strI2S(Session.Vote.Answer[A].Votes);
|
Session.io.PromptInfo[3] := strI2S(Session.Vote.Answer[A].Votes);
|
||||||
|
|
||||||
If Session.Vote.Votes = 0 Then Begin
|
If Session.Vote.Votes = 0 Then Begin
|
||||||
Session.io.PromptInfo[4] := '0';
|
Session.io.PromptInfo[4] := '0';
|
||||||
Session.io.PromptInfo[5] := '';
|
Session.io.PromptInfo[5] := '';
|
||||||
|
@ -760,8 +774,10 @@ Begin
|
||||||
Session.io.PromptInfo[5] := Session.io.DrawPercent(Session.Theme.VotingBar, Session.Vote.Answer[A].Votes, Session.Vote.Votes, P);
|
Session.io.PromptInfo[5] := Session.io.DrawPercent(Session.Theme.VotingBar, Session.Vote.Answer[A].Votes, Session.Vote.Votes, P);
|
||||||
Session.io.PromptInfo[4] := strI2S(P);
|
Session.io.PromptInfo[4] := strI2S(P);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(250));
|
Session.io.OutFullLn (Session.GetPrompt(250));
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(251));
|
Session.io.OutFull (Session.GetPrompt(251));
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -771,6 +787,7 @@ Var
|
||||||
Pos : Byte;
|
Pos : Byte;
|
||||||
Begin
|
Begin
|
||||||
Reset (Session.VoteFile);
|
Reset (Session.VoteFile);
|
||||||
|
|
||||||
While Not Eof(Session.VoteFile) Do Begin
|
While Not Eof(Session.VoteFile) Do Begin
|
||||||
Read (Session.VoteFile, Session.Vote);
|
Read (Session.VoteFile, Session.Vote);
|
||||||
If Session.User.Access(Session.Vote.ACS) Then
|
If Session.User.Access(Session.Vote.ACS) Then
|
||||||
|
@ -778,6 +795,7 @@ Begin
|
||||||
Else
|
Else
|
||||||
NewQues[FilePos(Session.VoteFile)] := False;
|
NewQues[FilePos(Session.VoteFile)] := False;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Close (Session.VoteFile);
|
Close (Session.VoteFile);
|
||||||
|
|
||||||
For Pos := 1 to mysMaxVoteQuestion Do
|
For Pos := 1 to mysMaxVoteQuestion Do
|
||||||
|
@ -794,6 +812,7 @@ Begin
|
||||||
|
|
||||||
If Not Forced And (Num = 0) Then Begin
|
If Not Forced And (Num = 0) Then Begin
|
||||||
Total := Voting_List;
|
Total := Voting_List;
|
||||||
|
|
||||||
If Total = 0 Then Exit;
|
If Total = 0 Then Exit;
|
||||||
|
|
||||||
Repeat
|
Repeat
|
||||||
|
@ -1258,6 +1277,8 @@ Begin
|
||||||
UseFull := Not (strUpper(strWordGet(3, Data, ';')) = 'DISPLAY');
|
UseFull := Not (strUpper(strWordGet(3, Data, ';')) = 'DISPLAY');
|
||||||
CurPath := Root;
|
CurPath := Root;
|
||||||
|
|
||||||
|
If Not DirExists(Root) Then Exit;
|
||||||
|
|
||||||
BuildDirectory(CurPath);
|
BuildDirectory(CurPath);
|
||||||
|
|
||||||
FullReDraw;
|
FullReDraw;
|
||||||
|
@ -1381,7 +1402,7 @@ Begin
|
||||||
Session.io.AnsiClear;
|
Session.io.AnsiClear;
|
||||||
|
|
||||||
If UseFull Then
|
If UseFull Then
|
||||||
AnsiViewer (Session.Theme.ViewerBar, 'ansigalv;dummy;' + CurPath + DirList[CurPos]^.Desc)
|
AnsiViewer (Session.Theme.ViewerBar, 'ansigalv;ansigalh;' + strI2S(Speed) + ';' + CurPath + DirList[CurPos]^.Desc)
|
||||||
Else Begin
|
Else Begin
|
||||||
Session.io.OutFile (CurPath + DirList[CurPos]^.Desc, False, Speed);
|
Session.io.OutFile (CurPath + DirList[CurPos]^.Desc, False, Speed);
|
||||||
Session.io.PauseScreen;
|
Session.io.PauseScreen;
|
||||||
|
@ -1485,6 +1506,7 @@ Var
|
||||||
FN : String;
|
FN : String;
|
||||||
Template : String;
|
Template : String;
|
||||||
HelpFile : String;
|
HelpFile : String;
|
||||||
|
Speed : Byte;
|
||||||
Str : String;
|
Str : String;
|
||||||
Sauce : RecSauceInfo;
|
Sauce : RecSauceInfo;
|
||||||
|
|
||||||
|
@ -1503,10 +1525,30 @@ Var
|
||||||
Ansi.DrawPage (Session.io.ScreenInfo[1].Y, Session.io.ScreenInfo[2].Y, TopLine);
|
Ansi.DrawPage (Session.io.ScreenInfo[1].Y, Session.io.ScreenInfo[2].Y, TopLine);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Procedure ReDraw;
|
||||||
|
Begin
|
||||||
|
Session.io.AllowArrow := True;
|
||||||
|
Session.io.ScreenInfo[3].X := 0;
|
||||||
|
|
||||||
|
Session.io.OutFile(Template, False, 0);
|
||||||
|
|
||||||
|
WinSize := Session.io.ScreenInfo[2].Y - Session.io.ScreenInfo[1].Y + 1;
|
||||||
|
|
||||||
|
If strUpper(strWordGet(4, Data, ';')) = 'END' Then Begin
|
||||||
|
TopLine := Ansi.Lines - WinSize + 1;
|
||||||
|
|
||||||
|
If TopLine < 1 Then TopLine := 1;
|
||||||
|
End Else
|
||||||
|
TopLine := 1;
|
||||||
|
|
||||||
|
Update;
|
||||||
|
End;
|
||||||
|
|
||||||
Begin
|
Begin
|
||||||
Template := strWordGet(1, Data, ';');
|
Template := strWordGet(1, Data, ';');
|
||||||
HelpFile := strWordGet(2, Data, ';');
|
HelpFile := strWordGet(2, Data, ';');
|
||||||
FN := strWordGet(3, Data, ';');
|
Speed := strS2I(strWordGet(3, Data, ';'));
|
||||||
|
FN := strWordGet(4, Data, ';');
|
||||||
|
|
||||||
If Pos(PathChar, FN) = 0 Then
|
If Pos(PathChar, FN) = 0 Then
|
||||||
FN := Session.Theme.TextPath + FN;
|
FN := Session.Theme.TextPath + FN;
|
||||||
|
@ -1542,21 +1584,7 @@ Begin
|
||||||
|
|
||||||
Close (AFile);
|
Close (AFile);
|
||||||
|
|
||||||
Session.io.AllowArrow := True;
|
ReDraw;
|
||||||
Session.io.ScreenInfo[3].X := 0;
|
|
||||||
|
|
||||||
Session.io.OutFile(Template, False, 0);
|
|
||||||
|
|
||||||
WinSize := Session.io.ScreenInfo[2].Y - Session.io.ScreenInfo[1].Y + 1;
|
|
||||||
|
|
||||||
If strUpper(strWordGet(4, Data, ';')) = 'END' Then Begin
|
|
||||||
TopLine := Ansi.Lines - WinSize + 1;
|
|
||||||
|
|
||||||
If TopLine < 1 Then TopLine := 1;
|
|
||||||
End Else
|
|
||||||
TopLine := 1;
|
|
||||||
|
|
||||||
Update;
|
|
||||||
|
|
||||||
While Not Session.ShutDown Do Begin
|
While Not Session.ShutDown Do Begin
|
||||||
Ch := UpCase(Session.io.GetKey);
|
Ch := UpCase(Session.io.GetKey);
|
||||||
|
@ -1594,7 +1622,20 @@ Begin
|
||||||
End;
|
End;
|
||||||
End Else
|
End Else
|
||||||
Case Ch of
|
Case Ch of
|
||||||
#32,
|
'?' : Begin
|
||||||
|
Session.io.OutFile(HelpFile, True, 0);
|
||||||
|
|
||||||
|
If Not Session.io.NoFile Then
|
||||||
|
ReDraw;
|
||||||
|
End;
|
||||||
|
#32 : Begin
|
||||||
|
Session.io.AnsiColor(7);
|
||||||
|
Session.io.AnsiClear;
|
||||||
|
Session.io.OutFile(FN, False, Speed);
|
||||||
|
Session.io.PauseScreen;
|
||||||
|
|
||||||
|
ReDraw;
|
||||||
|
End;
|
||||||
#13 : If TopLine < Ansi.Lines - WinSize Then Begin
|
#13 : If TopLine < Ansi.Lines - WinSize Then Begin
|
||||||
Inc (TopLine, WinSize);
|
Inc (TopLine, WinSize);
|
||||||
|
|
||||||
|
|
|
@ -72,30 +72,30 @@ Type
|
||||||
Procedure BufAddChar (Ch: Char);
|
Procedure BufAddChar (Ch: Char);
|
||||||
Procedure BufAddStr (Str: String);
|
Procedure BufAddStr (Str: String);
|
||||||
Procedure BufFlush;
|
Procedure BufFlush;
|
||||||
Function ParseMCI (Display : Boolean; Code: String) : Boolean;
|
Function ParseMCI (Display: Boolean; Code: String) : Boolean;
|
||||||
Function StrMci (Str: String) : String;
|
Function StrMci (Str: String) : String;
|
||||||
Function Attr2Ansi (Attr: Byte) : String;
|
Function Attr2Ansi (Attr: Byte) : String;
|
||||||
Function Pipe2Ansi (Color : Byte) : String;
|
Function Pipe2Ansi (Color: Byte) : String;
|
||||||
Procedure AnsiGotoXY (X : Byte; Y:Byte);
|
Procedure AnsiGotoXY (X: Byte; Y:Byte);
|
||||||
Procedure AnsiMoveX (X : Byte);
|
Procedure AnsiMoveX (X: Byte);
|
||||||
Procedure AnsiMoveY (Y : Byte);
|
Procedure AnsiMoveY (Y: Byte);
|
||||||
Procedure AnsiColor (A : Byte);
|
Procedure AnsiColor (A: Byte);
|
||||||
Procedure AnsiClear;
|
Procedure AnsiClear;
|
||||||
Procedure AnsiClrEOL;
|
Procedure AnsiClrEOL;
|
||||||
Procedure OutPipe (Str: String);
|
Procedure OutPipe (Str: String);
|
||||||
Procedure OutPipeLn (Str: String);
|
Procedure OutPipeLn (Str: String);
|
||||||
Procedure OutRaw (Str : String);
|
Procedure OutRaw (Str: String);
|
||||||
Procedure OutRawLn (Str: String);
|
Procedure OutRawLn (Str: String);
|
||||||
Procedure OutBS (Num : Byte; Del: Boolean);
|
Procedure OutBS (Num: Byte; Del: Boolean);
|
||||||
Procedure OutFull (Str : String);
|
Procedure OutFull (Str: String);
|
||||||
Procedure OutFullLn (Str : String);
|
Procedure OutFullLn (Str: String);
|
||||||
Function OutFile (FName : String; DoPause: Boolean; Speed: Byte) : Boolean;
|
Function OutFile (FName: String; DoPause: Boolean; Speed: Byte) : Boolean;
|
||||||
Function OutYN (Y : Boolean) : String;
|
Function OutYN (Y: Boolean) : String;
|
||||||
Function OutON (O : Boolean) : String;
|
Function OutON (O: Boolean) : String;
|
||||||
Procedure PauseScreen;
|
Procedure PauseScreen;
|
||||||
Function MorePrompt : Char;
|
Function MorePrompt : Char;
|
||||||
Function DrawPercent (Bar : RecPercent; Part, Whole : SmallInt; Var Percent : SmallInt) : String;
|
Function DrawPercent (Bar: RecPercent; Part, Whole: SmallInt; Var Percent : SmallInt) : String;
|
||||||
Function GetInput (Field, Max, Mode: Byte; Default : String) : String;
|
Function GetInput (Field, Max, Mode: Byte; Default: String) : String;
|
||||||
Function InXY (X, Y, Field, Max, Mode: Byte; Default: String) : String;
|
Function InXY (X, Y, Field, Max, Mode: Byte; Default: String) : String;
|
||||||
Function InKey (Wait: LongInt) : Char;
|
Function InKey (Wait: LongInt) : Char;
|
||||||
Function GetYNL (Str: String; Yes: Boolean) : Boolean;
|
Function GetYNL (Str: String; Yes: Boolean) : Boolean;
|
||||||
|
@ -1821,12 +1821,13 @@ Var
|
||||||
|
|
||||||
Begin
|
Begin
|
||||||
If UseInLimit Then Begin
|
If UseInLimit Then Begin
|
||||||
Field := InLimit;
|
Field := InLimit;
|
||||||
UseInLimit := False;
|
UseInLimit := False;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If UseInSize Then Begin
|
If UseInSize Then Begin
|
||||||
UseInSize := False;
|
UseInSize := False;
|
||||||
|
|
||||||
If InSize <= Max Then Max := InSize;
|
If InSize <= Max Then Max := InSize;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -1880,6 +1881,7 @@ Begin
|
||||||
Ch := GetKey;
|
Ch := GetKey;
|
||||||
|
|
||||||
If IsArrow Then Begin
|
If IsArrow Then Begin
|
||||||
|
|
||||||
Case Ch of
|
Case Ch of
|
||||||
#71 : If StrPos > 1 Then Begin
|
#71 : If StrPos > 1 Then Begin
|
||||||
StrPos := 1;
|
StrPos := 1;
|
||||||
|
@ -1939,6 +1941,7 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
End Else
|
End Else
|
||||||
|
|
||||||
Case Ch of
|
Case Ch of
|
||||||
#02 : ReDraw;
|
#02 : ReDraw;
|
||||||
#08 : If StrPos > 1 Then Begin
|
#08 : If StrPos > 1 Then Begin
|
||||||
|
@ -2058,7 +2061,7 @@ Var
|
||||||
Begin
|
Begin
|
||||||
Attr := Screen.TextAttr;
|
Attr := Screen.TextAttr;
|
||||||
|
|
||||||
Screen.TextAttr := 0; // kludge to force it to return full ansi codes
|
// Screen.TextAttr := 0; // kludge to force it to return full ansi codes
|
||||||
|
|
||||||
If Part > Whole Then Part := Whole;
|
If Part > Whole Then Part := Whole;
|
||||||
|
|
||||||
|
@ -2072,7 +2075,7 @@ Begin
|
||||||
|
|
||||||
Result := Attr2Ansi(Bar.HiAttr) + strRep(Bar.HiChar, FillSize) +
|
Result := Attr2Ansi(Bar.HiAttr) + strRep(Bar.HiChar, FillSize) +
|
||||||
Attr2Ansi(Bar.LoAttr) + strRep(Bar.LoChar, Bar.BarLength - FillSize) +
|
Attr2Ansi(Bar.LoAttr) + strRep(Bar.LoChar, Bar.BarLength - FillSize) +
|
||||||
Attr2Ansi(Attr);
|
Pipe2Ansi(16) + Attr2Ansi(Attr);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
{$IFDEF UNIX}
|
{$IFDEF UNIX}
|
||||||
|
|
|
@ -145,6 +145,7 @@ Begin
|
||||||
'N' : Session.User.AcsOkFlag := Session.io.GetYN(CmdData, False);
|
'N' : Session.User.AcsOkFlag := Session.io.GetYN(CmdData, False);
|
||||||
'P' : Session.User.AcsOkFlag := Session.io.GetPW(Copy(CmdData, 1, Pos(';', CmdData) - 1), Session.GetPrompt(417),
|
'P' : Session.User.AcsOkFlag := Session.io.GetPW(Copy(CmdData, 1, Pos(';', CmdData) - 1), Session.GetPrompt(417),
|
||||||
strUpper(Copy(CmdData, Pos(';', CmdData) + 1, Length(CmdData))));
|
strUpper(Copy(CmdData, Pos(';', CmdData) + 1, Length(CmdData))));
|
||||||
|
'R' : Session.User.AcsOkFlag := Boolean(Ord(strS2I(CmdData)));
|
||||||
'S' : Session.SystemLog(CmdData);
|
'S' : Session.SystemLog(CmdData);
|
||||||
'Y' : Session.User.AcsOkFlag := Session.io.GetYN(CmdData, True);
|
'Y' : Session.User.AcsOkFlag := Session.io.GetYN(CmdData, True);
|
||||||
End;
|
End;
|
||||||
|
@ -255,7 +256,7 @@ Begin
|
||||||
End;
|
End;
|
||||||
'M' : Case Cmd[2] of
|
'M' : Case Cmd[2] of
|
||||||
'A' : Session.Msgs.ChangeArea(CmdData);
|
'A' : Session.Msgs.ChangeArea(CmdData);
|
||||||
'C' : Session.Msgs.CheckEMail;
|
'C' : Session.Msgs.CheckEMail(CmdData);
|
||||||
'D' : Session.Msgs.SetMessagePointers;
|
'D' : Session.Msgs.SetMessagePointers;
|
||||||
'G' : Session.Msgs.MessageGroupChange (CmdData, True, True);
|
'G' : Session.Msgs.MessageGroupChange (CmdData, True, True);
|
||||||
'L' : Session.Msgs.NetMailLookup (True, '', '');
|
'L' : Session.Msgs.NetMailLookup (True, '', '');
|
||||||
|
@ -266,7 +267,7 @@ Begin
|
||||||
'R' : Begin
|
'R' : Begin
|
||||||
If CmdData = '' Then CmdData := ' ';
|
If CmdData = '' Then CmdData := ' ';
|
||||||
|
|
||||||
Session.Msgs.ReadMessages(UpCase(CmdData[1]), '');
|
Session.Msgs.ReadMessages(UpCase(CmdData[1]), Copy(CmdData, 3, 255), '');
|
||||||
End;
|
End;
|
||||||
'S' : Session.Msgs.GlobalMessageSearch(UpCase(CmdData[1]));
|
'S' : Session.Msgs.GlobalMessageSearch(UpCase(CmdData[1]));
|
||||||
'V' : Session.Msgs.ViewSentEmail;
|
'V' : Session.Msgs.ViewSentEmail;
|
||||||
|
|
|
@ -35,11 +35,11 @@ Type
|
||||||
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);
|
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;
|
||||||
Procedure GetMessageStats (Var TempBase: RecMessageBase; Var Total, New, Yours: LongInt);
|
Procedure GetMessageStats (List, ShowPrompt, ShowYou: Boolean; Var ListPtr: LongInt; Var TempBase: RecMessageBase; NoFrom, NoRead: Boolean; Var Total, New, Yours: LongInt);
|
||||||
Function GetTotalBases (Compressed: Boolean) : LongInt;
|
Function GetTotalBases (Compressed: Boolean) : LongInt;
|
||||||
Function GetTotalMessages (Var TempBase: RecMessageBase) : LongInt;
|
Function GetTotalMessages (Var TempBase: RecMessageBase) : LongInt;
|
||||||
Procedure PostTextFile (Data: String; AllowCodes: Boolean);
|
Procedure PostTextFile (Data: String; AllowCodes: Boolean);
|
||||||
|
@ -53,11 +53,11 @@ Type
|
||||||
Procedure MessageUpload (Var CurLine: SmallInt);
|
Procedure MessageUpload (Var CurLine: SmallInt);
|
||||||
Procedure ReplyMessage (Email: Boolean; ListMode: Byte; ReplyID: String);
|
Procedure ReplyMessage (Email: Boolean; ListMode: Byte; ReplyID: String);
|
||||||
Procedure EditMessage;
|
Procedure EditMessage;
|
||||||
Function ReadMessages (Mode : Char; SearchStr: String) : Boolean;
|
Function ReadMessages (Mode: Char; CmdData, SearchStr: String) : Boolean;
|
||||||
Procedure ToggleNewScan (QWK: Boolean; Data: String);
|
Procedure ToggleNewScan (QWK: Boolean; Data: String);
|
||||||
Procedure MessageGroupChange (Ops: String; FirstBase, Intro : Boolean);
|
Procedure MessageGroupChange (Ops: String; FirstBase, Intro : Boolean);
|
||||||
Procedure PostMessage (Email: Boolean; Data: String);
|
Procedure PostMessage (Email: Boolean; Data: String);
|
||||||
Procedure CheckEMail;
|
Procedure CheckEMail (CmdData: String);
|
||||||
Procedure MessageNewScan (Data: String);
|
Procedure MessageNewScan (Data: String);
|
||||||
Procedure MessageQuickScan (Data: String);
|
Procedure MessageQuickScan (Data: String);
|
||||||
Procedure GlobalMessageSearch (Mode: Char);
|
Procedure GlobalMessageSearch (Mode: Char);
|
||||||
|
@ -215,7 +215,6 @@ Begin
|
||||||
|
|
||||||
While NodeList.FindNext(NodeData) Do Begin
|
While NodeList.FindNext(NodeData) Do Begin
|
||||||
Case ListType of
|
Case ListType of
|
||||||
0 : ;//If NodeData.Keyword <> '' Then Continue;
|
|
||||||
1 : If NodeData.Keyword <> 'ZONE' Then Continue;
|
1 : If NodeData.Keyword <> 'ZONE' Then Continue;
|
||||||
2 : If (NodeData.Keyword <> 'ZONE') and (NodeData.Keyword <> 'REGION') and (NodeData.Keyword <> 'HOST') Then Continue;
|
2 : If (NodeData.Keyword <> 'ZONE') and (NodeData.Keyword <> 'REGION') and (NodeData.Keyword <> 'HOST') Then Continue;
|
||||||
End;
|
End;
|
||||||
|
@ -405,10 +404,9 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBase.GetMessageStats (Var TempBase: RecMessageBase; Var Total, New, Yours: LongInt);
|
Procedure TMsgBase.GetMessageStats (List, ShowPrompt, ShowYou: Boolean; Var ListPtr: LongInt; Var TempBase: RecMessageBase; NoFrom, NoRead: Boolean; Var Total, New, Yours: LongInt);
|
||||||
Var
|
Var
|
||||||
TempMsg : PMsgBaseABS;
|
TempMsg : PMsgBaseABS;
|
||||||
MsgTo : String[40];
|
|
||||||
Begin
|
Begin
|
||||||
Total := 0;
|
Total := 0;
|
||||||
New := 0;
|
New := 0;
|
||||||
|
@ -422,13 +420,53 @@ Begin
|
||||||
TempMsg^.SeekFirst(TempMsg^.GetLastRead(Session.User.UserNum) + 1);
|
TempMsg^.SeekFirst(TempMsg^.GetLastRead(Session.User.UserNum) + 1);
|
||||||
|
|
||||||
While TempMsg^.SeekFound Do Begin
|
While TempMsg^.SeekFound Do Begin
|
||||||
Inc (New);
|
|
||||||
|
|
||||||
TempMsg^.MsgStartUp;
|
TempMsg^.MsgStartUp;
|
||||||
|
|
||||||
MsgTo := strUpper(TempMsg^.GetTo);
|
If NoFrom And Session.User.IsThisUser(TempMsg^.GetFrom) Then Begin
|
||||||
|
TempMsg^.SeekNext;
|
||||||
|
|
||||||
If (MsgTo = strUpper(Session.User.ThisUser.Handle)) or (MsgTo = strUpper(Session.User.ThisUser.RealName)) Then
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If NoRead And Session.User.IsThisUser(TempMsg^.GetTo) And TempMsg^.IsRcvd Then Begin
|
||||||
|
TempMsg^.SeekNext;
|
||||||
|
|
||||||
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If List Then Begin
|
||||||
|
If (ShowYou And Not Session.User.IsThisUser(TempMsg^.GetTo)) Then Begin
|
||||||
|
TempMsg^.SeekNext;
|
||||||
|
|
||||||
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If ShowPrompt Then
|
||||||
|
Session.io.OutBS(Screen.CursorX, True);
|
||||||
|
|
||||||
|
Inc (ListPtr);
|
||||||
|
|
||||||
|
Session.io.PromptInfo[1] := strI2S(ListPtr);
|
||||||
|
Session.io.PromptInfo[2] := TempBase.Name;
|
||||||
|
Session.io.PromptInfo[3] := TempMsg^.GetFrom;
|
||||||
|
Session.io.PromptInfo[4] := TempMsg^.GetTo;
|
||||||
|
Session.io.PromptInfo[5] := TempMsg^.GetSubj;
|
||||||
|
Session.io.PromptInfo[6] := DateDos2Str(DateStr2Dos(TempMsg^.GetDate), Session.User.ThisUser.DateType);
|
||||||
|
|
||||||
|
If ListPtr = 1 Then
|
||||||
|
Session.io.OutFullLn(Session.GetPrompt(506));
|
||||||
|
|
||||||
|
Session.io.OutFullLn(Session.GetPrompt(507));
|
||||||
|
|
||||||
|
If ShowPrompt Then
|
||||||
|
Session.io.OutFull(Session.GetPrompt(487));
|
||||||
|
|
||||||
|
Session.io.BufFlush;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Inc (New);
|
||||||
|
|
||||||
|
If Session.User.IsThisUser(TempMsg^.GetTo) Then
|
||||||
Inc(Yours);
|
Inc(Yours);
|
||||||
|
|
||||||
TempMsg^.SeekNext;
|
TempMsg^.SeekNext;
|
||||||
|
@ -470,6 +508,8 @@ Begin
|
||||||
MScan.NewScan := MBase.DefNScan;
|
MScan.NewScan := MBase.DefNScan;
|
||||||
MScan.QwkScan := MBase.DefQScan;
|
MScan.QwkScan := MBase.DefQScan;
|
||||||
|
|
||||||
|
FileMode := 66;
|
||||||
|
|
||||||
Assign (MScanFile, MBase.Path + MBase.FileName + '.scn');
|
Assign (MScanFile, MBase.Path + MBase.FileName + '.scn');
|
||||||
{$I-} Reset (MScanFile); {$I+}
|
{$I-} Reset (MScanFile); {$I+}
|
||||||
|
|
||||||
|
@ -527,31 +567,31 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBase.AssignMessageData (Var Msg: PMsgBaseABS);
|
Procedure TMsgBase.AssignMessageData (Var Msg: PMsgBaseABS; Var TempBase: RecMessageBase);
|
||||||
Var
|
Var
|
||||||
Addr : RecEchoMailAddr;
|
Addr : RecEchoMailAddr;
|
||||||
SemFile : Text;
|
SemFile : Text;
|
||||||
Begin
|
Begin
|
||||||
Msg^.StartNewMsg;
|
Msg^.StartNewMsg;
|
||||||
|
|
||||||
If MBase.Flags And MBRealNames <> 0 Then
|
If TempBase.Flags And MBRealNames <> 0 Then
|
||||||
Msg^.SetFrom(Session.User.ThisUser.RealName)
|
Msg^.SetFrom(Session.User.ThisUser.RealName)
|
||||||
Else
|
Else
|
||||||
Msg^.SetFrom(Session.User.ThisUser.Handle);
|
Msg^.SetFrom(Session.User.ThisUser.Handle);
|
||||||
|
|
||||||
Msg^.SetLocal (True);
|
Msg^.SetLocal (True);
|
||||||
|
|
||||||
If MBase.NetType > 0 Then Begin
|
If TempBase.NetType > 0 Then Begin
|
||||||
If MBase.NetType = 3 Then
|
If TempBase.NetType = 3 Then
|
||||||
Msg^.SetMailType(mmtNetMail)
|
Msg^.SetMailType(mmtNetMail)
|
||||||
Else
|
Else
|
||||||
Msg^.SetMailType(mmtEchoMail);
|
Msg^.SetMailType(mmtEchoMail);
|
||||||
|
|
||||||
Addr := Config.NetAddress[MBase.NetAddr];
|
Addr := Config.NetAddress[TempBase.NetAddr];
|
||||||
|
|
||||||
Msg^.SetOrig(Addr);
|
Msg^.SetOrig(Addr);
|
||||||
|
|
||||||
Case MBase.NetType of
|
Case TempBase.NetType of
|
||||||
1 : Begin
|
1 : Begin
|
||||||
Assign (SemFile, Config.SemaPath + fn_SemFileEcho);
|
Assign (SemFile, Config.SemaPath + fn_SemFileEcho);
|
||||||
If Session.ExitLevel > 5 Then Session.ExitLevel := 7 Else Session.ExitLevel := 5;
|
If Session.ExitLevel > 5 Then Session.ExitLevel := 7 Else Session.ExitLevel := 5;
|
||||||
|
@ -572,7 +612,7 @@ Begin
|
||||||
End Else
|
End Else
|
||||||
Msg^.SetMailType(mmtNormal);
|
Msg^.SetMailType(mmtNormal);
|
||||||
|
|
||||||
Msg^.SetPriv (MBase.Flags and MBPrivate <> 0);
|
Msg^.SetPriv (TempBase.Flags and MBPrivate <> 0);
|
||||||
Msg^.SetDate (DateDos2Str(CurDateDos, 1));
|
Msg^.SetDate (DateDos2Str(CurDateDos, 1));
|
||||||
Msg^.SetTime (TimeDos2Str(CurDateDos, False));
|
Msg^.SetTime (TimeDos2Str(CurDateDos, False));
|
||||||
End;
|
End;
|
||||||
|
@ -647,62 +687,6 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
(*
|
|
||||||
Procedure TMsgBase.ToggleNewScan (QWK: Boolean; Data: String);
|
|
||||||
|
|
||||||
Procedure NewScanListBases;
|
|
||||||
Begin
|
|
||||||
Session.io.PausePtr := 1;
|
|
||||||
Session.io.AllowPause := True;
|
|
||||||
|
|
||||||
If QWK Then
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(90))
|
|
||||||
Else
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(91));
|
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(92));
|
|
||||||
|
|
||||||
Total := 0;
|
|
||||||
|
|
||||||
Reset (MBaseFile);
|
|
||||||
|
|
||||||
While Not Eof(MBaseFile) Do Begin
|
|
||||||
Read (MBaseFile, MBase);
|
|
||||||
|
|
||||||
If Session.User.Access(MBase.ListACS) Then Begin
|
|
||||||
Inc (Total);
|
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := strI2S(Total);
|
|
||||||
Session.io.PromptInfo[2] := MBase.Name;
|
|
||||||
|
|
||||||
GetMessageScan;
|
|
||||||
|
|
||||||
If ((MScan.NewScan > 0) And Not QWK) or ((MScan.QwkScan > 0) And QWK) Then
|
|
||||||
Session.io.PromptInfo[3] := 'Yes' {++lang++}
|
|
||||||
Else
|
|
||||||
Session.io.PromptInfo[3] := 'No'; {++lang++}
|
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(93));
|
|
||||||
|
|
||||||
If (Total MOD Config.MColumns = 0) And (Total > 0) Then Session.io.OutRawLn('');
|
|
||||||
End;
|
|
||||||
|
|
||||||
If EOF(MBaseFile) and (Total MOD Config.MColumns <> 0) Then Session.io.OutRawLn('');
|
|
||||||
|
|
||||||
If (Session.io.PausePtr = Session.User.ThisUser.ScreenSize) and (Session.io.AllowPause) Then
|
|
||||||
Case Session.io.MorePrompt of
|
|
||||||
'N' : Break;
|
|
||||||
'C' : Session.io.AllowPause := False;
|
|
||||||
End;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(430));
|
|
||||||
End;
|
|
||||||
|
|
||||||
Begin
|
|
||||||
End;
|
|
||||||
*)
|
|
||||||
|
|
||||||
Procedure TMsgBase.ToggleNewScan (QWK: Boolean; Data: String);
|
Procedure TMsgBase.ToggleNewScan (QWK: Boolean; Data: String);
|
||||||
Var
|
Var
|
||||||
Total: LongInt;
|
Total: LongInt;
|
||||||
|
@ -769,7 +753,8 @@ Var
|
||||||
Repeat
|
Repeat
|
||||||
Read (MBaseFile, MBase);
|
Read (MBaseFile, MBase);
|
||||||
|
|
||||||
If Session.User.Access(MBase.ListACS) Then Inc(B);
|
If Session.User.Access(MBase.ListACS) Then
|
||||||
|
Inc(B);
|
||||||
|
|
||||||
If A = B Then Break;
|
If A = B Then Break;
|
||||||
Until False;
|
Until False;
|
||||||
|
@ -1192,13 +1177,12 @@ Begin
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := ToWho;
|
Session.io.PromptInfo[1] := ToWho;
|
||||||
|
|
||||||
If Editor(Lines, 78, 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, MBase) Then Exit;
|
If Not OpenCreateBase(MsgNew, MBase) Then Exit;
|
||||||
|
|
||||||
AssignMessageData(MsgNew);
|
AssignMessageData(MsgNew, MBase);
|
||||||
|
|
||||||
Case MBase.NetType of
|
Case MBase.NetType of
|
||||||
2 : MsgNew^.SetTo('All');
|
2 : MsgNew^.SetTo('All');
|
||||||
|
@ -1321,7 +1305,7 @@ Begin
|
||||||
'!' : Begin
|
'!' : Begin
|
||||||
Temp1 := MsgBase^.GetSubj;
|
Temp1 := MsgBase^.GetSubj;
|
||||||
|
|
||||||
If Editor(Lines, 78, mysMaxMsgLines, False, fn_tplMsgEdit, Temp1) Then
|
If Editor(Lines, ColumnValue[Session.Theme.ColumnSize] - 2, mysMaxMsgLines, False, fn_tplMsgEdit, Temp1) Then
|
||||||
MsgBase^.SetSubj(Temp1)
|
MsgBase^.SetSubj(Temp1)
|
||||||
Else
|
Else
|
||||||
ReadText;
|
ReadText;
|
||||||
|
@ -1393,9 +1377,11 @@ Begin
|
||||||
Session.io.PromptInfo[2] := T2;
|
Session.io.PromptInfo[2] := T2;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TMsgBase.ReadMessages (Mode : Char; SearchStr : String) : Boolean;
|
Function TMsgBase.ReadMessages (Mode: Char; CmdData, SearchStr: String) : Boolean;
|
||||||
Var
|
Var
|
||||||
ReadRes : Boolean;
|
ReadRes : Boolean;
|
||||||
|
NoFrom : Boolean;
|
||||||
|
NoRead : Boolean;
|
||||||
ScanMode : Byte;
|
ScanMode : Byte;
|
||||||
ValidKeys : String;
|
ValidKeys : String;
|
||||||
HelpFile : String[8];
|
HelpFile : String[8];
|
||||||
|
@ -1404,7 +1390,7 @@ Var
|
||||||
ReplyID : String[31];
|
ReplyID : String[31];
|
||||||
TempStr : String;
|
TempStr : String;
|
||||||
|
|
||||||
Procedure Set_Message_Security;
|
Procedure SetMessageSecurity;
|
||||||
Begin
|
Begin
|
||||||
If Mode = 'E' Then Begin
|
If Mode = 'E' Then Begin
|
||||||
ValidKeys := 'ADJLNPQRX?'#13;
|
ValidKeys := 'ADJLNPQRX?'#13;
|
||||||
|
@ -1504,7 +1490,7 @@ Var
|
||||||
Session.User.IgnoreGroup := False;
|
Session.User.IgnoreGroup := False;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure Export_Message;
|
Procedure ExportMessage;
|
||||||
Var
|
Var
|
||||||
FN : String;
|
FN : String;
|
||||||
Temp : String;
|
Temp : String;
|
||||||
|
@ -1602,6 +1588,12 @@ Var
|
||||||
4 : Res := Session.User.IsThisUser(MsgBase^.GetFrom);
|
4 : Res := Session.User.IsThisUser(MsgBase^.GetFrom);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
If NoFrom And Session.User.IsThisUser(MsgBase^.GetFrom) Then
|
||||||
|
Res := False;
|
||||||
|
|
||||||
|
If NoRead And Session.User.IsThisUser(MsgBase^.GetTo) And MsgBase^.IsRcvd Then
|
||||||
|
Res := False;
|
||||||
|
|
||||||
If Not Res Then
|
If Not Res Then
|
||||||
If Back Then
|
If Back Then
|
||||||
MsgBase^.SeekPrior
|
MsgBase^.SeekPrior
|
||||||
|
@ -1617,7 +1609,7 @@ Var
|
||||||
SeekNextMsg := Res;
|
SeekNextMsg := Res;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure Assign_Header_Info;
|
Procedure AssignHeaderInfo;
|
||||||
Var
|
Var
|
||||||
NetAddr : RecEchoMailAddr;
|
NetAddr : RecEchoMailAddr;
|
||||||
Begin
|
Begin
|
||||||
|
@ -1646,10 +1638,12 @@ Var
|
||||||
|
|
||||||
TempStr := Session.GetPrompt(490);
|
TempStr := Session.GetPrompt(490);
|
||||||
|
|
||||||
If MsgBase^.IsLocal Then Session.io.PromptInfo[9] := strWordGet(1, TempStr, ' ') Else Session.io.PromptInfo[9] := strWordGet(2, TempStr, ' ');
|
If MsgBase^.IsLocal Then Session.io.PromptInfo[9] := strWordGet(1, TempStr, ',');
|
||||||
If MsgBase^.IsPriv Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(3, TempStr, ' ');
|
If MsgBase^.IsEchoed Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(2, TempStr, ',');
|
||||||
If MsgBase^.IsSent Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(4, TempStr, ' ');
|
If MsgBase^.IsPriv Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(3, TempStr, ',');
|
||||||
If MsgBase^.IsDeleted Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(5, TempStr, ' ');
|
If MsgBase^.IsSent Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(4, TempStr, ',');
|
||||||
|
If MsgBase^.IsRcvd Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(6, TempStr, ',');
|
||||||
|
If MsgBase^.IsDeleted Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(5, TempStr, ',');
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure Send_Msg_Text (Str : String);
|
Procedure Send_Msg_Text (Str : String);
|
||||||
|
@ -1748,10 +1742,15 @@ Var
|
||||||
Repeat
|
Repeat
|
||||||
Set_Node_Action (Session.GetPrompt(348));
|
Set_Node_Action (Session.GetPrompt(348));
|
||||||
|
|
||||||
Set_Message_Security;
|
SetMessageSecurity;
|
||||||
|
|
||||||
If MsgBase^.GetMsgNum > LastRead Then LastRead := MsgBase^.GetMsgNum;
|
If MsgBase^.GetMsgNum > LastRead Then LastRead := MsgBase^.GetMsgNum;
|
||||||
|
|
||||||
|
If Session.User.IsThisUser(MsgBase^.GetTo) And Not MsgBase^.IsRcvd Then Begin
|
||||||
|
MsgBase^.SetRcvd(True);
|
||||||
|
MsgBase^.ReWriteHDR;
|
||||||
|
End;
|
||||||
|
|
||||||
CurMsg := MsgBase^.GetMsgNum;
|
CurMsg := MsgBase^.GetMsgNum;
|
||||||
Lines := 0;
|
Lines := 0;
|
||||||
PageStart := 1;
|
PageStart := 1;
|
||||||
|
@ -1773,7 +1772,7 @@ Var
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Assign_Header_Info;
|
AssignHeaderInfo;
|
||||||
|
|
||||||
Session.io.ScreenInfo[4].Y := 0;
|
Session.io.ScreenInfo[4].Y := 0;
|
||||||
Session.io.ScreenInfo[5].Y := 0;
|
Session.io.ScreenInfo[5].Y := 0;
|
||||||
|
@ -1869,6 +1868,8 @@ Var
|
||||||
End;
|
End;
|
||||||
'H' : Begin
|
'H' : Begin
|
||||||
LastRead := CurMsg - 1;
|
LastRead := CurMsg - 1;
|
||||||
|
|
||||||
|
Session.io.OutFullLn(Session.GetPrompt(504));
|
||||||
End;
|
End;
|
||||||
'I' : Begin
|
'I' : Begin
|
||||||
LastRead := MsgBase^.GetHighMsgNum;
|
LastRead := MsgBase^.GetHighMsgNum;
|
||||||
|
@ -1972,7 +1973,7 @@ Var
|
||||||
Break;
|
Break;
|
||||||
End;
|
End;
|
||||||
'X' : Begin
|
'X' : Begin
|
||||||
Export_Message;
|
ExportMessage;
|
||||||
|
|
||||||
Break;
|
Break;
|
||||||
End;
|
End;
|
||||||
|
@ -2357,8 +2358,13 @@ Var
|
||||||
|
|
||||||
If MsgBase^.GetMsgNum > LastRead Then LastRead := MsgBase^.GetMsgNum;
|
If MsgBase^.GetMsgNum > LastRead Then LastRead := MsgBase^.GetMsgNum;
|
||||||
|
|
||||||
Set_Message_Security;
|
If Session.User.IsThisUser(MsgBase^.GetTo) And Not MsgBase^.IsRcvd Then Begin
|
||||||
Assign_Header_Info;
|
MsgBase^.SetRcvd(True);
|
||||||
|
MsgBase^.ReWriteHDR;
|
||||||
|
End;
|
||||||
|
|
||||||
|
SetMessageSecurity;
|
||||||
|
AssignHeaderInfo;
|
||||||
Display_Header;
|
Display_Header;
|
||||||
|
|
||||||
MsgBase^.MsgTxtStartUp;
|
MsgBase^.MsgTxtStartUp;
|
||||||
|
@ -2429,7 +2435,13 @@ Var
|
||||||
Break;
|
Break;
|
||||||
End;
|
End;
|
||||||
'G' : Exit;
|
'G' : Exit;
|
||||||
'H' : LastRead := MsgBase^.GetMsgNum - 1;
|
'H' : Begin
|
||||||
|
LastRead := MsgBase^.GetMsgNum - 1;
|
||||||
|
|
||||||
|
Session.io.OutFullLn(Session.GetPrompt(505));
|
||||||
|
|
||||||
|
Break;
|
||||||
|
End;
|
||||||
'I' : Begin
|
'I' : Begin
|
||||||
LastRead := MsgBase^.GetHighMsgNum;
|
LastRead := MsgBase^.GetHighMsgNum;
|
||||||
|
|
||||||
|
@ -2449,6 +2461,7 @@ Var
|
||||||
|
|
||||||
If Not SeekNextMsg(True, False) Then Begin
|
If Not SeekNextMsg(True, False) Then Begin
|
||||||
MsgBase^.SeekFirst(B);
|
MsgBase^.SeekFirst(B);
|
||||||
|
|
||||||
SeekNextMsg(True, False);
|
SeekNextMsg(True, False);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
@ -2463,7 +2476,7 @@ Var
|
||||||
Session.io.OutFullLn(Session.GetPrompt(411));
|
Session.io.OutFullLn(Session.GetPrompt(411));
|
||||||
|
|
||||||
While SeekNextMsg(False, False) Do Begin
|
While SeekNextMsg(False, False) Do Begin
|
||||||
Assign_Header_Info;
|
AssignHeaderInfo;
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(412));
|
Session.io.OutFullLn (Session.GetPrompt(412));
|
||||||
|
|
||||||
|
@ -2531,7 +2544,7 @@ Var
|
||||||
|
|
||||||
SetMessageScan;
|
SetMessageScan;
|
||||||
End;
|
End;
|
||||||
'X' : Export_Message;
|
'X' : ExportMessage;
|
||||||
'?' : Session.io.OutFile(HelpFile, True, 0);
|
'?' : Session.io.OutFile(HelpFile, True, 0);
|
||||||
'[' : If MsgBase^.GetRefer > 0 Then Begin
|
'[' : If MsgBase^.GetRefer > 0 Then Begin
|
||||||
MsgBase^.SeekFirst(MsgBase^.GetRefer);
|
MsgBase^.SeekFirst(MsgBase^.GetRefer);
|
||||||
|
@ -2560,12 +2573,16 @@ Var
|
||||||
P = Global personal scan B = By You T = Global text search }
|
P = Global personal scan B = By You T = Global text search }
|
||||||
|
|
||||||
Var
|
Var
|
||||||
MsgNum : LongInt;
|
MsgNum : LongInt;
|
||||||
|
NoLastRead : Boolean;
|
||||||
Begin
|
Begin
|
||||||
ReadMessages := True;
|
ReadMessages := True;
|
||||||
ReadRes := True;
|
ReadRes := True;
|
||||||
WereMsgs := False;
|
WereMsgs := False;
|
||||||
ReplyID := '';
|
ReplyID := '';
|
||||||
|
NoLastRead := Pos('/NOLR', strUpper(CmdData)) > 0;
|
||||||
|
NoFrom := Pos('/NOFROM', strUpper(CmdData)) > 0;
|
||||||
|
NoRead := Pos('/NOREAD', strUpper(CmdData)) > 0;
|
||||||
|
|
||||||
If MBase.FileName = '' Then Begin
|
If MBase.FileName = '' Then Begin
|
||||||
Session.io.OutFullLn (Session.GetPrompt(110));
|
Session.io.OutFullLn (Session.GetPrompt(110));
|
||||||
|
@ -2595,6 +2612,8 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
{ start here opencreate... }
|
||||||
|
|
||||||
Case MBase.BaseType of
|
Case MBase.BaseType of
|
||||||
0 : MsgBase := New(PMsgBaseJAM, Init);
|
0 : MsgBase := New(PMsgBaseJAM, Init);
|
||||||
1 : MsgBase := New(PMsgbaseSquish, Init);
|
1 : MsgBase := New(PMsgbaseSquish, Init);
|
||||||
|
@ -2614,6 +2633,8 @@ Begin
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
{end here }
|
||||||
|
|
||||||
If Mode = 'E' Then
|
If Mode = 'E' Then
|
||||||
ScanMode := 1
|
ScanMode := 1
|
||||||
Else
|
Else
|
||||||
|
@ -2657,7 +2678,7 @@ Begin
|
||||||
Else
|
Else
|
||||||
MsgBase^.SeekFirst(LastRead + 1);
|
MsgBase^.SeekFirst(LastRead + 1);
|
||||||
|
|
||||||
Set_Message_Security;
|
SetMessageSecurity;
|
||||||
|
|
||||||
Reading := True;
|
Reading := True;
|
||||||
|
|
||||||
|
@ -2669,9 +2690,11 @@ Begin
|
||||||
Ascii_Read_Messages;
|
Ascii_Read_Messages;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If Not (Mode in ['E', 'S', 'T']) Then MsgBase^.SetLastRead (Session.User.UserNum, LastRead);
|
If Not (Mode in ['E', 'S', 'T']) And Not NoLastRead Then
|
||||||
|
MsgBase^.SetLastRead (Session.User.UserNum, LastRead);
|
||||||
|
|
||||||
MsgBase^.CloseMsgBase;
|
MsgBase^.CloseMsgBase;
|
||||||
|
|
||||||
Dispose (MsgBase, Done);
|
Dispose (MsgBase, Done);
|
||||||
|
|
||||||
Reading := False;
|
Reading := False;
|
||||||
|
@ -2834,7 +2857,7 @@ Begin
|
||||||
Session.io.PromptInfo[1] := MsgTo;
|
Session.io.PromptInfo[1] := MsgTo;
|
||||||
// Session.io.PromptInfo[2] := MsgSubj;
|
// Session.io.PromptInfo[2] := MsgSubj;
|
||||||
|
|
||||||
If Editor(Lines, 78, mysMaxMsgLines, Forced, fn_tplMsgEdit, MsgSubj) Then Begin
|
If Editor(Lines, ColumnValue[Session.Theme.ColumnSize] - 2, mysMaxMsgLines, Forced, fn_tplMsgEdit, MsgSubj) Then Begin
|
||||||
Session.io.OutFull (Session.GetPrompt(107));
|
Session.io.OutFull (Session.GetPrompt(107));
|
||||||
|
|
||||||
{ all of this below should be replaced with a SaveMessage function }
|
{ all of this below should be replaced with a SaveMessage function }
|
||||||
|
@ -2850,7 +2873,7 @@ Begin
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
AssignMessageData(MsgBase);
|
AssignMessageData(MsgBase, MBase);
|
||||||
|
|
||||||
MsgBase^.SetTo (MsgTo);
|
MsgBase^.SetTo (MsgTo);
|
||||||
MsgBase^.SetSubj (MsgSubj);
|
MsgBase^.SetSubj (MsgSubj);
|
||||||
|
@ -2903,78 +2926,70 @@ Begin
|
||||||
Session.User.IgnoreGroup := SaveGroup;
|
Session.User.IgnoreGroup := SaveGroup;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBase.CheckEMail;
|
Procedure TMsgBase.CheckEMail (CmdData: String);
|
||||||
Var
|
Var
|
||||||
Old : RecMessageBase;
|
MsgBase : PMsgBaseABS;
|
||||||
Total : Integer;
|
TempBase : RecMessageBase;
|
||||||
|
Total : Integer;
|
||||||
|
UnRead : Integer;
|
||||||
Begin
|
Begin
|
||||||
|
TempBase := MBase;
|
||||||
|
Total := 0;
|
||||||
|
UnRead := 0;
|
||||||
|
FileMode := 66;
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(123));
|
Session.io.OutFull (Session.GetPrompt(123));
|
||||||
|
|
||||||
Session.io.BufFlush;
|
Session.io.BufFlush;
|
||||||
|
|
||||||
Old := MBase;
|
|
||||||
|
|
||||||
Reset (MBaseFile);
|
Reset (MBaseFile);
|
||||||
Read (MBaseFile, MBase);
|
Read (MBaseFile, MBase);
|
||||||
Close (MBaseFile);
|
Close (MBaseFile);
|
||||||
|
|
||||||
Case MBase.BaseType of
|
If OpenCreateBase (MsgBase, MBase) Then Begin
|
||||||
0 : MsgBase := New(PMsgBaseJAM, Init);
|
MsgBase^.SeekFirst (1);
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
|
||||||
End;
|
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
While MsgBase^.SeekFound Do Begin
|
||||||
|
|
||||||
If Not MsgBase^.OpenMsgBase Then Begin
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(124));
|
|
||||||
Dispose (MsgBase, Done);
|
|
||||||
MBase := Old;
|
|
||||||
Exit;
|
|
||||||
End;
|
|
||||||
|
|
||||||
Total := 0;
|
|
||||||
|
|
||||||
MsgBase^.YoursFirst(Session.User.ThisUser.RealName, Session.User.ThisUser.Handle);
|
|
||||||
|
|
||||||
If MsgBase^.YoursFound Then Begin
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(125));
|
|
||||||
|
|
||||||
Total := 0;
|
|
||||||
|
|
||||||
While MsgBase^.YoursFound Do Begin
|
|
||||||
MsgBase^.MsgStartUp;
|
MsgBase^.MsgStartUp;
|
||||||
|
|
||||||
Inc (Total);
|
If Session.User.IsThisUser(MsgBase^.GetTo) Then Begin
|
||||||
|
Inc (Total);
|
||||||
|
|
||||||
Session.io.PromptInfo[1] := strI2S(Total);
|
If Not MsgBase^.IsRcvd Then Inc (UnRead);
|
||||||
Session.io.PromptInfo[2] := MsgBase^.GetFrom;
|
|
||||||
Session.io.PromptInfo[3] := MsgBase^.GetSubj;
|
|
||||||
Session.io.PromptInfo[4] := MsgBase^.GetDate;
|
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(126));
|
If Total = 1 Then
|
||||||
|
Session.io.OutFullLn (Session.GetPrompt(125));
|
||||||
|
|
||||||
MsgBase^.YoursNext;
|
Session.io.PromptInfo[1] := strI2S(Total);
|
||||||
|
Session.io.PromptInfo[2] := MsgBase^.GetFrom;
|
||||||
|
Session.io.PromptInfo[3] := MsgBase^.GetSubj;
|
||||||
|
Session.io.PromptInfo[4] := MsgBase^.GetDate;
|
||||||
|
|
||||||
|
Session.io.OutFullLn (Session.GetPrompt(126));
|
||||||
|
End;
|
||||||
|
|
||||||
|
MsgBase^.SeekNext;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If Session.io.GetYN (Session.GetPrompt(127), True) Then Begin
|
MsgBase^.CloseMsgBase;
|
||||||
MsgBase^.CloseMsgBase;
|
|
||||||
Dispose (MsgBase, Done);
|
|
||||||
|
|
||||||
ReadMessages('E', '');
|
Dispose (MsgBase, Done);
|
||||||
|
End;
|
||||||
|
|
||||||
|
Session.LastScanHadNew := UnRead > 0;
|
||||||
|
|
||||||
|
If Total = 0 Then
|
||||||
|
Session.io.OutFullLn (Session.GetPrompt(124))
|
||||||
|
Else Begin
|
||||||
|
Session.io.PromptInfo[1] := strI2S(Total);
|
||||||
|
Session.io.PromptInfo[2] := strI2S(UnRead);
|
||||||
|
|
||||||
|
If Session.io.GetYN (Session.GetPrompt(127), UnRead > 0) Then Begin
|
||||||
|
ReadMessages('E', '', '');
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(118));
|
Session.io.OutFullLn (Session.GetPrompt(118));
|
||||||
|
|
||||||
MBase := Old;
|
|
||||||
Exit;
|
|
||||||
End;
|
End;
|
||||||
End Else
|
End;
|
||||||
Session.io.OutFullLn (Session.GetPrompt(124));
|
MBase := TempBase;
|
||||||
|
|
||||||
MsgBase^.CloseMsgBase;
|
|
||||||
|
|
||||||
Dispose (MsgBase, Done);
|
|
||||||
|
|
||||||
MBase := Old;
|
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBase.SetMessagePointers;
|
Procedure TMsgBase.SetMessagePointers;
|
||||||
|
@ -2999,6 +3014,7 @@ Var
|
||||||
|
|
||||||
While MsgBase^.SeekFound Do Begin
|
While MsgBase^.SeekFound Do Begin
|
||||||
MsgBase^.MsgStartUp;
|
MsgBase^.MsgStartUp;
|
||||||
|
|
||||||
If DateStr2Dos(MsgBase^.GetDate) >= NewDate Then Begin
|
If DateStr2Dos(MsgBase^.GetDate) >= NewDate Then Begin
|
||||||
MsgBase^.SetLastRead(Session.User.UserNum, MsgBase^.GetMsgNum - 1);
|
MsgBase^.SetLastRead(Session.User.UserNum, MsgBase^.GetMsgNum - 1);
|
||||||
Found := True;
|
Found := True;
|
||||||
|
@ -3047,12 +3063,14 @@ Procedure TMsgBase.MessageNewScan (Data: String);
|
||||||
{ /M : scan only mandatory bases }
|
{ /M : scan only mandatory bases }
|
||||||
{ /G : scan all bases in all groups }
|
{ /G : scan all bases in all groups }
|
||||||
Var
|
Var
|
||||||
Old : RecMessageBase;
|
Old : RecMessageBase;
|
||||||
Mode : Char;
|
Mode : Char;
|
||||||
Mand : Boolean;
|
Mand : Boolean;
|
||||||
|
CmdData : String;
|
||||||
Begin
|
Begin
|
||||||
Old := MBase;
|
Old := MBase;
|
||||||
Mand := False;
|
Mand := False;
|
||||||
|
FileMode := 66;
|
||||||
|
|
||||||
Reset (MBaseFile);
|
Reset (MBaseFile);
|
||||||
|
|
||||||
|
@ -3072,6 +3090,12 @@ Begin
|
||||||
Session.User.IgnoreGroup := Pos('/G', Data) > 0;
|
Session.User.IgnoreGroup := Pos('/G', Data) > 0;
|
||||||
WereMsgs := False;
|
WereMsgs := False;
|
||||||
|
|
||||||
|
CmdData := '';
|
||||||
|
|
||||||
|
If Pos('/NOLR', Data) > 0 Then CmdData := '/NOLR';
|
||||||
|
If Pos('/NOFROM', Data) > 0 Then CmdData := CmdData + '/NOFROM';
|
||||||
|
If Pos('/NOREAD', Data) > 0 Then CmdData := CmdData + '/NOREAD';
|
||||||
|
|
||||||
Session.io.OutRawLn ('');
|
Session.io.OutRawLn ('');
|
||||||
|
|
||||||
While Not Eof(MBaseFile) Do Begin
|
While Not Eof(MBaseFile) Do Begin
|
||||||
|
@ -3085,7 +3109,7 @@ Begin
|
||||||
Session.io.OutFull (Session.GetPrompt(130));
|
Session.io.OutFull (Session.GetPrompt(130));
|
||||||
Session.io.BufFlush;
|
Session.io.BufFlush;
|
||||||
|
|
||||||
If Not ReadMessages(Mode, '') Then Begin
|
If Not ReadMessages(Mode, CmdData, '') Then Begin
|
||||||
Session.io.OutRawLn('');
|
Session.io.OutRawLn('');
|
||||||
Break;
|
Break;
|
||||||
End;
|
End;
|
||||||
|
@ -3126,12 +3150,12 @@ Begin
|
||||||
Session.User.IgnoreGroup := Mode = 'A';
|
Session.User.IgnoreGroup := Mode = 'A';
|
||||||
|
|
||||||
If Mode = 'C' Then
|
If Mode = 'C' Then
|
||||||
ReadMessages('S', SearchStr)
|
ReadMessages('S', '', SearchStr)
|
||||||
Else Begin
|
Else Begin
|
||||||
Session.io.OutRawLn ('');
|
Session.io.OutRawLn ('');
|
||||||
|
|
||||||
Reset (MBaseFile);
|
Reset (MBaseFile);
|
||||||
Read (MBaseFile, MBase); {skip email base}
|
Read (MBaseFile, MBase);
|
||||||
|
|
||||||
While Not Eof(MBaseFile) Do Begin
|
While Not Eof(MBaseFile) Do Begin
|
||||||
Read (MBaseFile, MBase);
|
Read (MBaseFile, MBase);
|
||||||
|
@ -3140,7 +3164,7 @@ Begin
|
||||||
GetMessageScan;
|
GetMessageScan;
|
||||||
|
|
||||||
If MScan.NewScan > 0 Then Begin
|
If MScan.NewScan > 0 Then Begin
|
||||||
If Not ReadMessages('T', SearchStr) Then Begin
|
If Not ReadMessages('T', '', SearchStr) Then Begin
|
||||||
Session.io.OutRawLn('');
|
Session.io.OutRawLn('');
|
||||||
Break;
|
Break;
|
||||||
End;
|
End;
|
||||||
|
@ -3151,6 +3175,7 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Session.io.OutFull (Session.GetPrompt(311));
|
Session.io.OutFull (Session.GetPrompt(311));
|
||||||
|
|
||||||
Close (MBaseFile);
|
Close (MBaseFile);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -3177,7 +3202,7 @@ Var
|
||||||
Begin
|
Begin
|
||||||
Session.SystemLog ('Sending mass mail to ' + MsgTo);
|
Session.SystemLog ('Sending mass mail to ' + MsgTo);
|
||||||
|
|
||||||
AssignMessageData(MsgBase);
|
AssignMessageData (MsgBase, MBase);
|
||||||
|
|
||||||
MsgBase^.SetFrom (MsgFrom);
|
MsgBase^.SetFrom (MsgFrom);
|
||||||
MsgBase^.SetTo (MsgTo);
|
MsgBase^.SetTo (MsgTo);
|
||||||
|
@ -3277,7 +3302,7 @@ Begin
|
||||||
|
|
||||||
Lines := 0;
|
Lines := 0;
|
||||||
|
|
||||||
If Editor(Lines, 78, mysMaxMsgLines, False, fn_tplMsgEdit, MsgSubj) Then Begin
|
If Editor(Lines, ColumnValue[Session.Theme.ColumnSize] - 2, mysMaxMsgLines, False, fn_tplMsgEdit, MsgSubj) Then Begin
|
||||||
Session.io.OutFullLn (Session.GetPrompt(394));
|
Session.io.OutFullLn (Session.GetPrompt(394));
|
||||||
|
|
||||||
OLD := MBase;
|
OLD := MBase;
|
||||||
|
@ -3350,32 +3375,38 @@ Begin
|
||||||
Read (MBaseFile, MBase);
|
Read (MBaseFile, MBase);
|
||||||
Close (MBaseFile);
|
Close (MBaseFile);
|
||||||
|
|
||||||
ReadMessages('B', '');
|
ReadMessages('B', '', '');
|
||||||
|
|
||||||
MBase := Old;
|
MBase := Old;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBase.MessageQuickScan (Data: String);
|
Procedure TMsgBase.MessageQuickScan (Data: String);
|
||||||
// defaults to ALL groups/bases
|
// Defaults to ALL groups/bases
|
||||||
// /CURRENT = scan only current message base
|
// /CURRENT = scan only current message base
|
||||||
// /GROUP = scan only current group bases
|
// /GROUP = scan only current group bases
|
||||||
// options:
|
// other options:
|
||||||
// /NOSCAN = do not show "scanning" prompt
|
// /LIST = List messages
|
||||||
// /NOFOOT = do not show "end of scan" prompt
|
// /NEW = only show/list if base has new or msg is new
|
||||||
// /NOHEAD = do not show "starting quickscan" prompt
|
// /YOU = only show/list if base has your msgs or is your msg
|
||||||
// Only scans bases that they have selected in Newscan, of course
|
// /NOFOOT = dont show footer prompt
|
||||||
Const
|
// /NOSCAN = do not show "scanning" prompt
|
||||||
Global_CurBase : LongInt = 1;
|
// /NOFROM = bypass messages posted FROM the user
|
||||||
Global_TotalBases : LongInt = 1;
|
// /NOREAD = bypass messages addressed to, and read by, the user
|
||||||
Global_TotalMsgs : LongInt = 0;
|
Var
|
||||||
Global_NewMsgs : LongInt = 0;
|
NoFrom : Boolean;
|
||||||
Global_YourMsgs : LongInt = 0;
|
NoRead : Boolean;
|
||||||
ShowIfNew : Boolean = False;
|
ShowIfNew : Boolean;
|
||||||
ShowIfYou : Boolean = False;
|
ShowIfYou : Boolean;
|
||||||
ShowScanPrompt : Boolean = True;
|
ShowScanPrompt : Boolean;
|
||||||
ShowHeadPrompt : Boolean = True;
|
ShowFootPrompt : Boolean;
|
||||||
ShowFootPrompt : Boolean = True;
|
ShowMessage : Boolean;
|
||||||
Mode : Char = 'A';
|
ShowMessagePTR : LongInt;
|
||||||
|
Global_CurBase : LongInt;
|
||||||
|
Global_TotalBases : LongInt;
|
||||||
|
Global_TotalMsgs : LongInt;
|
||||||
|
Global_NewMsgs : LongInt;
|
||||||
|
Global_YourMsgs : LongInt;
|
||||||
|
Mode : Char;
|
||||||
|
|
||||||
Procedure ScanBase;
|
Procedure ScanBase;
|
||||||
Var
|
Var
|
||||||
|
@ -3393,10 +3424,11 @@ Const
|
||||||
|
|
||||||
If ShowScanPrompt Then Begin
|
If ShowScanPrompt Then Begin
|
||||||
Session.io.OutFull(Session.GetPrompt(487));
|
Session.io.OutFull(Session.GetPrompt(487));
|
||||||
|
|
||||||
Session.io.BufFlush;
|
Session.io.BufFlush;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
GetMessageStats(MBase, TotalMsgs, NewMsgs, YourMsgs);
|
GetMessageStats(ShowMessage, ShowScanPrompt, ShowIfYou, ShowMessagePTR, MBase, NoFrom, NoRead, TotalMsgs, NewMsgs, YourMsgs);
|
||||||
|
|
||||||
Inc (Global_TotalMsgs, TotalMsgs);
|
Inc (Global_TotalMsgs, TotalMsgs);
|
||||||
Inc (Global_NewMsgs, NewMsgs);
|
Inc (Global_NewMsgs, NewMsgs);
|
||||||
|
@ -3412,6 +3444,7 @@ Const
|
||||||
If ShowScanPrompt Then
|
If ShowScanPrompt Then
|
||||||
Session.io.OutBS(Screen.CursorX, True);
|
Session.io.OutBS(Screen.CursorX, True);
|
||||||
|
|
||||||
|
If Not ShowMessage Then
|
||||||
If (ShowIfNew And (NewMsgs > 0)) or (ShowIfYou And (YourMsgs > 0)) or (Not ShowIfNew And Not ShowIfYou) Then Begin
|
If (ShowIfNew And (NewMsgs > 0)) or (ShowIfYou And (YourMsgs > 0)) or (Not ShowIfNew And Not ShowIfYou) Then Begin
|
||||||
Session.io.OutFullLn(Session.GetPrompt(488));
|
Session.io.OutFullLn(Session.GetPrompt(488));
|
||||||
Session.io.BufFlush;
|
Session.io.BufFlush;
|
||||||
|
@ -3421,26 +3454,39 @@ Const
|
||||||
Var
|
Var
|
||||||
Old : RecMessageBase;
|
Old : RecMessageBase;
|
||||||
Begin
|
Begin
|
||||||
|
Session.LastScanHadNew := False;
|
||||||
|
Session.LastScanHadYou := False;
|
||||||
|
|
||||||
|
Global_CurBase := 1;
|
||||||
|
Global_TotalBases := 1;
|
||||||
|
Global_TotalMsgs := 0;
|
||||||
|
Global_NewMsgs := 0;
|
||||||
|
Global_YourMsgs := 0;
|
||||||
|
ShowMessagePTR := 0;
|
||||||
|
Mode := 'A';
|
||||||
|
|
||||||
FillChar(Session.io.PromptInfo, SizeOf(Session.io.PromptInfo), 0);
|
FillChar(Session.io.PromptInfo, SizeOf(Session.io.PromptInfo), 0);
|
||||||
|
|
||||||
If Pos('/GROUP', Data) > 0 Then Mode := 'G';
|
If Pos('/GROUP', Data) > 0 Then Mode := 'G';
|
||||||
If Pos('/CURRENT', Data) > 0 Then Mode := 'C';
|
If Pos('/CURRENT', Data) > 0 Then Mode := 'C';
|
||||||
|
|
||||||
ShowScanPrompt := Pos('/NOSCAN', Data) = 0;
|
ShowMessage := Pos('/LIST', Data) > 0;
|
||||||
ShowHeadPrompt := Pos('/NOHEAD', Data) = 0;
|
|
||||||
ShowFootPrompt := Pos('/NOFOOT', Data) = 0;
|
ShowFootPrompt := Pos('/NOFOOT', Data) = 0;
|
||||||
|
ShowScanPrompt := Pos('/NOSCAN', Data) = 0;
|
||||||
|
ShowIfNew := Pos('/NEW', Data) > 0;
|
||||||
|
ShowIfYou := Pos('/YOU', Data) > 0;
|
||||||
|
NoFrom := Pos('/NOFROM', Data) > 0;
|
||||||
|
NoRead := Pos('/NOREAD', Data) > 0;
|
||||||
|
|
||||||
Old := MBase;
|
Old := MBase;
|
||||||
Session.User.IgnoreGroup := Mode = 'A';
|
Session.User.IgnoreGroup := Mode = 'A';
|
||||||
|
|
||||||
If ShowHeadPrompt Then
|
FileMode := 66;
|
||||||
Session.io.OutFullLn (Session.GetPrompt(486));
|
|
||||||
|
|
||||||
If Mode = 'C' Then
|
If Mode = 'C' Then
|
||||||
ScanBase
|
ScanBase
|
||||||
Else Begin
|
Else Begin
|
||||||
Reset (MBaseFile);
|
Reset (MBaseFile);
|
||||||
Read (MBaseFile, MBase); {skip email base}
|
|
||||||
|
|
||||||
Global_TotalBases := FileSize(MBaseFile);
|
Global_TotalBases := FileSize(MBaseFile);
|
||||||
|
|
||||||
|
@ -3459,6 +3505,16 @@ Begin
|
||||||
Close (MBaseFile);
|
Close (MBaseFile);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Session.LastScanHadNew := Global_NewMsgs > 0;
|
||||||
|
Session.LastScanHadYou := Global_YourMsgs > 0;
|
||||||
|
|
||||||
|
Session.io.PromptInfo[1] := strComma(Global_TotalMsgs);
|
||||||
|
Session.io.PromptInfo[2] := strComma(Global_NewMsgs);
|
||||||
|
Session.io.PromptInfo[3] := strComma(Global_YourMsgs);
|
||||||
|
|
||||||
|
If ShowMessagePTR > 0 Then
|
||||||
|
Session.io.OutFull(Session.GetPrompt(508));
|
||||||
|
|
||||||
If ShowFootPrompt Then
|
If ShowFootPrompt Then
|
||||||
Session.io.OutFullLn(Session.GetPrompt(489));
|
Session.io.OutFullLn(Session.GetPrompt(489));
|
||||||
|
|
||||||
|
@ -3724,11 +3780,44 @@ Const
|
||||||
CRLF = #13#10;
|
CRLF = #13#10;
|
||||||
Var
|
Var
|
||||||
tFile : Text;
|
tFile : Text;
|
||||||
|
Flags : String;
|
||||||
Begin
|
Begin
|
||||||
Assign (tFile, Session.TempPath + 'toreader.ext');
|
Assign (tFile, Session.TempPath + 'toreader.ext');
|
||||||
ReWrite (tFile);
|
ReWrite (tFile);
|
||||||
|
Write (tFile, 'ALIAS ' + Session.User.ThisUser.Handle + CRLF);
|
||||||
|
|
||||||
Write (tFile, 'ALIAS ' + Session.User.ThisUser.Handle + CRLF);
|
Reset (MBaseFile);
|
||||||
|
|
||||||
|
While Not Eof(MBaseFile) Do Begin
|
||||||
|
Read (MBaseFile, MBase);
|
||||||
|
|
||||||
|
If Session.User.Access(MBase.ReadACS) Then Begin
|
||||||
|
Flags := ' ';
|
||||||
|
|
||||||
|
If MBase.Flags AND MBPrivate = 0 Then
|
||||||
|
Flags := Flags + 'aO'
|
||||||
|
Else
|
||||||
|
Flags := Flags + 'pP';
|
||||||
|
|
||||||
|
If MBase.Flags AND MBRealNames = 0 Then
|
||||||
|
Flags := Flags + 'H';
|
||||||
|
|
||||||
|
If Not Session.User.Access(MBase.PostACS) Then
|
||||||
|
Flags := Flags + 'BRZ';
|
||||||
|
|
||||||
|
Case MBase.NetType of
|
||||||
|
0 : Flags := Flags + 'L';
|
||||||
|
1 : Flags := Flags + 'E';
|
||||||
|
2 : Flags := Flags + 'U';
|
||||||
|
3 : Flags := Flags + 'N';
|
||||||
|
End;
|
||||||
|
|
||||||
|
If MBase.DefQScan = 2 Then
|
||||||
|
Flags := Flags + 'F';
|
||||||
|
|
||||||
|
Write (tFile, 'AREA ' + strI2S(MBase.Index) + Flags, CRLF);
|
||||||
|
End;
|
||||||
|
End;
|
||||||
|
|
||||||
Close (tFile);
|
Close (tFile);
|
||||||
End;
|
End;
|
||||||
|
@ -3853,11 +3942,11 @@ Begin
|
||||||
|
|
||||||
MsgBase^.MsgStartUp;
|
MsgBase^.MsgStartUp;
|
||||||
|
|
||||||
If MsgBase^.IsPriv Then
|
If MsgBase^.IsPriv And Not Session.User.IsThisUser(MsgBase^.GetTo) Then Begin
|
||||||
If Not ((MsgBase^.GetTo = Session.User.ThisUser.RealName) or (MsgBase^.GetTo = Session.User.ThisUser.Handle)) Then Begin
|
MsgBase^.SeekNext;
|
||||||
MsgBase^.SeekNext;
|
|
||||||
Continue;
|
Continue;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Inc (MsgAdded);
|
Inc (MsgAdded);
|
||||||
Inc (TotalMsgs);
|
Inc (TotalMsgs);
|
||||||
|
@ -4171,7 +4260,7 @@ Begin
|
||||||
|
|
||||||
If OpenCreateBase(MsgBase, TempBase) Then Begin
|
If OpenCreateBase(MsgBase, TempBase) Then Begin
|
||||||
|
|
||||||
AssignMessageData(MsgBase);
|
AssignMessageData(MsgBase, TempBase);
|
||||||
|
|
||||||
QwkBlock[0] := #25;
|
QwkBlock[0] := #25;
|
||||||
Move (QwkHeader.UpTo, QwkBlock[1], 25);
|
Move (QwkHeader.UpTo, QwkBlock[1], 25);
|
||||||
|
|
|
@ -98,9 +98,9 @@ Type
|
||||||
Procedure SeekNext; Virtual; {Find next matching msg}
|
Procedure SeekNext; Virtual; {Find next matching msg}
|
||||||
Procedure SeekPrior; Virtual; {Prior msg}
|
Procedure SeekPrior; Virtual; {Prior msg}
|
||||||
Function SeekFound: Boolean; Virtual; {Msg was found}
|
Function SeekFound: Boolean; Virtual; {Msg was found}
|
||||||
Procedure YoursFirst(Name: String; Handle: String); Virtual; {Seek your mail}
|
// Procedure YoursFirst(Name: String; Handle: String); Virtual; {Seek your mail}
|
||||||
Procedure YoursNext; Virtual; {Seek next your mail}
|
// Procedure YoursNext; Virtual; {Seek next your mail}
|
||||||
Function YoursFound: Boolean; Virtual; {Message found}
|
// Function YoursFound: Boolean; Virtual; {Message found}
|
||||||
Function GetHighMsgNum: LongInt; Virtual; {Get highest msg number}
|
Function GetHighMsgNum: LongInt; Virtual; {Get highest msg number}
|
||||||
Procedure SetMailType(MT: MsgMailType); Virtual; {Set message base type}
|
Procedure SetMailType(MT: MsgMailType); Virtual; {Set message base type}
|
||||||
// Function GetSubArea: Word; Virtual; {Get sub area number}
|
// Function GetSubArea: Word; Virtual; {Get sub area number}
|
||||||
|
@ -496,6 +496,7 @@ Procedure TMsgBaseABS.MsgTxtStartUp;
|
||||||
Begin
|
Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
(*
|
||||||
Procedure TMsgBaseABS.YoursFirst(Name: String; Handle: String);
|
Procedure TMsgBaseABS.YoursFirst(Name: String; Handle: String);
|
||||||
Begin
|
Begin
|
||||||
End;
|
End;
|
||||||
|
@ -507,7 +508,7 @@ End;
|
||||||
Function TMsgBaseABS.YoursFound: Boolean;
|
Function TMsgBaseABS.YoursFound: Boolean;
|
||||||
Begin
|
Begin
|
||||||
End;
|
End;
|
||||||
|
*)
|
||||||
Function TMsgBaseABS.CreateMsgBase(MaxMsg: Word; MaxDays: Word): Boolean;
|
Function TMsgBaseABS.CreateMsgBase(MaxMsg: Word; MaxDays: Word): Boolean;
|
||||||
Begin
|
Begin
|
||||||
End;
|
End;
|
||||||
|
|
|
@ -32,11 +32,12 @@ Type
|
||||||
SavedY : Byte;
|
SavedY : Byte;
|
||||||
CurX : Byte;
|
CurX : Byte;
|
||||||
Attr : Byte;
|
Attr : Byte;
|
||||||
|
LastChar : Char;
|
||||||
|
|
||||||
Procedure SetFore (Color: Byte);
|
Procedure SetFore (Color: Byte);
|
||||||
Procedure SetBack (Color: Byte);
|
Procedure SetBack (Color: Byte);
|
||||||
Procedure ResetControlCode;
|
Procedure ResetControlCode;
|
||||||
Function ParseNumber (Var Line: String) : Integer;
|
Function ParseNumber : Integer;
|
||||||
Function AddChar (Ch: Char) : Boolean;
|
Function AddChar (Ch: Char) : Boolean;
|
||||||
Procedure MoveXY (X, Y: Word);
|
Procedure MoveXY (X, Y: Word);
|
||||||
Procedure MoveUP;
|
Procedure MoveUP;
|
||||||
|
@ -130,28 +131,21 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TMsgBaseAnsi.ParseNumber (Var Line: String) : Integer;
|
Function TMsgBaseAnsi.ParseNumber : Integer;
|
||||||
Var
|
Var
|
||||||
A : Integer;
|
Res : LongInt;
|
||||||
B : LongInt;
|
Str : String;
|
||||||
Str1 : String;
|
|
||||||
Str2 : String;
|
|
||||||
Begin
|
Begin
|
||||||
Str1 := Line;
|
Val(Code, Result, Res);
|
||||||
|
|
||||||
Val(Str1, A, B);
|
If Res = 0 Then
|
||||||
|
Code := ''
|
||||||
If B = 0 Then
|
|
||||||
Str1 := ''
|
|
||||||
Else Begin
|
Else Begin
|
||||||
Str2 := Copy(Str1, 1, B - 1);
|
Str := Copy(Code, 1, Pred(Res));
|
||||||
|
|
||||||
Delete (Str1, 1, B);
|
Delete (Code, 1, Res);
|
||||||
Val (Str2, A, B);
|
Val (Str, Result, Res);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Line := Str1;
|
|
||||||
ParseNumber := A;
|
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseAnsi.MoveXY (X, Y: Word);
|
Procedure TMsgBaseAnsi.MoveXY (X, Y: Word);
|
||||||
|
@ -168,11 +162,13 @@ Var
|
||||||
X : Byte;
|
X : Byte;
|
||||||
Y : Byte;
|
Y : Byte;
|
||||||
Begin
|
Begin
|
||||||
X := ParseNumber(Code);
|
Y := ParseNumber;
|
||||||
Y := ParseNumber(Code);
|
|
||||||
|
If Y = 0 Then Y := 1;
|
||||||
|
|
||||||
|
X := ParseNumber;
|
||||||
|
|
||||||
If X = 0 Then X := 1;
|
If X = 0 Then X := 1;
|
||||||
If Y = 0 Then Y := 1;
|
|
||||||
|
|
||||||
MoveXY (X, Y);
|
MoveXY (X, Y);
|
||||||
|
|
||||||
|
@ -184,7 +180,7 @@ Var
|
||||||
NewPos : Integer;
|
NewPos : Integer;
|
||||||
Offset : Integer;
|
Offset : Integer;
|
||||||
Begin
|
Begin
|
||||||
Offset := ParseNumber (Code);
|
Offset := ParseNumber;
|
||||||
|
|
||||||
If Offset = 0 Then Offset := 1;
|
If Offset = 0 Then Offset := 1;
|
||||||
|
|
||||||
|
@ -202,7 +198,7 @@ Procedure TMsgBaseAnsi.MoveDOWN;
|
||||||
Var
|
Var
|
||||||
NewPos : Byte;
|
NewPos : Byte;
|
||||||
Begin
|
Begin
|
||||||
NewPos := ParseNumber (Code);
|
NewPos := ParseNumber;
|
||||||
|
|
||||||
If NewPos = 0 Then NewPos := 1;
|
If NewPos = 0 Then NewPos := 1;
|
||||||
|
|
||||||
|
@ -216,7 +212,7 @@ Var
|
||||||
NewPos : Integer;
|
NewPos : Integer;
|
||||||
Offset : Integer;
|
Offset : Integer;
|
||||||
Begin
|
Begin
|
||||||
Offset := ParseNumber (Code);
|
Offset := ParseNumber;
|
||||||
|
|
||||||
If Offset = 0 Then Offset := 1;
|
If Offset = 0 Then Offset := 1;
|
||||||
|
|
||||||
|
@ -235,7 +231,7 @@ Var
|
||||||
NewPos : Integer;
|
NewPos : Integer;
|
||||||
Offset : Integer;
|
Offset : Integer;
|
||||||
Begin
|
Begin
|
||||||
Offset := ParseNumber(Code);
|
Offset := ParseNumber;
|
||||||
|
|
||||||
If Offset = 0 Then Offset := 1;
|
If Offset = 0 Then Offset := 1;
|
||||||
|
|
||||||
|
@ -278,7 +274,7 @@ Begin
|
||||||
'h' : ResetControlCode;
|
'h' : ResetControlCode;
|
||||||
'm' : Begin
|
'm' : Begin
|
||||||
While Length(Code) > 0 Do Begin
|
While Length(Code) > 0 Do Begin
|
||||||
Case ParseNumber(Code) of
|
Case ParseNumber of
|
||||||
0 : Attr := 7;
|
0 : Attr := 7;
|
||||||
1 : Attr := Attr OR $08;
|
1 : Attr := Attr OR $08;
|
||||||
5 : Attr := Attr OR $80;
|
5 : Attr := Attr OR $80;
|
||||||
|
@ -327,16 +323,18 @@ Begin
|
||||||
PipeCode := PipeCode + Ch;
|
PipeCode := PipeCode + Ch;
|
||||||
|
|
||||||
If Length(PipeCode) = 2 Then Begin
|
If Length(PipeCode) = 2 Then Begin
|
||||||
|
If PipeCode = '00' Then
|
||||||
Case strS2I(PipeCode) of
|
SetFore(0)
|
||||||
00..
|
|
||||||
15 : SetFore(strS2I(PipeCode));
|
|
||||||
16..
|
|
||||||
23 : SetBack(strS2I(PipeCode) - 16);
|
|
||||||
Else
|
Else
|
||||||
AddChar('|');
|
Case strS2I(PipeCode) of
|
||||||
AddChar(PipeCode[1]);
|
01..
|
||||||
AddChar(PipeCode[2]);
|
15 : SetFore(strS2I(PipeCode));
|
||||||
|
16..
|
||||||
|
23 : SetBack(strS2I(PipeCode) - 16);
|
||||||
|
Else
|
||||||
|
AddChar('|');
|
||||||
|
AddChar(PipeCode[1]);
|
||||||
|
AddChar(PipeCode[2]);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
GotPipe := False;
|
GotPipe := False;
|
||||||
|
@ -349,13 +347,15 @@ Begin
|
||||||
Case Escape of
|
Case Escape of
|
||||||
0 : Begin
|
0 : Begin
|
||||||
Case Ch of
|
Case Ch of
|
||||||
#27 : Escape := 1;
|
#0 : ;
|
||||||
#9 : MoveXY (CurX + 8, CurY);
|
#9 : MoveXY (CurX + 8, CurY);
|
||||||
#12 : GotClear := True;
|
#12 : GotClear := True;
|
||||||
|
#13 : CurX := 1;
|
||||||
|
#27 : Escape := 1;
|
||||||
Else
|
Else
|
||||||
If Ch = '|' Then
|
// If Ch = '|' Then
|
||||||
GotPipe := True
|
// GotPipe := True
|
||||||
Else
|
// Else
|
||||||
AddChar (Ch);
|
AddChar (Ch);
|
||||||
|
|
||||||
ResetControlCode;
|
ResetControlCode;
|
||||||
|
@ -372,6 +372,8 @@ Begin
|
||||||
Else
|
Else
|
||||||
ResetControlCode;
|
ResetControlCode;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
LastChar := Ch;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TMsgBaseAnsi.ProcessBuf (Var Buf; BufLen: Word) : Boolean;
|
Function TMsgBaseAnsi.ProcessBuf (Var Buf; BufLen: Word) : Boolean;
|
||||||
|
@ -383,14 +385,18 @@ Begin
|
||||||
|
|
||||||
For Count := 1 to BufLen Do Begin
|
For Count := 1 to BufLen Do Begin
|
||||||
If CurY > Lines Then Lines := CurY;
|
If CurY > Lines Then Lines := CurY;
|
||||||
|
|
||||||
Case Buffer[Count] of
|
Case Buffer[Count] of
|
||||||
#10 : If CurY = mysMaxMsgLines Then Begin
|
#10 : If CurY = mysMaxMsgLines Then Begin
|
||||||
Result := True;
|
Result := True;
|
||||||
GotAnsi := False;
|
GotAnsi := False;
|
||||||
|
|
||||||
Break;
|
Break;
|
||||||
End Else
|
End Else Begin
|
||||||
Inc (CurY);
|
Inc (CurY);
|
||||||
#13 : CurX := 1;
|
|
||||||
|
If LastChar <> #13 Then CurX := 1;
|
||||||
|
End;
|
||||||
#26 : Begin
|
#26 : Begin
|
||||||
Result := True;
|
Result := True;
|
||||||
Break;
|
Break;
|
||||||
|
|
|
@ -219,9 +219,9 @@ Type
|
||||||
// Function IsEchoed : Boolean; Virtual; {Msg should be echoed}
|
// Function IsEchoed : Boolean; Virtual; {Msg should be echoed}
|
||||||
Function GetMsgLoc : LongInt; Virtual; {Msg location}
|
Function GetMsgLoc : LongInt; Virtual; {Msg location}
|
||||||
Procedure SetMsgLoc (ML: LongInt); Virtual; {Msg location}
|
Procedure SetMsgLoc (ML: LongInt); Virtual; {Msg location}
|
||||||
Procedure YoursFirst (Name: String; Handle: String); Virtual; {Seek your mail}
|
// Procedure YoursFirst (Name: String; Handle: String); Virtual; {Seek your mail}
|
||||||
Procedure YoursNext; Virtual; {Seek next your mail}
|
// Procedure YoursNext; Virtual; {Seek next your mail}
|
||||||
Function YoursFound : Boolean; Virtual; {Message found}
|
// Function YoursFound : Boolean; Virtual; {Message found}
|
||||||
Procedure StartNewMsg; Virtual;
|
Procedure StartNewMsg; Virtual;
|
||||||
Function OpenMsgBase : Boolean; Virtual;
|
Function OpenMsgBase : Boolean; Virtual;
|
||||||
Procedure CloseMsgBase; Virtual;
|
Procedure CloseMsgBase; Virtual;
|
||||||
|
@ -246,7 +246,7 @@ Type
|
||||||
Function ReReadIdx (Var IdxLoc : LongInt) : Word;
|
Function ReReadIdx (Var IdxLoc : LongInt) : Word;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function JamStrCrc(St: String): LongInt;
|
Function JamStrCrc (St: String): LongInt;
|
||||||
|
|
||||||
Implementation
|
Implementation
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ Begin
|
||||||
If TxtBuf <> Nil Then Dispose(TxtBuf);
|
If TxtBuf <> Nil Then Dispose(TxtBuf);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function JamStrCrc(St: String): LongInt;
|
Function JamStrCrc (St: String): LongInt;
|
||||||
Var
|
Var
|
||||||
i: Word;
|
i: Word;
|
||||||
crc: LongInt;
|
crc: LongInt;
|
||||||
|
@ -311,7 +311,7 @@ Begin
|
||||||
JamStrCrc := Crc;
|
JamStrCrc := Crc;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetMsgPath(St: String);
|
Procedure TMsgBaseJAM.SetMsgPath (St: String);
|
||||||
Begin
|
Begin
|
||||||
JM^.MsgPath := Copy(St, 1, 124);
|
JM^.MsgPath := Copy(St, 1, 124);
|
||||||
End;
|
End;
|
||||||
|
@ -326,52 +326,52 @@ Begin
|
||||||
JM^.Dest := Addr;
|
JM^.Dest := Addr;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetOrig(Addr: RecEchoMailAddr);
|
Procedure TMsgBaseJAM.SetOrig (Addr: RecEchoMailAddr);
|
||||||
Begin
|
Begin
|
||||||
JM^.Orig := Addr;
|
JM^.Orig := Addr;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetFrom(Name: String);
|
Procedure TMsgBaseJAM.SetFrom (Name: String);
|
||||||
Begin
|
Begin
|
||||||
JM^.MsgFrom := Name;
|
JM^.MsgFrom := Name;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetTo(Name: String);
|
Procedure TMsgBaseJAM.SetTo (Name: String);
|
||||||
Begin
|
Begin
|
||||||
JM^.MsgTo := Name;
|
JM^.MsgTo := Name;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetSubj(Str: String);
|
Procedure TMsgBaseJAM.SetSubj (Str: String);
|
||||||
Begin
|
Begin
|
||||||
JM^.MsgSubj := Str;
|
JM^.MsgSubj := Str;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetCost(SCost: Word);
|
Procedure TMsgBaseJAM.SetCost (SCost: Word);
|
||||||
Begin
|
Begin
|
||||||
MsgHdr^.JamHdr.Cost := SCost;
|
MsgHdr^.JamHdr.Cost := SCost;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetRefer(SRefer: LongInt);
|
Procedure TMsgBaseJAM.SetRefer (SRefer: LongInt);
|
||||||
Begin
|
Begin
|
||||||
MsgHdr^.JamHdr.ReplyTo := SRefer;
|
MsgHdr^.JamHdr.ReplyTo := SRefer;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetSeeAlso(SAlso: LongInt);
|
Procedure TMsgBaseJAM.SetSeeAlso (SAlso: LongInt);
|
||||||
Begin
|
Begin
|
||||||
MsgHdr^.JamHdr.ReplyFirst := SAlso;
|
MsgHdr^.JamHdr.ReplyFirst := SAlso;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetDate(SDate: String);
|
Procedure TMsgBaseJAM.SetDate (SDate: String);
|
||||||
Begin
|
Begin
|
||||||
JM^.MsgDate := SDate;
|
JM^.MsgDate := SDate;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetTime(STime: String);
|
Procedure TMsgBaseJAM.SetTime (STime: String);
|
||||||
Begin
|
Begin
|
||||||
JM^.MsgTime := STime;
|
JM^.MsgTime := STime;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetAttr1(Mask: LongInt; St: Boolean);
|
Procedure TMsgBaseJAM.SetAttr1 (Mask: LongInt; St: Boolean);
|
||||||
Begin
|
Begin
|
||||||
If St Then
|
If St Then
|
||||||
MsgHdr^.JamHdr.Attr1 := MsgHdr^.JamHdr.Attr1 Or Mask
|
MsgHdr^.JamHdr.Attr1 := MsgHdr^.JamHdr.Attr1 Or Mask
|
||||||
|
@ -379,67 +379,67 @@ Procedure TMsgBaseJAM.SetAttr1(Mask: LongInt; St: Boolean);
|
||||||
MsgHdr^.JamHdr.Attr1 := MsgHdr^.JamHdr.Attr1 And (Not Mask);
|
MsgHdr^.JamHdr.Attr1 := MsgHdr^.JamHdr.Attr1 And (Not Mask);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetLocal(LS: Boolean);
|
Procedure TMsgBaseJAM.SetLocal (LS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_Local, LS);
|
SetAttr1(Jam_Local, LS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetRcvd(RS: Boolean);
|
Procedure TMsgBaseJAM.SetRcvd (RS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_Rcvd, RS);
|
SetAttr1(Jam_Rcvd, RS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetPriv(PS: Boolean);
|
Procedure TMsgBaseJAM.SetPriv (PS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_Priv, PS);
|
SetAttr1(Jam_Priv, PS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetHold(SS: Boolean);
|
Procedure TMsgBaseJAM.SetHold (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1 (Jam_Hold, SS);
|
SetAttr1 (Jam_Hold, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetCrash(SS: Boolean);
|
Procedure TMsgBaseJAM.SetCrash (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_Crash, SS);
|
SetAttr1(Jam_Crash, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetKillSent(SS: Boolean);
|
Procedure TMsgBaseJAM.SetKillSent (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_KillSent, SS);
|
SetAttr1(Jam_KillSent, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetSent(SS: Boolean);
|
Procedure TMsgBaseJAM.SetSent (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_Sent, SS);
|
SetAttr1(Jam_Sent, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetFAttach(SS: Boolean);
|
Procedure TMsgBaseJAM.SetFAttach (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_FAttch, SS);
|
SetAttr1(Jam_FAttch, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetReqRct(SS: Boolean);
|
Procedure TMsgBaseJAM.SetReqRct (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_RcptReq, SS);
|
SetAttr1(Jam_RcptReq, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetReqAud(SS: Boolean);
|
Procedure TMsgBaseJAM.SetReqAud (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_ConfmReq, SS);
|
SetAttr1(Jam_ConfmReq, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetRetRct(SS: Boolean);
|
Procedure TMsgBaseJAM.SetRetRct (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetFileReq(SS: Boolean);
|
Procedure TMsgBaseJAM.SetFileReq (SS: Boolean);
|
||||||
Begin
|
Begin
|
||||||
SetAttr1(Jam_Freq, SS);
|
SetAttr1(Jam_Freq, SS);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.DoString(Str: String);
|
Procedure TMsgBaseJAM.DoString (Str: String);
|
||||||
Var
|
Var
|
||||||
i: Word;
|
i: Word;
|
||||||
Begin
|
Begin
|
||||||
|
@ -1354,7 +1354,7 @@ Procedure TMsgBaseJAM.SetMsgLoc(ML: LongInt); {Msg location}
|
||||||
Begin
|
Begin
|
||||||
JM^.CurrMsgNum := ML;
|
JM^.CurrMsgNum := ML;
|
||||||
End;
|
End;
|
||||||
|
(*
|
||||||
Procedure TMsgBaseJAM.YoursFirst (Name: String; Handle: String);
|
Procedure TMsgBaseJAM.YoursFirst (Name: String; Handle: String);
|
||||||
Begin
|
Begin
|
||||||
JM^.YourName := Name;
|
JM^.YourName := Name;
|
||||||
|
@ -1422,6 +1422,7 @@ Function TMsgBaseJAM.YoursFound: Boolean;
|
||||||
Begin
|
Begin
|
||||||
YoursFound := ((JM^.CurrMsgNum >= JM^.BaseHdr.BaseMsgNum) and (JM^.CurrMsgNum <= GetHighMsgNum));
|
YoursFound := ((JM^.CurrMsgNum >= JM^.BaseHdr.BaseMsgNum) and (JM^.CurrMsgNum <= GetHighMsgNum));
|
||||||
End;
|
End;
|
||||||
|
*)
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.StartNewMsg;
|
Procedure TMsgBaseJAM.StartNewMsg;
|
||||||
Begin
|
Begin
|
||||||
|
|
|
@ -262,9 +262,9 @@ Type
|
||||||
Function GetMsgLoc: LongInt; Virtual; {To allow reseeking to message}
|
Function GetMsgLoc: LongInt; Virtual; {To allow reseeking to message}
|
||||||
Procedure SetMsgLoc(ML: LongInt); Virtual; {Reseek to message}
|
Procedure SetMsgLoc(ML: LongInt); Virtual; {Reseek to message}
|
||||||
Function IdxHighest: LongInt; Virtual; { *** }
|
Function IdxHighest: LongInt; Virtual; { *** }
|
||||||
Procedure YoursFirst(Name: String; Handle: String); Virtual; {Seek your mail}
|
// Procedure YoursFirst(Name: String; Handle: String); Virtual; {Seek your mail}
|
||||||
Procedure YoursNext; Virtual; {Seek next your mail}
|
// Procedure YoursNext; Virtual; {Seek next your mail}
|
||||||
Function YoursFound: Boolean; Virtual; {Message found}
|
// Function YoursFound: Boolean; Virtual; {Message found}
|
||||||
Function GetMsgDisplayNum: LongInt; Virtual; {Get msg number to display}
|
Function GetMsgDisplayNum: LongInt; Virtual; {Get msg number to display}
|
||||||
Function GetTxtPos: LongInt; Virtual; {Get indicator of msg text position}
|
Function GetTxtPos: LongInt; Virtual; {Get indicator of msg text position}
|
||||||
Procedure SetTxtPos(TP: LongInt); Virtual; {Set text position}
|
Procedure SetTxtPos(TP: LongInt); Virtual; {Set text position}
|
||||||
|
@ -1513,6 +1513,7 @@ Begin
|
||||||
SeekFirst(ML);
|
SeekFirst(ML);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
(*
|
||||||
Procedure TMsgBaseSquish.YoursFirst (Name: String; Handle: String);
|
Procedure TMsgBaseSquish.YoursFirst (Name: String; Handle: String);
|
||||||
Begin
|
Begin
|
||||||
SqInfo^.CurrIdx := 0;
|
SqInfo^.CurrIdx := 0;
|
||||||
|
@ -1554,7 +1555,7 @@ Function TMsgBaseSquish.YoursFound: Boolean;
|
||||||
Begin
|
Begin
|
||||||
YoursFound := SqInfo^.CurrIdx <= SqInfo^.SqBase.NumMsg;
|
YoursFound := SqInfo^.CurrIdx <= SqInfo^.SqBase.NumMsg;
|
||||||
End;
|
End;
|
||||||
|
*)
|
||||||
Function TMsgBaseSquish.GetMsgDisplayNum: LongInt;
|
Function TMsgBaseSquish.GetMsgDisplayNum: LongInt;
|
||||||
Begin
|
Begin
|
||||||
GetMsgDisplayNum := SqInfo^.CurrIdx;
|
GetMsgDisplayNum := SqInfo^.CurrIdx;
|
||||||
|
|
|
@ -74,7 +74,11 @@ Begin
|
||||||
A := Pos(':', SearchStr);
|
A := Pos(':', SearchStr);
|
||||||
B := Pos('/', SearchStr);
|
B := Pos('/', SearchStr);
|
||||||
|
|
||||||
AddrSearch := Not (A = 0) or (B <= A);
|
If (A = 0) or (B <= A) Then
|
||||||
|
AddrSearch := False
|
||||||
|
Else
|
||||||
|
AddrSearch := True;
|
||||||
|
// AddrSearch := Not (A = 0) or (B <= A);
|
||||||
|
|
||||||
If AddrSearch Then Begin
|
If AddrSearch Then Begin
|
||||||
SearchZone := Copy(SearchStr, 1, A - 1);
|
SearchZone := Copy(SearchStr, 1, A - 1);
|
||||||
|
|
|
@ -62,7 +62,7 @@ Type
|
||||||
Procedure GetOption2 (Edit: Boolean);
|
Procedure GetOption2 (Edit: Boolean);
|
||||||
Procedure GetOption3 (Edit: Boolean);
|
Procedure GetOption3 (Edit: Boolean);
|
||||||
Procedure GetTheme;
|
Procedure GetTheme;
|
||||||
Procedure UserLogon1 (Var UN, PW, MPE : String);
|
Procedure UserLogon1 (Var MPE : String);
|
||||||
Procedure UserLogon2;
|
Procedure UserLogon2;
|
||||||
Procedure UserLogon3;
|
Procedure UserLogon3;
|
||||||
Procedure CreateNewUser (DefName: String);
|
Procedure CreateNewUser (DefName: String);
|
||||||
|
@ -163,6 +163,7 @@ Var
|
||||||
'A' : Res := Chat.Available;
|
'A' : Res := Chat.Available;
|
||||||
'I' : Res := Chat.Invisible;
|
'I' : Res := Chat.Invisible;
|
||||||
'K' : Res := AcsOkFlag;
|
'K' : Res := AcsOkFlag;
|
||||||
|
'N' : Res := Session.LastScanHadNew;
|
||||||
'M' : Begin
|
'M' : Begin
|
||||||
Res := Access(Session.Msgs.MBase.SysopACS);
|
Res := Access(Session.Msgs.MBase.SysopACS);
|
||||||
|
|
||||||
|
@ -175,6 +176,7 @@ Var
|
||||||
Res := (Temp2 >= Temp1);
|
Res := (Temp2 >= Temp1);
|
||||||
End Else
|
End Else
|
||||||
Res := True;
|
Res := True;
|
||||||
|
'Y' : Res := Session.LastScanHadYou;
|
||||||
End;
|
End;
|
||||||
'S' : Res := ThisUser.Security >= strS2I(Data);
|
'S' : Res := ThisUser.Security >= strS2I(Data);
|
||||||
'T' : Res := Session.TimeLeft > strS2I(Data);
|
'T' : Res := Session.TimeLeft > strS2I(Data);
|
||||||
|
@ -1171,7 +1173,7 @@ Begin
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TBBSUser.UserLogon1 (Var UN, PW, MPE : String);
|
Procedure TBBSUser.UserLogon1 (Var MPE: String);
|
||||||
Var
|
Var
|
||||||
A : Integer;
|
A : Integer;
|
||||||
Count : Byte;
|
Count : Byte;
|
||||||
|
@ -1182,7 +1184,7 @@ Begin
|
||||||
|
|
||||||
Session.io.Graphics := 0;
|
Session.io.Graphics := 0;
|
||||||
|
|
||||||
Session.systemLog ('-');
|
Session.SystemLog ('-');
|
||||||
Session.SystemLog ('Connect from ' + Session.UserIPInfo + ' (' + Session.UserHostInfo + ')');
|
Session.SystemLog ('Connect from ' + Session.UserIPInfo + ' (' + Session.UserHostInfo + ')');
|
||||||
|
|
||||||
Session.HistoryHour := strS2I(Copy(TimeDos2Str(CurDateDos, False), 1, 2));
|
Session.HistoryHour := strS2I(Copy(TimeDos2Str(CurDateDos, False), 1, 2));
|
||||||
|
@ -1194,11 +1196,7 @@ Begin
|
||||||
Halt(0);
|
Halt(0);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
//Session.io.OutFullLn('|CL|CR' + strPadC(mysSoftwareID + ' BBS Version ' + mysVersion + ' for ' + OSID, 79, ' '));
|
Session.io.OutFullLn ('|CL' + mysSoftwareID + ' BBS v' + mysVersion + ' for ' + OSID + ' Node |ND');
|
||||||
//Session.io.OutFullLn(strPadC(CopyID, 79, ' '));
|
|
||||||
//Session.io.OutFullLn('|CR' + strPadC(mysWebSite, 79, ' '));
|
|
||||||
|
|
||||||
Session.io.OutFullLn ('|CL' + mysSoftwareID + ' BBS Version ' + mysVersion + ' for ' + OSID + ' : Node |ND');
|
|
||||||
Session.io.OutFullLn (CopyID);
|
Session.io.OutFullLn (CopyID);
|
||||||
|
|
||||||
If Config.DefTermMode = 0 Then
|
If Config.DefTermMode = 0 Then
|
||||||
|
@ -1213,9 +1211,6 @@ Begin
|
||||||
|
|
||||||
If Config.ThemeOnStart Then GetTheme;
|
If Config.ThemeOnStart Then GetTheme;
|
||||||
|
|
||||||
If FileExist(Config.ScriptPath + 'startup.mpx') Then
|
|
||||||
ExecuteMPL(NIL, 'startup');
|
|
||||||
|
|
||||||
If (Session.Theme.Flags AND ThmAllowASCII = 0) and (Session.io.Graphics = 0) Then Begin
|
If (Session.Theme.Flags AND ThmAllowASCII = 0) and (Session.io.Graphics = 0) Then Begin
|
||||||
Session.io.OutFullLn (Session.GetPrompt(321));
|
Session.io.OutFullLn (Session.GetPrompt(321));
|
||||||
Session.SystemLog ('ASCII login disabled');
|
Session.SystemLog ('ASCII login disabled');
|
||||||
|
@ -1227,11 +1222,14 @@ Begin
|
||||||
Halt(0);
|
Halt(0);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If UN <> '' Then Begin
|
If FileExist(Config.ScriptPath + 'startup.mpx') Then
|
||||||
If Not FindUser(UN, True) Then
|
ExecuteMPL(NIL, 'startup');
|
||||||
|
|
||||||
|
If Session.UserLoginName <> '' Then Begin
|
||||||
|
If Not FindUser(Session.UserLoginName, True) Then
|
||||||
Halt;
|
Halt;
|
||||||
|
|
||||||
If strUpper(PW) <> TempUser.Password Then Begin
|
If strUpper(Session.UserLoginPW) <> TempUser.Password Then Begin
|
||||||
UserNum := -1;
|
UserNum := -1;
|
||||||
Halt;
|
Halt;
|
||||||
End;
|
End;
|
||||||
|
|
|
@ -196,7 +196,7 @@
|
||||||
; &1 = base number &2 = base name &3 = scan base? (Yes or No)
|
; &1 = base number &2 = base name &3 = scan base? (Yes or No)
|
||||||
093 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
|
093 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
|
||||||
094 |CR|12There are no available message bases!
|
094 |CR|12There are no available message bases!
|
||||||
095 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
|
095 |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
|
||||||
; For strings 096 - 099: &1 = message base name
|
; For strings 096 - 099: &1 = message base name
|
||||||
096 |CR |11|&1 will NOT be scanned in QWK packets!|CR
|
096 |CR |11|&1 will NOT be scanned in QWK packets!|CR
|
||||||
097 |CR |11|&1 will be scanned in QWK packets!|CR
|
097 |CR |11|&1 will be scanned in QWK packets!|CR
|
||||||
|
@ -223,7 +223,7 @@
|
||||||
; E-mail reader prompt
|
; E-mail reader prompt
|
||||||
115 |CR|09(A)gain, (P)revious, (N)ext, (R)eply, (D)elete, (J)ump, (Q)uit? |11
|
115 |CR|09(A)gain, (P)revious, (N)ext, (R)eply, (D)elete, (J)ump, (Q)uit? |11
|
||||||
; Message read prompt. &1 = Current Msg # &2 = Total Messages
|
; Message read prompt. &1 = Current Msg # &2 = Total Messages
|
||||||
116 |CR (|&1 of |&2) Reading Messages (?/Help): |XX
|
116 |CR|01[|09|&1 of |&2|01] |09Reading Messages (|10?|09/|10Help|09): |11
|
||||||
117 |CR|12Delete this mail? |11
|
117 |CR|12Delete this mail? |11
|
||||||
118 |CR|15End of messages.
|
118 |CR|15End of messages.
|
||||||
; Post message TO:
|
; Post message TO:
|
||||||
|
@ -241,7 +241,8 @@
|
||||||
; &1 = email number &2 = email from
|
; &1 = email number &2 = email from
|
||||||
; &3 = email subject &4 = email date
|
; &3 = email subject &4 = email date
|
||||||
126 |07|$R05|&1|15|$R32|&2|10|$R32|&3|11|&4
|
126 |07|$R05|&1|15|$R32|&2|10|$R32|&3|11|&4
|
||||||
127 |01|$D77Ä |CR |01[|10þ|01] |09Read waiting mail? |11
|
; Read new email? &1 = total &2 = unread
|
||||||
|
127 |01|$D77Ä |CR |01[|10þ|01] |09You have |11|&1 |09messages (|11|&2 |09unread|09). Read them now? |11
|
||||||
; First message in thread prompt
|
; First message in thread prompt
|
||||||
128 |CR|11This is the first message in the thread.
|
128 |CR|11This is the first message in the thread.
|
||||||
; User lockout message.
|
; User lockout message.
|
||||||
|
@ -372,7 +373,7 @@
|
||||||
; &1 = File base number &2 = File base name &3 = Scan? (Yes or No)
|
; &1 = File base number &2 = File base name &3 = Scan? (Yes or No)
|
||||||
201 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
|
201 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
|
||||||
; Select scanned file bases prompt
|
; Select scanned file bases prompt
|
||||||
202 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
|
202 |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
|
||||||
; &1 = File base name
|
; &1 = File base name
|
||||||
203 |CR |11|&1 will NOT be scanned in new file scan!|CR
|
203 |CR |11|&1 will NOT be scanned in new file scan!|CR
|
||||||
; &1 = File base name
|
; &1 = File base name
|
||||||
|
@ -395,7 +396,7 @@
|
||||||
; Lightbar file list: Access to file denied.
|
; Lightbar file list: Access to file denied.
|
||||||
212 |12File is not available.|PN
|
212 |12File is not available.|PN
|
||||||
; Read Message personal prompt. &1 = Current Msg # &2 = Total Messages
|
; Read Message personal prompt. &1 = Current Msg # &2 = Total Messages
|
||||||
213 |CR|09[|&1 of |&2] Reading Messages (?/Help): |XX
|
213 |CR|01[|09|&1 of |&2|01] |09Reading Messages (|10?|09/|10Help|09): |11
|
||||||
; File group list header
|
; File group list header
|
||||||
214 |CL|CR|$D13 |09Ú|$D54Ä|01¿|CR|$D13 |09³|17 ± |15File Groups|$D40 |16|01³|CR|$D13 |09À|01|$D54ÄÙ|CR|$D14 |10#|02# |10F|02ile |10G|02roup |10N|02ame|07|$D29 |02A|10reas|CR|$D14 |09|$D54Ä
|
214 |CL|CR|$D13 |09Ú|$D54Ä|01¿|CR|$D13 |09³|17 ± |15File Groups|$D40 |16|01³|CR|$D13 |09À|01|$D54ÄÙ|CR|$D14 |10#|02# |10F|02ile |10G|02roup |10N|02ame|07|$D29 |02A|10reas|CR|$D14 |09|$D54Ä
|
||||||
; File group list format
|
; File group list format
|
||||||
|
@ -772,7 +773,7 @@
|
||||||
; Ansi msg read: delete msg
|
; Ansi msg read: delete msg
|
||||||
402 |CR|12Delete this mail? |11
|
402 |CR|12Delete this mail? |11
|
||||||
; Ansi msg read: jump to msg: &1 = cur msg num &2 = high msg num
|
; Ansi msg read: jump to msg: &1 = cur msg num &2 = high msg num
|
||||||
403 |CR|09Jump to which message? (1-|&2): |XX
|
403 |CR|09Jump to which message? (|101|09-|10|&2|09): |11
|
||||||
; Ansi msg read: scan toggle &1 = message base name
|
; Ansi msg read: scan toggle &1 = message base name
|
||||||
404 |CR|11|&1 will NOT be scanned in new message scan!
|
404 |CR|11|&1 will NOT be scanned in new message scan!
|
||||||
405 |CR|11|&1 will be scanned in new message scan!
|
405 |CR|11|&1 will be scanned in new message scan!
|
||||||
|
@ -820,7 +821,7 @@
|
||||||
; new user: use lightbar message index?
|
; new user: use lightbar message index?
|
||||||
429 |CR|12Use lightbar message index? |11
|
429 |CR|12Use lightbar message index? |11
|
||||||
; msg scan setting footer
|
; msg scan setting footer
|
||||||
430
|
430 |09|$D77Ä|CR
|
||||||
; Lightbar file list: #/filename:
|
; Lightbar file list: #/filename:
|
||||||
; &1 = filenum, &2 = filename, &3 = tag char &4 = size &5 = date &6 = DLs
|
; &1 = filenum, &2 = filename, &3 = tag char &4 = size &5 = date &6 = DLs
|
||||||
431 |07|&1|12|&3|15|$R57|&2 |09|$L07|&4 |&5
|
431 |07|&1|12|&3|15|$R57|&2 |09|$L07|&4 |&5
|
||||||
|
@ -860,7 +861,7 @@
|
||||||
; info edit: option 3
|
; info edit: option 3
|
||||||
448 |CR|09Enter optional field 3: |XX
|
448 |CR|09Enter optional field 3: |XX
|
||||||
; file new scan setting footer
|
; file new scan setting footer
|
||||||
449
|
449 |09|$D77Ä|CR
|
||||||
; private post (email) TO:
|
; private post (email) TO:
|
||||||
450 |CR|09To: |XX
|
450 |CR|09To: |XX
|
||||||
; reply msg SUBJ
|
; reply msg SUBJ
|
||||||
|
@ -947,11 +948,11 @@
|
||||||
484 |16|CL|09|17 ° |15Chat mode end.|$X79 |16|DE|DE
|
484 |16|CL|09|17 ° |15Chat mode end.|$X79 |16|DE|DE
|
||||||
; User2User accept chat page request? &1=user &2=Node
|
; User2User accept chat page request? &1=user &2=Node
|
||||||
485 |16|CL|15|&1 is requesting private user chat. Accept? |11
|
485 |16|CL|15|&1 is requesting private user chat. Accept? |11
|
||||||
; MsgBase quickscan header prompt
|
;
|
||||||
486 |CR|12Starting Quick Scan|CR
|
486 UNUSED
|
||||||
; MsgBase quickscan Scanning prompt
|
; MsgBase quickscan Scanning prompt
|
||||||
; &1=basename &2=current base# &3=total bases#
|
; &1=basename &2=current base# &3=total bases#
|
||||||
487 Scanning |&1 [|&2 of |&3]...
|
487 |03Scanning |11|&1 |03[|11|&2 |03of |11|&3|03]|08...
|
||||||
; MsgBase quickscan base list prompt
|
; MsgBase quickscan base list prompt
|
||||||
; &4=msgs in base &5=new messages &6=your messages &7=global total msg
|
; &4=msgs in base &5=new messages &6=your messages &7=global total msg
|
||||||
; &8=global new msgs &9=global your msgs
|
; &8=global new msgs &9=global your msgs
|
||||||
|
@ -959,9 +960,9 @@
|
||||||
; MsgBase quickscan footer prompt
|
; MsgBase quickscan footer prompt
|
||||||
; &7=global total msg &8=global new msgs &9=global your msgs
|
; &7=global total msg &8=global new msgs &9=global your msgs
|
||||||
489 |CRQuick Scan complete. |CR|CR|PA
|
489 |CRQuick Scan complete. |CR|CR|PA
|
||||||
; Msg header flags text one word each separated by a space
|
; Msg header flags text one word each separated by a comma
|
||||||
; 1=Local 2=Echo 3=Private 4=Sent 5=Delete
|
; 1=Local 2=Echo 3=Private 4=Sent 5=Delete, 6=Received
|
||||||
490 Local Echo Private Sent Deleted
|
490 Local,Echo,Priv,Sent,Del,Read
|
||||||
; File base filesize flags one word separated by a space
|
; File base filesize flags one word separated by a space
|
||||||
; 1=offline 2=failed 3=unvalidated 4=GB 5=MB 6=KB 7=B
|
; 1=offline 2=failed 3=unvalidated 4=GB 5=MB 6=KB 7=B
|
||||||
491 OFFLINE FAILED UNVALID GB MB KB B
|
491 OFFLINE FAILED UNVALID GB MB KB B
|
||||||
|
@ -992,3 +993,14 @@
|
||||||
; QWK .REP complete/results prompt
|
; QWK .REP complete/results prompt
|
||||||
; &1=msgs imported &2=msgs failed &3=bases added to scan &4=bases removed
|
; &1=msgs imported &2=msgs failed &3=bases added to scan &4=bases removed
|
||||||
503 |10SUCCESS|01.|CR|CR|11- |03Posted |11|&1 |03new messages (|11|&2 |03failed)|CR|11- |03Added |11|&3 |03bases to new scan (|11|&4 |03removed).|CR|CR|PA
|
503 |10SUCCESS|01.|CR|CR|11- |03Posted |11|&1 |03new messages (|11|&2 |03failed)|CR|11- |03Added |11|&3 |03bases to new scan (|11|&4 |03removed).|CR|CR|PA
|
||||||
|
; Standard message reader: Lastread pointer set &1 = msg number
|
||||||
|
504 |CR|11Last read pointer has been set to message number |&1.|CR|CR|PA
|
||||||
|
; Lightbar reader: Lastread pointer set &1 = msg number
|
||||||
|
505 |CR|11Last read pointer has been set to message number |&1.|CR|CR|PA
|
||||||
|
; QuickScan message list header &2=basename
|
||||||
|
506 |15From Base Subject|CR|09=============== ==================== ==========================================
|
||||||
|
; QuickScan message list middle
|
||||||
|
; &1=msg# &2=basename &3=from &4=to &5=subject &6=date
|
||||||
|
507 |10|$R15|&3 |09|$R20|&2 |11|$R42|&5
|
||||||
|
; QuicScan message list footer
|
||||||
|
508 |09|$D79=|CR
|
||||||
|
|
|
@ -109,6 +109,12 @@ Begin
|
||||||
Halt(1);
|
Halt(1);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
TempPath := bbsConfig.SystemPath + 'temp0' + PathChar;
|
||||||
|
|
||||||
|
{$I-} MkDir (TempPath); {$I+}
|
||||||
|
|
||||||
|
If IoResult <> 0 Then;
|
||||||
|
|
||||||
DirChange(bbsConfig.SystemPath);
|
DirChange(bbsConfig.SystemPath);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,8 @@ Begin
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If MsgBase^.OpenMsgBase Then Begin
|
If MsgBase^.OpenMsgBase Then Begin
|
||||||
Low := 1;
|
Low := 1;
|
||||||
|
@ -264,7 +265,8 @@ Begin
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If MsgBase^.OpenMsgBase Then Begin
|
If MsgBase^.OpenMsgBase Then Begin
|
||||||
LowMessage := 1;
|
LowMessage := 1;
|
||||||
|
@ -283,6 +285,7 @@ Begin
|
||||||
ClientWriteLine('.');
|
ClientWriteLine('.');
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
(*
|
||||||
Procedure TNNTPServer.cmd_POST;
|
Procedure TNNTPServer.cmd_POST;
|
||||||
Var
|
Var
|
||||||
MsgBase : PMsgBaseABS;
|
MsgBase : PMsgBaseABS;
|
||||||
|
@ -408,6 +411,196 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
||||||
|
// set tmpbuf
|
||||||
|
|
||||||
|
If Not MsgBase^.OpenMsgBase Then
|
||||||
|
If Not MsgBase^.CreateMsgBase (TempBase.MaxMsgs, TempBase.MaxAge) Then Begin
|
||||||
|
Dispose(MsgBase, Done);
|
||||||
|
MsgText.Free;
|
||||||
|
Client.WriteLine('441 Cannot save');
|
||||||
|
Exit;
|
||||||
|
End Else
|
||||||
|
If Not MsgBase^.OpenMsgBase Then Begin
|
||||||
|
Dispose(MsgBase, Done);
|
||||||
|
MsgText.Free;
|
||||||
|
Client.WriteLine('411 Cannot save');
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
|
MsgBase^.StartNewMsg;
|
||||||
|
|
||||||
|
MsgBase^.SetLocal (True);
|
||||||
|
MsgBase^.SetDate (FormatDateTime('mm/dd/yy', Now));
|
||||||
|
MsgBase^.SetTime (FormatDateTime('hh:nn', Now));
|
||||||
|
MsgBase^.SetTo ('All');
|
||||||
|
MsgBase^.SetSubj (Subject);
|
||||||
|
|
||||||
|
If TempBase.Flags And MBRealNames <> 0 Then
|
||||||
|
MsgBase^.SetFrom(User.RealName)
|
||||||
|
Else
|
||||||
|
MsgBase^.SetFrom(User.Handle);
|
||||||
|
|
||||||
|
If TempBase.NetType > 0 Then Begin
|
||||||
|
MsgBase^.SetMailType(mmtEchoMail);
|
||||||
|
|
||||||
|
Case TempBase.NetType of
|
||||||
|
1 : Assign (SemFile, bbsConfig.SemaPath + fn_SemFileEcho);
|
||||||
|
2 : Assign (SemFile, bbsConfig.SemaPath + fn_SemFileNews);
|
||||||
|
End;
|
||||||
|
|
||||||
|
ReWrite (SemFile);
|
||||||
|
Close (SemFile);
|
||||||
|
End Else
|
||||||
|
MsgBase^.SetMailType(mmtNormal);
|
||||||
|
|
||||||
|
MsgBase^.SetPriv (TempBase.Flags and MBPrivate <> 0);
|
||||||
|
|
||||||
|
For Count := 1 to MsgText.Count Do Begin
|
||||||
|
InData := MsgText.Strings[Count - 1];
|
||||||
|
|
||||||
|
If Length(InData) > 79 Then InData[0] := #79;
|
||||||
|
|
||||||
|
MsgBase^.DoStringLn(InData);
|
||||||
|
End;
|
||||||
|
|
||||||
|
MsgBase^.WriteMsg;
|
||||||
|
MsgBase^.CloseMsgBase;
|
||||||
|
|
||||||
|
Dispose (MsgBase, Done);
|
||||||
|
|
||||||
|
MsgText.Free;
|
||||||
|
|
||||||
|
ClientWriteLine ('240 Article posted ok');
|
||||||
|
End;
|
||||||
|
*)
|
||||||
|
|
||||||
|
Procedure TNNTPServer.cmd_POST;
|
||||||
|
Var
|
||||||
|
MsgBase : PMsgBaseABS;
|
||||||
|
MBaseFile : File of RecMessageBase;
|
||||||
|
TempBase : RecMessageBase;
|
||||||
|
MsgText : TStringList;
|
||||||
|
Subject : String;
|
||||||
|
Newsgroup : String;
|
||||||
|
InData : String;
|
||||||
|
HackCount : LongInt;
|
||||||
|
Count : LongInt;
|
||||||
|
GotStart : Boolean;
|
||||||
|
Found : Boolean;
|
||||||
|
SemFile : File;
|
||||||
|
Begin
|
||||||
|
If Not LoggedIn Then Begin
|
||||||
|
ClientWriteLine(re_AuthReq);
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
|
ClientWriteLine('340 Send article to be posted. End with <CRLF>.<CRLF>');
|
||||||
|
|
||||||
|
Subject := '';
|
||||||
|
Newsgroup := '';
|
||||||
|
GotStart := False;
|
||||||
|
MsgText := TStringList.Create;
|
||||||
|
|
||||||
|
Repeat
|
||||||
|
Client.ReadLine(InData);
|
||||||
|
|
||||||
|
If InData = '.' Then Break;
|
||||||
|
|
||||||
|
If Not GotStart And (Pos('Newsgroups:', InData) > 0) Then Begin
|
||||||
|
Newsgroup := Copy(InData, 13, 255);
|
||||||
|
|
||||||
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If Not GotStart And (Pos('Subject:', InData) > 0) Then Begin
|
||||||
|
Subject := Copy(InData, 10, 255);
|
||||||
|
|
||||||
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If (InData = '') And Not GotStart Then Begin
|
||||||
|
GotStart := True;
|
||||||
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If MsgText.Count >= mysMaxMsgLines Then Begin
|
||||||
|
HackCount := 0;
|
||||||
|
|
||||||
|
While Not Terminated And (InData <> '.') Do Begin
|
||||||
|
Client.ReadLine(InData);
|
||||||
|
|
||||||
|
Inc (HackCount);
|
||||||
|
|
||||||
|
If HackCount >= HackThreshold Then Begin
|
||||||
|
EndSession := True; // someone is being a douchebag
|
||||||
|
|
||||||
|
Server.Status('Flood attempt from ' + Client.PeerIP + '. Goodbye');
|
||||||
|
|
||||||
|
MsgText.Free;
|
||||||
|
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Break;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If GotStart Then MsgText.Add(InData);
|
||||||
|
Until Terminated;
|
||||||
|
|
||||||
|
If Terminated Then Exit;
|
||||||
|
|
||||||
|
If (Subject = '') Then Begin
|
||||||
|
MsgText.Free;
|
||||||
|
|
||||||
|
ClientWriteLine('441 No subject; message not posted');
|
||||||
|
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Found := False;
|
||||||
|
|
||||||
|
Assign (MBaseFile, bbsConfig.DataPath + 'mbases.dat');
|
||||||
|
|
||||||
|
If ioReset(MBaseFile, SizeOf(RecMessageBase), fmRWDN) Then Begin
|
||||||
|
ioRead (MBaseFile, TempBase);
|
||||||
|
|
||||||
|
While Not EOF(MBaseFile) Do Begin
|
||||||
|
ioRead (MBaseFile, TempBase);
|
||||||
|
|
||||||
|
If TempBase.NewsName = Newsgroup Then Begin
|
||||||
|
Found := True;
|
||||||
|
|
||||||
|
Break;
|
||||||
|
End;
|
||||||
|
End;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Close (MBaseFile);
|
||||||
|
|
||||||
|
If Not Found or (Newsgroup = '') Then Begin
|
||||||
|
MsgText.Free;
|
||||||
|
|
||||||
|
ClientWriteLine('441 No newsgroup selected');
|
||||||
|
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If Not CheckAccess(User, True, TempBase.PostACS) or (TempBase.NetType = 3) Then Begin
|
||||||
|
MsgText.Free;
|
||||||
|
|
||||||
|
ClientWriteLine('441 No post access');
|
||||||
|
|
||||||
|
Exit;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Case TempBase.BaseType of
|
||||||
|
0 : MsgBase := New(PMsgBaseJAM, Init);
|
||||||
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
|
End;
|
||||||
|
|
||||||
|
MsgBase^.SetMsgPath (TempBase.Path + TempBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If Not MsgBase^.OpenMsgBase Then
|
If Not MsgBase^.OpenMsgBase Then
|
||||||
If Not MsgBase^.CreateMsgBase (TempBase.MaxMsgs, TempBase.MaxAge) Then Begin
|
If Not MsgBase^.CreateMsgBase (TempBase.MaxMsgs, TempBase.MaxAge) Then Begin
|
||||||
|
@ -493,7 +686,8 @@ Begin
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If Not MsgBase^.OpenMsgBase Then Begin
|
If Not MsgBase^.OpenMsgBase Then Begin
|
||||||
ClientWriteLine('423 No such article');
|
ClientWriteLine('423 No such article');
|
||||||
|
@ -577,7 +771,8 @@ Begin
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If Not MsgBase^.OpenMsgBase Then Begin
|
If Not MsgBase^.OpenMsgBase Then Begin
|
||||||
ClientWriteLine('420 No article(s) selected');
|
ClientWriteLine('420 No article(s) selected');
|
||||||
|
|
|
@ -55,6 +55,7 @@ Type
|
||||||
Procedure Execute; Override;
|
Procedure Execute; Override;
|
||||||
Destructor Destroy; Override;
|
Destructor Destroy; Override;
|
||||||
|
|
||||||
|
Function IsUser (Str: String) : Boolean;
|
||||||
Procedure ResetSession;
|
Procedure ResetSession;
|
||||||
Procedure CreateMailBoxData;
|
Procedure CreateMailBoxData;
|
||||||
Procedure DeleteMessages;
|
Procedure DeleteMessages;
|
||||||
|
@ -105,6 +106,12 @@ Begin
|
||||||
MailSize := 0;
|
MailSize := 0;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Function TPOP3Server.IsUser (Str: String) : Boolean;
|
||||||
|
Begin
|
||||||
|
Str := strUpper(Str);
|
||||||
|
Result := LoggedIn and ((strUpper(User.RealName) = Str) or (strUpper(User.Handle) = Str));
|
||||||
|
End;
|
||||||
|
|
||||||
Procedure TPOP3Server.ResetSession;
|
Procedure TPOP3Server.ResetSession;
|
||||||
Var
|
Var
|
||||||
Count : LongInt;
|
Count : LongInt;
|
||||||
|
@ -185,41 +192,45 @@ Begin
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If Not MsgBase^.OpenMsgBase Then Begin
|
If Not MsgBase^.OpenMsgBase Then Begin
|
||||||
Dispose (MsgBase, Done);
|
Dispose (MsgBase, Done);
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.YoursFirst(User.RealName, User.Handle);
|
MsgBase^.SeekFirst(1);
|
||||||
|
|
||||||
While MsgBase^.YoursFound Do Begin
|
While MsgBase^.SeekFound Do Begin
|
||||||
MsgBase^.MsgStartup;
|
MsgBase^.MsgStartup;
|
||||||
MsgBase^.MsgTxtStartup;
|
|
||||||
|
|
||||||
Inc (MailSize);
|
if IsUser(MsgBase^.GetTo) Then Begin
|
||||||
|
MsgBase^.MsgTxtStartup;
|
||||||
|
|
||||||
New (MailInfo[MailSize]);
|
Inc (MailSize);
|
||||||
|
|
||||||
MailInfo[MailSize].Text := TStringList.Create;
|
New (MailInfo[MailSize]);
|
||||||
|
|
||||||
AddLine ('Date: ' + ParseDateTime(MsgBase^.GetDate, MsgBase^.GetTime));
|
MailInfo[MailSize].Text := TStringList.Create;
|
||||||
AddLine ('From: ' + MsgBase^.GetFrom + ' <' + strReplace(MsgBase^.GetFrom, ' ', '_') + '@' + bbsConfig.inetDomain + '>');
|
|
||||||
AddLine ('X-Mailer: Mystic BBS ' + mysVersion);
|
|
||||||
AddLine ('To: ' + MsgBase^.GetTo + ' <' + strReplace(MsgBase^.GetTo, ' ', '_') + '@' + bbsConfig.inetDomain + '>');
|
|
||||||
AddLine ('Subject: ' + MsgBase^.GetSubj);
|
|
||||||
AddLine ('Content-Type: text/plain; charset=us-ascii');
|
|
||||||
AddLine ('');
|
|
||||||
|
|
||||||
While Not MsgBase^.EOM Do
|
AddLine ('Date: ' + ParseDateTime(MsgBase^.GetDate, MsgBase^.GetTime));
|
||||||
AddLine(MsgBase^.GetString(79));
|
AddLine ('From: ' + MsgBase^.GetFrom + ' <' + strReplace(MsgBase^.GetFrom, ' ', '_') + '@' + bbsConfig.inetDomain + '>');
|
||||||
|
AddLine ('X-Mailer: Mystic BBS ' + mysVersion);
|
||||||
|
AddLine ('To: ' + MsgBase^.GetTo + ' <' + strReplace(MsgBase^.GetTo, ' ', '_') + '@' + bbsConfig.inetDomain + '>');
|
||||||
|
AddLine ('Subject: ' + MsgBase^.GetSubj);
|
||||||
|
AddLine ('Content-Type: text/plain; charset=us-ascii');
|
||||||
|
AddLine ('');
|
||||||
|
|
||||||
MailInfo[MailSize].MD5 := GetMessageUID(MsgBase);
|
While Not MsgBase^.EOM Do
|
||||||
MailInfo[MailSize].GotRETR := False;
|
AddLine(MsgBase^.GetString(79));
|
||||||
MailInfo[MailSize].Deleted := False;
|
|
||||||
|
|
||||||
MsgBase^.YoursNext;
|
MailInfo[MailSize].MD5 := GetMessageUID(MsgBase);
|
||||||
|
MailInfo[MailSize].GotRETR := False;
|
||||||
|
MailInfo[MailSize].Deleted := False;
|
||||||
|
End;
|
||||||
|
|
||||||
|
MsgBase^.SeekNext;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.CloseMsgBase;
|
MsgBase^.CloseMsgBase;
|
||||||
|
@ -246,7 +257,8 @@ Begin
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If Not MsgBase^.OpenMsgBase Then Begin
|
If Not MsgBase^.OpenMsgBase Then Begin
|
||||||
Dispose (MsgBase, Done);
|
Dispose (MsgBase, Done);
|
||||||
|
@ -255,17 +267,18 @@ Begin
|
||||||
|
|
||||||
For Count := 1 to MailSize Do Begin
|
For Count := 1 to MailSize Do Begin
|
||||||
If MailInfo[Count].Deleted or (MailInfo[Count].GotRETR and bbsConfig.inetPOP3Delete) Then Begin
|
If MailInfo[Count].Deleted or (MailInfo[Count].GotRETR and bbsConfig.inetPOP3Delete) Then Begin
|
||||||
MsgBase^.YoursFirst(User.RealName, User.Handle);
|
MsgBase^.SeekFirst(1);
|
||||||
|
|
||||||
While MsgBase^.YoursFound Do Begin
|
While MsgBase^.SeekFound Do Begin
|
||||||
MsgBase^.MsgStartUp;
|
MsgBase^.MsgStartUp;
|
||||||
|
|
||||||
If GetMessageUID(MsgBase) = MailInfo[Count].MD5 Then Begin
|
If IsUser(MsgBase^.GetTo) Then
|
||||||
MsgBase^.DeleteMsg;
|
If GetMessageUID(MsgBase) = MailInfo[Count].MD5 Then Begin
|
||||||
Break;
|
MsgBase^.DeleteMsg;
|
||||||
End;
|
Break;
|
||||||
|
End;
|
||||||
|
|
||||||
MsgBase^.YoursNext;
|
MsgBase^.SeekNext;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
|
@ -188,12 +188,16 @@ Begin
|
||||||
// todo: what happens if they never send an EOL... could still flood
|
// todo: what happens if they never send an EOL... could still flood
|
||||||
|
|
||||||
Client.ReadLine(InData);
|
Client.ReadLine(InData);
|
||||||
|
|
||||||
Inc (HackCount);
|
Inc (HackCount);
|
||||||
|
|
||||||
If HackCount >= SMTPHackThresh Then Begin
|
If HackCount >= SMTPHackThresh Then Begin
|
||||||
EndSession := True; // someone is being a douchebag
|
EndSession := True; // someone is being a douchebag
|
||||||
|
|
||||||
Server.Status('Flood attempt from ' + FromName + ' (' + Client.PeerIP + '); Goodbye');
|
Server.Status('Flood attempt from ' + FromName + ' (' + Client.PeerIP + '); Goodbye');
|
||||||
|
|
||||||
MsgText.Free;
|
MsgText.Free;
|
||||||
|
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
@ -214,7 +218,8 @@ Begin
|
||||||
1 : MsgBase := New(PMsgBaseSquish, Init);
|
1 : MsgBase := New(PMsgBaseSquish, Init);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
MsgBase^.SetMsgPath (MBase.Path + MBase.FileName);
|
||||||
|
MsgBase^.SetTempFile (TempPath + 'msgbuf.');
|
||||||
|
|
||||||
If Not MsgBase^.OpenMsgBase Then
|
If Not MsgBase^.OpenMsgBase Then
|
||||||
If Not MsgBase^.CreateMsgBase (MBase.MaxMsgs, MBase.MaxAge) Then Begin
|
If Not MsgBase^.CreateMsgBase (MBase.MaxMsgs, MBase.MaxAge) Then Begin
|
||||||
|
|
|
@ -12,6 +12,7 @@ Uses
|
||||||
|
|
||||||
Var
|
Var
|
||||||
bbsConfig : RecConfig;
|
bbsConfig : RecConfig;
|
||||||
|
TempPath : String;
|
||||||
Console : TOutput;
|
Console : TOutput;
|
||||||
Term : TTermAnsi;
|
Term : TTermAnsi;
|
||||||
|
|
||||||
|
|
|
@ -291,7 +291,7 @@ Begin
|
||||||
AddProc ({$IFDEF MPLPARSER} 'putthisuser', {$ENDIF} '', iNone); // 538
|
AddProc ({$IFDEF MPLPARSER} 'putthisuser', {$ENDIF} '', iNone); // 538
|
||||||
AddProc ({$IFDEF MPLPARSER} 'putuser', {$ENDIF} 'l', iNone); // 539
|
AddProc ({$IFDEF MPLPARSER} 'putuser', {$ENDIF} 'l', iNone); // 539
|
||||||
AddProc ({$IFDEF MPLPARSER} 'isuser', {$ENDIF} 's', iBool); // 540
|
AddProc ({$IFDEF MPLPARSER} 'isuser', {$ENDIF} 's', iBool); // 540
|
||||||
AddProc ({$IFDEF MPLPARSER} 'getmbasestats', {$ENDIF} 'lLLL', iBool); // 541
|
AddProc ({$IFDEF MPLPARSER} 'getmbstats', {$ENDIF} 'looLLL', iBool); // 541
|
||||||
AddProc ({$IFDEF MPLPARSER} 'writexy', {$ENDIF} 'bbbs', iNone); // 542
|
AddProc ({$IFDEF MPLPARSER} 'writexy', {$ENDIF} 'bbbs', iNone); // 542
|
||||||
AddProc ({$IFDEF MPLPARSER} 'writexypipe', {$ENDIF} 'bbbis', iNone); // 543
|
AddProc ({$IFDEF MPLPARSER} 'writexypipe', {$ENDIF} 'bbbis', iNone); // 543
|
||||||
AddProc ({$IFDEF MPLPARSER} 'msgeditor', {$ENDIF} 'iIiiosS', iBool); // 544
|
AddProc ({$IFDEF MPLPARSER} 'msgeditor', {$ENDIF} 'iIiiosS', iBool); // 544
|
||||||
|
@ -312,6 +312,8 @@ Begin
|
||||||
AddPointer ({$IFDEF MPLPARSER} 'ignoregroups', {$ENDIF} iBool, 1, {$IFNDEF MPLPARSER} @Session.User.IgnoreGroup {$ELSE} NIL {$ENDIF});
|
AddPointer ({$IFDEF MPLPARSER} 'ignoregroups', {$ENDIF} iBool, 1, {$IFNDEF MPLPARSER} @Session.User.IgnoreGroup {$ELSE} NIL {$ENDIF});
|
||||||
AddPointer ({$IFDEF MPLPARSER} 'pausepos', {$ENDIF} iByte, 1, {$IFNDEF MPLPARSER} @Session.io.PausePtr {$ELSE} NIL {$ENDIF});
|
AddPointer ({$IFDEF MPLPARSER} 'pausepos', {$ENDIF} iByte, 1, {$IFNDEF MPLPARSER} @Session.io.PausePtr {$ELSE} NIL {$ENDIF});
|
||||||
AddPointer ({$IFDEF MPLPARSER} 'allowmci', {$ENDIF} iBool, 1, {$IFNDEF MPLPARSER} @Session.io.PausePtr {$ELSE} NIL {$ENDIF});
|
AddPointer ({$IFDEF MPLPARSER} 'allowmci', {$ENDIF} iBool, 1, {$IFNDEF MPLPARSER} @Session.io.PausePtr {$ELSE} NIL {$ENDIF});
|
||||||
|
AddPointer ({$IFDEF MPLPARSER} 'userloginname',{$ENDIF} iString, 31, {$IFNDEF MPLPARSER} @Session.UserLoginName {$ELSE} NIL {$ENDIF});
|
||||||
|
AddPointer ({$IFDEF MPLPARSER} 'userloginpw', {$ENDIF} iString, 16, {$IFNDEF MPLPARSER} @Session.UserLoginPW {$ELSE} NIL {$ENDIF});
|
||||||
|
|
||||||
{$IFNDEF MPLPARSER} TInterpEngine(S).IdxVarDir := X + 1; {$ENDIF}
|
{$IFNDEF MPLPARSER} TInterpEngine(S).IdxVarDir := X + 1; {$ENDIF}
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ Type
|
||||||
|
|
||||||
Procedure GetMBaseVars (Var M: RecMessageBase);
|
Procedure GetMBaseVars (Var M: RecMessageBase);
|
||||||
Function GetMBaseRecord (Num: LongInt) : Boolean;
|
Function GetMBaseRecord (Num: LongInt) : Boolean;
|
||||||
Function GetMBaseStats (Num: LongInt; Var Total, New, Yours: LongInt) : Boolean;
|
Function GetMBaseStats (Num: LongInt; SkipFrom, SkipRead: Boolean; Var Total, New, Yours: LongInt) : Boolean;
|
||||||
|
|
||||||
Procedure GetMGroupVars (Var G: RecGroup);
|
Procedure GetMGroupVars (Var G: RecGroup);
|
||||||
Function GetMGroupRecord (Num: LongInt) : Boolean;
|
Function GetMGroupRecord (Num: LongInt) : Boolean;
|
||||||
|
@ -244,14 +244,15 @@ Begin
|
||||||
Move (M.SysopACS, VarData[IdxVarMBase + 5 ]^.Data^, SizeOf(M.SysopACS));
|
Move (M.SysopACS, VarData[IdxVarMBase + 5 ]^.Data^, SizeOf(M.SysopACS));
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TInterpEngine.GetMBaseStats (Num: LongInt; Var Total, New, Yours: LongInt) : Boolean;
|
Function TInterpEngine.GetMBaseStats (Num: LongInt; SkipFrom, SkipRead: Boolean; Var Total, New, Yours: LongInt) : Boolean;
|
||||||
Var
|
Var
|
||||||
M : RecMessageBase;
|
M : RecMessageBase;
|
||||||
|
T : LongInt;
|
||||||
Begin
|
Begin
|
||||||
Result := Session.Msgs.GetBaseByNum(Num, M);
|
Result := Session.Msgs.GetBaseByNum(Num, M);
|
||||||
|
|
||||||
If Result Then
|
If Result Then
|
||||||
Session.Msgs.GetMessageStats(M, Total, New, Yours);
|
Session.Msgs.GetMessageStats(False, False, False, T, M, SkipFrom, SkipRead, Total, New, Yours);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TInterpEngine.GetMBaseRecord (Num: LongInt) : Boolean;
|
Function TInterpEngine.GetMBaseRecord (Num: LongInt) : Boolean;
|
||||||
|
@ -1903,7 +1904,7 @@ Begin
|
||||||
Store (TempBool, 1);
|
Store (TempBool, 1);
|
||||||
End;
|
End;
|
||||||
541 : Begin
|
541 : Begin
|
||||||
TempBool := GetMBaseStats(Param[1].L, LongInt(Pointer(Param[2].vData)^), LongInt(Pointer(Param[3].vData)^), LongInt(Pointer(Param[4].vData)^));
|
TempBool := GetMBaseStats(Param[1].L, Param[2].O, Param[3].O, LongInt(Pointer(Param[3].vData)^), LongInt(Pointer(Param[4].vData)^), LongInt(Pointer(Param[5].vData)^));
|
||||||
Store (TempBool, 1);
|
Store (TempBool, 1);
|
||||||
End;
|
End;
|
||||||
542 : WriteXY (Param[1].B, Param[2].B, Param[3].B, Param[4].S);
|
542 : WriteXY (Param[1].B, Param[2].B, Param[3].B, Param[4].S);
|
||||||
|
|
|
@ -77,7 +77,7 @@ Type
|
||||||
);
|
);
|
||||||
|
|
||||||
Const
|
Const
|
||||||
mplVer = '11E';
|
mplVer = '11G';
|
||||||
mplVersion = '[MPX ' + mplVer +']' + #26;
|
mplVersion = '[MPX ' + mplVer +']' + #26;
|
||||||
mplVerLength = 10;
|
mplVerLength = 10;
|
||||||
mplExtSource = '.mps';
|
mplExtSource = '.mps';
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
; list of functions to perform on startup
|
; list of functions to perform on startup
|
||||||
|
|
||||||
Import_FIDONET.NA = true
|
Import_FIDONET.NA = true
|
||||||
Import_MessageBase = true
|
Import_MessageBase = true
|
||||||
Import_FILEBONE.NA = true
|
Import_FILEBONE.NA = true
|
||||||
Import_FILES.BBS = true
|
Import_FILES.BBS = true
|
||||||
MassUpload = true
|
MassUpload = true
|
||||||
|
@ -333,8 +333,8 @@
|
||||||
|
|
||||||
[ImportMessageBase]
|
[ImportMessageBase]
|
||||||
|
|
||||||
; This option scans the message base directory, and creates any messages
|
; This option scans the message base directory, and creates any messages
|
||||||
; bases inside of Mystic that have data files in the directory.
|
; bases inside of Mystic that have data files in the directory.
|
||||||
|
|
||||||
; The following options define the "default" values used when creating
|
; The following options define the "default" values used when creating
|
||||||
; new message bases. netaddress must match an exiting network
|
; new message bases. netaddress must match an exiting network
|
||||||
|
@ -353,9 +353,9 @@
|
||||||
max_msgs = 500
|
max_msgs = 500
|
||||||
max_msgs_age = 365
|
max_msgs_age = 365
|
||||||
|
|
||||||
; network type (0=local, 1=echomail, 2=newsgroup 3=netmail)
|
; network type (0=local, 1=echomail, 2=newsgroup 3=netmail)
|
||||||
|
|
||||||
net_type = 1
|
net_type = 1
|
||||||
|
|
||||||
; true/false type values 0=false 1=true (newscan 2=forced)
|
; true/false type values 0=false 1=true (newscan 2=forced)
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ Var
|
||||||
Count : Cardinal;
|
Count : Cardinal;
|
||||||
Addr : RecEchoMailAddr;
|
Addr : RecEchoMailAddr;
|
||||||
Begin
|
Begin
|
||||||
FileMode := 66;
|
FileMode := 66;
|
||||||
BaseKills := 0;
|
BaseKills := 0;
|
||||||
|
|
||||||
Inc (BaseTotal);
|
Inc (BaseTotal);
|
||||||
|
@ -150,8 +150,8 @@ Var
|
||||||
3 : NewData^.SetMailType(mmtNetMail);
|
3 : NewData^.SetMailType(mmtNetMail);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
NewData^.SetOrig(MsgData^.GetOrigAddr);
|
NewData^.SetOrig (MsgData^.GetOrigAddr);
|
||||||
NewData^.SetDest(MsgData^.GetDestAddr);
|
NewData^.SetDest (MsgData^.GetDestAddr);
|
||||||
|
|
||||||
MsgData^.MsgTxtStartUp;
|
MsgData^.MsgTxtStartUp;
|
||||||
|
|
||||||
|
|
|
@ -362,11 +362,9 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
Count : Byte;
|
Count : Byte;
|
||||||
Temp : String[120];
|
Temp : String[120];
|
||||||
UserName : String[30];
|
Script : String[120];
|
||||||
Password : String[15];
|
|
||||||
Script : String[120];
|
|
||||||
Begin
|
Begin
|
||||||
{$IFDEF DEBUG}
|
{$IFDEF DEBUG}
|
||||||
SetHeapTraceOutput('mystic.mem');
|
SetHeapTraceOutput('mystic.mem');
|
||||||
|
@ -411,10 +409,10 @@ Begin
|
||||||
Session.UserHostInfo := Copy(ParamStr(Count), 6, Length(Temp))
|
Session.UserHostInfo := Copy(ParamStr(Count), 6, Length(Temp))
|
||||||
Else
|
Else
|
||||||
If Copy(Temp, 1, 2) = '-U' Then
|
If Copy(Temp, 1, 2) = '-U' Then
|
||||||
UserName := strReplace(Copy(Temp, 3, Length(Temp)), '_', ' ')
|
Session.UserLoginName := strReplace(Copy(Temp, 3, Length(Temp)), '_', ' ')
|
||||||
Else
|
Else
|
||||||
If Copy(Temp, 1, 2) = '-P' Then
|
If Copy(Temp, 1, 2) = '-P' Then
|
||||||
Password := Copy(Temp, 3, Length(Temp))
|
Session.UserLoginPW := Copy(Temp, 3, Length(Temp))
|
||||||
Else
|
Else
|
||||||
If Copy(Temp, 1, 2) = '-X' Then
|
If Copy(Temp, 1, 2) = '-X' Then
|
||||||
Script := strReplace(Copy(ParamStr(Count), 3, Length(Temp)), '_', ' ')
|
Script := strReplace(Copy(ParamStr(Count), 3, Length(Temp)), '_', ' ')
|
||||||
|
@ -489,7 +487,7 @@ Begin
|
||||||
//Halt(0);
|
//Halt(0);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
Session.User.UserLogon1 (UserName, Password, Script);
|
Session.User.UserLogon1 (Script);
|
||||||
|
|
||||||
If Session.TimeOffset > 0 Then
|
If Session.TimeOffset > 0 Then
|
||||||
Session.TimeSaved := Session.User.ThisUser.TimeLeft;
|
Session.TimeSaved := Session.User.ThisUser.TimeLeft;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
Const
|
Const
|
||||||
mysSoftwareID = 'Mystic'; // no idea
|
mysSoftwareID = 'Mystic'; // no idea
|
||||||
mysCopyYear = '1997-2013'; // its been a long time!
|
mysCopyYear = '1997-2013'; // its been a long time!
|
||||||
mysVersion = '1.10 A27'; // current version
|
mysVersion = '1.10 A29'; // current version
|
||||||
mysDataChanged = '1.10 A11'; // version of last records change
|
mysDataChanged = '1.10 A11'; // version of last records change
|
||||||
|
|
||||||
{$IFDEF WIN32}
|
{$IFDEF WIN32}
|
||||||
|
@ -59,7 +59,7 @@ Const
|
||||||
mysMaxMenuCmds = 25; // Max menu commands per item
|
mysMaxMenuCmds = 25; // Max menu commands per item
|
||||||
mysMaxMenuInput = 12;
|
mysMaxMenuInput = 12;
|
||||||
mysMaxMenuStack = 8;
|
mysMaxMenuStack = 8;
|
||||||
mysMaxThemeText = 503; // Total prompts in theme file
|
mysMaxThemeText = 508;
|
||||||
|
|
||||||
fn_SemFileEcho = 'echomail.now';
|
fn_SemFileEcho = 'echomail.now';
|
||||||
fn_SemFileNews = 'newsmail.now';
|
fn_SemFileNews = 'newsmail.now';
|
||||||
|
@ -67,6 +67,8 @@ Const
|
||||||
fn_tplMsgEdit = 'ansiedit';
|
fn_tplMsgEdit = 'ansiedit';
|
||||||
fn_tplTextEdit = 'ansitext';
|
fn_tplTextEdit = 'ansitext';
|
||||||
|
|
||||||
|
ColumnValue : Array[0..1] of Byte = (80, 40);
|
||||||
|
|
||||||
Type
|
Type
|
||||||
SmallWord = System.Word;
|
SmallWord = System.Word;
|
||||||
Integer = SmallInt;
|
Integer = SmallInt;
|
||||||
|
@ -706,7 +708,8 @@ Type
|
||||||
MGroupBar : RecPercent;
|
MGroupBar : RecPercent;
|
||||||
MAreaList : RecPercent;
|
MAreaList : RecPercent;
|
||||||
Colors : Array[0..9] of Byte;
|
Colors : Array[0..9] of Byte;
|
||||||
Reserved : Array[1..199] of Byte;
|
ColumnSize : Byte;
|
||||||
|
Reserved : Array[1..198] of Byte;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
BBSListRec = Record
|
BBSListRec = Record
|
||||||
|
|
|
@ -8,6 +8,7 @@ design elements/issues.
|
||||||
BUGS AND POSSIBLE ISSUES
|
BUGS AND POSSIBLE ISSUES
|
||||||
========================
|
========================
|
||||||
|
|
||||||
|
! Posting echomail via NNTP is not setting ECHO flag
|
||||||
! LBP menus arent scrolling correctly in Linux
|
! LBP menus arent scrolling correctly in Linux
|
||||||
! MUTIL FILESBBS import is not skipping FILES.BBS?
|
! MUTIL FILESBBS import is not skipping FILES.BBS?
|
||||||
! Make sure MIS in Linux works with DOSEMU
|
! Make sure MIS in Linux works with DOSEMU
|
||||||
|
@ -28,6 +29,9 @@ BUGS AND POSSIBLE ISSUES
|
||||||
FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
|
- MUTIL create FILES.BBS in the file base directory
|
||||||
|
- 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.
|
||||||
- New Scan/Read message should have option to not update last read when
|
- New Scan/Read message should have option to not update last read when
|
||||||
reading personal messages.
|
reading personal messages.
|
||||||
- Option for QuickScan that only prints a base if it has new messages.
|
- Option for QuickScan that only prints a base if it has new messages.
|
||||||
|
|
|
@ -1754,12 +1754,14 @@
|
||||||
mentioning it just in case.
|
mentioning it just in case.
|
||||||
|
|
||||||
+ New MPL function: GetMBaseStats. This can be used as a function or a
|
+ New MPL function: GetMBaseStats. This can be used as a function or a
|
||||||
procedure (returning true if successful). It takes 4 parameters.
|
procedure (returning true if successful). It takes 6 parameters.
|
||||||
|
|
||||||
#1: Message base number
|
#1: Message base number
|
||||||
#2: Total messages (this is a VAR parameter)
|
#2: Exclude messages FROM the current user in stats
|
||||||
#3: New messages (this is a VAR parameter)
|
#3: Exclude messages TO the current user that have already been read
|
||||||
#4: New messages to you (this is a VAR parameter)
|
#4: Total messages (this is a VAR parameter)
|
||||||
|
#5: New messages (this is a VAR parameter)
|
||||||
|
#6: New messages to you (this is a VAR parameter)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
@ -1771,7 +1773,7 @@
|
||||||
count := 1; //start @1 to skip email base
|
count := 1; //start @1 to skip email base
|
||||||
|
|
||||||
while getmbase(count) do begin
|
while getmbase(count) do begin
|
||||||
getmbasestats(count, total, new, yours);
|
getmbstats(count, true, true, total, new, yours);
|
||||||
|
|
||||||
writeln('base : ' + mbasename);
|
writeln('base : ' + mbasename);
|
||||||
writeln('total msgs : ' + int2str(total));
|
writeln('total msgs : ' + int2str(total));
|
||||||
|
@ -2671,4 +2673,196 @@
|
||||||
|
|
||||||
+ E-mail messages are now included in QWK packets.
|
+ E-mail messages are now included in QWK packets.
|
||||||
|
|
||||||
<ALPHA 28 RELEASED>
|
+ Added additional support for the QWKE packets. Mystic will now generate
|
||||||
|
the appropriate QWKE data to tell the reader if the message base is
|
||||||
|
public or private, if reading is forced, if real names or handles should
|
||||||
|
be used, and whether or not they have access to post/reply to the area.
|
||||||
|
|
||||||
|
+ Rewrote the status bar on the local console (in Windows) to use the color
|
||||||
|
values set in the configuration.
|
||||||
|
|
||||||
|
+ Message QuickScan (MQ) menu command now has two new options:
|
||||||
|
|
||||||
|
/YOU - Only show base if it has messages address to you
|
||||||
|
/NEW - Only show base if it has new messages
|
||||||
|
|
||||||
|
! Fixed a bug which caused the nodelist text search to not work.
|
||||||
|
|
||||||
|
+ The "startup" MPL program that is executed if it exists after ANSI
|
||||||
|
detection and theme assignment can now set the user login and password
|
||||||
|
to bypass the internal login functions. You must set to two variables:
|
||||||
|
|
||||||
|
UserLoginName
|
||||||
|
UserLoginPW
|
||||||
|
|
||||||
|
So for example if I had a startup.mpx that simply did this:
|
||||||
|
|
||||||
|
Begin
|
||||||
|
UserLoginName := 'g00r00';
|
||||||
|
UserLoginPW := 'mypassword';
|
||||||
|
End;
|
||||||
|
|
||||||
|
It would automatically log in as g00r00 and bypass the normal login/pw
|
||||||
|
stuff. This combined with newuserapp.mpx allows you to completely
|
||||||
|
rewrite login and newuser functions in MPL if you'd like to.
|
||||||
|
|
||||||
|
+ The Read Messages menu command (MR) now has the option to pass /NOLR
|
||||||
|
in the optional data. If this is found, Mystic will not update the
|
||||||
|
users last read pointers after reading.
|
||||||
|
|
||||||
|
You MUST still supply the read type as the first character. So for
|
||||||
|
example:
|
||||||
|
|
||||||
|
Command: MR
|
||||||
|
Optional data: Y /NOLR
|
||||||
|
|
||||||
|
Would read all messages addressed specifically to that user, but would
|
||||||
|
not set their last read pointers.
|
||||||
|
|
||||||
|
+ The Message New Scan (MN) now has the option to supply /NOLR which will
|
||||||
|
cause the users last read pointers to NOT get updated during this
|
||||||
|
message scan.
|
||||||
|
|
||||||
|
+ New Menu Command -R will set the value of the "OK" acs flag. The
|
||||||
|
optional data of 0 will set the OK flag to return false, or 1 will set
|
||||||
|
it to return true.
|
||||||
|
|
||||||
|
+ New ACS function: ON. This returns true if the last performed message
|
||||||
|
"Quick scan" found new messages or if the last performed Email check
|
||||||
|
found unread emails.
|
||||||
|
|
||||||
|
+ New ACS function: OY. This returns true if the last performed message
|
||||||
|
"Quick scan" found new messages addressed to the user.
|
||||||
|
|
||||||
|
+ The Message New Scan (MN) now has the option to supply /NOFROM which
|
||||||
|
will skip over any messages FROM the user. This works in ALL reading
|
||||||
|
modes.
|
||||||
|
|
||||||
|
+ The Read Messages (MR) now has the option to supply /NOFROM which
|
||||||
|
will skip over any messages FROM the user. This works in ALL reading
|
||||||
|
modes.
|
||||||
|
|
||||||
|
+ The Message Quick Scan (MQ) command now has the option to supply
|
||||||
|
/NOFROM which will not count any messages FROM the user in the scan.
|
||||||
|
|
||||||
|
+ Added a new menu "personalscan.mnu" into the default install menu
|
||||||
|
directory which demonstrates many of the new message reading/scanning
|
||||||
|
functions.
|
||||||
|
|
||||||
|
- MPL GetMBaseStats has changed in a few ways. First, it has been renamed
|
||||||
|
to "getmbstats" and now has two additional parameters:
|
||||||
|
|
||||||
|
#1: Message base number
|
||||||
|
#2: Exclude messages FROM the current user in stats? T/F
|
||||||
|
#3: Exclude personal messages that have already been read? T/F
|
||||||
|
#4: Total messages (this is a VAR parameter)
|
||||||
|
#5: New messages (this is a VAR parameter)
|
||||||
|
#6: New messages to you (this is a VAR parameter)
|
||||||
|
|
||||||
|
+ Mystic now tracks if ANY message (public or private) has been read by
|
||||||
|
the user the message is addressed to. You MUST replace your old
|
||||||
|
message header flags prompt with the new one to include the received
|
||||||
|
flag at the end:
|
||||||
|
|
||||||
|
; Msg header flags text one word each separated by a space
|
||||||
|
; 1=Local 2=Echo 3=Private 4=Sent 5=Delete 6=Received
|
||||||
|
490 Local Echo Private Sent Deleted Rcvd
|
||||||
|
|
||||||
|
! Fixed a bug that could cause private messages to not be marked as private
|
||||||
|
when uploading a QWKE REP packet.
|
||||||
|
|
||||||
|
+ Two new prompt info codes added to prompt #127 (read email? prompt):
|
||||||
|
|
||||||
|
&1 = number of emails
|
||||||
|
&2 = number of unread emails
|
||||||
|
|
||||||
|
In addition, the Yes/No prompt defaults to NO if they do not have any
|
||||||
|
unread emails, or YES if they do.
|
||||||
|
|
||||||
|
+ The Read Messages command (RM) now allows for the option /NOREAD which
|
||||||
|
will skip over any message marked as received. A received message is
|
||||||
|
classified as a message addressed to the current user that has already
|
||||||
|
been read.
|
||||||
|
|
||||||
|
+ The Message New Scan (MN) command now allows for the /NOREAD option.
|
||||||
|
|
||||||
|
+ The QuickScan command (MQ) now allows for the /NOREAD option.
|
||||||
|
|
||||||
|
- Removed QuickScan header prompt and /NOHEAD option. It was pointless and
|
||||||
|
could easily be done in a menu if yo someone wanted it.
|
||||||
|
|
||||||
|
+ Added prompts that will be displayed when setting the last read pointer
|
||||||
|
within the message readers. The two new prompts are:
|
||||||
|
|
||||||
|
; Standard message reader: Lastread pointer set &1 = msg number
|
||||||
|
504 |CR|11Last read pointer has been set to message number |&1.|CR|CR|PA
|
||||||
|
|
||||||
|
; Lightbar reader: Lastread pointer set &1 = msg number
|
||||||
|
505 |CR|11Last read pointer has been set to message number |&1.|CR|CR|PA
|
||||||
|
|
||||||
|
+ Added a /LIST option to the QuickScan which will list out messages based
|
||||||
|
on the options presented. The following new prompts need to be added:
|
||||||
|
|
||||||
|
; QuickScan message list header &2=basename
|
||||||
|
506 |15From Base Subject|CR|09=============== ==================== ==========================================
|
||||||
|
|
||||||
|
; QuickScan message list middle
|
||||||
|
; &1=msg# &2=basename &3=from &4=to &5=subject &6=date
|
||||||
|
|
||||||
|
507 |10|$R15|&3 |09|$R20|&2 |11|$R42|&5
|
||||||
|
; QuicScan message list footer
|
||||||
|
|
||||||
|
508 |09|$D79=|CR
|
||||||
|
|
||||||
|
<ALPHA 28 RELEASED>
|
||||||
|
|
||||||
|
+ Prompt #490 has been changed to separate message header flags by comma
|
||||||
|
instead of space. This allows the ability to completely exclude certain
|
||||||
|
flags (ie if you never want a Local flag you can just remove it and leave
|
||||||
|
the comma)
|
||||||
|
|
||||||
|
; Msg header flags text one word each separated by a comma
|
||||||
|
; 1=Local 2=Echo 3=Private 4=Sent 5=Delete, 6=Received
|
||||||
|
490 Local,Echo,Priv,Sent,Del,Read
|
||||||
|
|
||||||
|
! Echo flag was not displaying correctly in the message headers.
|
||||||
|
|
||||||
|
! Fixed a bug in the ANSI file viewer which was causing garbled ANSIs
|
||||||
|
in the gallery and the viewer.
|
||||||
|
|
||||||
|
+ Pressing the SPACE bar in the ANSI viewer now displays the file
|
||||||
|
"normally" with a screenpause at the end.
|
||||||
|
|
||||||
|
+ The ansi viewer now has a help file option. The format of the optional
|
||||||
|
data has changed for the GV menu command so you will need to change it
|
||||||
|
if you are using it.
|
||||||
|
|
||||||
|
<template><helpfile><displayspeed><filename>
|
||||||
|
|
||||||
|
IE:
|
||||||
|
Command: GV
|
||||||
|
Data: ansiviewer;ansivhelp;0;myansi
|
||||||
|
|
||||||
|
! Fixed a bug in Zmodem that could cause a locked node if carrier was
|
||||||
|
dropped at a certain point during Zmodem upload initialization.
|
||||||
|
|
||||||
|
+ Added a different type of line check into the ANSI parsers. If a line
|
||||||
|
ends with a linefeed but didn't have carrage return before it (as is
|
||||||
|
standard), Mystic will now add the carrage return. If this blows up
|
||||||
|
any existing ANSIs it will be changed back.
|
||||||
|
|
||||||
|
! Fixed a bug with pipe color code parsing in the ANSI viewer (GV)
|
||||||
|
|
||||||
|
! The ANSI art gallery would crash if the directory passed to it did not
|
||||||
|
exist.
|
||||||
|
|
||||||
|
+ Mystic now allows the column size to be defined within a theme. Valid
|
||||||
|
values are 40 or 80 columns.
|
||||||
|
|
||||||
|
+ Mystic will now perform text wrapping in the message editors based on
|
||||||
|
the select theme's column size.
|
||||||
|
|
||||||
|
+ Abbreviated Mystic's copyright notice upon connect to be friendly to
|
||||||
|
40 column connections.
|
||||||
|
|
||||||
|
<ALPHA 29 RELEASED>
|
||||||
|
|
Loading…
Reference in New Issue