#pragma once
#include "HDIStuff.h"

// структура опций
struct ProrgamOptions
{
	bool bAltPro; // флаг альтпро
	bool bSamara; // флаг самара
	bool bCreate; // true - создание образа, false - разбор
	bool bConvert; // true - конвертация образа, false - нет
	bool bHDI;  // флаг создания образа в формате HDI
	uint16_t C; // геометрия: количество дорожек создаваемого образа
	uint16_t H; // геометрия: количество головок создаваемого образа
	uint16_t S; // геометрия: количество секторов на дорожке создаваемого образа
	std::wstring strPath; // путь куда сохранять образы разделов, или где искать их при сборке
	std::wstring strAppPath; // текущий путь, откуда запустили прогу
	std::wstring strImgName; // задаваемое имя образа.
	ProrgamOptions()
	{
		bAltPro = true;
		bSamara = bHDI = bCreate = bConvert = false;
		C = 80;
		H = 4;
		S = 24;
	}
};

extern std::wstring g_HDIModelName;

void Usage();

bool AnalyseImage(FILE *f, IMGFormat *pFormat);
bool AssemblyImage(FILE *f, IMGFormat *imgf);

bool CheckFormat_hdd(FILE *f, IMGFormat *imgf);

void MakeOutDir(bool bChangeOnly = false);
bool ReadLogDiskImage(FILE *f, IMGFormat *imgf, const std::wstring &strName);
bool WriteLogDiskImage(FILE *f, int nld, uint32_t nLen);
bool WriteEmptySectors(FILE *f, IMGFormat *imgf, int nWriteNum = 0);
void WriteEmptyTail(FILE *f, IMGFormat *imgf);

bool SplitAltPro(FILE *f, IMGFormat *imgf);
bool SplitSamara(FILE *f, IMGFormat *imgf);

bool AssemblyAltPro(FILE *f, IMGFormat *imgf);
bool AssemblySamara(FILE *f, IMGFormat *imgf);

bool ConvertLogDiskImage(FILE *inf, FILE *outf, IMGFormat *OutImgf, uint32_t nLenBlk);
bool ConvertAltPro2Samara(FILE *f, IMGFormat *imgf);
bool ConvertSamara2Altpro(FILE *f, IMGFormat *imgf);

