623 lines
15 KiB
ObjectPascal
623 lines
15 KiB
ObjectPascal
Unit BBS_MsgBase_ABS;
|
|
|
|
{$I M_OPS.PAS}
|
|
|
|
{$WARNINGS OFF}
|
|
|
|
Interface
|
|
|
|
Uses
|
|
BBS_Records;
|
|
|
|
Type
|
|
MsgMailType = (mmtNormal, mmtEchoMail, mmtNetMail);
|
|
|
|
PMsgBaseABS = ^TMsgBaseABS;
|
|
TMsgBaseABS = Object
|
|
LastSoft : Boolean;
|
|
TempFile : String;
|
|
|
|
Procedure EditMsgInit; Virtual;
|
|
Procedure EditMsgSave; Virtual;
|
|
|
|
Constructor Init; {Initialize}
|
|
Destructor Done; Virtual; {Done}
|
|
Procedure SetMsgPath(MP: String); Virtual; {Set msg path/other info}
|
|
Function OpenMsgBase : Boolean; Virtual; {Open the message base}
|
|
Procedure CloseMsgBase; Virtual; {Close the message base}
|
|
Function CreateMsgBase(MaxMsg: Word; MaxDays: Word): Boolean; Virtual;
|
|
// Function MsgBaseExists: Boolean; Virtual; {Does msg base exist}
|
|
Function LockMsgBase: Boolean; Virtual; {Lock the message base}
|
|
Function UnLockMsgBase: Boolean; Virtual; {Unlock the message base}
|
|
Procedure SetDest (Addr: RecEchoMailAddr); Virtual; {Set Zone/Net/Node/Point for Dest}
|
|
Procedure SetOrig (Addr: RecEchoMailAddr); Virtual; {Set Zone/Net/Node/Point for Orig}
|
|
Procedure SetFrom(Name: String); Virtual; {Set message from}
|
|
Procedure SetTo(Name: String); Virtual; {Set message to}
|
|
Procedure SetSubj(Str: String); Virtual; {Set message subject}
|
|
Procedure SetCost(SCost: Word); Virtual; {Set message cost}
|
|
Procedure SetRefer(SRefer: LongInt); Virtual; {Set message reference}
|
|
Procedure SetSeeAlso(SAlso: LongInt); Virtual; {Set message see also}
|
|
Procedure SetDate(SDate: String); Virtual; {Set message date}
|
|
Procedure SetTime(STime: String); Virtual; {Set message time}
|
|
Procedure SetLocal(LS: Boolean); Virtual; {Set local status}
|
|
Procedure SetRcvd(RS: Boolean); Virtual; {Set received status}
|
|
Procedure SetPriv(PS: Boolean); Virtual; {Set priveledge vs public status}
|
|
Procedure SetCrash(SS: Boolean); Virtual; {Set crash netmail status}
|
|
Procedure SetHold(SS: Boolean); Virtual; {Set hold netmail status}
|
|
Procedure SetKillSent(SS: Boolean); Virtual; {Set kill/sent netmail status}
|
|
Procedure SetSent(SS: Boolean); Virtual; {Set sent netmail status}
|
|
Procedure SetFAttach(SS: Boolean); Virtual; {Set file attach status}
|
|
Procedure SetReqRct(SS: Boolean); Virtual; {Set request receipt status}
|
|
Procedure SetReqAud(SS: Boolean); Virtual; {Set request audit status}
|
|
Procedure SetRetRct(SS: Boolean); Virtual; {Set return receipt status}
|
|
Procedure SetFileReq(SS: Boolean); Virtual; {Set file request status}
|
|
Procedure DoString(Str: String); Virtual; {Add string to message text}
|
|
Procedure DoChar(Ch: Char); Virtual; {Add character to message text}
|
|
Procedure DoStringLn(Str: String); Virtual; {Add string and newline to msg text}
|
|
Procedure DoKludgeLn(Str: String); Virtual; {Add ^A kludge line to msg}
|
|
Function WriteMsg: Word; Virtual; {Write msg to msg base}
|
|
Function GetChar: Char; Virtual; {Get msg text character}
|
|
Function EOM: Boolean; Virtual; {No more msg text}
|
|
Function GetString(MaxLen: Word): String; Virtual; {Get wordwrapped string}
|
|
Function GetNoKludgeStr(MaxLen: Word): String; Virtual; {Get ww str no ^A lines}
|
|
Function GetFrom: String; Virtual; {Get from name on current msg}
|
|
Function GetTo: String; Virtual; {Get to name on current msg}
|
|
Function GetSubj: String; Virtual; {Get subject on current msg}
|
|
// Function GetCost: Word; Virtual; {Get cost of current msg}
|
|
Function GetDate: String; Virtual; {Get date of current msg}
|
|
Function GetTime: String; Virtual; {Get time of current msg}
|
|
Function GetRefer: LongInt; Virtual; {Get reply to of current msg}
|
|
Function GetSeeAlso: LongInt; Virtual; {Get see also of current msg}
|
|
Function GetNextSeeAlso: LongInt; Virtual;
|
|
Procedure SetNextSeeAlso(SAlso: LongInt); Virtual;
|
|
Function GetMsgNum: LongInt; Virtual; {Get message number}
|
|
Function GetTextLen: LongInt; Virtual; {Get text length}
|
|
Procedure GetOrig (Var Addr : RecEchoMailAddr); Virtual; {Get origin address}
|
|
Function GetOrigAddr : RecEchoMailAddr; Virtual;
|
|
Procedure GetDest (Var Addr : RecEchoMailAddr); Virtual; {Get destination address}
|
|
Function GetDestAddr : RecEchoMailAddr; Virtual;
|
|
Function IsLocal: Boolean; Virtual; {Is current msg local}
|
|
Function IsCrash: Boolean; Virtual; {Is current msg crash}
|
|
Function IsKillSent: Boolean; Virtual; {Is current msg kill sent}
|
|
Function IsSent: Boolean; Virtual; {Is current msg sent}
|
|
Function IsFAttach: Boolean; Virtual; {Is current msg file attach}
|
|
// Function IsReqRct: Boolean; Virtual; {Is current msg request receipt}
|
|
// Function IsReqAud: Boolean; Virtual; {Is current msg request audit}
|
|
// Function IsRetRct: Boolean; Virtual; {Is current msg a return receipt}
|
|
Function IsFileReq: Boolean; Virtual; {Is current msg a file request}
|
|
Function IsRcvd: Boolean; Virtual; {Is current msg received}
|
|
Function IsPriv: Boolean; Virtual; {Is current msg priviledged/private}
|
|
Function IsDeleted: Boolean; Virtual; {Is current msg deleted}
|
|
Function IsEchoed: Boolean; Virtual; {Is current msg unmoved echomail msg}
|
|
Function GetMsgLoc: LongInt; Virtual; {To allow reseeking to message}
|
|
Procedure SetMsgLoc(ML: LongInt); Virtual; {Reseek to message}
|
|
Procedure MsgStartUp; Virtual; {Do message set-up tasks}
|
|
Procedure MsgTxtStartUp; Virtual; {Do message text start up tasks}
|
|
Procedure StartNewMsg; Virtual; {Initialize for adding message}
|
|
Procedure SeekFirst(MsgNum: LongInt); Virtual; {Start msg seek}
|
|
Procedure SeekNext; Virtual; {Find next matching msg}
|
|
Procedure SeekPrior; Virtual; {Prior msg}
|
|
Function SeekFound: Boolean; Virtual; {Msg was found}
|
|
// Procedure YoursFirst(Name: String; Handle: String); Virtual; {Seek your mail}
|
|
// Procedure YoursNext; Virtual; {Seek next your mail}
|
|
// Function YoursFound: Boolean; Virtual; {Message found}
|
|
Function GetHighMsgNum: LongInt; Virtual; {Get highest msg number}
|
|
Procedure SetMailType(MT: MsgMailType); Virtual; {Set message base type}
|
|
// Function GetSubArea: Word; Virtual; {Get sub area number}
|
|
Procedure ReWriteHdr; Virtual; {Rewrite msg header after changes}
|
|
Procedure DeleteMsg; Virtual; {Delete current message}
|
|
Procedure SetEcho(ES: Boolean); Virtual; {Set echo status}
|
|
Function NumberOfMsgs: LongInt; Virtual; {Number of messages}
|
|
Function GetLastRead(UNum: LongInt): LongInt; Virtual; {Get last read for user num}
|
|
Procedure SetLastRead(UNum: LongInt; LR: LongInt); Virtual; {Set last read}
|
|
Function GetMsgDisplayNum: LongInt; Virtual; {Get msg number to display}
|
|
Function GetTxtPos: LongInt; Virtual; {Get indicator of msg text position}
|
|
Procedure SetTxtPos(TP: LongInt); Virtual; {Set text position}
|
|
Function GetHighActiveMsgNum: LongInt; Virtual; {Get highest active msg num}
|
|
Procedure SetTempFile (TF: String);
|
|
End;
|
|
|
|
Implementation
|
|
|
|
Procedure TMsgBaseABS.SetTempFile (TF: String);
|
|
Begin
|
|
TempFile := TF;
|
|
End;
|
|
|
|
Constructor TMsgBaseABS.Init;
|
|
Begin
|
|
End;
|
|
|
|
Destructor TMsgBaseABS.Done;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetMsgPath(MP: String);
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.OpenMsgBase: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.CloseMsgBase;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.LockMsgBase: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.UnLockMsgBase: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetDest (Addr: RecEchoMailAddr);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetOrig (Addr: RecEchoMailAddr);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetFrom(Name: String);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetTo(Name: String);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetSubj(Str: String);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetCost(SCost: Word);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetRefer(SRefer: LongInt);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetSeeAlso(SAlso: LongInt);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetDate(SDate: String);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetTime(STime: String);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetLocal(LS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetRcvd(RS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetPriv(PS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetHold (SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetCrash(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetKillSent(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetSent(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetFAttach(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetReqRct(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetReqAud(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetRetRct(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetFileReq(SS: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.DoString (Str: String);
|
|
Var
|
|
Count : Word;
|
|
Begin
|
|
For Count := 1 to Length(Str) Do
|
|
DoChar(Str[Count]);
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.DoChar(Ch: Char);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.DoStringLn(Str: String);
|
|
Begin
|
|
DoString(Str + #13);
|
|
// DoChar(#13);
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.DoKludgeLn(Str: String);
|
|
Begin
|
|
DoStringLn(Str);
|
|
End;
|
|
|
|
Function TMsgBaseABS.WriteMsg: Word;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetChar: Char;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.EOM: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetString(MaxLen: Word): String;
|
|
(*
|
|
Var
|
|
WPos: LongInt;
|
|
WLen: Byte;
|
|
StrDone: Boolean;
|
|
TxtOver: Boolean;
|
|
StartSoft: Boolean;
|
|
CurrLen: Word;
|
|
PPos: LongInt;
|
|
TmpCh: Char;
|
|
OldPos: LongInt;
|
|
|
|
Begin
|
|
If EOM Then
|
|
GetString := ''
|
|
Else
|
|
Begin
|
|
StrDone := False;
|
|
CurrLen := 0;
|
|
PPos := GetTxtPos;
|
|
WPos := GetTxtPos;
|
|
WLen := 0;
|
|
StartSoft := LastSoft;
|
|
LastSoft := True;
|
|
OldPos := GetTxtPos;
|
|
TmpCh := GetChar;
|
|
While ((Not StrDone) And (CurrLen < MaxLen) And (Not EOM)) Do
|
|
Begin
|
|
Case TmpCh of
|
|
#$00:;
|
|
#$0d: Begin
|
|
StrDone := True;
|
|
LastSoft := False;
|
|
End;
|
|
#$8d:;
|
|
#$0a:;
|
|
#$20: Begin
|
|
If ((CurrLen <> 0) or (Not StartSoft)) Then
|
|
Begin
|
|
Inc(CurrLen);
|
|
WLen := CurrLen;
|
|
GetString[CurrLen] := TmpCh;
|
|
WPos := GetTxtPos;
|
|
End
|
|
Else
|
|
StartSoft := False;
|
|
End;
|
|
Else
|
|
Begin
|
|
Inc(CurrLen);
|
|
GetString[CurrLen] := TmpCh;
|
|
End;
|
|
End;
|
|
If Not StrDone Then
|
|
Begin
|
|
OldPos := GetTxtPos;
|
|
TmpCh := GetChar;
|
|
End;
|
|
End;
|
|
If StrDone Then
|
|
Begin
|
|
GetString[0] := Chr(CurrLen);
|
|
End
|
|
Else
|
|
If EOM Then
|
|
Begin
|
|
GetString[0] := Chr(CurrLen);
|
|
End
|
|
Else
|
|
Begin
|
|
If WLen = 0 Then
|
|
Begin
|
|
GetString[0] := Chr(CurrLen);
|
|
SetTxtPos(OldPos);
|
|
End
|
|
Else
|
|
Begin
|
|
GetString[0] := Chr(WLen);
|
|
SetTxtPos(WPos);
|
|
End;
|
|
End;
|
|
End;
|
|
*)
|
|
{ the above stuff could be used to write universal GETSTRING and GETCHAR }
|
|
{ functions for ANY message base format. }
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SeekFirst(MsgNum: LongInt);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SeekNext;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetFrom: String;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetTo: String;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetSubj: String;
|
|
Begin
|
|
End;
|
|
|
|
//Function TMsgBaseABS.GetCost: Word;
|
|
//Begin
|
|
//End;
|
|
|
|
Function TMsgBaseABS.GetDate: String;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetTime: String;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetRefer: LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetSeeAlso: LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetMsgNum: LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetTextLen : LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.GetOrig(Var Addr: RecEchoMailAddr);
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetOrigAddr : RecEchoMailAddr;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.GetDest(Var Addr: RecEchoMailAddr);
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetDestAddr : RecEchoMailAddr;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsLocal: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsCrash: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsKillSent: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsSent: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsFAttach: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
//Function TMsgBaseABS.IsReqRct: Boolean;
|
|
//Begin
|
|
//End;
|
|
|
|
//Function TMsgBaseABS.IsReqAud: Boolean;
|
|
//Begin
|
|
//End;
|
|
|
|
//Function TMsgBaseABS.IsRetRct: Boolean;
|
|
//Begin
|
|
//End;
|
|
|
|
Function TMsgBaseABS.IsFileReq: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsRcvd: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsPriv: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsDeleted: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.IsEchoed: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetMsgLoc: LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetMsgLoc(ML: LongInt);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.MsgStartUp;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.MsgTxtStartUp;
|
|
Begin
|
|
End;
|
|
|
|
(*
|
|
Procedure TMsgBaseABS.YoursFirst(Name: String; Handle: String);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.YoursNext;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.YoursFound: Boolean;
|
|
Begin
|
|
End;
|
|
*)
|
|
Function TMsgBaseABS.CreateMsgBase(MaxMsg: Word; MaxDays: Word): Boolean;
|
|
Begin
|
|
End;
|
|
|
|
(*
|
|
Function TMsgBaseABS.MsgBaseExists: Boolean;
|
|
Begin
|
|
End;
|
|
*)
|
|
|
|
Procedure TMsgBaseABS.StartNewMsg;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetHighMsgNum: LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.SeekFound: Boolean;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetMailType(MT: MsgMailType);
|
|
Begin
|
|
End;
|
|
|
|
//Function TMsgBaseABS.GetSubArea: Word;
|
|
//Begin
|
|
// GetSubArea := 0;
|
|
//End;
|
|
|
|
Procedure TMsgBaseABS.ReWriteHdr;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.DeleteMsg;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetEcho(ES: Boolean);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SeekPrior;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.NumberOfMsgs: LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetLastRead(UNum: LongInt): LongInt;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetLastRead(UNum: LongInt; LR: LongInt);
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetMsgDisplayNum: LongInt;
|
|
Begin
|
|
GetMsgDisplayNum := GetMsgNum;
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetTxtPos: LongInt;
|
|
Begin
|
|
GetTxtPos := 0;
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetTxtPos(TP: LongInt);
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.SetNextSeeAlso(SAlso: LongInt);
|
|
Begin
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetNextSeeAlso: LongInt;
|
|
Begin
|
|
GetNextSeeAlso:=0;
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetNoKludgeStr(MaxLen: Word): String;
|
|
Begin
|
|
Result := GetString(MaxLen);
|
|
While ((Length(Result) > 0) and (Result[1] = #1) and (Not EOM)) Do
|
|
Result := GetString(MaxLen);
|
|
End;
|
|
|
|
Function TMsgBaseABS.GetHighActiveMsgNum: LongInt;
|
|
Begin
|
|
SeekFirst(GetHighMsgNum);
|
|
|
|
If Not SeekFound Then
|
|
SeekPrior;
|
|
|
|
If SeekFound Then
|
|
GetHighActiveMsgNum := GetMsgNum
|
|
Else
|
|
GetHighActiveMsgNum := 0;
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.EditMsgInit;
|
|
Begin
|
|
End;
|
|
|
|
Procedure TMsgBaseABS.EditMsgSave;
|
|
Begin
|
|
End;
|
|
|
|
End.
|