1404 lines
47 KiB
Plaintext
1404 lines
47 KiB
Plaintext
|
{$IFDEF WIN32}
|
|||
|
{$I DEFINES.INC}
|
|||
|
{$ENDIF}
|
|||
|
|
|||
|
{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-}
|
|||
|
|
|||
|
UNIT Mail2;
|
|||
|
|
|||
|
INTERFACE
|
|||
|
|
|||
|
USES
|
|||
|
Common;
|
|||
|
|
|||
|
PROCEDURE Post(ReplyTo: LongInt; VAR TToI: FromToInfo; PvtMsg: Boolean);
|
|||
|
PROCEDURE ReadAllMessages(MenuOption: Str50);
|
|||
|
PROCEDURE ScanMessages(MArea: Integer; AskUpDate: Boolean; MenuOption: Str50);
|
|||
|
PROCEDURE StartNewScan(MenuOption: Str50);
|
|||
|
PROCEDURE ScanYours;
|
|||
|
FUNCTION FirstNew: Word;
|
|||
|
|
|||
|
IMPLEMENTATION
|
|||
|
|
|||
|
USES
|
|||
|
Dos,
|
|||
|
Common5,
|
|||
|
Mail0,
|
|||
|
Mail1,
|
|||
|
EMail,
|
|||
|
Mail3,
|
|||
|
Menus,
|
|||
|
ShortMsg,
|
|||
|
SysOp2G,
|
|||
|
SysOp3,
|
|||
|
TimeFunc;
|
|||
|
|
|||
|
VAR
|
|||
|
TempLastRead: LongInt;
|
|||
|
|
|||
|
PROCEDURE Post(ReplyTo: LongInt; VAR TToI: FromToInfo; PvtMsg: Boolean);
|
|||
|
VAR
|
|||
|
MHeader: MHeaderRec;
|
|||
|
PostOk: Boolean;
|
|||
|
BEGIN
|
|||
|
|
|||
|
LoadMsgArea(MsgArea);
|
|||
|
|
|||
|
PostOk := TRUE;
|
|||
|
|
|||
|
IF (NOT AACS(MemMsgArea.PostACS)) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7Your access level does not permit you to post in this message area!^1');
|
|||
|
PostOk := FALSE;
|
|||
|
END
|
|||
|
ELSE IF (AccountBalance < General.CreditPost) AND (NOT (FNoCredits IN ThisUser.Flags)) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7Insufficient account balance to post a public message!^1');
|
|||
|
PostOk := FALSE;
|
|||
|
END
|
|||
|
ELSE IF (RPost IN ThisUser.Flags) OR (NOT AACS(General.NormPubPost)) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7Your access priviledges do not include posting a public messages!^1');
|
|||
|
PostOk := FALSE;
|
|||
|
END
|
|||
|
ELSE IF (PublicPostsToday >= General.MaxPubPost) AND (NOT MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You have already sent the maximum public messages allowed per day!^1');
|
|||
|
PostOk := FALSE;
|
|||
|
END;
|
|||
|
|
|||
|
IF (NOT PostOk) THEN
|
|||
|
Exit;
|
|||
|
|
|||
|
InitMsgArea(MsgArea);
|
|||
|
|
|||
|
MHeader.Status := [];
|
|||
|
|
|||
|
MHeader.FileAttached := 0;
|
|||
|
|
|||
|
IF (ReplyTo <> -1) THEN
|
|||
|
BEGIN
|
|||
|
MHeader.MTo := TToI;
|
|||
|
IF (MHeader.MTo.Anon > 0) THEN
|
|||
|
MHeader.MTo.A1S := UseName(MHeader.MTo.Anon,MHeader.MTo.A1S);
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
FillChar(MHeader.MTo,SizeOf(MHeader.MTo),0);
|
|||
|
InResponseTo := '';
|
|||
|
END;
|
|||
|
|
|||
|
IF (MemMsgArea.PrePostFile <> '') THEN
|
|||
|
BEGIN
|
|||
|
PrintF(MemMsgArea.PrePostFile);
|
|||
|
PauseScr(FALSE);
|
|||
|
END;
|
|||
|
|
|||
|
IF (InputMessage(TRUE,(ReplyTo <> -1),'',MHeader,'',78,500)) THEN
|
|||
|
BEGIN
|
|||
|
|
|||
|
IF (ReplyTo <> -1) THEN
|
|||
|
MHeader.ReplyTo := ((HiMsg + 1) - ReplyTo);
|
|||
|
|
|||
|
IF (PvtMsg) THEN
|
|||
|
Include(MHeader.Status,Prvt);
|
|||
|
|
|||
|
SaveHeader((HiMsg + 1),MHeader);
|
|||
|
|
|||
|
Print('^1Message posted on ^5'+MemMsgArea.Name+'^1.');
|
|||
|
|
|||
|
SysOpLog(MHeader.Subject+' posted on ^5'+MemMsgArea.Name);
|
|||
|
|
|||
|
IF (MHeader.MTo.A1S <> '') THEN
|
|||
|
SysOpLog(' To: "'+MHeader.MTo.A1S+'"');
|
|||
|
|
|||
|
IF (ReplyTo <> -1) THEN
|
|||
|
BEGIN
|
|||
|
LoadHeader(ReplyTo,MHeader);
|
|||
|
Inc(MHeader.Replies);
|
|||
|
SaveHeader(ReplyTo,MHeader);
|
|||
|
END;
|
|||
|
|
|||
|
IF (ThisUser.MsgPost < 2147483647) THEN
|
|||
|
Inc(ThisUser.MsgPost);
|
|||
|
|
|||
|
IF (PublicPostsToday < 255) THEN
|
|||
|
Inc(PublicPostsToday);
|
|||
|
|
|||
|
IF (NOT (FNoCredits IN ThisUser.Flags)) THEN
|
|||
|
AdjustBalance(General.CreditPost);
|
|||
|
|
|||
|
SaveURec(ThisUser,UserNum);
|
|||
|
|
|||
|
Update_Screen;
|
|||
|
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE ListMessages(Pub: Boolean);
|
|||
|
VAR
|
|||
|
MHeader: MHeaderRec;
|
|||
|
S,
|
|||
|
S1: STRING;
|
|||
|
TempHiMsg: Word;
|
|||
|
ADate: DateTime;
|
|||
|
NumDone: Byte;
|
|||
|
BEGIN
|
|||
|
TempHiMsg := HiMsg;
|
|||
|
IF ((Msg_On < 1) OR (Msg_On > TempHiMsg)) THEN
|
|||
|
Exit;
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
CLS;
|
|||
|
PrintACR('<1C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ');
|
|||
|
PrintACR('<1C> Msg# <1C> Sender <1C> Receiver <1C> '+'Subject <1C>! Posted <1C>');
|
|||
|
PrintACR('<1C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>');
|
|||
|
Dec(Msg_On);
|
|||
|
NumDone := 0;
|
|||
|
WHILE ((NumDone < (PageLength - 7)) AND (Msg_On >= 0) AND (Msg_On < TempHiMsg) AND (NOT Abort) AND (NOT HangUp)) DO
|
|||
|
BEGIN
|
|||
|
Inc(Msg_On);
|
|||
|
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
|
|||
|
IF ((NOT (UnValidated IN MHeader.Status)) AND (NOT (MDeleted IN MHeader.Status))) OR (MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
|
|||
|
IF (MDeleted IN MHeader.Status) THEN
|
|||
|
S := '''D'
|
|||
|
ELSE IF (UnValidated IN MHeader.Status) THEN
|
|||
|
S := '''U'
|
|||
|
ELSE IF ToYou(MHeader) OR FromYou(MHeader) THEN
|
|||
|
S := '''>'
|
|||
|
ELSE IF (Pub) AND (TempLastRead < MHeader.Date) THEN
|
|||
|
S := '''*'
|
|||
|
ELSE
|
|||
|
S := ' ';
|
|||
|
|
|||
|
S := S + ' "'+PadLeftInt(Msg_On,5)+' #';
|
|||
|
|
|||
|
IF (MARealName IN MemMsgArea.MAFlags) THEN
|
|||
|
S1 := UseName(MHeader.From.Anon,MHeader.From.Real)
|
|||
|
ELSE
|
|||
|
S1 := UseName(MHeader.From.Anon,MHeader.From.A1S);
|
|||
|
|
|||
|
S := S + PadLeftStr(S1,18)+' $';
|
|||
|
|
|||
|
IF ((MARealName IN MemMsgArea.MAFlags) AND (MHeader.MTo.Real <> '')) THEN
|
|||
|
S1 := UseName(MHeader.MTo.Anon,MHeader.MTo.Real)
|
|||
|
ELSE
|
|||
|
S1 := UseName(MHeader.MTo.Anon,MHeader.MTo.A1S);
|
|||
|
|
|||
|
S := S + PadLeftStr(S1,19)+' % ';
|
|||
|
|
|||
|
IF (MHeader.FileAttached = 0) THEN
|
|||
|
S := S + PadLeftStr(MHeader.Subject,18)
|
|||
|
ELSE
|
|||
|
S := S + PadLeftStr(Stripname(MHeader.Subject),18);
|
|||
|
|
|||
|
PackToDate(ADate,MHeader.Date);
|
|||
|
|
|||
|
S := S + ' &'+ZeroPad(IntToStr(ADate.Month))+'/'+ ZeroPad(IntToStr(ADate.Day))+'/'+ZeroPad(IntToStr(ADate.Year));
|
|||
|
|
|||
|
IF (AllowMCI IN MHeader.Status) THEN
|
|||
|
PrintACR(S)
|
|||
|
ELSE
|
|||
|
Print(S);
|
|||
|
|
|||
|
Inc(NumDone);
|
|||
|
END;
|
|||
|
Wkey;
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE MainRead(OncOnly,AskUpdate,Pub: Boolean);
|
|||
|
VAR
|
|||
|
User: UserRecordType;
|
|||
|
MHeader: MHeaderRec;
|
|||
|
Cmd,
|
|||
|
NewMenuCmd: AStr;
|
|||
|
Junk: Str36;
|
|||
|
Cmd1: Char;
|
|||
|
SaveMenu,
|
|||
|
CmdToExec,
|
|||
|
Counter: Byte;
|
|||
|
MsgNum,
|
|||
|
ThreadStart: Word;
|
|||
|
Done,
|
|||
|
CmdNotHid,
|
|||
|
CmdExists,
|
|||
|
AskPost,
|
|||
|
Contlist,
|
|||
|
DoneScan,
|
|||
|
HadUnVal: Boolean;
|
|||
|
|
|||
|
FUNCTION CantBeSeen: Boolean;
|
|||
|
BEGIN
|
|||
|
CantBeSeen := (NOT MsgSysOp) AND ((UnValidated IN MHeader.Status) OR (MDeleted IN MHeader.Status) OR
|
|||
|
((Prvt IN MHeader.Status) AND NOT (ToYou(MHeader) OR FromYou(MHeader))));
|
|||
|
END;
|
|||
|
|
|||
|
BEGIN
|
|||
|
AskPost := FALSE;
|
|||
|
Contlist := FALSE;
|
|||
|
DoneScan := FALSE;
|
|||
|
HadUnVal := FALSE;
|
|||
|
AllowContinue := TRUE;
|
|||
|
ThreadStart := 0;
|
|||
|
TReadPrompt := 0;
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
SaveMenu := CurMenu;
|
|||
|
|
|||
|
IF (MemMsgArea.MessageReadMenu <> 0) THEN
|
|||
|
CurMenu := MemMsgArea.MessageReadMenu
|
|||
|
ELSE
|
|||
|
CurMenu := General.MessageReadMenu;
|
|||
|
|
|||
|
IF (NOT NewMenuToLoad) THEN
|
|||
|
LoadMenuPW;
|
|||
|
|
|||
|
AutoExecCmd('FIRSTCMD');
|
|||
|
|
|||
|
REPEAT
|
|||
|
|
|||
|
IF (Contlist) AND (Abort) THEN
|
|||
|
BEGIN
|
|||
|
Contlist := FALSE;
|
|||
|
NL;
|
|||
|
Print('Continuous message listing off.');
|
|||
|
TReadPrompt := 255;
|
|||
|
END;
|
|||
|
|
|||
|
IF (Msg_On < 1) OR (Msg_On > HiMsg) THEN
|
|||
|
BEGIN
|
|||
|
IF (NOT Contlist) THEN
|
|||
|
BEGIN
|
|||
|
DoneScan := TRUE;
|
|||
|
IF (Pub) THEN
|
|||
|
AskPost := TRUE;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Contlist := FALSE;
|
|||
|
Msg_On := HiMsg;
|
|||
|
NL;
|
|||
|
Print('Continuous message listing off.');
|
|||
|
TReadPrompt := 255;
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
IF (NOT DoneScan) AND (TReadPrompt IN [0..2,8..10,18]) THEN
|
|||
|
BEGIN
|
|||
|
IF (Contlist) THEN
|
|||
|
Next := TRUE;
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
IF (Pub) AND (UnValidated IN MHeader.Status) THEN
|
|||
|
HadUnVal := TRUE;
|
|||
|
WHILE (((Msg_On < HiMsg) AND (TReadPrompt <> 2)) OR ((Msg_On > 1) AND (TReadPrompt = 2))) AND
|
|||
|
(CantBeSeen) DO
|
|||
|
BEGIN
|
|||
|
IF (TReadPrompt = 2) THEN
|
|||
|
Dec(Msg_On)
|
|||
|
ELSE
|
|||
|
Inc(Msg_On);
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
END;
|
|||
|
IF ((Msg_On = 1) OR (Msg_On = HiMsg)) AND (CantBeSeen) THEN
|
|||
|
BEGIN
|
|||
|
DoneScan := TRUE;
|
|||
|
IF (Pub) THEN
|
|||
|
AskPost := TRUE;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF ((CLSMsg IN ThisUser.SFlags) AND (NOT Contlist)) THEN
|
|||
|
Cls
|
|||
|
ELSE
|
|||
|
NL;
|
|||
|
ReadMsg(Msg_On,Msg_On,HiMsg);
|
|||
|
IF (Pub) AND (TempLastRead < MHeader.Date) AND (MHeader.Date <= GetPackDateTime) THEN
|
|||
|
TempLastRead := MHeader.Date;
|
|||
|
IF (Pub) THEN
|
|||
|
IF (PublicReadThisCall < 32767) THEN
|
|||
|
Inc(PublicReadThisCall);
|
|||
|
END;
|
|||
|
END;
|
|||
|
IF (NOT Contlist) AND (NOT DoneScan) THEN
|
|||
|
REPEAT
|
|||
|
TReadPrompt := 0;
|
|||
|
MainMenuHandle(Cmd);
|
|||
|
NewMenuCmd := '';
|
|||
|
CmdToExec := 0;
|
|||
|
Done := FALSE;
|
|||
|
REPEAT
|
|||
|
FCmd(Cmd,CmdToExec,CmdExists,CmdNotHid);
|
|||
|
IF (CmdToExec <> 0) AND (MemCmd^[CmdToExec].CmdKeys <> '-^') AND
|
|||
|
(MemCmd^[CmdToExec].CmdKeys <> '-/') AND (MemCmd^[CmdToExec].CmdKeys <> '-\') THEN
|
|||
|
DoMenuCommand(Done,
|
|||
|
MemCmd^[CmdToExec].CmdKeys,
|
|||
|
MemCmd^[CmdToExec].Options,
|
|||
|
NewMenuCmd,
|
|||
|
MemCmd^[CmdToExec].NodeActivityDesc);
|
|||
|
UNTIL (CmdToExec = 0) OR (Done) OR (HangUp);
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
CASE TReadPrompt OF
|
|||
|
1 : ; { Read Again }
|
|||
|
2 : Dec(Msg_On); { Previous Message }
|
|||
|
|
|||
|
3 : IF (NOT MsgSysOp) THEN
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
ELSE
|
|||
|
MoveMsg(Msg_On);
|
|||
|
|
|||
|
4 : IF (NOT CoSysOp) THEN
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
ELSE
|
|||
|
ExtractMsgToFile(Msg_On,Mheader);
|
|||
|
|
|||
|
5 : IF (NOT FromYou(MHeader)) AND (NOT MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You can only edit messages that you have sent!^1');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
REPEAT
|
|||
|
NL;
|
|||
|
Prt('Message editing [^5?^4=^5Help^4]: ');
|
|||
|
IF (MsgSysOp) THEN
|
|||
|
Onek(Cmd1,'QADEFOPRSTV?'^M,TRUE,TRUE)
|
|||
|
ELSE
|
|||
|
Onek(Cmd1,'QDEFOST?'^M,TRUE,TRUE);
|
|||
|
CASE Cmd1 OF
|
|||
|
(*
|
|||
|
'D' : FOR Counter := 1 TO 6 DO
|
|||
|
IF (HeaderLine(MHeader,Msg_On,HiMsg,Counter,Junk) <> '') THEN
|
|||
|
PrintACR(Headerline(MHeader,Msg_On,HiMsg,Counter,Junk));
|
|||
|
'O' : IF PYNQ('Reload old information? ',0,FALSE) THEN
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
'E' : BEGIN
|
|||
|
EditMessageText(Msg_On);
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
END;
|
|||
|
'S' : IF (MHeader.FileAttached = 0) OR (MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
Prt('Subj: ');
|
|||
|
InputDefault(MHeader.Subject,MHeader.Subject,40,[ColorsAllowed],FALSE)
|
|||
|
END
|
|||
|
ELSE
|
|||
|
Print('Sorry, you can''t edit that.');
|
|||
|
'T' : BEGIN
|
|||
|
Print('^11. Posted to : ^5'+MHeader.MTo.A1S);
|
|||
|
Print('^12. Real name : ^5'+MHeader.MTo.Real);
|
|||
|
Print('^13. System name: ^5'+MHeader.MTo.Name);
|
|||
|
NL;
|
|||
|
Prt('Edit name (^51^4-^53^4) [^5Q^4]uit: ');
|
|||
|
Onek(Cmd1,'Q123'^M,TRUE,TRUE);
|
|||
|
IF (NOT (Cmd1 IN ['Q',^M])) THEN
|
|||
|
NL;
|
|||
|
CASE Cmd1 OF
|
|||
|
'1' : BEGIN
|
|||
|
Prt('Posted to: ');
|
|||
|
InputDefault(MHeader.MTo.A1S,MHeader.MTo.A1S,36,[],FALSE);
|
|||
|
END;
|
|||
|
'2' : BEGIN
|
|||
|
Prt('Real name: ');
|
|||
|
InputDefault(MHeader.MTo.Real,MHeader.MTo.Real,36,[],FALSE);
|
|||
|
END;
|
|||
|
'3' : BEGIN
|
|||
|
Prt('System name: ');
|
|||
|
InputDefault(MHeader.MTo.Name,MHeader.MTo.Name,36,[],FALSE);
|
|||
|
END;
|
|||
|
END;
|
|||
|
Cmd1 := #0;
|
|||
|
END;
|
|||
|
'F' : IF (MHeader.From.Anon > 0) OR (MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
Print('^11. Posted to : ^5'+MHeader.From.A1S);
|
|||
|
Print('^12. Real name : ^5'+MHeader.From.Real);
|
|||
|
Print('^13. System name: ^5'+MHeader.From.Name);
|
|||
|
NL;
|
|||
|
Prt('Edit name (^51^4-^53^4) [^5Q^4]uit: ');
|
|||
|
Onek(Cmd1,'Q123'^M,TRUE,TRUE);
|
|||
|
IF (NOT (Cmd1 IN ['Q',^M])) THEN
|
|||
|
NL;
|
|||
|
CASE Cmd1 OF
|
|||
|
'1' : BEGIN
|
|||
|
Prt('Posted to: ');
|
|||
|
InputDefault(MHeader.From.A1S,MHeader.From.A1S,36,[],FALSE);
|
|||
|
END;
|
|||
|
'2' : BEGIN
|
|||
|
Prt('Real name: ');
|
|||
|
InputDefault(MHeader.From.Real,MHeader.From.Real,36,[],FALSE);
|
|||
|
END;
|
|||
|
'3' : BEGIN
|
|||
|
Prt('System name: ');
|
|||
|
InputDefault(MHeader.From.Name,MHeader.From.Name,36,[],FALSE);
|
|||
|
END;
|
|||
|
END;
|
|||
|
Cmd1 := #0;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
Print('Sorry, you can''t edit that.');
|
|||
|
|
|||
|
'A' : IF (MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
IF (MHeader.From.Anon IN [1,2]) THEN
|
|||
|
MHeader.From.Anon := 0
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Loadurec(User,MHeader.From.UserNum);
|
|||
|
IF AACS1(User,MHeader.From.UserNum,General.CSOP) THEN
|
|||
|
MHeader.From.Anon := 2
|
|||
|
ELSE
|
|||
|
MHeader.From.Anon := 1;
|
|||
|
END;
|
|||
|
Print('Message is '+AOnOff((MHeader.From.Anon = 0),'not ','')+'anonymous');
|
|||
|
SysOpLog('Message is '+AOnOff((MHeader.From.Anon = 0),'not ','')+'anonymous');
|
|||
|
END;
|
|||
|
*)
|
|||
|
'A' : IF (NOT MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (MHeader.From.Anon IN [1,2]) THEN
|
|||
|
BEGIN
|
|||
|
MHeader.From.Anon := 0;
|
|||
|
NL;
|
|||
|
Print('Message status is not anonymous.');
|
|||
|
SysOpLog('Message status is not anonymous.');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
LoadURec(User,MHeader.From.UserNum);
|
|||
|
IF AACS1(User,MHeader.From.UserNum,General.CSOP) THEN
|
|||
|
MHeader.From.Anon := 2
|
|||
|
ELSE
|
|||
|
MHeader.From.Anon := 1;
|
|||
|
NL;
|
|||
|
Print('Message status is anonymous.');
|
|||
|
SysOpLog('Message status is anonymous.');
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
'D' : BEGIN
|
|||
|
NL;
|
|||
|
FOR Counter := 1 TO 6 DO
|
|||
|
IF (HeaderLine(MHeader,Msg_On,HiMsg,Counter,Junk) <> '') THEN
|
|||
|
PrintACR(Headerline(MHeader,Msg_On,HiMsg,Counter,Junk));
|
|||
|
END;
|
|||
|
|
|||
|
'E' : BEGIN
|
|||
|
EditMessageText(Msg_On);
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
END;
|
|||
|
|
|||
|
'F' : IF (MHeader.From.Anon > 0) OR (MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^11. Posted from: ^5'+MHeader.From.A1S);
|
|||
|
Print('^12. Real name : ^5'+MHeader.From.Real);
|
|||
|
Print('^13. System name: ^5'+MHeader.From.Name);
|
|||
|
NL;
|
|||
|
Prt('Edit name [^51^4-^53^4,^5<CR>^4=^5Quit^4]: ');
|
|||
|
Onek(Cmd1,^M'123',TRUE,TRUE);
|
|||
|
CASE Cmd1 OF
|
|||
|
'1' : BEGIN
|
|||
|
NL;
|
|||
|
Prt('Posted from: ');
|
|||
|
InputDefault(MHeader.From.A1S,MHeader.From.A1S,36,[],FALSE);
|
|||
|
END;
|
|||
|
'2' : BEGIN
|
|||
|
NL;
|
|||
|
Prt('Real name: ');
|
|||
|
InputDefault(MHeader.From.Real,MHeader.From.Real,36,[],FALSE);
|
|||
|
END;
|
|||
|
'3' : BEGIN
|
|||
|
NL;
|
|||
|
Prt('System name: ');
|
|||
|
InputDefault(MHeader.From.Name,MHeader.From.Name,36,[],FALSE);
|
|||
|
END;
|
|||
|
END;
|
|||
|
Cmd1 := #0;
|
|||
|
END;
|
|||
|
|
|||
|
'O' : BEGIN
|
|||
|
NL;
|
|||
|
IF PYNQ('Reload old information? ',0,FALSE) THEN
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
END;
|
|||
|
'P' : IF (NOT Pub) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7This option is not available when reading private messages!^1');
|
|||
|
END
|
|||
|
ELSE IF (NOT MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (Permanent IN MHeader.Status) THEN
|
|||
|
BEGIN
|
|||
|
Exclude(MHeader.Status,Permanent);
|
|||
|
NL;
|
|||
|
Print('Message status is not permanent.');
|
|||
|
SysOpLog('Message status is not permanent.');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Include(MHeader.Status,Permanent);
|
|||
|
NL;
|
|||
|
Print('Message status is permanent.');
|
|||
|
SysOpLog('Message status is permanent.');
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
|
|||
|
'R' : IF (NOT MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (Sent IN MHeader.Status) THEN
|
|||
|
BEGIN
|
|||
|
Exclude(MHeader.Status,Sent);
|
|||
|
IF (PUB) AND (MemMsgArea.MAType IN [1..2]) AND (NOT (MAScanOut IN MemMsgArea.MAFlags)) THEN
|
|||
|
UpdateBoard;
|
|||
|
NL;
|
|||
|
Print('Message status is not sent.');
|
|||
|
SysOpLog('Message status is not sent.');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Include(MHeader.Status,Sent);
|
|||
|
NL;
|
|||
|
Print('Message status is sent.');
|
|||
|
SysOpLog('Message status is sent.');
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
'S' : IF (NOT MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
END
|
|||
|
ELSE IF (MHeader.FileAttached > 0) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7There is no file attached to this message!^1');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Prt('Subj: ');
|
|||
|
InputDefault(MHeader.Subject,MHeader.Subject,40,[ColorsAllowed],FALSE);
|
|||
|
SysOpLog('Message subject has been modified.');
|
|||
|
END;
|
|||
|
|
|||
|
'T' : BEGIN
|
|||
|
NL;
|
|||
|
Print('^11. Posted to : ^5'+MHeader.MTo.A1S);
|
|||
|
Print('^12. Real name : ^5'+MHeader.MTo.Real);
|
|||
|
Print('^13. System name: ^5'+MHeader.MTo.Name);
|
|||
|
NL;
|
|||
|
Prt('Edit name [^51^4-^53^4,^5<CR>^4=^5Quit^4]: ');
|
|||
|
Onek(Cmd1,^M'123',TRUE,TRUE);
|
|||
|
CASE Cmd1 OF
|
|||
|
'1' : BEGIN
|
|||
|
NL;
|
|||
|
Prt('Posted to: ');
|
|||
|
InputDefault(MHeader.MTo.A1S,MHeader.MTo.A1S,36,[],FALSE);
|
|||
|
END;
|
|||
|
'2' : BEGIN
|
|||
|
NL;
|
|||
|
Prt('Real name: ');
|
|||
|
InputDefault(MHeader.MTo.Real,MHeader.MTo.Real,36,[],FALSE);
|
|||
|
END;
|
|||
|
'3' : BEGIN
|
|||
|
NL;
|
|||
|
Prt('System name: ');
|
|||
|
InputDefault(MHeader.MTo.Name,MHeader.MTo.Name,36,[],FALSE);
|
|||
|
END;
|
|||
|
END;
|
|||
|
Cmd1 := #0;
|
|||
|
END;
|
|||
|
|
|||
|
'V' : IF (NOT Pub) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7This option is not available when reading private messages!^1');
|
|||
|
END
|
|||
|
ELSE IF (NOT MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (UnValidated IN MHeader.Status) THEN
|
|||
|
BEGIN
|
|||
|
Exclude(MHeader.Status,UnValidated);
|
|||
|
NL;
|
|||
|
Print('Message status is validated.');
|
|||
|
SysOpLog('Message status is validated.');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Include(MHeader.Status,UnValidated);
|
|||
|
NL;
|
|||
|
Print('Message status is unvalidated.');
|
|||
|
SysOpLog('Message status is unvalidated.');
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
'?' : BEGIN
|
|||
|
NL;
|
|||
|
LCmds(15,3,'From','To');
|
|||
|
LCmds(15,3,'Subject','Edit text');
|
|||
|
LCmds(15,3,'Oops','Display header');
|
|||
|
IF (MsgSysOp) THEN
|
|||
|
BEGIN
|
|||
|
LCmds(15,5,'Permanent','Validation');
|
|||
|
LCmds(15,5,'Rescan','Anonymous');
|
|||
|
END;
|
|||
|
LCmds(15,3,'Quit','');
|
|||
|
END;
|
|||
|
END;
|
|||
|
UNTIL (Cmd1 IN ['Q',^M]) OR (HangUp);
|
|||
|
Cmd1 := #0;
|
|||
|
SaveHeader(Msg_On,MHeader);
|
|||
|
END;
|
|||
|
6 : BEGIN
|
|||
|
DumpQuote(MHeader);
|
|||
|
IF (NOT Pub) THEN
|
|||
|
AutoReply(MHeader)
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
IF (MHeader.From.Anon = 0) OR (AACS(General.AnonPubRead)) THEN
|
|||
|
IF PYNQ('Is this to be a private reply? ',0,Prvt IN MHeader.Status) THEN
|
|||
|
IF (MAPrivate IN MemMsgArea.MAFlags) THEN
|
|||
|
IF PYNQ('Reply in Email? ',0,FALSE) THEN
|
|||
|
AutoReply(MHeader)
|
|||
|
ELSE
|
|||
|
Post(Msg_On,MHeader.From,TRUE)
|
|||
|
ELSE
|
|||
|
AutoReply(MHeader)
|
|||
|
ELSE
|
|||
|
Post(Msg_On,MHeader.From,FALSE)
|
|||
|
ELSE
|
|||
|
Post(Msg_On,MHeader.From,FALSE);
|
|||
|
END;
|
|||
|
END;
|
|||
|
7 : BEGIN
|
|||
|
Msg_On := (HiMsg + 1);
|
|||
|
IF (Pub) THEN
|
|||
|
BEGIN
|
|||
|
LoadHeader(HiMsg,MHeader);
|
|||
|
IF (MHeader.Date <= GetPackDateTime) THEN
|
|||
|
TempLastRead := MHeader.Date;
|
|||
|
END;
|
|||
|
Next := FALSE;
|
|||
|
END;
|
|||
|
|
|||
|
8 : IF (Pub) AND ((Msg_On - MHeader.ReplyTo) > 0) AND (MHeader.ReplyTo > 0) THEN
|
|||
|
BEGIN
|
|||
|
IF (ThreadStart = 0) THEN
|
|||
|
ThreadStart := Msg_On;
|
|||
|
Dec(Msg_On,MHeader.ReplyTo);
|
|||
|
END;
|
|||
|
|
|||
|
9 : IF (Pub) AND ((ThreadStart >= 1) AND (ThreadStart <= HiMsg)) THEN
|
|||
|
BEGIN
|
|||
|
Msg_On := ThreadStart;
|
|||
|
ThreadStart := 0;
|
|||
|
END;
|
|||
|
|
|||
|
10 : BEGIN
|
|||
|
Contlist := TRUE;
|
|||
|
Abort := FALSE;
|
|||
|
NL;
|
|||
|
Print('Continuous message listing on.');
|
|||
|
END;
|
|||
|
11 : IF (Pub) THEN
|
|||
|
BEGIN
|
|||
|
IF (Permanent IN MHeader.Status) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7This is a permanent public message!^1');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (Msg_On >= 1) AND (Msg_On <= HiMsg) AND (MsgSysOp OR FromYou(MHeader)) THEN
|
|||
|
BEGIN
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
IF (MDeleted IN MHeader.Status) THEN
|
|||
|
Exclude(MHeader.Status,MDeleted)
|
|||
|
ELSE
|
|||
|
Include(MHeader.Status,MDeleted);
|
|||
|
SaveHeader(Msg_On,MHeader);
|
|||
|
IF (NOT (MDeleted IN MHeader.Status)) THEN
|
|||
|
BEGIN
|
|||
|
IF FromYou(MHeader) THEN
|
|||
|
BEGIN
|
|||
|
IF (ThisUser.MsgPost < 2147483647) THEN
|
|||
|
Inc(ThisUser.MsgPost);
|
|||
|
AdjustBalance(General.Creditpost);
|
|||
|
END;
|
|||
|
NL;
|
|||
|
Print('Public message undeleted.');
|
|||
|
SysOpLog('* Undeleted public message: ^5'+MHeader.Subject);
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF FromYou(MHeader) THEN
|
|||
|
BEGIN
|
|||
|
IF (ThisUser.MsgPost > 0) THEN
|
|||
|
Dec(ThisUser.MsgPost);
|
|||
|
AdjustBalance(-General.Creditpost);
|
|||
|
END;
|
|||
|
NL;
|
|||
|
Print('Public message deleted.');
|
|||
|
SysOpLog('* Deleted public message: ^5'+MHeader.Subject);
|
|||
|
END;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You can only delete public messages from you!^1');
|
|||
|
END;
|
|||
|
END;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (Msg_On >= 1) AND (Msg_On <= HiMsg) AND (MsgSysOp OR FromYou(MHeader) OR ToYou(MHeader)) THEN
|
|||
|
BEGIN
|
|||
|
LoadHeader(Msg_On,MHeader);
|
|||
|
IF (MDeleted IN MHeader.Status) THEN
|
|||
|
Exclude(MHeader.Status,MDeleted)
|
|||
|
ELSE
|
|||
|
Include(MHeader.Status,MDeleted);
|
|||
|
SaveHeader(Msg_On,MHeader);
|
|||
|
IF (NOT (MDeleted IN MHeader.Status)) THEN
|
|||
|
BEGIN
|
|||
|
LoadURec(User,MHeader.MTo.UserNum);
|
|||
|
IF (User.Waiting < 255) THEN
|
|||
|
Inc(User.Waiting);
|
|||
|
SaveURec(User,MHeader.MTo.UserNum);
|
|||
|
NL;
|
|||
|
Print('Private message undeleted.');
|
|||
|
IF FromYou(MHeader) OR (MsgSysOp) THEN
|
|||
|
SysOpLog('* Undeleted private message from: ^5'+Caps(MHeader.From.A1S))
|
|||
|
ELSE IF ToYou(MHeader) OR (MsgSysOp) THEN
|
|||
|
SysOpLog('* Undeleted private message to: ^5'+Caps(MHeader.MTo.A1S));
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
LoadURec(User,MHeader.MTo.UserNum);
|
|||
|
IF (User.Waiting > 0) THEN
|
|||
|
Dec(User.Waiting);
|
|||
|
SaveURec(User,MHeader.MTo.UserNum);
|
|||
|
NL;
|
|||
|
Print('Private message deleted.');
|
|||
|
IF FromYou(MHeader) OR (MsgSysOp) THEN
|
|||
|
SysOpLog('* Deleted private message from: ^5'+Caps(MHeader.From.A1S))
|
|||
|
ELSE IF ToYou(MHeader) OR (MsgSysOp) THEN
|
|||
|
SysOpLog('* Deleted private message to: ^5'+Caps(MHeader.MTo.A1S));
|
|||
|
END;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7You can only delete private messages from or to you!^1');
|
|||
|
END;
|
|||
|
END;
|
|||
|
12 : IF (NOT Pub) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7This option is not available when reading private messages!^1');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('Highest-read pointer for this area set to message #'+IntToStr(Msg_On)+'.');
|
|||
|
IF (MHeader.Date <= GetPackDateTime) THEN
|
|||
|
TempLastRead := MHeader.Date;
|
|||
|
END;
|
|||
|
13 : BEGIN
|
|||
|
IF (Pub) AND (AskUpdate) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
IF PYNQ('Update message read pointers for this area? ',0,FALSE) THEN
|
|||
|
BEGIN
|
|||
|
LoadLastReadRecord(LastReadRecord);
|
|||
|
LastReadRecord.LastRead := GetPackDateTime;
|
|||
|
SaveLastReadRecord(LastReadRecord);
|
|||
|
END;
|
|||
|
END;
|
|||
|
DoneScan := TRUE;
|
|||
|
Next := TRUE;
|
|||
|
END;
|
|||
|
14 : BEGIN
|
|||
|
DoneScan := TRUE;
|
|||
|
Abort := TRUE;
|
|||
|
END;
|
|||
|
15 : ListMessages(Pub);
|
|||
|
16 : IF (NOT CoSysOp) THEN
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
ELSE IF (LastAuthor < 1) OR (LastAuthor > (MaxUsers - 1)) THEN
|
|||
|
Print('^7The sender of this message does not have an account on this BBS!^1')
|
|||
|
ELSE IF (CheckPW) THEN
|
|||
|
UserEditor(LastAuthor);
|
|||
|
17 : IF (NOT PUB) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7This option is not available when reading private messages!^1');
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (MAForceRead IN MemMsgArea.MAFlags) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7This message area can not be removed from your new scan!^1')
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
|
|||
|
NL;
|
|||
|
Print('^5'+MemMsgArea.Name+'^3 '+AOnOff(LastReadRecord.NewScan,'will NOT','WILL')+
|
|||
|
' be scanned in future new scans.');
|
|||
|
SysOpLog('* Toggled ^5'+MemMsgArea.Name+ '^1 '+AOnOff(LastReadRecord.NewScan,'out of','back in')+
|
|||
|
' new scan.');
|
|||
|
|
|||
|
LoadLastReadRecord(LastReadRecord);
|
|||
|
LastReadRecord.NewScan := (NOT LastReadRecord.NewScan);
|
|||
|
SaveLastReadRecord(LastReadRecord);
|
|||
|
END;
|
|||
|
END;
|
|||
|
18 : Inc(Msg_On);
|
|||
|
19 : IF (NOT CoSysOp) THEN
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
ELSE IF (LastAuthor < 1) OR (LastAuthor > (MaxUsers - 1)) THEN
|
|||
|
Print('^7The sender of this message does not have an account on this BBS!^1.')
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
LoadURec(User,LastAuthor);
|
|||
|
ShowUserInfo(1,LastAuthor,User);
|
|||
|
END;
|
|||
|
20 : IF (NOT CoSysOp) THEN
|
|||
|
Print('^7You do not have the required access level for this option!^1')
|
|||
|
ELSE IF (LastAuthor < 1) OR (LastAuthor > (MaxUsers - 1)) THEN
|
|||
|
Print('^7The sender of this message does not have an account on this BBS!^1')
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
LoadURec(User,LastAuthor);
|
|||
|
AutoVal(User,LastAuthor);
|
|||
|
END;
|
|||
|
21 : ForwardMessage(Msg_On);
|
|||
|
END;
|
|||
|
UNTIL (TReadPrompt IN [1..2,7..10,13..15,18]) OR (Abort) OR (Next) OR (HangUp)
|
|||
|
ELSE
|
|||
|
Inc(Msg_On);
|
|||
|
|
|||
|
IF (OncOnly) AND (TReadPrompt IN [13,14,18]) THEN
|
|||
|
DoneScan := TRUE;
|
|||
|
|
|||
|
UNTIL (DoneScan) OR (HangUp);
|
|||
|
|
|||
|
CurMenu := SaveMenu;
|
|||
|
|
|||
|
NewMenuToLoad := TRUE;
|
|||
|
|
|||
|
AllowContinue := FALSE;
|
|||
|
|
|||
|
IF ((Pub) AND (HadUnVal) AND (MsgSysOp)) THEN
|
|||
|
IF PYNQ('%LFValidate all messages here? ',0,FALSE) THEN
|
|||
|
BEGIN
|
|||
|
FOR MsgNum := 1 TO HiMsg DO
|
|||
|
BEGIN
|
|||
|
LoadHeader(MsgNum,MHeader);
|
|||
|
IF (UnValidated IN MHeader.Status) THEN
|
|||
|
Exclude(MHeader.Status,UnValidated);
|
|||
|
SaveHeader(MsgNum,MHeader);
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
IF ((Pub) AND (AskPost) AND (AACS(MemMsgArea.PostACS)) AND
|
|||
|
(NOT (RPost IN ThisUser.Flags)) AND (PublicPostsToday < General.MaxPubPost)) THEN
|
|||
|
IF (TReadPrompt <> 7) THEN
|
|||
|
IF PYNQ('%LFPost on ^5'+MemMsgArea.Name+'^7? ',0,FALSE) THEN
|
|||
|
IF (MAPrivate IN MemMsgArea.MAFlags) THEN
|
|||
|
Post(-1,MHeader.From,PYNQ('%LFIs this to be a private message? ',0,FALSE))
|
|||
|
ELSE
|
|||
|
Post(-1,MHeader.From,FALSE);
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE ReadAllMessages(MenuOption: Str50);
|
|||
|
VAR
|
|||
|
InputStr: AStr;
|
|||
|
SaveReadMsgArea: Integer;
|
|||
|
BEGIN
|
|||
|
SaveReadMsgArea := ReadMsgArea;
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
IF (MenuOption = '') THEN
|
|||
|
MsgArea := -1;
|
|||
|
InitMsgArea(MsgArea);
|
|||
|
IF (HiMsg = 0) THEN
|
|||
|
BEGIN
|
|||
|
Print('%LFNo messages on ^5'+MemMsgArea.Name+'^1.');
|
|||
|
IF (Novice IN ThisUser.Flags) THEN
|
|||
|
PauseScr(FALSE);
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
|
|||
|
Msg_On := 1;
|
|||
|
Inputstr := '?';
|
|||
|
REPEAT
|
|||
|
IF (InputStr = '?') THEN
|
|||
|
ListMessages(MsgArea <> -1);
|
|||
|
NL;
|
|||
|
{ Prompt(FString.ReadQ); }
|
|||
|
Prt('Select message (^51^4-^5'+IntToStr(HiMsg)+'^4) [^5?^4=^5First^4,^5<CR>^4=^5Next^4,^5Q^4=^5Quit^4)]: ');
|
|||
|
(*
|
|||
|
lRGLngStr(32,FALSE);
|
|||
|
*)
|
|||
|
ScanInput(InputStr,'Q?'^M);
|
|||
|
|
|||
|
IF (InputStr = 'Q') THEN
|
|||
|
Msg_On := 0
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
|
|||
|
IF (InputStr = ^M) THEN
|
|||
|
BEGIN
|
|||
|
InputStr := '?';
|
|||
|
IF (Msg_On >= HiMsg) THEN
|
|||
|
Msg_On := 1;
|
|||
|
END
|
|||
|
ELSE IF (InputStr = '?') THEN
|
|||
|
BEGIN
|
|||
|
Msg_On := 1;
|
|||
|
InputStr := '?';
|
|||
|
END
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Msg_On := StrToInt(InputStr);
|
|||
|
IF (Msg_On >= 1) AND (Msg_On <= HIMsg) THEN
|
|||
|
InputStr := 'Q'
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
Print('^7The range must be from 1 to '+IntToStr(HiMsg)+'^1');
|
|||
|
PauseScr(FALSE);
|
|||
|
Msg_On := 1;
|
|||
|
InputStr := '?';
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
UNTIL (InputStr = 'Q') OR (HangUp);
|
|||
|
|
|||
|
IF (Msg_On >= 1) AND (Msg_On <= HiMsg) AND (NOT HangUp) THEN
|
|||
|
BEGIN
|
|||
|
IF (MsgArea <> -1) THEN
|
|||
|
BEGIN
|
|||
|
LoadLastReadRecord(LastReadRecord);
|
|||
|
TempLastRead := LastReadRecord.LastRead;
|
|||
|
END;
|
|||
|
MainRead(FALSE,FALSE,(MsgArea <> -1));
|
|||
|
IF (MsgArea <> -1) THEN
|
|||
|
BEGIN
|
|||
|
LastReadRecord.LastRead := TempLastRead;
|
|||
|
SaveLastReadRecord(LastReadRecord);
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
END;
|
|||
|
MsgArea := SaveReadMsgArea;
|
|||
|
LoadMsgArea(MsgArea);
|
|||
|
END;
|
|||
|
|
|||
|
FUNCTION FirstNew: Word;
|
|||
|
VAR
|
|||
|
MHeader: MHeaderRec;
|
|||
|
MaxMsgs,
|
|||
|
MsgNum: Word;
|
|||
|
Done: Boolean;
|
|||
|
BEGIN
|
|||
|
MaxMsgs := HiMsg;
|
|||
|
MsgNum := 0;
|
|||
|
IF (MaxMsgs > 0) THEN
|
|||
|
BEGIN
|
|||
|
Done := FALSE;
|
|||
|
MsgNum := 1;
|
|||
|
WHILE (MsgNum <= MaxMsgs) AND (NOT Done) DO
|
|||
|
BEGIN
|
|||
|
LoadHeader(MsgNum,MHeader);
|
|||
|
IF (LastReadRecord.LastRead < MHeader.Date) THEN
|
|||
|
Done := TRUE
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
IF (MsgNum < MaxMsgs) THEN
|
|||
|
Inc(MsgNum,1)
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
MsgNum := 0;
|
|||
|
Done := TRUE;
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
FirstNew := MsgNum;
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE ScanMessages(MArea: Integer; AskUpdate: Boolean; MenuOption: Str50);
|
|||
|
VAR
|
|||
|
ScanFor: STRING[40];
|
|||
|
Cmd: Char;
|
|||
|
SaveMsgArea,
|
|||
|
MsgNum: Word;
|
|||
|
ScanNew,
|
|||
|
ScanGlobal: Boolean;
|
|||
|
|
|||
|
PROCEDURE Searchboard(MArea1: Integer; Cmd1: Char);
|
|||
|
VAR
|
|||
|
MsgHeader: MHeaderRec;
|
|||
|
Searched: STRING;
|
|||
|
TotLoad: Word;
|
|||
|
Match,
|
|||
|
AnyShown: Boolean;
|
|||
|
BEGIN
|
|||
|
IF (MsgArea <> MArea1) THEN
|
|||
|
ChangeMsgArea(MArea1);
|
|||
|
IF (MsgArea = MArea1) THEN
|
|||
|
BEGIN
|
|||
|
InitMsgArea(MsgArea);
|
|||
|
AnyShown := FALSE;
|
|||
|
LIL := 0;
|
|||
|
CLS;
|
|||
|
Prompt('^1Scanning ^5'+MemMsgArea.Name+' #'+IntToStr(CompMsgArea(MsgArea,0))+' ^1...');
|
|||
|
Reset(MsgHdrF);
|
|||
|
Reset(MsgTxtF,1);
|
|||
|
IF (IOResult <> 0) THEN
|
|||
|
Exit;
|
|||
|
IF (ScanNew) THEN
|
|||
|
MsgNum := FirstNew
|
|||
|
ELSE
|
|||
|
MsgNum := 1;
|
|||
|
IF (MsgNum > 0) AND (FileSize(MsgHdrF) > 0) THEN
|
|||
|
WHILE (MsgNum <= FileSize(MsgHdrF)) AND (NOT Next) AND (NOT Abort) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
LoadHeader(MsgNum,MsgHeader);
|
|||
|
Match := FALSE;
|
|||
|
IF (Cmd1 IN ['Y',^M]) THEN
|
|||
|
IF ToYou(MsgHeader) THEN
|
|||
|
Match := TRUE;
|
|||
|
IF (Cmd1 IN ['F','A']) THEN
|
|||
|
BEGIN
|
|||
|
IF (MARealName IN MemMsgArea.MAFlags) THEN
|
|||
|
Searched := MsgHeader.From.Real
|
|||
|
ELSE
|
|||
|
Searched := MsgHeader.From.A1S;
|
|||
|
IF (MemMsgArea.MAtype = 0) THEN
|
|||
|
Searched := Searched;
|
|||
|
Searched := AllCaps(UseName(MsgHeader.From.Anon,Searched));
|
|||
|
IF (Pos(ScanFor,Searched) > 0) THEN
|
|||
|
Match := TRUE;
|
|||
|
END;
|
|||
|
IF (Cmd1 IN ['T','A'] ) THEN
|
|||
|
BEGIN
|
|||
|
IF (MARealName IN MemMsgArea.MAFlags) THEN
|
|||
|
Searched := MsgHeader.MTo.Real
|
|||
|
ELSE
|
|||
|
Searched := MsgHeader.MTo.A1S;
|
|||
|
IF (MemMsgArea.MAtype = 0) THEN
|
|||
|
Searched := Searched;
|
|||
|
Searched := AllCaps(UseName(MsgHeader.MTo.Anon,Searched));
|
|||
|
IF (Pos(ScanFor,Searched) > 0) THEN
|
|||
|
Match := TRUE;
|
|||
|
END;
|
|||
|
IF (Cmd1 IN ['S','A'] ) THEN
|
|||
|
IF (Pos(ScanFor,AllCaps(MsgHeader.Subject)) > 0) THEN
|
|||
|
Match := TRUE;
|
|||
|
IF (Cmd1 = 'A') AND (NOT Match) AND (MsgHeader.TextSize > 0) AND
|
|||
|
(((MsgHeader.Pointer - 1) + MsgHeader.TextSize) <= FileSize(MsgTxtF)) AND
|
|||
|
(MsgHeader.Pointer > 0) THEN
|
|||
|
WITH MsgHeader DO
|
|||
|
BEGIN
|
|||
|
Seek(MsgTxtF,(Pointer - 1));
|
|||
|
TotLoad := 0;
|
|||
|
REPEAT
|
|||
|
BlockRead(MsgTxtF,Searched[0],1);
|
|||
|
BlockRead(MsgTxtF,Searched[1],Ord(Searched[0]));
|
|||
|
LastError := IOResult;
|
|||
|
Inc(TotLoad,Length(Searched) + 1);
|
|||
|
IF (Pos(ScanFor,AllCaps(Searched)) > 0) THEN
|
|||
|
Match := TRUE;
|
|||
|
UNTIL (TotLoad >= TextSize) OR (Match);
|
|||
|
END;
|
|||
|
IF (Match) THEN
|
|||
|
BEGIN
|
|||
|
Close(MsgHdrF);
|
|||
|
Close(MsgTxtF);
|
|||
|
Msg_On := MsgNum;
|
|||
|
NL;
|
|||
|
MainRead(TRUE,AskUpdate,(MsgArea <> -1));
|
|||
|
NL;
|
|||
|
Reset(MsgHdrF);
|
|||
|
Reset(MsgTxtF,1);
|
|||
|
AnyShown := TRUE;
|
|||
|
END;
|
|||
|
Wkey;
|
|||
|
IF (Next) THEN
|
|||
|
Abort := TRUE;
|
|||
|
Inc(MsgNum);
|
|||
|
END;
|
|||
|
Close(MsgHdrF);
|
|||
|
Close(MsgTxtF);
|
|||
|
IF (NOT AnyShown) THEN
|
|||
|
BackErase(14 + Lennmci(MemMsgArea.Name) + Length(IntToStr(CompMsgArea(MsgArea,0))));
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
BEGIN
|
|||
|
SaveMsgArea := MsgArea;
|
|||
|
ScanNew := FALSE;
|
|||
|
ScanGlobal := FALSE;
|
|||
|
MenuOption := AllCaps(MenuOption);
|
|||
|
IF (MenuOption <> '') THEN
|
|||
|
Cmd := 'Y'
|
|||
|
ELSE
|
|||
|
Cmd := #0;
|
|||
|
IF (Pos('N',MenuOption) > 0) THEN
|
|||
|
ScanNew := TRUE;
|
|||
|
IF (Pos('G',MenuOption) > 0) THEN
|
|||
|
ScanGlobal := TRUE;
|
|||
|
IF (Cmd = #0) THEN
|
|||
|
REPEAT
|
|||
|
NL;
|
|||
|
Prt('Scan method (^5?^4=^5Help^4): ');
|
|||
|
Onek(Cmd,'QFTSAY?'^M,TRUE,TRUE);
|
|||
|
IF (Cmd = '?') THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
LCmds(15,5,'From field','To field');
|
|||
|
LCmds(15,5,'Subject field','All text');
|
|||
|
LCmds(15,5,'Your messages','Quit');
|
|||
|
END;
|
|||
|
UNTIL (Cmd <> '?') OR (HangUp);
|
|||
|
NL;
|
|||
|
IF (NOT (Cmd IN ['Q',^M])) THEN
|
|||
|
BEGIN
|
|||
|
IF (Cmd <> 'Y') THEN
|
|||
|
BEGIN
|
|||
|
Prt('Text to scan for: ');
|
|||
|
Input(ScanFor,40);
|
|||
|
IF (ScanFor = '') THEN
|
|||
|
Exit;
|
|||
|
NL;
|
|||
|
END;
|
|||
|
IF (MenuOption = '') THEN
|
|||
|
ScanNew := PYNQ('Scan new messages only? ',0,TRUE);
|
|||
|
IF (ScanGlobal) OR ((MenuOption = '') AND PYNQ('Global scan? ',0,FALSE)) THEN
|
|||
|
BEGIN
|
|||
|
MArea := 1;
|
|||
|
WHILE (MArea >= 1) AND (MArea <= NumMsgAreas) AND (NOT Abort) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
Searchboard(MArea,Cmd);
|
|||
|
Wkey;
|
|||
|
Inc(MArea);
|
|||
|
END;
|
|||
|
END
|
|||
|
ELSE
|
|||
|
Searchboard(MArea,Cmd);
|
|||
|
END;
|
|||
|
MsgArea := SaveMsgArea;
|
|||
|
LoadMsgArea(MsgArea);
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE ScanYours;
|
|||
|
VAR
|
|||
|
ScanAllPublicMsgFile: FILE OF Boolean;
|
|||
|
MsgHeader: MHeaderRec;
|
|||
|
MArea,
|
|||
|
SaveMsgArea: Integer;
|
|||
|
MsgNum,
|
|||
|
PubMsgsFound: Word;
|
|||
|
SaveConfSystem,
|
|||
|
AnyFound,
|
|||
|
FirstTime,
|
|||
|
MsgsFound: Boolean;
|
|||
|
BEGIN
|
|||
|
SaveMsgArea := MsgArea;
|
|||
|
SaveConfSystem := ConfSystem;
|
|||
|
ConfSystem := FALSE;
|
|||
|
IF (SaveConfSystem) THEN
|
|||
|
NewCompTables;
|
|||
|
Assign(ScanAllPublicMsgFile,TempDir+'SAPM'+IntToStr(ThisNode)+'.DAT');
|
|||
|
ReWrite(ScanAllPublicMsgFile);
|
|||
|
FOR MArea := 1 TO NumMsgAreas DO
|
|||
|
BEGIN
|
|||
|
MsgsFound := FALSE;
|
|||
|
Write(ScanAllPublicMsgFile,MsgsFound);
|
|||
|
END;
|
|||
|
Prompt('%LF^5Scanning for your new public messages ... ^1');
|
|||
|
FirstTime := TRUE;
|
|||
|
AnyFound := FALSE;
|
|||
|
MArea := 1;
|
|||
|
WHILE (MArea >= 1) AND (MArea <= NumMsgAreas) AND (NOT Abort) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
IF (MsgArea <> MArea) THEN
|
|||
|
ChangeMsgArea(MArea);
|
|||
|
IF (MsgArea = MArea) THEN
|
|||
|
BEGIN
|
|||
|
InitMsgArea(MsgArea);
|
|||
|
IF (LastReadRecord.NewScan) THEN
|
|||
|
BEGIN
|
|||
|
Reset(MsgHdrF);
|
|||
|
Reset(MsgTxtF,1);
|
|||
|
IF (IOResult = 0) THEN
|
|||
|
BEGIN
|
|||
|
PubMsgsFound := 0;
|
|||
|
MsgNum := FirstNew;
|
|||
|
IF (MsgNum > 0) AND (FileSize(MsgHdrF) > 0) THEN
|
|||
|
WHILE (MsgNum <= FileSize(MsgHdrF)) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
LoadHeader(MsgNum,MsgHeader);
|
|||
|
IF (ToYou(MsgHeader)) THEN
|
|||
|
BEGIN
|
|||
|
Seek(ScanAllPublicMsgFile,(MArea - 1));
|
|||
|
MsgsFound := TRUE;
|
|||
|
Write(ScanAllPublicMsgFile,MsgsFound);
|
|||
|
Inc(PubMsgsFound);
|
|||
|
END;
|
|||
|
Inc(MsgNum);
|
|||
|
END;
|
|||
|
Close(MsgHdrF);
|
|||
|
Close(MsgTxtF);
|
|||
|
IF (PubMsgsFound > 0) THEN
|
|||
|
BEGIN
|
|||
|
IF (FirstTime) THEN
|
|||
|
BEGIN
|
|||
|
NL;
|
|||
|
NL;
|
|||
|
FirstTime := FALSE;
|
|||
|
END;
|
|||
|
Print('^5'+PadLeftStr(MemMsgArea.Name,30)+' ^1'+IntToStr(PubMsgsFound));
|
|||
|
AnyFound := TRUE;
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
Inc(MArea);
|
|||
|
END;
|
|||
|
Close(ScanAllPublicMsgFile);
|
|||
|
IF (NOT AnyFound) THEN
|
|||
|
Print('^5No messages found.^1')
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
NL;
|
|||
|
IF PYNQ('Read your new public messages now? ',0,FALSE) THEN
|
|||
|
BEGIN
|
|||
|
Assign(ScanAllPublicMsgFile,TempDir+'SAPM'+IntToStr(ThisNode)+'.DAT');
|
|||
|
Reset(ScanAllPublicMsgFile);
|
|||
|
MArea := 1;
|
|||
|
WHILE (MArea >= 1) AND (MArea <= NumMsgAreas) AND (NOT Abort) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
Seek(ScanAllPublicMsgFile,(MArea - 1));
|
|||
|
Read(ScanAllPublicMsgFile,MsgsFound);
|
|||
|
IF (MsgsFound) THEN
|
|||
|
ScanMessages(MArea,TRUE,'N');
|
|||
|
WKey;
|
|||
|
Inc(MArea);
|
|||
|
END;
|
|||
|
Close(ScanAllPublicMsgFile);
|
|||
|
END;
|
|||
|
END;
|
|||
|
ConfSystem := SaveConfSystem;
|
|||
|
IF (SaveConfSystem) THEN
|
|||
|
NewCompTables;
|
|||
|
MsgArea := SaveMsgArea;
|
|||
|
LoadMsgArea(MsgArea);
|
|||
|
LastError := IOResult;
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE StartNewScan(MenuOption: Str50);
|
|||
|
VAR
|
|||
|
MArea,
|
|||
|
SaveMsgArea: Integer;
|
|||
|
Global: Boolean;
|
|||
|
|
|||
|
PROCEDURE NewScan(MArea1: Integer);
|
|||
|
BEGIN
|
|||
|
IF (MsgArea <> MArea1) THEN
|
|||
|
ChangeMsgArea(MArea1);
|
|||
|
IF (MsgArea = MArea1) THEN
|
|||
|
BEGIN
|
|||
|
InitMsgArea(MsgArea);
|
|||
|
IF (LastReadRecord.NewScan) OR ((MAForceRead IN MemMsgArea.MAFlags) AND (NOT CoSysOp)) THEN
|
|||
|
BEGIN
|
|||
|
TempLastRead := LastReadRecord.LastRead;
|
|||
|
Lil := 0;
|
|||
|
{ Prompt('^3'+FString.NewScan1);}
|
|||
|
lRGLngStr(8,FALSE);
|
|||
|
Msg_On := FirstNew;
|
|||
|
IF (Msg_On > 0) THEN
|
|||
|
MainRead(FALSE,FALSE,(MsgArea <> -1));
|
|||
|
|
|||
|
LastReadRecord.LastRead := TempLastRead;
|
|||
|
SaveLastReadRecord(LastReadRecord);
|
|||
|
|
|||
|
(* Add backarase *)
|
|||
|
END;
|
|||
|
END;
|
|||
|
END;
|
|||
|
|
|||
|
BEGIN
|
|||
|
SaveMsgArea := MsgArea;
|
|||
|
MArea := MsgArea;
|
|||
|
Global := FALSE;
|
|||
|
Abort := FALSE;
|
|||
|
Next := FALSE;
|
|||
|
IF (UpCase(MenuOption[1]) = 'C') THEN
|
|||
|
MArea := MsgArea
|
|||
|
ELSE IF (UpCase(MenuOption[1]) = 'G') THEN
|
|||
|
Global := TRUE
|
|||
|
ELSE IF (StrToInt(MenuOption) <> 0) THEN
|
|||
|
MArea := StrToInt(MenuOption)
|
|||
|
ELSE IF (MenuOption = '') THEN
|
|||
|
Global := PYNQ('%LFScan all message areas? ',0,FALSE);
|
|||
|
IF (NOT Global) THEN
|
|||
|
NewScan(MArea)
|
|||
|
ELSE
|
|||
|
BEGIN
|
|||
|
MArea := 1;
|
|||
|
WHILE (MArea >= 1) AND (MArea <= NumMsgAreas) AND (NOT Abort) AND (NOT HangUp) DO
|
|||
|
BEGIN
|
|||
|
NewScan(MArea);
|
|||
|
WKey;
|
|||
|
Inc(MArea);
|
|||
|
END;
|
|||
|
SysOpLog('Global new scan of message areas');
|
|||
|
END;
|
|||
|
MsgArea := SaveMsgArea;
|
|||
|
LoadMsgArea(MsgArea);
|
|||
|
END;
|
|||
|
|
|||
|
END.
|