#pragma once

#pragma pack(push)
#pragma pack(1)
struct RT11SegmentHdr
{
	uint16_t segments_num{ 0 };         // число сегментов, отведённых под каталог
	uint16_t next_segment{ 0 };         // номер следующего сегмента каталога, если 0 - то этот сегмент последний
	uint16_t used_segments{ 0 };        // счётчик сегментов, имеющих записи, есть только в первом сегменте
	uint16_t filerecord_add_bytes{ 0 }; // число дополнительных БАЙТОВ! в записи о файле в каталоге
	uint16_t file_block{ 0 };           // номер блока, с которого начинается самый первый файл, описанный в данном сегменте

	RT11SegmentHdr()
	{
		memset(this, 0, sizeof(RT11SegmentHdr));
	}
	RT11SegmentHdr &operator = (const RT11SegmentHdr &src)
	{
		memcpy(this, &src, sizeof(RT11SegmentHdr));
		return *this;
	}
	RT11SegmentHdr &operator = (const RT11SegmentHdr *src)
	{
		memcpy(this, src, sizeof(RT11SegmentHdr));
		return *this;
	}
};
#pragma pack(pop)

// размер сегмента в словах
constexpr auto SEGMENT_SIZE = 512;

constexpr int RT11HeaderSIZE = sizeof(RT11SegmentHdr); //размер заголовка сегмента каталога в байтах
constexpr int RT11HeaderSIZE_W = RT11HeaderSIZE / 2;   //размер заголовка сегмента каталога в словах

constexpr auto RT11_FILECLASS_PREFIX = 020;

constexpr auto RT11_FILESTATUS_TEMPORARY = 1;
constexpr auto RT11_FILESTATUS_UNUSED = 2;
constexpr auto RT11_FILESTATUS_PERMANENT = 4;
constexpr auto RT11_FILESTATUS_EOS = 010;
constexpr auto RT11_FILESTATUS_READONLY = 0100;
constexpr auto RT11_FILESTATUS_PROTECTED = 0200;
