Initial import
This commit is contained in:
parent
da18bf9218
commit
c46da1d5ce
|
@ -0,0 +1,187 @@
|
|||
Unit bbs_dataBase;
|
||||
|
||||
// This unit us a work in progress designed to move lower level functions
|
||||
// away from session-tied objects and into a unit usable for external
|
||||
// utilities. Keeping them procedural instead of object-based also has some
|
||||
// additional smartlinking benefits in the long run.
|
||||
|
||||
// The drawback of a non-abstract object is that we cannot easily define
|
||||
// alternate data sources such as a INI or SQL backend. Because of that,
|
||||
// this MAY change in the future -- particularly if we can smartlink at the
|
||||
// method level of classes in future FP releases.
|
||||
|
||||
{$I M_OPS.PAS}
|
||||
|
||||
Interface
|
||||
|
||||
{$I RECORDS.PAS}
|
||||
|
||||
Var
|
||||
bbsCfg : RecConfig;
|
||||
bbsCfgPath : String;
|
||||
bbsCfgStatus : Byte;
|
||||
|
||||
Const
|
||||
CfgOK = 0;
|
||||
CfgNotFound = 1;
|
||||
CfgMisMatch = 2;
|
||||
|
||||
// GENERAL
|
||||
|
||||
Function GetBaseConfiguration (UseEnv: Boolean; Var TempCfg: RecConfig) : Byte;
|
||||
Function PutBaseConfiguration (Var TempCfg: RecConfig) : Boolean;
|
||||
|
||||
// MESSAGE BASE
|
||||
|
||||
Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||
Procedure GetMessageScan (UN: Cardinal; TempBase: RecMessageBase; Var TempScan: MScanRec);
|
||||
Procedure PutMessageScan (UN: Cardinal; TempBase: RecMessageBase; TempScan: MScanRec);
|
||||
|
||||
// FILE BASE
|
||||
|
||||
Function GetTotalFiles (Var TempBase: RecFileBase) : LongInt;
|
||||
|
||||
Implementation
|
||||
|
||||
Uses
|
||||
DOS,
|
||||
m_FileIO;
|
||||
|
||||
Function GetBaseConfiguration (UseEnv: Boolean; Var TempCfg: RecConfig) : Byte;
|
||||
Var
|
||||
TempFile : File;
|
||||
Begin
|
||||
Result := CfgOK;
|
||||
bbsCfgPath := '';
|
||||
|
||||
If Not FileExist('mystic.dat') And UseEnv Then
|
||||
If GetENV('mysticbbs') <> '' Then
|
||||
bbsCfgPath := DirSlash(GetENV('mysticbbs'));
|
||||
|
||||
Assign (TempFile, bbsCfgPath + 'mystic.dat');
|
||||
|
||||
If ioReset (TempFile, SizeOf(RecConfig), fmRWDN) Then Begin
|
||||
ioRead (TempFile, TempCfg);
|
||||
Close (TempFile);
|
||||
End Else Begin
|
||||
Result := CfgNotFound;
|
||||
|
||||
Exit;
|
||||
End;
|
||||
|
||||
If TempCfg.DataChanged <> mysDataChanged Then
|
||||
Result := CfgMisMatch;
|
||||
End;
|
||||
|
||||
Function PutBaseConfiguration (Var TempCfg: RecConfig) : Boolean;
|
||||
Var
|
||||
TempFile : File;
|
||||
Begin
|
||||
Result := False;
|
||||
|
||||
Assign (TempFile, bbsCfgPath + 'mystic.dat');
|
||||
|
||||
If ioReset (TempFile, SizeOf(RecConfig), fmRWDW) Then Begin
|
||||
ioWrite (TempFile, TempCfg);
|
||||
Close (TempFile);
|
||||
|
||||
bbsCfg := TempCfg;
|
||||
Result := True;
|
||||
End;
|
||||
End;
|
||||
|
||||
Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||
Var
|
||||
F : File;
|
||||
Begin
|
||||
Result := False;
|
||||
|
||||
Assign (F, bbsCfg.DataPath + 'mbases.dat');
|
||||
|
||||
If Not ioReset(F, SizeOf(RecMessageBase), fmRWDN) Then Exit;
|
||||
|
||||
While Not Eof(F) Do Begin
|
||||
ioRead (F, TempBase);
|
||||
|
||||
If TempBase.Index = Num Then Begin
|
||||
Result := True;
|
||||
|
||||
Break;
|
||||
End;
|
||||
End;
|
||||
|
||||
Close (F);
|
||||
End;
|
||||
|
||||
Procedure GetMessageScan (UN: Cardinal; TempBase: RecMessageBase; Var TempScan: MScanRec);
|
||||
Var
|
||||
ScanFile : File;
|
||||
Begin
|
||||
TempScan.NewScan := TempBase.DefNScan;
|
||||
TempScan.QwkScan := TempBase.DefQScan;
|
||||
|
||||
Assign (ScanFile, TempBase.Path + TempBase.FileName + '.scn');
|
||||
|
||||
If Not ioReset(ScanFile, SizeOf(TempScan), fmRWDN) Then
|
||||
Exit;
|
||||
|
||||
If FileSize(ScanFile) >= UN Then Begin
|
||||
If ioSeek (ScanFile, UN - 1) Then
|
||||
ioRead (ScanFile, TempScan);
|
||||
|
||||
If TempBase.DefNScan = 2 Then TempScan.NewScan := 2;
|
||||
If TempBase.DefQScan = 2 Then TempScan.QwkScan := 2;
|
||||
End;
|
||||
|
||||
Close (ScanFile);
|
||||
End;
|
||||
|
||||
Procedure PutMessageScan (UN: Cardinal; TempBase: RecMessageBase; TempScan: MScanRec);
|
||||
Var
|
||||
ScanFile : File;
|
||||
Count : Cardinal;
|
||||
Temp : MScanRec;
|
||||
FileName : String;
|
||||
Begin
|
||||
Temp.NewScan := TempBase.DefNScan;
|
||||
Temp.QwkScan := TempBase.DefQScan;
|
||||
|
||||
FileName := TempBase.Path + TempBase.FileName + '.scn';
|
||||
|
||||
Assign (ScanFile, FileName);
|
||||
|
||||
If Not ioReset (ScanFile, SizeOf(TempScan), fmRWDW) Then Begin
|
||||
If FileExist(FileName) Then Exit;
|
||||
|
||||
If Not ioReWrite(ScanFile, SizeOf(TempScan), fmRWDW) Then Exit;
|
||||
End;
|
||||
|
||||
If FileSize(ScanFile) < UN - 1 Then Begin
|
||||
ioSeek (ScanFile, FileSize(ScanFile));
|
||||
|
||||
For Count := FileSize(ScanFile) to UN - 1 Do
|
||||
ioWrite (ScanFile, Temp);
|
||||
End;
|
||||
|
||||
ioSeek (ScanFile, UN - 1);
|
||||
ioWrite (ScanFile, TempScan);
|
||||
Close (ScanFile);
|
||||
End;
|
||||
|
||||
Function GetTotalFiles (Var TempBase: RecFileBase) : LongInt;
|
||||
Begin
|
||||
Result := 0;
|
||||
|
||||
If TempBase.Name = 'None' Then Exit;
|
||||
|
||||
Result := FileByteSize(bbsCfg.DataPath + TempBase.FileName + '.dir');
|
||||
|
||||
If Result > 0 Then
|
||||
Result := Result DIV SizeOf(RecFileList);
|
||||
End;
|
||||
|
||||
Initialization
|
||||
|
||||
bbsCfgStatus := GetBaseConfiguration(True, bbsCfg);
|
||||
|
||||
End.
|
Loading…
Reference in New Issue