#pragma once
#include "BKDImage.h"
#pragma pack(push)
#pragma pack(1)
struct NordFileRecord
{
	uint8_t status;    //статус файла, или номер директории для записи-директории
	uint8_t dir_num;   //номер директории, которой принадлежит запись
	uint8_t name[14];  //имя файла/каталога, если начинается с байта 0177 - это каталог.
	uint16_t start_blok;//начальный блок
	uint16_t len_blk;   //длина в блоках
	uint16_t address;   //стартовый адрес
	uint16_t length;    //длина
	NordFileRecord()
	{
		memset(this, 0, sizeof(NordFileRecord));
	}
	NordFileRecord &operator = (const NordFileRecord &src)
	{
		memcpy(this, &src, sizeof(NordFileRecord));
		return *this;
	}
	NordFileRecord &operator = (const NordFileRecord *src)
	{
		memcpy(this, src, sizeof(NordFileRecord));
		return *this;
	}
};
#pragma pack(pop)
/*
 Напоминание самому себе:
 Этот класс не наследуется от CBKDMikrodos потому, что всё равно функция чтения каталога
 тут другая, никаких преимуществ такое наследование не даёт, и не зачем это перепроверять.
 я уже пробовал.
*/
class CBKDNord : public CBKDImage
{
		int m_nVersion; //версия норда.
	public:
		CBKDNord(const PARSE_RESULT &image);
		virtual ~CBKDNord() override;

		virtual bool ReadCatalog() override;
		virtual FILESAVE_STATUS AddFile(const CString &str, int nDirBelong, bool bAddAsBin = false) override;
		virtual bool SeekToBeginFile(CFile *f, FileRecord *fr) override;
};

#define FMT_NORD_BEGIN_BLOCK 026
#define FMT_NORD_CAT_RECORD_NUMBER 030
#define FMT_NORD_FIRST_FREE_BLOCK 032
#define FMT_NORD_WRITE_PROTECT_MARKER 034
#define FMT_NORD_DISK_TYPE 042
#define FMT_NORD_CAT_NUMBER 044
#define FMT_NORD_DISK_SIZE 0466
#define FMT_NORD_CAT_BEGIN 0500
/*
формат каталога - микродос.
секторы 0-011 - каталог, 012-023 - копия каталога
размер каталога - 012(10.) секторов
формат каталога:

Адрес   Значение
------------------------------------------
026     нoль для oбычнoгo кaтaлoгa либo нoмep ceктopa для
        кaтaлoгa лoгичecкoгo диcкa
        NORD 3.5: (этo знaчeниe иcпoльзyeтcя
        для aвтoмaтичecкoй oбpaбoтки кaтaлoгa
        лoгичecкoгo диcкa, кoгдa oн cкoпиpoвaн кaк
        цeлoe нa дpyгoe физичecкoe ycтpoйcтвo)
030     общее кол-во имён в каталоге (включая удалённые файлы
        и имена подкаталогов)
        NORD 3.5:
        oбщee кoличecтвo имeн в кaтaлoгe (нe! включaя!
        yдaлeнныe фaйлы. Вот жеж ЖОПА. из-за этого нельзя сделать сохранение на диск,
        т.к. никак нельзя достоверно определить версию норда. );
032     первый пустой сектор на диске после всех файлов.
        при активном удалении и создании файлов, эта ячейка очень скоро начинает указывать на последний + 1 сектор
        и получается тут размер диска. несмотря на наличие кучи дыр в каталоге.
034     признак защиты диска от записи, если тут содержится 0123456
        то диск защищён
036     NORD 3.5:
        ячeйкa зaдaния cкopocтeй диcкoвoдoв нa зaгpyзoчнoм
        диcкe (036 - диcкoвoдa A:, 037 - B:);

042     тип диска:
        0 - 80 дор. 2 стороны
        1 - 40 дор. 2 стороны
        2 - 80 дор. 1 сторона
        3 - 40 дор. 1 сторона
044     кол-во и состояние копий каталогов на диске:
        0,1 - одна копия каталога, начальный сектор 0
        2 - одна копия, начальный сектор 012
        3 - две копии. 0 и 012 секторы
        NORD 3.5 - место под вторую копию каталога резервируется, в старых нордах - нет.
        особенно касается логических дисков.
046     признак заполнения виртуального диска Е: (только для вирт. диска)
        Если виртуальный диск заполнен более чем наполовину, то
        эта ячейка обнуляется. Это сигнал, что системная страница БК-0011М
        испорчена и файлы, написанные для этого компьютера запускать нельзя.
        Иначе система НОРД может запускать файлы в собственном мониторе
        БК-0011М, если в каталоге они помечены расширением .11 или .11М
0100    байт идентификации каталога (равен 0)
0400    ячейка идентификации каталога (равна 0123456)
0402    NORD 3.5:
        бyфepнaя ячeйкa для вoзмoжнocти paбoты диcкa в cиcтeмe MKDOS бeз
        пopчи зaгpyзчикa;
0466    NORD 3.5:
        нoмep ceктopa пocлe кoнцa диcкa, т.е. размер диска в блоках.
        Иногда указывается размер 32767, что навевает на подозрения.
0500    начало каталога.

Формат записи о файле

Смещение Значение
---------------------------------------------
0       байт атрибута файла:
        0 - обычный
        1 - защищённый, для NORD 3.5 ещё и 010,0100
        2 - плохой
        4 - NORD 3.5: нecнимaeмaя зaщитa
        0200-0377 - удалённый
        Для имён подкаталогов - их номера
1       байт - номер каталога, которому принадлежит запись
2       имя файла или подкаталога. Если первый байт = 0177, то это подкаталог
020     начальный сектор файла
022     длина файла в секторах
024     начальный адрес файла
026     длина файла в байтах (по модулю 0200000, т.е. если файл больше 64к,
        то тут хранится остаток длины файла)


в общем тут выяснилось, что у каталога есть явно задаваемый конец каталога.
это одна запись с такими параметрами
байт атрибута файла == 0377
номер каталога = 0377
имя файла  == 14 байтов 0377 для норд 3.5 или "-?-?-?-?-?-?-?" для норд 2.х
номер блока == размер диска в блоках
длина в блоках == 0177777
адрес == 0177777
длина == 0177777
причем, эта запись идёт дополнительно к записи о свободной области.

Но! При работе с дисками Норд в МКдосе концевая запись дублируется.
Вот почему на некоторых дисках их две.


Существует логический диск. Только как опознать его в записи о файле совершенно непонятно.
предположительно, по имени, лог.диск имеет имя F:, G: и т.п. Просто нет информации об этом.

норд 1.10
норд 2.11
норд 3.5
*/
