Unit MUTIL_FileBone; {$I M_OPS.PAS} Interface Procedure uImportFileBone; Implementation Uses m_Types, m_Strings, m_FileIO, mUtil_Common, mUtil_Status, bbs_Common; Procedure uImportFileBone; Var InFile : Text; Buffer : Array[1..2048] of Byte; Str : String; CreatedBases : LongInt = 0; RootDir : String; BaseName : String; BaseTag : String; FBase : RecFileBase; Begin ProcessName ('Import FILEBONE.NA', True); ProcessResult (rWORKING, False); Assign (InFile, INI.ReadString(Header_FILEBONE, 'filename', 'filebone.na')); SetTextBuf (InFile, Buffer); {$I-} Reset(InFile); {$I+} If IoResult <> 0 Then Begin ProcessStatus ('Cannot find NA file', True); ProcessResult (rWARN, True); Exit; End; RootDir := DirSlash(INI.ReadString(Header_FILEBONE, 'root_dir', '')); If RootDir = PathSep Then Begin ProcessStatus ('No root directory', True); ProcessResult (rFATAL, True); Exit; End; If Not DirExists(RootDir) Then Begin ProcessStatus ('Root directory does not exist', True); ProcessResult (rFATAL, True); // While DirCreate can 'recursively' create, this is added to prevent // user mistakes in configuration! :) Exit; End; While Not Eof(InFile) Do Begin ReadLn(InFile, Str); Str := strStripB(Str, ' '); If strWordGet(1, strUpper(Str), ' ') <> 'AREA' Then Continue; If Pos('!', strWordGet(4, Str, ' ')) = 0 Then Continue; BaseName := strStripLow(strStripB(Copy(Str, strWordPos(5, str, ' '), 255), ' ')); BaseTag := strStripLow(strWordGet(2, Str, ' ')); ProcessStatus (BaseName, False); If Not IsDupeFBase(BaseTag) Then Begin FillChar (FBase, SizeOf(FBase), 0); Inc (CreatedBases); If INI.ReadString(Header_FILEBONE, 'lowercase_filename', '1') = '1' Then BaseTag := strLower(BaseTag); FBase.Index := GenerateFBaseIndex; FBase.Name := BaseName; FBase.FTPName := strReplace(BaseName, ' ', '_'); FBase.FileName := BaseTag; FBase.Path := DirSlash(RootDir + BaseTag); FBase.DefScan := strS2I(INI.ReadString(Header_FILEBONE, 'new_scan', '1')); FBase.DispFile := INI.ReadString(Header_FILEBONE, 'dispfile', ''); FBase.Template := INI.ReadString(Header_FILEBONE, 'template', 'ansiflst'); FBase.ListACS := INI.ReadString(Header_FILEBONE, 'acs_list', ''); FBase.FTPACS := INI.ReadString(Header_FILEBONE, 'acs_ftp', ''); FBase.DLACS := INI.ReadString(Header_FILEBONE, 'acs_download', ''); FBase.ULACS := INI.ReadString(Header_FILEBONE, 'acs_upload', ''); FBase.CommentACS := INI.ReadString(Header_FILEBONE, 'acs_comment', ''); FBase.SysopACS := INI.ReadString(Header_FILEBONE, 'acs_sysop', 's255'); If INI.ReadString(Header_FILEBONE, 'free_files', '0') = '1' Then FBase.Flags := FBase.Flags OR FBFreeFiles; If INI.ReadString(Header_FILEBONE, 'show_uploader', '1') = '1' Then FBase.Flags := FBase.Flags OR FBShowUpload; DirCreate (FBase.Path); AddFileBase (FBase); End; End; Close (InFile); ProcessStatus ('Created |15' + strI2S(CreatedBases) + ' |07base(s)', True); ProcessResult (rDONE, True); End; End.